Initial version of asn1c 65/665/2
authorAndras 1. Toth <andras.1.toth@nokia.com>
Thu, 8 Aug 2019 13:58:29 +0000 (15:58 +0200)
committerBalint Uveges <balint.uveges@nokia.com>
Fri, 9 Aug 2019 10:51:54 +0000 (10:51 +0000)
Change-Id: I781659ae37bb3048bc2cfe7cff844406abe38c7f
Signed-off-by: Andras 1. Toth <andras.1.toth@nokia.com>
1533 files changed:
.gitreview [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
BUGS [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
FAQ [new file with mode: 0644]
INSTALL.md [new file with mode: 0644]
LICENSE [new file with mode: 0644]
Makefile [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
README.md [new file with mode: 0644]
REQUIREMENTS.md [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
asn1c/.deps/asn1c.Po [new file with mode: 0644]
asn1c/.deps/enber.Po [new file with mode: 0644]
asn1c/.deps/unber.Po [new file with mode: 0644]
asn1c/Makefile [new file with mode: 0644]
asn1c/Makefile.am [new file with mode: 0644]
asn1c/Makefile.in [new file with mode: 0644]
asn1c/README [new file with mode: 0644]
asn1c/asn1c.c [new file with mode: 0644]
asn1c/check-xxber.sh [new file with mode: 0755]
asn1c/enber.c [new file with mode: 0644]
asn1c/sys-common.h [new file with mode: 0644]
asn1c/unber.c [new file with mode: 0644]
autom4te.cache/output.0 [new file with mode: 0644]
autom4te.cache/output.1 [new file with mode: 0644]
autom4te.cache/output.2 [new file with mode: 0644]
autom4te.cache/requests [new file with mode: 0644]
autom4te.cache/traces.0 [new file with mode: 0644]
autom4te.cache/traces.1 [new file with mode: 0644]
autom4te.cache/traces.2 [new file with mode: 0644]
config.h.in [new file with mode: 0644]
config.log [new file with mode: 0644]
config.status [new file with mode: 0644]
config/ar-lib [new file with mode: 0644]
config/compile [new file with mode: 0644]
config/config.guess [new file with mode: 0644]
config/config.sub [new file with mode: 0644]
config/depcomp [new file with mode: 0644]
config/install-sh [new file with mode: 0644]
config/ltmain.sh [new file with mode: 0755]
config/missing [new file with mode: 0644]
config/test-driver [new file with mode: 0644]
configure.ac [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/asn1c-quick.pdf [new file with mode: 0644]
doc/asn1c-usage.pdf [new file with mode: 0644]
doc/docsrc/Makefile [new file with mode: 0644]
doc/docsrc/Makefile.am [new file with mode: 0644]
doc/docsrc/Makefile.in [new file with mode: 0644]
doc/docsrc/asn1c-usage.tex [new file with mode: 0644]
doc/docsrc/asn_dec_rval.inc [new file with mode: 0644]
doc/docsrc/asn_enc_rval.inc [new file with mode: 0644]
doc/man/Makefile [new file with mode: 0644]
doc/man/Makefile.am [new file with mode: 0644]
doc/man/Makefile.in [new file with mode: 0644]
doc/man/asn1c.1 [new file with mode: 0644]
doc/man/asn1c.man.md [new file with mode: 0644]
doc/man/enber.1 [new file with mode: 0644]
doc/man/enber.man.md [new file with mode: 0644]
doc/man/unber.1 [new file with mode: 0644]
doc/man/unber.man.md [new file with mode: 0644]
examples/Makefile [new file with mode: 0644]
examples/Makefile.am [new file with mode: 0644]
examples/Makefile.in [new file with mode: 0644]
examples/README [new file with mode: 0644]
examples/crfc2asn1.pl [new file with mode: 0755]
examples/rfc3280.txt [new file with mode: 0644]
examples/rfc3525.txt [new file with mode: 0644]
examples/rfc4511.txt [new file with mode: 0644]
examples/sample.makefile.regen [new file with mode: 0644]
examples/sample.source.1609.2/Makefile [new file with mode: 0644]
examples/sample.source.1609.2/README [new file with mode: 0644]
examples/sample.source.1609.2/config.h [new file with mode: 0644]
examples/sample.source.1609.2/sample-Certificate-1.coer [new file with mode: 0644]
examples/sample.source.1609.2/sample-Certificate-1.xer [new file with mode: 0644]
examples/sample.source.1609.2/sample-Certificate-2.coer [new file with mode: 0644]
examples/sample.source.1609.2/sample-Certificate-2.xer [new file with mode: 0644]
examples/sample.source.1609.2/sample-Ieee1609Dot2Data-1.coer [new file with mode: 0644]
examples/sample.source.J2735/Makefile [new file with mode: 0644]
examples/sample.source.J2735/README [new file with mode: 0644]
examples/sample.source.J2735/config.h [new file with mode: 0644]
examples/sample.source.J2735/sample-MessageFrame-1.der [new file with mode: 0644]
examples/sample.source.J2735/sample-MessageFrame-1.per [new file with mode: 0644]
examples/sample.source.J2735/sample-MessageFrame-1.xer [new file with mode: 0644]
examples/sample.source.LDAP3/Makefile [new file with mode: 0644]
examples/sample.source.LDAP3/README [new file with mode: 0644]
examples/sample.source.LDAP3/config.h [new file with mode: 0644]
examples/sample.source.LDAP3/sample-LDAPMessage-1.ber [new file with mode: 0644]
examples/sample.source.LTE-RRC/Makefile [new file with mode: 0644]
examples/sample.source.LTE-RRC/README [new file with mode: 0644]
examples/sample.source.LTE-RRC/config.h [new file with mode: 0644]
examples/sample.source.LTE-RRC/sample-BCCH-BCH-Message-1.per [new file with mode: 0644]
examples/sample.source.MEGACO/Makefile [new file with mode: 0644]
examples/sample.source.MEGACO/README [new file with mode: 0644]
examples/sample.source.MEGACO/config.h [new file with mode: 0644]
examples/sample.source.MHEG5/Makefile [new file with mode: 0644]
examples/sample.source.MHEG5/README [new file with mode: 0644]
examples/sample.source.MHEG5/config.h [new file with mode: 0644]
examples/sample.source.MHEG5/sample-InterchangedObject-1.xer [new file with mode: 0644]
examples/sample.source.PKIX1/Makefile [new file with mode: 0644]
examples/sample.source.PKIX1/README [new file with mode: 0644]
examples/sample.source.PKIX1/config.h [new file with mode: 0644]
examples/sample.source.PKIX1/sample-Certificate-1.der [new file with mode: 0644]
examples/sample.source.RRC/Makefile [new file with mode: 0644]
examples/sample.source.RRC/README [new file with mode: 0644]
examples/sample.source.RRC/config.h [new file with mode: 0644]
examples/sample.source.RRC/sample-BCCH-BCH-Message-2.per [new file with mode: 0644]
examples/sample.source.RRC/sample-DL-CCCH-Message-2-nopad.per [new file with mode: 0644]
examples/sample.source.RRC/sample-DL-DCCH-Message-1-nopad.per [new file with mode: 0644]
examples/sample.source.RRC/sample-DL-DCCH-Message-1.per [new file with mode: 0644]
examples/sample.source.S1AP/Makefile [new file with mode: 0644]
examples/sample.source.S1AP/README [new file with mode: 0644]
examples/sample.source.S1AP/config.h [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-0.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-1.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-10.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-100.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-101.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-102.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-103.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-104.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-105.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-106.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-107.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-108.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-109.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-11.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-110.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-111.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-112.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-113.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-114.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-115.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-116.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-117.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-118.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-119.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-12.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-120.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-121.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-122.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-123.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-124.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-125.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-126.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-127.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-128.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-129.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-13.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-130.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-131.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-132.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-133.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-134.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-135.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-136.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-137.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-138.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-139.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-14.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-140.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-141.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-142.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-143.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-144.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-145.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-146.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-147.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-148.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-149.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-15.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-150.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-151.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-152.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-153.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-154.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-155.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-156.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-157.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-158.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-159.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-16.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-160.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-161.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-162.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-163.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-164.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-165.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-166.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-167.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-168.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-169.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-17.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-170.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-171.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-172.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-173.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-174.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-175.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-176.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-177.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-178.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-179.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-18.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-180.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-181.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-182.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-183.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-184.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-185.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-186.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-187.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-188.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-189.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-19.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-190.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-191.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-192.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-193.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-194.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-195.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-196.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-197.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-198.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-199.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-2.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-20.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-200.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-201.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-202.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-203.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-204.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-205.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-206.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-207.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-208.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-209.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-21.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-210.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-211.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-212.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-213.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-214.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-215.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-216.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-217.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-218.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-219.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-22.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-220.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-221.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-222.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-223.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-224.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-225.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-226.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-227.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-228.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-229.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-23.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-230.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-231.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-232.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-233.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-234.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-235.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-236.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-24.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-25.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-26.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-27.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-28.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-29.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-3.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-30.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-31.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-32.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-33.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-34.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-35.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-36.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-37.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-38.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-39.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-4.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-40.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-41.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-42.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-43.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-44.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-45.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-46.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-47.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-48.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-49.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-5.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-50.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-51.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-52.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-53.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-54.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-55.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-56.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-57.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-58.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-59.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-6.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-60.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-61.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-62.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-63.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-64.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-65.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-66.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-67.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-68.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-69.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-7.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-70.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-71.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-72.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-73.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-74.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-75.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-76.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-77.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-78.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-79.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-8.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-80.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-81.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-82.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-83.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-84.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-85.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-86.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-87.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-88.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-89.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-9.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-90.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-91.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-92.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-93.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-94.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-95.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-96.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-97.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-98.aper [new file with mode: 0644]
examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-99.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-DownlinkNASTransport-1.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-1.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-10.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-2.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-3.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-4.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-5.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-7.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-8.aper [new file with mode: 0644]
examples/sample.source.S1AP/sample-S1AP-PDU-9.aper [new file with mode: 0644]
examples/sample.source.TAP3/Makefile [new file with mode: 0644]
examples/sample.source.TAP3/README [new file with mode: 0644]
examples/sample.source.TAP3/config.h [new file with mode: 0644]
examples/sample.source.TAP3/sample-DataInterChange-1.ber [new file with mode: 0644]
examples/sample.source.ULP/Makefile [new file with mode: 0644]
examples/sample.source.ULP/README [new file with mode: 0644]
examples/sample.source.ULP/config.h [new file with mode: 0644]
examples/sample.source.ULP/sample-ULP-PDU-1.per [new file with mode: 0644]
examples/sample.source.ULP/sample-ULP-PDU-1.xer [new file with mode: 0644]
examples/sample.source.ULP/sample-ULP-PDU-2.per [new file with mode: 0644]
libasn1common/.deps/asn1_buffer.Plo [new file with mode: 0644]
libasn1common/.deps/asn1_namespace.Plo [new file with mode: 0644]
libasn1common/.deps/asn1_ref.Plo [new file with mode: 0644]
libasn1common/.deps/genhash.Plo [new file with mode: 0644]
libasn1common/Makefile [new file with mode: 0644]
libasn1common/Makefile.am [new file with mode: 0644]
libasn1common/Makefile.in [new file with mode: 0644]
libasn1common/asn1_buffer.c [new file with mode: 0644]
libasn1common/asn1_buffer.h [new file with mode: 0644]
libasn1common/asn1_namespace.c [new file with mode: 0644]
libasn1common/asn1_namespace.h [new file with mode: 0644]
libasn1common/asn1_ref.c [new file with mode: 0644]
libasn1common/asn1_ref.h [new file with mode: 0644]
libasn1common/genhash.c [new file with mode: 0644]
libasn1common/genhash.h [new file with mode: 0644]
libasn1compiler/.deps/asn1c_C.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_compat.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_constraint.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_fdeps.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_ioc.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_lang.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_misc.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_naming.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_out.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1c_save.Plo [new file with mode: 0644]
libasn1compiler/.deps/asn1compiler.Plo [new file with mode: 0644]
libasn1compiler/Makefile [new file with mode: 0644]
libasn1compiler/Makefile.am [new file with mode: 0644]
libasn1compiler/Makefile.in [new file with mode: 0644]
libasn1compiler/asn1c_C.c [new file with mode: 0644]
libasn1compiler/asn1c_C.h [new file with mode: 0644]
libasn1compiler/asn1c_compat.c [new file with mode: 0644]
libasn1compiler/asn1c_compat.h [new file with mode: 0644]
libasn1compiler/asn1c_constraint.c [new file with mode: 0644]
libasn1compiler/asn1c_constraint.h [new file with mode: 0644]
libasn1compiler/asn1c_fdeps.c [new file with mode: 0644]
libasn1compiler/asn1c_fdeps.h [new file with mode: 0644]
libasn1compiler/asn1c_internal.h [new file with mode: 0644]
libasn1compiler/asn1c_ioc.c [new file with mode: 0644]
libasn1compiler/asn1c_ioc.h [new file with mode: 0644]
libasn1compiler/asn1c_lang.c [new file with mode: 0644]
libasn1compiler/asn1c_lang.h [new file with mode: 0644]
libasn1compiler/asn1c_misc.c [new file with mode: 0644]
libasn1compiler/asn1c_misc.h [new file with mode: 0644]
libasn1compiler/asn1c_naming.c [new file with mode: 0644]
libasn1compiler/asn1c_naming.h [new file with mode: 0644]
libasn1compiler/asn1c_out.c [new file with mode: 0644]
libasn1compiler/asn1c_out.h [new file with mode: 0644]
libasn1compiler/asn1c_save.c [new file with mode: 0644]
libasn1compiler/asn1c_save.h [new file with mode: 0644]
libasn1compiler/asn1compiler.c [new file with mode: 0644]
libasn1compiler/asn1compiler.h [new file with mode: 0644]
libasn1compiler/check_compiler.c [new file with mode: 0644]
libasn1fix/.deps/asn1fix.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_bitstring.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_class.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_compat.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_constr.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_constraint.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_constraint_compat.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_crange.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_cstring.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_cws.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_dereft.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_derefv.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_enum.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_export.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_integer.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_misc.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_param.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_retrieve.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_tags.Plo [new file with mode: 0644]
libasn1fix/.deps/asn1fix_value.Plo [new file with mode: 0644]
libasn1fix/.deps/check_crange-asn1fix_constraint_compat.Po [new file with mode: 0644]
libasn1fix/.deps/check_crange-asn1fix_crange.Po [new file with mode: 0644]
libasn1fix/.deps/check_fixer-check_fixer.Po [new file with mode: 0644]
libasn1fix/Makefile [new file with mode: 0644]
libasn1fix/Makefile.am [new file with mode: 0644]
libasn1fix/Makefile.in [new file with mode: 0644]
libasn1fix/asn1fix.c [new file with mode: 0644]
libasn1fix/asn1fix.h [new file with mode: 0644]
libasn1fix/asn1fix_bitstring.c [new file with mode: 0644]
libasn1fix/asn1fix_bitstring.h [new file with mode: 0644]
libasn1fix/asn1fix_class.c [new file with mode: 0644]
libasn1fix/asn1fix_class.h [new file with mode: 0644]
libasn1fix/asn1fix_compat.c [new file with mode: 0644]
libasn1fix/asn1fix_compat.h [new file with mode: 0644]
libasn1fix/asn1fix_constr.c [new file with mode: 0644]
libasn1fix/asn1fix_constr.h [new file with mode: 0644]
libasn1fix/asn1fix_constraint.c [new file with mode: 0644]
libasn1fix/asn1fix_constraint.h [new file with mode: 0644]
libasn1fix/asn1fix_constraint_compat.c [new file with mode: 0644]
libasn1fix/asn1fix_crange.c [new file with mode: 0644]
libasn1fix/asn1fix_crange.h [new file with mode: 0644]
libasn1fix/asn1fix_cstring.c [new file with mode: 0644]
libasn1fix/asn1fix_cstring.h [new file with mode: 0644]
libasn1fix/asn1fix_cws.c [new file with mode: 0644]
libasn1fix/asn1fix_cws.h [new file with mode: 0644]
libasn1fix/asn1fix_dereft.c [new file with mode: 0644]
libasn1fix/asn1fix_dereft.h [new file with mode: 0644]
libasn1fix/asn1fix_derefv.c [new file with mode: 0644]
libasn1fix/asn1fix_derefv.h [new file with mode: 0644]
libasn1fix/asn1fix_enum.c [new file with mode: 0644]
libasn1fix/asn1fix_enum.h [new file with mode: 0644]
libasn1fix/asn1fix_export.c [new file with mode: 0644]
libasn1fix/asn1fix_export.h [new file with mode: 0644]
libasn1fix/asn1fix_integer.c [new file with mode: 0644]
libasn1fix/asn1fix_integer.h [new file with mode: 0644]
libasn1fix/asn1fix_internal.h [new file with mode: 0644]
libasn1fix/asn1fix_misc.c [new file with mode: 0644]
libasn1fix/asn1fix_misc.h [new file with mode: 0644]
libasn1fix/asn1fix_param.c [new file with mode: 0644]
libasn1fix/asn1fix_param.h [new file with mode: 0644]
libasn1fix/asn1fix_retrieve.c [new file with mode: 0644]
libasn1fix/asn1fix_retrieve.h [new file with mode: 0644]
libasn1fix/asn1fix_tags.c [new file with mode: 0644]
libasn1fix/asn1fix_tags.h [new file with mode: 0644]
libasn1fix/asn1fix_value.c [new file with mode: 0644]
libasn1fix/asn1fix_value.h [new file with mode: 0644]
libasn1fix/check_fixer.c [new file with mode: 0644]
libasn1parser/.deps/asn1p_class.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_constr.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_expr.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_integer.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_l.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_module.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_oid.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_param.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_value.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_xports.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1p_y.Plo [new file with mode: 0644]
libasn1parser/.deps/asn1parser.Plo [new file with mode: 0644]
libasn1parser/.deps/check_asn1p_integer.Po [new file with mode: 0644]
libasn1parser/Makefile [new file with mode: 0644]
libasn1parser/Makefile.am [new file with mode: 0644]
libasn1parser/Makefile.in [new file with mode: 0644]
libasn1parser/asn1p_class.c [new file with mode: 0644]
libasn1parser/asn1p_class.h [new file with mode: 0644]
libasn1parser/asn1p_constr.c [new file with mode: 0644]
libasn1parser/asn1p_constr.h [new file with mode: 0644]
libasn1parser/asn1p_expr.c [new file with mode: 0644]
libasn1parser/asn1p_expr.h [new file with mode: 0644]
libasn1parser/asn1p_expr2uclass.h [new file with mode: 0644]
libasn1parser/asn1p_expr_str.h [new file with mode: 0644]
libasn1parser/asn1p_integer.c [new file with mode: 0644]
libasn1parser/asn1p_integer.h [new file with mode: 0644]
libasn1parser/asn1p_l.c [new file with mode: 0644]
libasn1parser/asn1p_l.l [new file with mode: 0644]
libasn1parser/asn1p_list.h [new file with mode: 0644]
libasn1parser/asn1p_module.c [new file with mode: 0644]
libasn1parser/asn1p_module.h [new file with mode: 0644]
libasn1parser/asn1p_oid.c [new file with mode: 0644]
libasn1parser/asn1p_oid.h [new file with mode: 0644]
libasn1parser/asn1p_param.c [new file with mode: 0644]
libasn1parser/asn1p_param.h [new file with mode: 0644]
libasn1parser/asn1p_value.c [new file with mode: 0644]
libasn1parser/asn1p_value.h [new file with mode: 0644]
libasn1parser/asn1p_xports.c [new file with mode: 0644]
libasn1parser/asn1p_xports.h [new file with mode: 0644]
libasn1parser/asn1p_y.c [new file with mode: 0644]
libasn1parser/asn1p_y.h [new file with mode: 0644]
libasn1parser/asn1p_y.y [new file with mode: 0644]
libasn1parser/asn1parser.c [new file with mode: 0644]
libasn1parser/asn1parser.h [new file with mode: 0644]
libasn1parser/check_asn1p_integer.c [new file with mode: 0644]
libasn1parser/expr-h.pl [new file with mode: 0755]
libasn1print/.deps/asn1print.Plo [new file with mode: 0644]
libasn1print/Makefile [new file with mode: 0644]
libasn1print/Makefile.am [new file with mode: 0644]
libasn1print/Makefile.in [new file with mode: 0644]
libasn1print/README [new file with mode: 0644]
libasn1print/asn1print.c [new file with mode: 0644]
libasn1print/asn1print.h [new file with mode: 0644]
m4/ax_check_compile_and_link_flag.m4 [new file with mode: 0644]
m4/ax_check_compile_flag.m4 [new file with mode: 0644]
m4/ax_code_coverage.m4 [new file with mode: 0644]
m4/libtool.m4 [new file with mode: 0644]
m4/ltoptions.m4 [new file with mode: 0644]
m4/ltsugar.m4 [new file with mode: 0644]
m4/ltversion.m4 [new file with mode: 0644]
m4/lt~obsolete.m4 [new file with mode: 0644]
skeletons/.deps/check_converter_c89_32_example-converter-example.Po [new file with mode: 0644]
skeletons/.deps/check_converter_c89_example-converter-example.Po [new file with mode: 0644]
skeletons/.deps/check_converter_example-converter-example.Po [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ANY.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-BMPString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-BOOLEAN.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ENUMERATED.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-GraphicString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-IA5String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ISO646String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NULL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NativeReal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-NumericString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-PrintableString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-REAL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-T61String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-TeletexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-UTCTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-UTF8String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-UniversalString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-VideotexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-VisibleString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_application.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_bit_data.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_internal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-asn_random_fill.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ber_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constr_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-constraints.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-der_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-oer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-oer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-oer_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-per_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-per_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-per_opentype.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-per_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-xer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-xer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_32_la-xer_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ANY.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-BMPString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-BOOLEAN.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ENUMERATED.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-GeneralString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-GeneralizedTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-GraphicString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-IA5String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-INTEGER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-INTEGER_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ISO646String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NULL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NativeReal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-NumericString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ObjectDescriptor.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-PrintableString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-REAL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-RELATIVE-OID.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-T61String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-TeletexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-UTCTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-UTF8String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-UniversalString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-VideotexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-VisibleString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_application.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_bit_data.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_codecs_prim.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_internal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-asn_random_fill.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ber_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_length.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_tag.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SET.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constr_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-constraints.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-der_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-oer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-oer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-oer_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-per_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-per_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-per_opentype.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-per_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-xer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-xer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_c89_la-xer_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ANY.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-BIT_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-BIT_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-BMPString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-BOOLEAN.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ENUMERATED.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-GeneralString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-GeneralizedTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-GraphicString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-IA5String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-INTEGER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-INTEGER_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ISO646String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NULL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NativeEnumerated.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NativeEnumerated_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NativeInteger.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NativeInteger_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NativeReal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-NumericString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-OCTET_STRING.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-OCTET_STRING_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ObjectDescriptor.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-PrintableString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-REAL.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-RELATIVE-OID.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-T61String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-TeletexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-UTCTime.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-UTF8String.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-UniversalString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-VideotexString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-VisibleString.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_application.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_bit_data.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_codecs_prim.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_internal.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-asn_random_fill.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ber_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ber_tlv_length.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-ber_tlv_tag.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_CHOICE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_CHOICE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SET.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SET_OF.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_SET_OF_oer.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constr_TYPE.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-constraints.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-der_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-oer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-oer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-oer_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-per_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-per_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-per_opentype.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-per_support.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-xer_decoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-xer_encoder.Plo [new file with mode: 0644]
skeletons/.deps/libasn1cskeletons_la-xer_support.Plo [new file with mode: 0644]
skeletons/ANY.c [new file with mode: 0644]
skeletons/ANY.h [new file with mode: 0644]
skeletons/BIT_STRING.c [new file with mode: 0644]
skeletons/BIT_STRING.h [new file with mode: 0644]
skeletons/BIT_STRING_oer.c [new file with mode: 0644]
skeletons/BMPString.c [new file with mode: 0644]
skeletons/BMPString.h [new file with mode: 0644]
skeletons/BOOLEAN.c [new file with mode: 0644]
skeletons/BOOLEAN.h [new file with mode: 0644]
skeletons/ENUMERATED.c [new file with mode: 0644]
skeletons/ENUMERATED.h [new file with mode: 0644]
skeletons/GeneralString.c [new file with mode: 0644]
skeletons/GeneralString.h [new file with mode: 0644]
skeletons/GeneralizedTime.c [new file with mode: 0644]
skeletons/GeneralizedTime.h [new file with mode: 0644]
skeletons/GraphicString.c [new file with mode: 0644]
skeletons/GraphicString.h [new file with mode: 0644]
skeletons/IA5String.c [new file with mode: 0644]
skeletons/IA5String.h [new file with mode: 0644]
skeletons/INTEGER.c [new file with mode: 0644]
skeletons/INTEGER.h [new file with mode: 0644]
skeletons/INTEGER_oer.c [new file with mode: 0644]
skeletons/ISO646String.c [new file with mode: 0644]
skeletons/ISO646String.h [new file with mode: 0644]
skeletons/Makefile [new file with mode: 0644]
skeletons/Makefile.am [new file with mode: 0644]
skeletons/Makefile.in [new file with mode: 0644]
skeletons/NULL.c [new file with mode: 0644]
skeletons/NULL.h [new file with mode: 0644]
skeletons/NativeEnumerated.c [new file with mode: 0644]
skeletons/NativeEnumerated.h [new file with mode: 0644]
skeletons/NativeEnumerated_oer.c [new file with mode: 0644]
skeletons/NativeInteger.c [new file with mode: 0644]
skeletons/NativeInteger.h [new file with mode: 0644]
skeletons/NativeInteger_oer.c [new file with mode: 0644]
skeletons/NativeReal.c [new file with mode: 0644]
skeletons/NativeReal.h [new file with mode: 0644]
skeletons/NumericString.c [new file with mode: 0644]
skeletons/NumericString.h [new file with mode: 0644]
skeletons/OBJECT_IDENTIFIER.c [new file with mode: 0644]
skeletons/OBJECT_IDENTIFIER.h [new file with mode: 0644]
skeletons/OCTET_STRING.c [new file with mode: 0644]
skeletons/OCTET_STRING.h [new file with mode: 0644]
skeletons/OCTET_STRING_oer.c [new file with mode: 0644]
skeletons/OPEN_TYPE.c [new file with mode: 0644]
skeletons/OPEN_TYPE.h [new file with mode: 0644]
skeletons/OPEN_TYPE_oer.c [new file with mode: 0644]
skeletons/ObjectDescriptor.c [new file with mode: 0644]
skeletons/ObjectDescriptor.h [new file with mode: 0644]
skeletons/PrintableString.c [new file with mode: 0644]
skeletons/PrintableString.h [new file with mode: 0644]
skeletons/README [new file with mode: 0644]
skeletons/REAL.c [new file with mode: 0644]
skeletons/REAL.h [new file with mode: 0644]
skeletons/RELATIVE-OID.c [new file with mode: 0644]
skeletons/RELATIVE-OID.h [new file with mode: 0644]
skeletons/T61String.c [new file with mode: 0644]
skeletons/T61String.h [new file with mode: 0644]
skeletons/TeletexString.c [new file with mode: 0644]
skeletons/TeletexString.h [new file with mode: 0644]
skeletons/UTCTime.c [new file with mode: 0644]
skeletons/UTCTime.h [new file with mode: 0644]
skeletons/UTF8String.c [new file with mode: 0644]
skeletons/UTF8String.h [new file with mode: 0644]
skeletons/UniversalString.c [new file with mode: 0644]
skeletons/UniversalString.h [new file with mode: 0644]
skeletons/VideotexString.c [new file with mode: 0644]
skeletons/VideotexString.h [new file with mode: 0644]
skeletons/VisibleString.c [new file with mode: 0644]
skeletons/VisibleString.h [new file with mode: 0644]
skeletons/asn_SEQUENCE_OF.c [new file with mode: 0644]
skeletons/asn_SEQUENCE_OF.h [new file with mode: 0644]
skeletons/asn_SET_OF.c [new file with mode: 0644]
skeletons/asn_SET_OF.h [new file with mode: 0644]
skeletons/asn_application.c [new file with mode: 0644]
skeletons/asn_application.h [new file with mode: 0644]
skeletons/asn_bit_data.c [new file with mode: 0644]
skeletons/asn_bit_data.h [new file with mode: 0644]
skeletons/asn_codecs.h [new file with mode: 0644]
skeletons/asn_codecs_prim.c [new file with mode: 0644]
skeletons/asn_codecs_prim.h [new file with mode: 0644]
skeletons/asn_internal.c [new file with mode: 0644]
skeletons/asn_internal.h [new file with mode: 0644]
skeletons/asn_ioc.h [new file with mode: 0644]
skeletons/asn_random_fill.c [new file with mode: 0644]
skeletons/asn_random_fill.h [new file with mode: 0644]
skeletons/asn_system.h [new file with mode: 0644]
skeletons/ber_decoder.c [new file with mode: 0644]
skeletons/ber_decoder.h [new file with mode: 0644]
skeletons/ber_tlv_length.c [new file with mode: 0644]
skeletons/ber_tlv_length.h [new file with mode: 0644]
skeletons/ber_tlv_tag.c [new file with mode: 0644]
skeletons/ber_tlv_tag.h [new file with mode: 0644]
skeletons/constr_CHOICE.c [new file with mode: 0644]
skeletons/constr_CHOICE.h [new file with mode: 0644]
skeletons/constr_CHOICE_oer.c [new file with mode: 0644]
skeletons/constr_SEQUENCE.c [new file with mode: 0644]
skeletons/constr_SEQUENCE.h [new file with mode: 0644]
skeletons/constr_SEQUENCE_OF.c [new file with mode: 0644]
skeletons/constr_SEQUENCE_OF.h [new file with mode: 0644]
skeletons/constr_SEQUENCE_oer.c [new file with mode: 0644]
skeletons/constr_SET.c [new file with mode: 0644]
skeletons/constr_SET.h [new file with mode: 0644]
skeletons/constr_SET_OF.c [new file with mode: 0644]
skeletons/constr_SET_OF.h [new file with mode: 0644]
skeletons/constr_SET_OF_oer.c [new file with mode: 0644]
skeletons/constr_TYPE.c [new file with mode: 0644]
skeletons/constr_TYPE.h [new file with mode: 0644]
skeletons/constraints.c [new file with mode: 0644]
skeletons/constraints.h [new file with mode: 0644]
skeletons/converter-example.c [new file with mode: 0644]
skeletons/der_encoder.c [new file with mode: 0644]
skeletons/der_encoder.h [new file with mode: 0644]
skeletons/file-dependencies [new file with mode: 0644]
skeletons/oer_decoder.c [new file with mode: 0644]
skeletons/oer_decoder.h [new file with mode: 0644]
skeletons/oer_encoder.c [new file with mode: 0644]
skeletons/oer_encoder.h [new file with mode: 0644]
skeletons/oer_support.c [new file with mode: 0644]
skeletons/oer_support.h [new file with mode: 0644]
skeletons/per_decoder.c [new file with mode: 0644]
skeletons/per_decoder.h [new file with mode: 0644]
skeletons/per_encoder.c [new file with mode: 0644]
skeletons/per_encoder.h [new file with mode: 0644]
skeletons/per_opentype.c [new file with mode: 0644]
skeletons/per_opentype.h [new file with mode: 0644]
skeletons/per_support.c [new file with mode: 0644]
skeletons/per_support.h [new file with mode: 0644]
skeletons/standard-modules/ASN1-Object-Identifier-Module.asn1 [new file with mode: 0644]
skeletons/standard-modules/ASN1C-UsefulInformationObjectClasses.asn1 [new file with mode: 0644]
skeletons/standard-modules/README [new file with mode: 0644]
skeletons/xer_decoder.c [new file with mode: 0644]
skeletons/xer_decoder.h [new file with mode: 0644]
skeletons/xer_encoder.c [new file with mode: 0644]
skeletons/xer_encoder.h [new file with mode: 0644]
skeletons/xer_support.c [new file with mode: 0644]
skeletons/xer_support.h [new file with mode: 0644]
tests/Makefile [new file with mode: 0644]
tests/Makefile.am [new file with mode: 0644]
tests/Makefile.in [new file with mode: 0644]
tests/README [new file with mode: 0644]
tests/tests-asn1c-compiler/00-empty-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/01-empty-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/02-garbage-NP.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/03-enum-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/03-enum-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/04-enum-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/04-enum-SE.asn1.-E [new file with mode: 0644]
tests/tests-asn1c-compiler/05-enum-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/06-enum-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/07-int-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/07-int-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/08-int-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/09-int-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/10-int-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/100-class-ref-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/100-class-ref-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/101-class-ref-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/102-class-ref-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/102-class-ref-SE.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/103-reference-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/104-param-1-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/104-param-1-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/105-param-2-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/106-param-constr-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/107-param-constr-2-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/109-bit-string-NP.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/11-int-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/110-param-3-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/111-param-4-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/112-param-class-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/112-param-class-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/113-bit-string-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/114-bit-string-NP.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/115-bit-string-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/116-bit-string-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/117-real-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/117-real-constraint-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/118-per-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/118-per-constraint-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/119-per-strings-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/12-int-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/121-empty-imports-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/121-empty-imports-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/122-pattern-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/123-valueassignment-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/123-valueassignment-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-X [new file with mode: 0644]
tests/tests-asn1c-compiler/126-per-extensions-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/127-per-long-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/128-enum-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/129-enum-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/129-enum-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/129-enum-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/13-resolver-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/130-enum-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/130-enum-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/131-per-empty-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/132-per-choice-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/133-per-constraints-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/134-per-long-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/135-oer-short-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/136-oer-long-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER [new file with mode: 0644]
tests/tests-asn1c-compiler/137-oer-string-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER [new file with mode: 0644]
tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER [new file with mode: 0644]
tests/tests-asn1c-compiler/139-component-relation-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/14-resolver-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/14-resolver-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/140-component-relation-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/141-component-relation-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-Pfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/145-empty-information-object-set-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER [new file with mode: 0644]
tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/148-der-default-set-sequence-values-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/149-with-components-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/149-with-components-SE.asn1.-E [new file with mode: 0644]
tests/tests-asn1c-compiler/15-resolver-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/150-with-components-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/151-per-b2110-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/151-per-b2110-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-OER [new file with mode: 0644]
tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/156-union-ios-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/156-union-ios-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1.-Pfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/16-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1.-Pgen-PERfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/17-tags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/18-class-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/18-class-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/19-param-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/19-param-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/20-constr-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/20-constr-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/21-tags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/21-tags-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/22-tags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/22-tags-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/23-bits-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/23-bits-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/24-sequence-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/24-sequence-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/25-misc-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/26-sequence-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/27-set-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/28-tags-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/29-tags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/30-set-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/31-set-of-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/31-set-of-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/32-sequence-of-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/33-misc-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/34-class-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/34-class-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/34-class-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/35-set-choice-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/36-indirect-choice-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/38-comments-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/39-sequence-of-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/40-int-optional-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/41-int-optional-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/42-real-life-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/42-real-life-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR [new file with mode: 0644]
tests/tests-asn1c-compiler/43-recursion-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/45-undefined-type-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/45-undefined-type-SE.asn1.-EFfknown-extern-type=KnownExt [new file with mode: 0644]
tests/tests-asn1c-compiler/46-redefine-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR [new file with mode: 0644]
tests/tests-asn1c-compiler/47-set-ext-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/48-real-life-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/49-real-life-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/49-real-life-OK.asn1.-E [new file with mode: 0644]
tests/tests-asn1c-compiler/50-constraint-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/51-constraint-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/52-constraint-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/53-constraint-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/54-constraint-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/55-components-of-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/55-components-of-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/56-components-of-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/57-components-of-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/58-param-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/58-param-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/59-choice-extended-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/60-any-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/60-any-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/61-any-1-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/62-any-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/62-any-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/63-any-2-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/64-oid-constr-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/65-multi-tag-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types [new file with mode: 0644]
tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/66-ref-simple-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/67-embedded-choice-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/68-enum-default-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/69-reserved-words-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/70-xer-test-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/71-duplicate-types-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/72-same-names-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/73-circular-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/75-duplicate-modules-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/76-duplicate-modules-SW.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/77-str-default-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/78-str-default-SE.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/79-constrained-by-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/79-constrained-by-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/80-chardefs-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/81-type-default-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/82-with-comps-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/82-with-comps-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/83-with-comps-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/84-param-tags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/85-comments-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/86-atags-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/86-atags-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/87-old-syntax-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/88-integer-enum-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names [new file with mode: 0644]
tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-EFprint-constraints [new file with mode: 0644]
tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE [new file with mode: 0644]
tests/tests-asn1c-compiler/92-circular-loops-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice [new file with mode: 0644]
tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/94-set-optionals-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types [new file with mode: 0644]
tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER [new file with mode: 0644]
tests/tests-asn1c-compiler/96-type-identifier-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/97-type-identifier-SW.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/97-type-identifier-SW.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/98-attribute-class-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EF [new file with mode: 0644]
tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P [new file with mode: 0644]
tests/tests-asn1c-compiler/99-class-sample-OK.asn1 [new file with mode: 0644]
tests/tests-asn1c-compiler/99-class-sample-OK.asn1.-EFprint-class-matrix [new file with mode: 0644]
tests/tests-asn1c-compiler/Makefile [new file with mode: 0644]
tests/tests-asn1c-compiler/Makefile.am [new file with mode: 0644]
tests/tests-asn1c-compiler/Makefile.in [new file with mode: 0644]
tests/tests-asn1c-compiler/README [new file with mode: 0644]
tests/tests-asn1c-compiler/check-parsing-log2diff.pl [new file with mode: 0755]
tests/tests-asn1c-compiler/check-parsing.sh [new file with mode: 0755]
tests/tests-asn1c-smoke/Makefile [new file with mode: 0644]
tests/tests-asn1c-smoke/Makefile.am [new file with mode: 0644]
tests/tests-asn1c-smoke/Makefile.in [new file with mode: 0644]
tests/tests-asn1c-smoke/README [new file with mode: 0644]
tests/tests-asn1c-smoke/check-asn1c-smoke.sh [new file with mode: 0755]
tests/tests-c-compiler/Makefile [new file with mode: 0644]
tests/tests-c-compiler/Makefile.am [new file with mode: 0644]
tests/tests-c-compiler/Makefile.in [new file with mode: 0644]
tests/tests-c-compiler/README [new file with mode: 0644]
tests/tests-c-compiler/check-assembly.sh [new file with mode: 0755]
tests/tests-c-compiler/check-src/Makefile [new file with mode: 0644]
tests/tests-c-compiler/check-src/Makefile.am [new file with mode: 0644]
tests/tests-c-compiler/check-src/Makefile.in [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-03.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-119.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-126.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-127.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-131.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-132.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-133.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-135.-gen-OER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-137.-gen-OER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-148.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-158.-fcompound-names.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-19.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-22.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-24.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-25.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-30.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-31.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-32.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-33.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-35.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-39.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-41.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-41.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-42.-fwide-types.cc [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-42.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-43.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-44.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-46.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-48.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-50.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-59.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-60.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-62.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-65.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-70.-fwide-types.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-70.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-72.-fcompound-names.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-73.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-92.-findirect-choice.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check-92.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check64-134.-gen-PER.c [new file with mode: 0644]
tests/tests-c-compiler/check-src/check64-136.-gen-OER.c [new file with mode: 0644]
tests/tests-c-compiler/data-119/README [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-01.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-02.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-03.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-04-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-05.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-06-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-07-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-08.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-09.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-10.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-11-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-12-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-13-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-14-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-15.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-16.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-17.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-18.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-19.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-20-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-21-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-22-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-23-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-24-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-119/data-119-25-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/README [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-01.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-01.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-02-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-02-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-03-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-03-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-04-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-04-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-05-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-05-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-06-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-06-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-07-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-07-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-08-P.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-08-P.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-09-C.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-09-C.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-10-C.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-10-C.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-11-C.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-11-C.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-12.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-12.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-13.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-13.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-14.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-14.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-15.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-15.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-16.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-16.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-17.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-17.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-18-X.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-18-X.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-19.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-19.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-20.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-20.out [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-21.in [new file with mode: 0644]
tests/tests-c-compiler/data-126/data-126-21.out [new file with mode: 0644]
tests/tests-c-compiler/data-62/Makefile [new file with mode: 0644]
tests/tests-c-compiler/data-62/README [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-01.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-01.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-02-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-02-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-03-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-03-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-04-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-04-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-05-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-05-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-06-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-06-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-07-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-07-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-08-L.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-08-L.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-09-L.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-09-L.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-10.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-10.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-11.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-11.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-12-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-12-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-13-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-13-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-14.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-14.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-15-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-15-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-16.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-16.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-17-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-17-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-18-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-18-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-19-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-19-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-20.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-20.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-21-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-21-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-22.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-22.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-23-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-23-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-24-L.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-24-L.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-25.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-25.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-26-B.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-26-B.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-27.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-27.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-28-D.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-28-D.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-29-L.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-29-L.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-30-L.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-30-L.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-31-D.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-31-D.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-32.ber [new file with mode: 0644]
tests/tests-c-compiler/data-62/data-62-32.xbr [new file with mode: 0644]
tests/tests-c-compiler/data-70/README [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-01.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-02.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-03.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-04-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-05-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-06-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-07-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-08-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-09-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-10.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-11.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-12.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-13-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-14-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-15.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-16-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-17-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-18.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-19.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-20-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-21-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-22-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-23-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-24-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-25.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-26-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-27.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-28.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-29-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-30-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-31-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-32.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-33.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-34-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-35-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-36.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-37-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-38-B.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-39.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-40-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-41-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-42-E.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-43-E.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-44-X.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-45-X.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-46-X.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-47.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-48.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-49.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-50.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-51.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-52-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-53.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-54-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-55.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-56.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-57-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-58-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-59-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-60-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-61-D.in [new file with mode: 0644]
tests/tests-c-compiler/data-70/data-70-62-D.in [new file with mode: 0644]
tests/tests-randomized/.deps/test-param-helper.Po [new file with mode: 0644]
tests/tests-randomized/Makefile [new file with mode: 0644]
tests/tests-randomized/Makefile.am [new file with mode: 0644]
tests/tests-randomized/Makefile.in [new file with mode: 0644]
tests/tests-randomized/bundles/00-NULL-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/01-BOOLEAN-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/02-INTEGER-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/03-ENUMERATED-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/04-REAL-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/05-BIT-STRING-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/06-OCTET-STRING-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/07-VisibleString-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/08-OBJECT-IDENTIFIER-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/09-RELATIVE-OID-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/10-UTF8String-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/11-BMPString-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/12-UniversalString-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/13-UTCTime-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/14-GeneralizedTime-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/15-CHOICE-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/17-SEQUENCE-OF-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/19-SET-OF-bundle.txt [new file with mode: 0644]
tests/tests-randomized/bundles/README [new file with mode: 0644]
tests/tests-randomized/check-bundles.sh [new file with mode: 0755]
tests/tests-randomized/random-test-driver.c [new file with mode: 0644]
tests/tests-randomized/test-param-helper.c [new file with mode: 0644]
tests/tests-skeletons/.deps/check-GeneralizedTime.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-OCTET_STRING.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-OER-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-OER-NativeEnumerated.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-OER-support.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-OIDs.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-PER-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-PER-UniversalString.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-PER-support.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-REAL.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-UTCTime.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-UTF8String.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-XER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-ber_tlv_tag.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-bits.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check-length.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_GeneralizedTime-check-GeneralizedTime.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_INTEGER-check-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_OCTET_STRING-check-OCTET_STRING.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_OER_INTEGER-check-OER-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_OER_support-check-OER-support.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_OIDs-check-OIDs.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_PER_INTEGER-check-PER-INTEGER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_PER_UniversalString-check-PER-UniversalString.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_PER_support-check-PER-support.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_REAL-check-REAL.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_UTCTime-check-UTCTime.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_UTF8String-check-UTF8String.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_XER-check-XER.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_ber_tlv_tag-check-ber_tlv_tag.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_bits-check-bits.Po [new file with mode: 0644]
tests/tests-skeletons/.deps/check_32_length-check-length.Po [new file with mode: 0644]
tests/tests-skeletons/Makefile [new file with mode: 0644]
tests/tests-skeletons/Makefile.am [new file with mode: 0644]
tests/tests-skeletons/Makefile.in [new file with mode: 0644]
tests/tests-skeletons/check-GeneralizedTime.c [new file with mode: 0644]
tests/tests-skeletons/check-INTEGER.c [new file with mode: 0644]
tests/tests-skeletons/check-OCTET_STRING.c [new file with mode: 0644]
tests/tests-skeletons/check-OER-INTEGER.c [new file with mode: 0644]
tests/tests-skeletons/check-OER-NativeEnumerated.c [new file with mode: 0644]
tests/tests-skeletons/check-OER-support.c [new file with mode: 0644]
tests/tests-skeletons/check-OIDs.c [new file with mode: 0644]
tests/tests-skeletons/check-PER-INTEGER.c [new file with mode: 0644]
tests/tests-skeletons/check-PER-UniversalString.c [new file with mode: 0644]
tests/tests-skeletons/check-PER-support.c [new file with mode: 0644]
tests/tests-skeletons/check-REAL.c [new file with mode: 0644]
tests/tests-skeletons/check-UTCTime.c [new file with mode: 0644]
tests/tests-skeletons/check-UTF8String.c [new file with mode: 0644]
tests/tests-skeletons/check-XER.c [new file with mode: 0644]
tests/tests-skeletons/check-ber_tlv_tag.c [new file with mode: 0644]
tests/tests-skeletons/check-bits.c [new file with mode: 0644]
tests/tests-skeletons/check-length.c [new file with mode: 0644]
tests/tests-skeletons/disable-leak-check-m32.sh [new file with mode: 0755]

diff --git a/.gitreview b/.gitreview
new file mode 100644 (file)
index 0000000..bfe9b4d
--- /dev/null
@@ -0,0 +1,6 @@
+[gerrit]
+host=gerrit.oran-osc.org
+#port=29418
+project=com/asn1c
+defaultbranch=master
+defaultremote=origin
\ No newline at end of file
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..7183a06
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,25 @@
+Full list of copyright holders:
+
+Bartosz Marcinkiewicz <bma@megawatt.com.pl>
+Bent Nicolaisen <BN@JAI.com>
+Bi-Ruei, Chiu <biruei.chiu@gmail.com>
+Daniele Varrazzo <daniele.varrazzo@gmail.com>
+Denis Filatov (DanyaFilatov @ github)
+daa @ github
+Erika Thorsen (akire @ github)
+gareins @ github
+johvik @ github
+Jon Ringle (ringlej @ github)
+Lev Walkin <vlm@lionet.info>
+Max Khon (mkhon @ github)
+Maxim Kuzmin (AuthenticEshkinKot @ github)
+mouse07410 @ github
+Oskar Holmlund (ikarso @ github)
+Ray Zhang (zhanglei002 @ github)
+Simo Sorce <simo@redhat.com>
+theirix @ github
+Uri Blumenthal
+Vasil Velichkov (velichkov @ github)
+Wim L <wiml@omnigroup.com>
+ymbirtt @ github
+Google Inc.
diff --git a/BUGS b/BUGS
new file mode 100644 (file)
index 0000000..6427043
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,32 @@
+
+0. ASN.1 grammar parser is written mostly with respect to constructing a tree,
+so a tree destruction is not fully supported and certain memory leaks are
+known. Not a huge problem for run-once programs like a compiler.
+NOTE:  This statement does not apply to the target code _produced_
+       by the compiler.
+
+1. For purposes of compilation, INTEGER type is modelled using a large
+static type (asn_integer_t), but defined as any positive or negative value
+by ASN.1. Not a problem as most specifications use very small values anyway.
+NOTE:  This statement does not apply to the target code _produced_
+       by the compiler.
+
+2. A MACRO facility is part of obsolete ASN.1 standard, and is not supported.
+
+3. Multiple tags applied at the same level are not supported:
+       BadTags ::= [0] EXPLICIT [2] IMPLICIT OtherType
+   The same thing could be achieved by using the indirection:
+       GoodTags     ::= [0] EXPLICIT OtherTypePtr
+       OtherTypePtr ::= [2] IMPLICIT OtherType
+
+4. Mixed definite/indefinite length in a _single_ BER tags sequence is not
+supported. Should not be a problem in the real world. Please note that it
+is still possible, for example, to encode a wrapper structure using definite
+length, and encode its substructure member using indefinite length. The BER
+decoder is perfectly capable of decoding such sequences.
+
+5. Encoding or decoding of structures with combined length greater than 16MB
+is not tested.
+
+6. XER codec does not support integer (INTEGER, ENUMERATED) values
+outside the signed long range.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..2bdf002
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,602 @@
+
+0.9.??:
+    FEATURES:
+    * Added support for basic Information Object Sets driven code generation.
+    * Added OER support.
+    * Added LTE RRC example (Bi-Ruei, Chiu).
+    * Added IEEE 1609.2 example.
+    * Added SAE J2735 example.
+
+    NOTABLE:
+    * Converter example (included by default):
+      * converter-sample.c renamed into converter-example.c
+      * make converter-example.mk file for building that converter
+      * asn1c -no-gen-example to stop generating converter-example.{c,mk}
+    * asn1c -no-gen-example option to disable converter-example generation.
+    * Added random value generation (-R option to converter-example).
+    * Added LibFuzzer-based randomized tests for supported transfer syntaxes
+      (DER, OER, UPER, XER) into tests/tests-randomized. See the following
+      article to get the latest LibFuzzer-enabled clang on macOS:
+        https://medium.com/@levwalkin/compile-llvm-clang-libfuzzer-b61e82718430
+      then ensure the new clang is in the way:
+        CC=clang CXX=clang++ ./configure --enable-Werror --enable-test-fuzzer
+    * OBJECT IDENTIFIER and RELATIVE-OID API simplified.
+    * uper_encode() API got new argument (breaks API compatibility).
+    * asn1c -gen-XXX flags are deprecated. Use -no-gen-XXX to disable codecs.
+
+    FIXES:
+    * CVE-2017-12966 verified not present.
+    * Fix incomplete (failed) CHOICE XER decoding memory leak.
+      (Severity: medium; Security impact: medium)
+    * Fix REAL type overwrite conversion memory leak.
+      (Severity: low; Security impact: medium)
+    * Fix UPER string decoding constrained only by lower bound > 0
+      (Severity: low; Security impact: none)
+    * Fix UPER decoding of large [bit-]strings of size a multiple of 16K
+      (Severity: low; Security impact: none)
+    * Fix XER decoder crash on maliciously constructed ENUMERATED input.
+      (Severity: medium; Security impact: medium)
+
+0.9.28: 2017-03-26
+    * PER decoding: avoid memory leak on error. By github.com/simo5
+    * Constness patch #46 by Wim L <wiml@omnigroup.com> (41bbf1c..78d604f).
+    Build issues:
+    * Fixed generated file permissions introduced by earlier pull (issue/32).
+    * Win32/MinGW patch #31 by Frank Morgner (frankmorgner).
+    * Autoreconf fix patch by Dave Cridland (github.com/dwd)
+    * Fix autoreconf-2.69 failure by github.com/brchiu
+    * Fix C99 warnings. Fix by Adrien Destugues (github.com/pulkomandy).
+    * C89 compliance fix by Jaroslav Imrich (github.com/jariq).
+    * C standard compliance fixes by Markus Elfring (github.com/elfring).
+
+0.9.27: 2014-Sep-17
+    * Build structure fixes for portability.
+    * Disable long debug of ASN.1 operations during `make check` stage.
+    * Introduce --enable-ASN_DEBUG configure flag to emit long debug output.
+
+0.9.26: 2014-Sep-11
+    * Updated asn1c-usage.pdf.
+    * Made -fskeletons-copy a default option; removed cmdline option.
+    * Made -fnative-types a default option; removed cmdline option.
+      Added -fwide-types for backwards compatibility.
+    * Add -fline-refs to avoid being unfriendly to version control systems.
+    * Default constraint checking fix.
+      Thanks to Bartosz Marcinkiewicz <bma@megawatt.com.pl>
+    * Get rid of non-standard pointer arithmetics on void* pointer.
+    * PER-encoding of integers wider than 32 bits.
+
+0.9.24:    2013-Mar-16
+
+    * GeneralizedTime fix for working with time offsets which are not
+      representable in whole hours. (Severity: low; Security impact: low)
+      Thanks to IP Fabrics, Inc.
+    * Added -fincludes-quoted to asn1c to generate #includes in "double"
+      instead of <angle> quotes.
+    * PER encoding correctness fix. (Severity: high; Security impact: low)
+      Reported by Grzegorz Aksamit.
+    * ENUMERATED extension values check relaxed. Reported by Gabriel Burca.
+    * Fixed decimal decoding of REAL values in -fnative-types mode
+      (Severity: medium; Security impact: medium)
+    * Removed webcgi subproject (introduced in 2004) as useless.
+
+0.9.22:    2008-Nov-19
+
+    * Added -pdu=all and -pdu=<type> switches to asn1c.
+    * Added PER support for most known-multiplier string types:
+      IA5String, VisibleString, PrintableString, BMPString, UniversalString;
+      useful types: GeneralizedTime, UTCTime, ObjectDescriptor;
+      as well as REAL and OBJECT IDENTIFIER.
+      TODO: SET type.
+    * Added PER support for extensions in SEQUENCE.
+    * Multiple enhancements by Daniele Varrazzo <daniele.varrazzo@gmail.com>
+    * Fixed explicit tagging of an in-lined constructed type.
+      (Severity: low; Security impact: none).
+    * Memory leak fixed in SET OF / SEQUENCE OF when wrong encoding
+      is encountered. (Severity: medium; Security impact: low)
+    * Fixed extensibility handling of second SEQUENCE production.
+      (Severity: low; Security impact: none)
+    * Added DEFAULT handling for known multiplier string.
+    * Added a sample OMA ULP decoder (./examples/sample.source.ULP).
+    * Added full-width 32-bit integer encoding support in PER.
+    * Fixed 1-byte OOB write issue with non-standard and Windows
+      memory allocators (Severity: low; Security impact: medium).
+      Reported by Sheng Yu.
+
+0.9.21:    2006-Sep-17
+
+    * skeletons/standard-modules directory is now used for standard types.
+    * Fixed class field access problem (Test case 98)
+      (Severity: medium; Security impact: none)
+    * Refactored Information Object Classes parsing.
+    * Refactored Parameterization support.
+    * [typedef enum foo {}] foo_e; is now e_foo, see #1287989
+    * Refactored ValueSetTypeAssignment parsing.
+    * asn-decoder-template.c renamed into converter-sample.c
+    * MEGACO (Media Gateway Control Protocol) decoder sample added.
+    * First release of PER encoder (does not encode SETs yet).
+    * Added a sample LDAP decoder (./examples/sample.source.LDAP3).
+    * Added a sample 3GPP RRC decoder (./examples/sample.source.RRC).
+    * Added a sample MEGACO (H.248.1) decoder (sample.source.MEGACO).
+
+0.9.20:    2006-Mar-06
+
+    * SET OF CHOICE, SEQUENCE OF CHOICE and a certain named S/O types
+      are represented differently in XER. THIS IS AN INCOMPATIBLE CHANGE.
+      (Test case 70) (Severity: low; Security impact: low)
+    * asn1c: Removed -ftypes88 command line option.
+    * Started PER implementation. Somewhat experimental!
+
+0.9.19:    2005-Oct-06
+
+    * A proper solution to circular references. No kludge flags
+      should be necessary anymore to produce reference-free code:
+      recursive dependencies are resolved automatically.
+    * Test cases 73 & 92 keep track of various circular references.
+    * Introduced compiler directives to allow finer control over the
+      generated code ("--<ASN1C...>--" in comments), (Test case 93).
+    * New feature for unber(1): -s <skip> bytes.
+    * Mandatory elements map for SET was not getting generated properly.
+      (Test case 94) (Severity: high; Security impact: low)
+    * asn1c: new command line option: -fskeletons-copy.
+
+0.9.18:    2005-Aug-14
+
+    * The obsolete X.208 syntax is handled gracefully now (compound types'
+      member names are invented on the fly). (Test case 87).
+    * Generating enumeration tables for INTEGER types (Test case 88).
+    * Generating enumeration tables for BIT STRING types (Test case 89).
+    * Conditional INTEGER/ENUMERATED representation: long vs. INTEGER_t
+      type is chosen based on PER visible constraints (Test cases 90, 91).
+    * Union structures for CHOICE type are not anonymous anymore.
+    * Made unber(1) program more verbose: effective structure length is
+      now displayed as L="<n>" at the closing tag. (Test check-xxber.sh).
+    * Fixed unber(1)'s -1 switch for indefinite encoding length.
+    * New command line option for unber(1): -m to enable minimalistic mode.
+
+0.9.17:    2005-Aug-07
+
+    * Tagging mode is implicitly IMPLICIT if AUTOMATIC TAGS is used, #30.6.
+      (Test cases 55, 86).
+    * Started to use extern "C" {} in skeleton headers.
+    * Introduced -finline-choice command line option to fix
+      yet another class of circular references.
+
+0.9.16:    2005-July-04
+
+    * GeneralizedTime API now supports fractions of seconds.
+      Thanks to Bent Nicolaisen <BN@JAI.com> for support.
+    * ASN.1 parser has been tweaked to allow parsing something like
+      "SEQUENCE----comment----", which is ambiguous for many reasons.
+    * XER decoder better handles not-yet-defined future extensions.
+
+0.9.15: 2005-July-02
+
+    * Compiler now checks 64-bit overflows in constraints range handling
+      code. No effect on the code produced by the compiler.
+    * Compiler support for tagged and marked parametrized members.
+    * Empty tags to element map avoided.
+    * Compiled code GCC 4.x compatibility.
+
+0.9.14:    2005-Apr-29
+
+    * Fixed check-70.-fnative-integers.c test (it was failing
+      when no test directory was found).
+
+0.9.13:    2005-Apr-24
+
+    * Added extra const qualifiers into the support code.
+    * More RFC variations supported in crfc2asn1.pl.
+    * Refined string values compatibility. (Test cases 77, 78).
+    * Support for ContainedSubtype constraints. (Test case 16).
+    * Parsing support for CONSTRAINED BY. (Test case 79).
+    * Support for CharsDefn (Quadruple and Tuple, most used in
+      ASN1-CHARACTER-MODULE) (Test case 80).
+    * Pretty-printing support for WITH COMPONENT[S]. (Test case 82).
+    * Streamed OCTET STRING decoding of large values: fixed allocation
+      problem introduced in 0.9.9. (Severity: high; Security impact: medium)
+      Reported by Yann Grossel <olrick@users.sourceforge.net>.
+    * Fixed BASIC-XER encoding of REAL numbers.
+
+0.9.12:    2005-Mar-10
+
+    * Fixed a name clash in produced constraint checking code.
+    * #includes are now in single quotes (to solve a name
+      clash with system's <time.h> on a Win32 system).
+    * Small refinement of XML DTD generation (`asn1c -X`).
+    * Relaxed XER processing rules to skip extra whitespace
+      in some more places. It also skips XML comments (although
+      XML comments in XER are prohibited by X.693, #8.2.1).
+      (Test case 70) (Severity: medium; Security impact: none)
+      Reported by <Dominique.Nerriec@alcatel.fr>.
+    * Constraints on primitive types being defined are now supported.
+      (Test case 74) (Severity: low; Security impact: none)
+    * XMLValueList generation fixed for CHOICE type.
+      (Severity: medium; Security impact: none)
+    * Added the GSM TAP3 decoder into ./examples/sample.source.TAP3
+
+0.9.11:    2005-Mar-04
+
+    * Released -fcompound-names to fix the name clashes in the code
+      produced by the asn1c.
+    * Released -fno-include-deps to avoid #including non-critical
+      external dependencies.
+    * Compiler is taught to produce compilable code for yet another class
+      of circular ASN.1 type references.
+    * X.693:8.3.4 prohibits anything but SignedNumber; fixed XER codec.
+    * Fixed ENUMERATED identifier to value conversion in XER.
+      Reported by <jacque.celaire@caramail.com>.
+    * If the compiled file contents are the same as in already existing
+      file (left from previous compilation), the old file is retained.
+      This prevents thrashing `make` dependencies if amount of changes in
+      the original ASN.1 module(s) is small.
+
+0.9.10:    2005-Feb-25
+
+    * Completed the XER XMLValueList encoding and decoding.
+    * Native integer type is now using "long".
+    * Fixed #1150856. Reported by <vvvy@users.sourceforge.net>.
+    * Some WIN32 portability fixes.
+
+0.9.9:    2005-Feb-22
+
+    * First release of XER (XML) decoding implementation (somewhat
+      experimental).
+    * ANY allocation routine fixed.
+      Reported by <mikko.ahonen@elma.net>.
+    * Fixed tag parsing (tags like "[ 0 ]" were not supported).
+    * Compiler now checks for duplicate ASN.1 types across modules.
+
+0.9.8:    2005-Jan-17
+
+    * [NEW PLATFORM] Compiled and tested on Linux @ alpha64 (LP64).
+      Some code needed to be fixed regarding int-long conversions
+      (mostly inside the test suite), and floating point handling
+      code needed to be restructured to handle signalling NAN and
+      other floating point exceptions quietly. Smooth transition!
+    * [NEW PLATFORM] Compiled and tested on Sun Solaris 9 @ sparc.
+      Improved includes/defines of/for system headers.
+    * -X command line option added to asn1c to generate XML DTD.
+    * Empty SEQUENCE and SET clauses are now allowed.
+    * Removed confusion between &xNN; and &#xNN; in enber and unber.
+    * Removed order dependency in DEFAULT references to ENUMERATED
+      identifiers (./tests/68-*-OK.asn1).
+    * ber_dec_rval_t renamed into asn_dec_rval_t: more generality.
+    * Extensions in CHOICE types are properly marked as non-pointers
+      (Test case 59) (Severity: medium; Security impact: medium)
+      Reported by <roman.pfender@sdm.de>.
+    * Tagged CHOICE type is now supported again.
+      (Test case 59) (Severity: low; Security impact: low)
+      Reported by <orlinkata@dir.bg>.
+    * Implemented der_encode_to_buffer() procedure.
+
+0.9.7.1:    2004-Oct-12
+
+    * Fixed automatic tagging for extensions of compound types.
+    * Fixed ParametrizedReference parsing: {} are now recognized.
+
+0.9.7:    2004-Oct-11
+
+    * Finished CXER implementation by adding SET and SET OF canonical
+      ordering support.
+    * Fixed unber(1) limits controlling logic.
+    * Removed C99'izm from the x509dump, now understood by older compilers.
+    * Enhanced UTF8String constraint validation, now it checks
+      for the minimal encoding length; API of UTF8String_length() changed.
+    * Fixed SEQUENCE dealing with premature termination of the
+      optionals-laden indefinite length structure. The code was previously
+      refusing to parse such structures.
+    * Fixed explicitly tagged ANY type encoding and decoding
+      (Severity: medium; Security impact: low).
+    * Fixed CHOICE code spin when indefinite length structures appear
+      in the extensions (Severity: medium; Security impact: medium).
+      Reported by <siden@ul-gsm.ru>.
+    * BIT STRING now stores the number of unused octets in a separate field.
+
+0.9.6:    2004-Sep-29
+
+    * Added several security firewalls: decoder's stack usage control
+      and the stricter checking of the TLV length.
+    * Implemented BASIC-XER encoding support (X.693).
+    * Implemented unber(1) and enber(1) for BER<->XML translation.
+    * Implemented CGI for online ASN.1 compilation (asn1c/webcgi).
+    * Implemented the sample X.509 decoder (./examples/sample.source.PKIX1).
+    * NamedType is now supported for SET OF/SEQUENCE OF type.
+    * Added -fno-constraints option to asn1c, which disabled generation of
+      ASN.1 subtype constraints checking code.
+    * Added ASN1C_ENVIRONMENT_VERSION and get_asn1c_environment_version().
+    * Fixed ANY type decoding (Severity: high; Security impact: low).
+    * Fixed BER decoder restartability problem with certain primitive
+      types (BOOLEAN, INTEGER, and REAL). The problem occured when the
+      encoding of such type is split between several bytes.
+      (Severity: high; Security impact: low)
+    * Support for cross-referencing type definitions (updated ./tests/43-*).
+    * Fixed pretty-printing of the REAL type. Added lots of test cases.
+    * Renamed asn1_* into asn_* in function and type names.
+    * Updated documentation.
+
+0.9.5:    2004-Sep-17
+
+    * Fixed CER (common BER) decoder code. See check-25.c/VisibleString
+      case for details. X.690 specifies that inner structures in BER
+      encoding must be tagged by stripping off the outer tag for each
+      subsequent containment level. See also X.690: 8.21.5.4 and
+      the "Spouse" case in A.3.
+      (Severity: medium; Security impact: low)
+    * Added converters between any generic type and the ANY type.
+    * Parser fixed: Information Object Class fields may be taged.
+    * Parser fixed: tagged types inside SEQUENCE OF/SET OF support.
+    * Improved DEFAULT Value parsing and pretty-printing.
+    * Condition on distinct tags checker was incorrectly dealing with
+      tagged CHOICE types. Fixed. Modified tests/37-indirect-choice-OK.asn1
+    * Improved type name generation code ("struct foo" vs "foo_t").
+    * Fixed constraint checking code incorrectly dealing with imported
+      types with constraint values defined in other modules.
+    * Real REAL support! (Haven't tested denormals support yet!)
+      See skeletons/tests/check-REAL.c
+
+0.9.4:    2004-Sep-10
+
+    * More support for recursive type definitions.
+    * Explicit support for ANY type decoding.
+    * Refactored tags processing code.
+    * Fixed constraints checking code: non-exploitable buffer overflow.
+      (Severity: medium; Security impact: low)
+
+0.9.3:    2004-Sep-07
+
+    * Extended constraints support in parametrized types.
+    * Better support for parametrization and constraints handling.
+    * Better handling of recursive type definitions.
+    * Added support for ANY type.
+
+0.9.2:    2004-Aug-24
+
+    * More flexible subtype constraints handling, with relaxed
+      PER visibility rules for actual constraints checking code generator.
+    * Indirect references in constraints resolver code fixed.
+    * Avoided compilation warning on gcc 3.3.3 systems.
+    * Better ValueSet printing.
+
+0.9.1:    2004-Aug-23
+
+    * Documentation updated: doc/asn1c-usage.pdf
+    * Fixed OBJECT IDENTIFIER human-readable printing.
+      Reported by <siden@ul-gsm.ru>.
+
+0.9:    2004-Aug-23
+
+    * Reworked subtype constraints handling, aiming at PER-applicability.
+    * BOOLEAN and NULL are now implemented in terms of native int type.
+    * Compiler now links in only necessary skeleton files.
+    * -t option added to asn1c to ease manual BER/CER/DER decoding.
+    * Added support COMPONENTS OF construct.
+    * Numerous parser fixes and enhancements.
+    * Better constraint failure reporting.
+
+0.8.19:    2004-Aug-18
+
+    * Fixed BER encoder (problem encoding large tag values)
+      (Severity: medium; Security impact: low)
+
+0.8.18:    2004-Aug-12
+
+    * Parser: fixed multiple IMPORTS problem (incorrect assertion).
+    * Parser: constraints extensibility parsing fix.
+
+0.8.17:    2004-Aug-11
+
+    * Improved compiler output: duplicate #includes eliminated.
+    * Win32 portability fixes.
+    * More compatibility with C++ or non-GCC compilers.
+
+0.8.16:    2004-Jul-22
+
+    * Fixed application-level problem in SET OF/SEQUENCE OF array cleanup.
+      (Severity: medium; Security impact: low)
+    * Improved asn_GT2time() and added asn_time2{GT,UT}() functions.
+    * BIT STRING pretty-printing.
+
+0.8.15:    2004-Jul-20
+
+    * Fixed parser: memory leak in free_struct code for SET OF/SEQUENCE OF.
+      (Severity: high; Security impact: medium)
+    * Fixed parser: invalid memory reference in code constructing tags.
+      (Test case 48) (Severity: high; Security impact: medium)
+      When encoding data for certain ASN.1 specifications containing
+      explicit tags, the tag is always written incorrectly due to
+      incorrect memory reference. The encoding will almost always produce
+      unparseable data and might well reference unmapped region so program
+      would produce segmentation violation. Fortunately, memory is
+      read, not written, so remote exploits cannot execute arbitrary
+      code and triggering unmapped memory reference is highly unlikely
+      even it attacker knows the code (basically, the compiler should place
+      asn1_DEF_... right before the end of the mapped memory region, which
+      is extremely rare).
+    * Improved INTEGER type printing.
+
+0.8.14:    2004-Jun-30
+
+    * Fixed compiler: extensibility of CHOICE and SET type has not been
+      taken into account during table construction.
+      (Test case 47) (Severity: high; Security impact: low)
+
+0.8.13:    2004-Jun-29
+
+    * Fixed compiler: the skip values for IMPLICIT tagging were broken
+      in some complex cases where one type is defined using another.
+      (Test case 46) (Severity: medium; Security impact: low).
+    * Added -fknown-extern-type command line parameter to asn1c.
+    * Removed -N command line flag and underlying functionality
+      to honor KISS principle.
+
+0.8.12:    2004-Jun-17
+
+    * RELATIVE-OID and OBJECT IDENTIFIER encoders/decoders are not bound
+      anymore to an integer type of specific size (unsigned long). The
+      size of an integer must be provided explicitly.
+      See {OBJECT_IDENTIFIER|RELATIVE_OID}_{get|set}_arcs().
+    * SEQUENCE BER decoder fixed again for complex CHOICE case
+      (Test case 44) (Severity: medium; Security impact: low).
+
+0.8.11:    2004-Jun-05
+
+    * Enforced stricter conformance with C standards.
+    * SEQUENCE BER decoder is now equipped with the sorted map
+      in case of complex CHOICE descendants. Test case 44 created.
+
+0.8.10:    2004-Jun-02
+
+    * Added const qualifier where necessary.
+    * Changed position of outmost_tag fetcher within asn1_TYPE_descriptor_t
+      structure.
+
+0.8.9:    2004-May-26
+
+    * Added *_{get|set}_arcs_*() functions for OBJECT IDENTIFIER
+      and RELATIVE-OID, together with test cases.
+
+0.8.8:    2004-May-09
+
+    * Introduced subtype constraints support (incomplete!).
+    * Fixed compiler. If the last member of the SEQUENCE is OPTIONAL
+      and absent in the encoding, and the type is extensible (...) or
+      EXTENSIBILITY IMPLIED flag is set, then the structure could not
+      be correctly decoded. (Severity: high; Security impact: low).
+    * Compiler: fixed recursive ASN.1 types inclusion (Severity: low,
+      Security impact: none).
+    * Parser: IMPORTS/FROM fixes, now allowing multiple sections.
+    * NEW PLATFORM: Compiled and tested on MacOS X (@ PowerPC).
+      No major portability issues experienced.
+
+0.8.7:    2004-Apr-11    T-version-0-8-7
+
+    * Fixed SEQUENCE BER decoder: if the last member of the SEQUENCE is
+      OPTIONAL and absent in the encoding, RC_FAIL was returned instead
+      of RC_OK (Severity: high; Security impact: low).
+    * Added test case to check the above problem.
+    * Added test case to check -fnative-integers mode.
+
+0.8.6:    2004-Apr-03    T-version-0-8-6
+
+    * Fixed compiler output for embedded ASN.1 structures.
+
+0.8.5:    2004-Mar-28    T-version-0-8-5
+
+    * Fixed ber_tlv_length() computation problem (Severity: high,
+      Security impact: none).
+      Reported by <vss@high.net.ru>
+
+0.8.4:    2004-Mar-22
+
+    * Removed RC_ITAG enumeration element from BER decoder.
+      This return code did not have much practical value.
+
+0.8.3:    2004-Mar-14    T-version-0-8-3
+
+    * Fixed SET::BER decoder: restart after reaching a buffer boundary
+      weas broken (Severity: high; Security impact: low).
+    * Fixed OCTET STRING::BER decoder: restart after reaching a buffer
+      boundary was broken (Severity: high; Security impact: low).
+      Reported by <vss@high.net.ru>
+    * Added test cases to check decoders restartability.
+    * Slightly more general INTEGER2long decoder.
+    * Allowed nested /* C-type */ comments, as per X.680:2002.
+
+0.8.2:    2004-Mar-01    T-version-0-8-2
+
+    * Fixed SEQUENCE BER decoder: an OPTIONAL element was required, where
+      should not have been (Severity: major; Security impact: low).
+    * Fixed print_struct pointer inheritance.
+    * Added -fno-c99 and -funnamed-unions
+
+0.8.1:    2004-Feb-22
+
+    * -R switch to asn1c: Omit support code, compile only the tables.
+    * Introduced NativeInteger pseudotype.
+    * Corrected the informal print_struct()'s output format.
+
+0.8.0:    2004-Feb-03    T-version-0-8-0
+
+    * Some documentation is created (a .pdf and a short manual page).
+    * Last touches to the code.
+
+0.7.9:    2004-Feb-01    T-version-0-7-9
+
+    * Human readable printing support.
+    * Support for implicit (standard) constraints.
+
+0.7.8:    2004-Jan-31
+
+    * SET now rejects duplicate fields in the data stream.
+
+0.7.7:    2004-Jan-25
+
+    * Added types: GeneralizedTime and UTCTime.
+
+0.7.6:    2004-Jan-24    T-version-0-7-6
+
+    * DER encoding of a SET OF now involves dynamic sorting.
+
+0.7.5:    2004-Jan-24    T-version-0-7-5
+
+    * DER encoding of a SET with untagged CHOICE
+      now involves dynamic sorting.
+
+0.7.0:    2004-Jan-19    T-version-0-7-0
+
+    * A bunch of DER encoders is implemented.
+
+0.6.6:    2004-Jan-11
+
+    * Implemented CHOICE decoder.
+    * Implemented destructors support.
+
+0.6.5:    2004-Jan-03
+
+    * Implemented SET decoder.
+    * Implemented SET OF and SEQUENCE OF decoders.
+
+0.6.4:    2003-Dec-31
+
+    * Implemented BOOLEAN, NULL, ENUMERATED decoders.
+    * Implemented OCTET STRING decoder.
+    * Implemented BIT STRING decoder.
+
+0.6:    2003-Dec-30
+
+    * First decoding of a BER-encoded structure!
+
+0.5:    2003-Dec-28
+
+    * Framework and most of the compiler backbone coding done.
+
+0.1:    2003-Nov-28
+
+    * Programming started.
+
+=== Bug importance disclosure terms ===
+
+SEVERITY.
+    This term applies to the frequence the particular construct is used
+    in the real world. The higher the frequency, the more chances of triggering
+    this bug.
+    low:    The ASN.1 specifications which could trigger
+            this kind of bug are not widespread.
+    medium: The particular ASN.1 construct is used quite often,
+            so the chance of triggering an error is considerable.
+    high:   This fix is considered urgent, or the particular ASN.1
+            construct triggering this bug is in wide use.
+
+SECURITY IMPACT.
+    This term applies to the amount of potential damage a bug exploitation
+    could cause.
+    none:   No malicious exploitation is possible.
+    low:    The local exploitation is unlikely; the remote exploitation
+            is not possible.
+    medium: The remote exploitation is possible when a particular ASN.1
+            construct is being used. If possible, only hard failure, spin
+            or memory leak are the possible outcome: no shellcode
+            injection could possibly be carried by the attack.
+    high:   The remote shellcode injection is possible, or the bug is
+            otherwise remotely exploitable for most specifications.
+
diff --git a/FAQ b/FAQ
new file mode 100644 (file)
index 0000000..c07fa81
--- /dev/null
+++ b/FAQ
@@ -0,0 +1,27 @@
+
+1.Q: Is it possible to build the asn1c compiler on Win32?
+1.A:
+       At this point, the asn1c source code is tied to GCC-specific
+       extensions in several key places. The CYGWIN environment with
+       gcc compiler may be what are you looking for.
+
+       Please also consider using the Online ASN.1 compiler at
+               http://lionet.info/asn1c
+       which generates platform-independent code.
+
+
+2.Q: How to build a simplest BER (XER) encoder or decoder?
+2.A:
+       Please check the "Quick Start Guide" on ./doc/asn1c-quick.pdf
+       Please check the "Examples" section of ./doc/asn1c-usage.pdf
+
+       Also, try the following to build the X.509v3 parser:
+
+               cd ./examples/sample.source.PKIX1
+               make
+               ./x509dump -h
+
+
+-- 
+Lev Walkin
+vlm@lionet.info
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644 (file)
index 0000000..ba5c6bf
--- /dev/null
@@ -0,0 +1,66 @@
+
+## Compiling From Sources
+
+### Configure
+
+See [REQUIREMENTS.md](REQUIREMENTS.md) for the complete list of dependencies.
+
+Configure with the default settings:
+
+    autoreconf -iv
+    ./configure
+    make
+
+Configure with non-standard settings:
+
+asn1c-specific ./configure options include:
+
+  Option                 | Description
+------------------------ | ---------------------------------------------------
+  --enable-ASN_DEBUG     | produce debug log during `make check` testing
+  --enable-code-coverage | whether to enable code coverage support
+  --enable-Werror        | abort compilation after any C compiler warning
+  --enable-test-Werror   | abort compiling tests after any C compiler warning
+  --enable-test-32bit    | enable tests for 32-bit compatibility
+  --disable-test-ubsan   | disable Undefined Behavior Sanitizer for tests
+  --disable-test-asan    | disable Address Sanitizer for tests
+  --enable-test-fuzzer   | enable LLVM LibFuzzer for randomized testing
+
+invoke `./configure --help` for details.
+
+### Build
+
+Build the libraries and the compiler:
+
+    make
+
+Ensure asn1c is still behaving well after compiling on your platform:
+
+    make check
+
+### Install
+
+Install the compiler into a standard location:
+
+    make install
+    # Use ./configure --prefix to override install location.
+
+Display the `asn1c` manual page:
+
+    man asn1c
+
+## Quick Usage Guide
+
+For a usage guide and more information please refer to:
+
+ * the [README.md](README.md) file
+ * the asn1c manual page `man asn1c`
+ * the included quick start PDF [doc/asn1c-quick.pdf](doc/asn1c-quick.pdf)
+ * the comprehensive usage documentation [doc/asn1c-usage.pdf](doc/asn1c-usage.pdf)
+
+In case of any difficulties with installing the compiler, consider using
+the Online ASN.1 Compiler at http://lionet.info/asn1c.
+
+-- 
+Lev Walkin
+vlm@lionet.info
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..306464b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2003-2017  Lev Walkin <vlm@lionet.info> and contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..8ad520e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,1010 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+       $(am__configure_deps) $(am__DIST_COMMON)
+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 =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docsdir)"
+DATA = $(docs_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+       $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(top_srcdir)/config/ar-lib $(top_srcdir)/config/compile \
+       $(top_srcdir)/config/config.guess \
+       $(top_srcdir)/config/config.sub \
+       $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+       $(top_srcdir)/config/missing AUTHORS ChangeLog config/ar-lib \
+       config/compile config/config.guess config/config.sub \
+       config/install-sh config/ltmain.sh config/missing
+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
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+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 = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c
+abs_srcdir = /home/nokia/mouse07410/asn1c
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = 
+top_builddir = .
+top_srcdir = .
+ACLOCAL_AMFLAGS = -I m4
+CODE_COVERAGE_IGNORE_PATTERN = "tests/*" "lex.yy.c" "y.tab.c" "asn1p_l.l" "asn1p_y.y"
+SUBDIRS = \
+    libasn1common libasn1parser \
+    libasn1fix libasn1print     \
+    libasn1compiler             \
+    asn1c skeletons tests       \
+    examples doc
+
+docsdir = $(datadir)/doc/asn1c
+docs_DATA = README.md INSTALL.md REQUIREMENTS.md FAQ ChangeLog BUGS
+EXTRA_DIST = README.md INSTALL.md REQUIREMENTS.md FAQ LICENSE BUGS
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(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
+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;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @test -f $@ || rm -f stamp-h1
+       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+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:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+install-docsDATA: $(docs_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docsdir)" || 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)$(docsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docsdir)" || exit $$?; \
+       done
+
+uninstall-docsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docsdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscope: cscope.files
+       test ! -s cscope.files \
+         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+       -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+       $(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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -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__post_remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__post_remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+       $(am__post_remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+       $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__post_remove_distdir)
+
+dist-shar: distdir
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__post_remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__post_remove_distdir)
+
+dist dist-all:
+       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+       $(am__post_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.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 $(distdir)/_build/sub $(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/sub \
+         && ../../configure \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+           --srcdir=../.. --prefix="$$dc_install_base" \
+         && $(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__post_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
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(docsdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-docsDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-docsDATA
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+       am--refresh check check-am clean clean-cscope clean-generic \
+       clean-libtool cscope cscopelist-am ctags ctags-am dist \
+       dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
+       dist-xz dist-zip distcheck distclean distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-data install-data-am \
+       install-docsDATA install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-docsDATA
+
+.PRECIOUS: Makefile
+
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+# 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:
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..4389e53
--- /dev/null
@@ -0,0 +1,18 @@
+
+ACLOCAL_AMFLAGS = -I m4
+
+@CODE_COVERAGE_RULES@
+CODE_COVERAGE_IGNORE_PATTERN="tests/*" "lex.yy.c" "y.tab.c" "asn1p_l.l" "asn1p_y.y"
+
+SUBDIRS =                       \
+    libasn1common libasn1parser \
+    libasn1fix libasn1print     \
+    libasn1compiler             \
+    asn1c skeletons tests       \
+    examples doc
+
+docsdir = $(datadir)/doc/asn1c
+
+docs_DATA = README.md INSTALL.md REQUIREMENTS.md FAQ ChangeLog BUGS
+
+EXTRA_DIST = README.md INSTALL.md REQUIREMENTS.md FAQ LICENSE BUGS
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..f396af6
--- /dev/null
@@ -0,0 +1,912 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+       $(am__configure_deps) $(am__DIST_COMMON)
+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 =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docsdir)"
+DATA = $(docs_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+       $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(top_srcdir)/config/ar-lib $(top_srcdir)/config/compile \
+       $(top_srcdir)/config/config.guess \
+       $(top_srcdir)/config/config.sub \
+       $(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+       $(top_srcdir)/config/missing AUTHORS ChangeLog config/ar-lib \
+       config/compile config/config.guess config/config.sub \
+       config/install-sh config/ltmain.sh config/missing
+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
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+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@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+ACLOCAL_AMFLAGS = -I m4
+CODE_COVERAGE_IGNORE_PATTERN = "tests/*" "lex.yy.c" "y.tab.c" "asn1p_l.l" "asn1p_y.y"
+SUBDIRS = \
+    libasn1common libasn1parser \
+    libasn1fix libasn1print     \
+    libasn1compiler             \
+    asn1c skeletons tests       \
+    examples doc
+
+docsdir = $(datadir)/doc/asn1c
+docs_DATA = README.md INSTALL.md REQUIREMENTS.md FAQ ChangeLog BUGS
+EXTRA_DIST = README.md INSTALL.md REQUIREMENTS.md FAQ LICENSE BUGS
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(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
+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;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @test -f $@ || rm -f stamp-h1
+       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+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:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+install-docsDATA: $(docs_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docsdir)" || 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)$(docsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docsdir)" || exit $$?; \
+       done
+
+uninstall-docsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docsdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscope: cscope.files
+       test ! -s cscope.files \
+         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+       -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+       $(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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -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__post_remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__post_remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+       $(am__post_remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+       $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__post_remove_distdir)
+
+dist-shar: distdir
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__post_remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__post_remove_distdir)
+
+dist dist-all:
+       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+       $(am__post_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.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 $(distdir)/_build/sub $(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/sub \
+         && ../../configure \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+           --srcdir=../.. --prefix="$$dc_install_base" \
+         && $(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__post_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
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(docsdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-docsDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-docsDATA
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+       am--refresh check check-am clean clean-cscope clean-generic \
+       clean-libtool cscope cscopelist-am ctags ctags-am dist \
+       dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
+       dist-xz dist-zip distcheck distclean distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-data install-data-am \
+       install-docsDATA install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-docsDATA
+
+.PRECIOUS: Makefile
+
+
+@CODE_COVERAGE_RULES@
+
+# 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:
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..7940eda
--- /dev/null
+++ b/README.md
@@ -0,0 +1,128 @@
+# About
+
+ASN.1 to C compiler takes the ASN.1 module files (example) and generates
+the C++ compatible C source code. That code can be used to serialize
+the native C structures into compact and unambiguous BER/OER/PER/XER-based
+data files, and deserialize the files back.
+
+Various ASN.1 based formats are widely used in the industry,
+such as to encode the X.509 certificates employed in the HTTPS handshake,
+to exchange control data between mobile phones and cellular networks,
+to perform car-to-car communication in intelligent transportation networks.
+
+The ASN.1 family of standards is large and complex, and no open source
+compiler supports it in its entirety.
+The asn1c is arguably the most evolved open source ASN.1 compiler.
+
+# ASN.1 Transfer Syntaxes
+<details>
+<summary>ASN.1 encodings interoperability table</summary>
+
+The ASN.1 family of standards define a number of ways to encode data,
+including byte-oriented (e.g., BER), bit-oriented (e.g., PER),
+and textual (e.g., XER). Some encoding variants (e.g., DER) are just stricter
+variants of the more general encodings (e.g., BER).
+
+The interoperability table below specifies which API functions can be used
+to exchange data in a compatible manner. If you need to _produce_ data
+conforming to the standard specified in the column 1,
+use the API function in the column 2.
+If you need to _process_ data conforming to the standard(s) specified in the
+column 3, use the API function specified in column 4.
+See the [doc/asn1c-usage.pdf](doc/asn1c-usage.pdf) for details.
+
+Encoding       | API function       | Understood by | API function
+-------------- | ------------------ | ------------- | -------------
+BER            | der_encode()       | BER           | ber_decode()
+DER            | der_encode()       | DER, BER      | ber_decode()
+CER            | _not supported_    | CER, BER      | ber_decode()
+BASIC-OER      | oer_encode()       | *-OER         | oer_decode()
+CANONICAL-OER  | oer_encode()       | *-OER         | oer_decode()
+BASIC-UPER     | uper_encode()      | *-UPER        | uper_decode()
+CANONICAL-UPER | uper_encode()      | *-UPER        | uper_decode()
+*-APER         | _not supported_    | *-APER        | _not supported_
+BASIC-XER      | xer_encode(XER_F_BASIC)    | *-XER | xer_decode()
+CANONICAL-XER  | xer_encode(XER_F_CANONICAL)| *-XER | xer_decode()
+
+*) Asterisk means both BASIC and CANONICAL variants.
+</details>
+
+# Build and Install
+
+If you haven't installed the asn1c yet, read the [INSTALL.md](INSTALL.md) file
+for a short installation guide.
+
+[![Build Status](https://travis-ci.org/vlm/asn1c.svg?branch=master)](https://travis-ci.org/vlm/asn1c)
+
+# Documentation
+
+For the list of asn1c command line options, see `asn1c -h` or `man asn1c`.
+
+The comprehensive documentation on this compiler is in [doc/asn1c-usage.pdf](doc/asn1c-usage.pdf).
+
+Please also read the [FAQ](FAQ) file.
+
+An excellent book on ASN.1 is written by Olivier Dubuisson:
+"ASN.1 Communication between heterogeneous systems", ISBN:0-12-6333361-0.
+
+# Quick start
+
+(also check out [doc/asn1c-quick.pdf](doc/asn1c-quick.pdf))
+
+After installing the compiler (see [INSTALL.md](INSTALL.md)), you may use
+the asn1c command to compile the ASN.1 specification:
+
+    asn1c <module.asn1>                         # Compile module
+
+If several specifications contain interdependencies, all of them must be
+specified at the same time:
+
+    asn1c <module1.asn1> <module2.asn1> ...     # Compile interdependent modules
+
+The asn1c source tarball contains the [examples/](examples/) directory
+with several ASN.1 modules and a [script](examples/crfc2asn1.pl)
+to extract the ASN.1 modules from RFC documents.
+Refer to the [examples/README](examples/README) file in that directory.
+
+To compile the X.509 PKI module:
+
+    ./asn1c/asn1c -P ./examples/rfc3280-*.asn1  # Compile-n-print
+
+In this example, the **-P** option is to print the compiled text on the
+standard output. The default behavior is that asn1c compiler creates
+multiple .c and .h files for every ASN.1 type found inside the specified
+ASN.1 modules.
+
+The compiler's **-E** and **-EF** options are used for testing the parser and
+the semantic fixer, respectively. These options will instruct the compiler
+to dump out the parsed (and fixed) ASN.1 specification as it was
+"understood" by the compiler. It might be useful for checking
+whether a particular syntactic construction is properly supported
+by the compiler.
+
+    asn1c -EF <module-to-test.asn1>             # Check semantic validity
+
+# Model of operation
+
+The asn1c compiler works by processing the ASN.1 module specifications
+in several stages:
+
+1. During the first stage, the ASN.1 file is parsed.
+   (Parsing produces an ASN.1 syntax tree for the subsequent levels)
+2. During the second stage, the syntax tree is "fixed".
+   (Fixing is a process of checking the tree for semantic errors,
+   accompanied by the tree transformation into the canonical form)
+3. During the third stage, the syntax tree is compiled into the target language.
+
+There are several command-line options reserved for printing the results
+after each stage of operation:
+
+    <parser> => print                                       (-E)
+    <parser> => <fixer> => print                            (-E -F)
+    <parser> => <fixer> => <compiler> => print              (-P)
+    <parser> => <fixer> => <compiler> => save-compiled      [default]
+
+
+-- 
+Lev Walkin
+vlm@lionet.info
diff --git a/REQUIREMENTS.md b/REQUIREMENTS.md
new file mode 100644 (file)
index 0000000..16b27cc
--- /dev/null
@@ -0,0 +1,29 @@
+
+## To compile asn1c compiler itself
+
+A 64-bit build system is strongly recommended for asn1c operation.
+
+A working C99 compiler is required to compile asn1c itself,
+such as gcc-4.x or clang-3.4. The asn1c compiler produces C90-compatible code,
+which is also upward compatible with C++.
+
+### Packages
+
+This notation specifies a minimum required package version (-ver)
+or an exact version (=ver). For example, bison=2.x requires the 2.x branch
+of bison, not 3.x.
+
+ * automake-1.15
+ * libtool
+ * bison=2.x
+ * flex
+
+## To compile asn1c-generated code
+
+C:
+As a minimum, a compiler supporting the C90. Pretty much any modern C compiler
+will do, but gcc or clang is recommended. Note that MSVC++ is not a C compiler.
+
+C++:
+A C++11 compliant compiler is recommended.
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..593dbda
--- /dev/null
@@ -0,0 +1,1238 @@
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+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-2014 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.
+
+# 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.15'
+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.15], [],
+      [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.15])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Copyright (C) 2011-2014 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.
+
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the archiver interface, and trigger the ar-lib wrapper
+# if it is needed.  If the detection of archiver interface fails, run
+# ACT-IF-FAIL (default is to abort configure with a proper error message).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+  [AC_LANG_PUSH([C])
+   am_cv_ar_interface=ar
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([am_ar_try])
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+        AC_TRY_EVAL([am_ar_try])
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     ])
+   AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  m4_default([$1],
+             [AC_MSG_ERROR([could not determine $AR interface])])
+  ;;
+esac
+AC_SUBST([AR])dnl
+])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 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.
+
+# 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],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 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.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$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-2014 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.
+
+
+# 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", "OBJC", "OBJCXX", "UPC", or "GJC".
+# 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
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh.
+      echo '/* dummy */' > 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], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+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-2014 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.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Older Autoconf 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"`
+    # 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'`; 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-2014 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 macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# 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.65])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],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [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([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver).  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])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+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-2014 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.
+
+# 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+set}" != 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-2014 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.
+
+# 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])])
+
+# Copyright (C) 1998-2014 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.
+
+# AM_PROG_LEX
+# -----------
+# Autoconf leaves LEX=: if lex or flex can't be found.  Change that to a
+# "missing" invocation, for better error output.
+AC_DEFUN([AM_PROG_LEX],
+[AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 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.
+
+# 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
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 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.
+
+# 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 is modern enough.
+# If it is, 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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 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.
+
+# _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])])
+
+# Copyright (C) 1999-2014 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.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != 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
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2014 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.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 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.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2014 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.
+
+# 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], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+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-2014 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.
+
+# 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-2014 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.
+
+# _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-2014 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.
+
+# _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}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  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])
+      AM_RUN_LOG([cat conftest.dir/file])
+      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/ax_check_compile_and_link_flag.m4])
+m4_include([m4/ax_check_compile_flag.m4])
+m4_include([m4/ax_code_coverage.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/asn1c/.deps/asn1c.Po b/asn1c/.deps/asn1c.Po
new file mode 100644 (file)
index 0000000..1081cba
--- /dev/null
@@ -0,0 +1,244 @@
+asn1c.o: asn1c.c /usr/include/stdc-predef.h sys-common.h ../config.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/sysexits.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1fix/asn1fix.h ../libasn1print/asn1print.h \
+ ../libasn1compiler/asn1compiler.h ../libasn1fix/asn1fix_export.h \
+ ../libasn1fix/asn1fix_tags.h ../libasn1compiler/asn1c_compat.h \
+ /usr/include/dirent.h /usr/include/x86_64-linux-gnu/bits/dirent.h \
+ /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h
+
+/usr/include/stdc-predef.h:
+
+sys-common.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/sysexits.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1fix/asn1fix.h:
+
+../libasn1print/asn1print.h:
+
+../libasn1compiler/asn1compiler.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
+
+../libasn1compiler/asn1c_compat.h:
+
+/usr/include/dirent.h:
+
+/usr/include/x86_64-linux-gnu/bits/dirent.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
diff --git a/asn1c/.deps/enber.Po b/asn1c/.deps/enber.Po
new file mode 100644 (file)
index 0000000..97f01ee
--- /dev/null
@@ -0,0 +1,335 @@
+enber.o: enber.c /usr/include/stdc-predef.h sys-common.h ../config.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/sysexits.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../skeletons/asn_application.h ../skeletons/asn_system.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \
+ /usr/include/x86_64-linux-gnu/sys/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/socket.h \
+ /usr/include/x86_64-linux-gnu/bits/socket_type.h \
+ /usr/include/x86_64-linux-gnu/bits/sockaddr.h \
+ /usr/include/x86_64-linux-gnu/asm/socket.h \
+ /usr/include/asm-generic/socket.h \
+ /usr/include/x86_64-linux-gnu/asm/sockios.h \
+ /usr/include/asm-generic/sockios.h \
+ /usr/include/x86_64-linux-gnu/bits/socket2.h \
+ /usr/include/x86_64-linux-gnu/bits/in.h ../skeletons/asn_codecs.h \
+ ../skeletons/constr_TYPE.h ../skeletons/ber_tlv_length.h \
+ ../skeletons/ber_tlv_tag.h ../skeletons/ber_decoder.h \
+ ../skeletons/der_encoder.h ../skeletons/xer_decoder.h \
+ ../skeletons/xer_encoder.h ../skeletons/per_decoder.h \
+ ../skeletons/per_support.h ../skeletons/asn_system.h \
+ ../skeletons/asn_bit_data.h ../skeletons/per_encoder.h \
+ ../skeletons/constraints.h ../skeletons/asn_random_fill.h \
+ ../skeletons/oer_decoder.h ../skeletons/oer_support.h \
+ ../skeletons/oer_encoder.h ../skeletons/constraints.c \
+ ../skeletons/asn_internal.h ../skeletons/asn_application.h \
+ ../skeletons/ber_tlv_tag.c ../skeletons/ber_tlv_length.c
+
+/usr/include/stdc-predef.h:
+
+sys-common.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/sysexits.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../skeletons/asn_application.h:
+
+../skeletons/asn_system.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/netinet/in.h:
+
+/usr/include/x86_64-linux-gnu/sys/socket.h:
+
+/usr/include/x86_64-linux-gnu/sys/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket_type.h:
+
+/usr/include/x86_64-linux-gnu/bits/sockaddr.h:
+
+/usr/include/x86_64-linux-gnu/asm/socket.h:
+
+/usr/include/asm-generic/socket.h:
+
+/usr/include/x86_64-linux-gnu/asm/sockios.h:
+
+/usr/include/asm-generic/sockios.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket2.h:
+
+/usr/include/x86_64-linux-gnu/bits/in.h:
+
+../skeletons/asn_codecs.h:
+
+../skeletons/constr_TYPE.h:
+
+../skeletons/ber_tlv_length.h:
+
+../skeletons/ber_tlv_tag.h:
+
+../skeletons/ber_decoder.h:
+
+../skeletons/der_encoder.h:
+
+../skeletons/xer_decoder.h:
+
+../skeletons/xer_encoder.h:
+
+../skeletons/per_decoder.h:
+
+../skeletons/per_support.h:
+
+../skeletons/asn_system.h:
+
+../skeletons/asn_bit_data.h:
+
+../skeletons/per_encoder.h:
+
+../skeletons/constraints.h:
+
+../skeletons/asn_random_fill.h:
+
+../skeletons/oer_decoder.h:
+
+../skeletons/oer_support.h:
+
+../skeletons/oer_encoder.h:
+
+../skeletons/constraints.c:
+
+../skeletons/asn_internal.h:
+
+../skeletons/asn_application.h:
+
+../skeletons/ber_tlv_tag.c:
+
+../skeletons/ber_tlv_length.c:
diff --git a/asn1c/.deps/unber.Po b/asn1c/.deps/unber.Po
new file mode 100644 (file)
index 0000000..7779b79
--- /dev/null
@@ -0,0 +1,355 @@
+unber.o: unber.c /usr/include/stdc-predef.h sys-common.h ../config.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/sysexits.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../skeletons/asn_application.h ../skeletons/asn_system.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \
+ /usr/include/x86_64-linux-gnu/sys/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/socket.h \
+ /usr/include/x86_64-linux-gnu/bits/socket_type.h \
+ /usr/include/x86_64-linux-gnu/bits/sockaddr.h \
+ /usr/include/x86_64-linux-gnu/asm/socket.h \
+ /usr/include/asm-generic/socket.h \
+ /usr/include/x86_64-linux-gnu/asm/sockios.h \
+ /usr/include/asm-generic/sockios.h \
+ /usr/include/x86_64-linux-gnu/bits/socket2.h \
+ /usr/include/x86_64-linux-gnu/bits/in.h ../skeletons/asn_codecs.h \
+ ../skeletons/constr_TYPE.h ../skeletons/ber_tlv_length.h \
+ ../skeletons/ber_tlv_tag.h ../skeletons/ber_decoder.h \
+ ../skeletons/der_encoder.h ../skeletons/xer_decoder.h \
+ ../skeletons/xer_encoder.h ../skeletons/per_decoder.h \
+ ../skeletons/per_support.h ../skeletons/asn_system.h \
+ ../skeletons/asn_bit_data.h ../skeletons/per_encoder.h \
+ ../skeletons/constraints.h ../skeletons/asn_random_fill.h \
+ ../skeletons/constraints.c ../skeletons/asn_internal.h \
+ ../skeletons/asn_application.h ../skeletons/ber_tlv_tag.c \
+ ../skeletons/ber_tlv_length.c ../skeletons/INTEGER.c \
+ ../skeletons/INTEGER.h ../skeletons/asn_codecs_prim.h \
+ ../skeletons/OBJECT_IDENTIFIER.c ../skeletons/OBJECT_IDENTIFIER.h \
+ ../skeletons/OCTET_STRING.h ../skeletons/RELATIVE-OID.c \
+ ../skeletons/RELATIVE-OID.h ../skeletons/asn_codecs_prim.c \
+ ../libasn1parser/asn1p_integer.c ../skeletons/asn_internal.c
+
+/usr/include/stdc-predef.h:
+
+sys-common.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/sysexits.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../skeletons/asn_application.h:
+
+../skeletons/asn_system.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/netinet/in.h:
+
+/usr/include/x86_64-linux-gnu/sys/socket.h:
+
+/usr/include/x86_64-linux-gnu/sys/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket_type.h:
+
+/usr/include/x86_64-linux-gnu/bits/sockaddr.h:
+
+/usr/include/x86_64-linux-gnu/asm/socket.h:
+
+/usr/include/asm-generic/socket.h:
+
+/usr/include/x86_64-linux-gnu/asm/sockios.h:
+
+/usr/include/asm-generic/sockios.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket2.h:
+
+/usr/include/x86_64-linux-gnu/bits/in.h:
+
+../skeletons/asn_codecs.h:
+
+../skeletons/constr_TYPE.h:
+
+../skeletons/ber_tlv_length.h:
+
+../skeletons/ber_tlv_tag.h:
+
+../skeletons/ber_decoder.h:
+
+../skeletons/der_encoder.h:
+
+../skeletons/xer_decoder.h:
+
+../skeletons/xer_encoder.h:
+
+../skeletons/per_decoder.h:
+
+../skeletons/per_support.h:
+
+../skeletons/asn_system.h:
+
+../skeletons/asn_bit_data.h:
+
+../skeletons/per_encoder.h:
+
+../skeletons/constraints.h:
+
+../skeletons/asn_random_fill.h:
+
+../skeletons/constraints.c:
+
+../skeletons/asn_internal.h:
+
+../skeletons/asn_application.h:
+
+../skeletons/ber_tlv_tag.c:
+
+../skeletons/ber_tlv_length.c:
+
+../skeletons/INTEGER.c:
+
+../skeletons/INTEGER.h:
+
+../skeletons/asn_codecs_prim.h:
+
+../skeletons/OBJECT_IDENTIFIER.c:
+
+../skeletons/OBJECT_IDENTIFIER.h:
+
+../skeletons/OCTET_STRING.h:
+
+../skeletons/RELATIVE-OID.c:
+
+../skeletons/RELATIVE-OID.h:
+
+../skeletons/asn_codecs_prim.c:
+
+../libasn1parser/asn1p_integer.c:
+
+../skeletons/asn_internal.c:
diff --git a/asn1c/Makefile b/asn1c/Makefile
new file mode 100644 (file)
index 0000000..c5c9e17
--- /dev/null
@@ -0,0 +1,1176 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# asn1c/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+bin_PROGRAMS = asn1c$(EXEEXT) unber$(EXEEXT) enber$(EXEEXT)
+subdir = asn1c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(noinst_HEADERS) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+asn1c_SOURCES = asn1c.c
+asn1c_OBJECTS = asn1c.$(OBJEXT)
+asn1c_DEPENDENCIES = $(top_builddir)/libasn1common/libasn1common.la \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1print/libasn1print.la \
+       $(top_builddir)/libasn1fix/libasn1fix.la \
+       $(top_builddir)/libasn1compiler/libasn1compiler.la
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+enber_SOURCES = enber.c
+enber_OBJECTS = enber.$(OBJEXT)
+enber_LDADD = $(LDADD)
+unber_SOURCES = unber.c
+unber_OBJECTS = unber.$(OBJEXT)
+unber_DEPENDENCIES = $(top_builddir)/libasn1common/libasn1common.la
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = asn1c.c enber.c unber.c
+DIST_SOURCES = asn1c.c enber.c unber.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/asn1c
+abs_srcdir = /home/nokia/mouse07410/asn1c/asn1c
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+AM_CPPFLAGS = \
+    -I${top_srcdir}/libasn1compiler \
+    -I${top_srcdir}/libasn1common   \
+    -I${top_srcdir}/libasn1parser   \
+    -I${top_srcdir}/libasn1print    \
+    -I${top_srcdir}/libasn1fix      \
+    -I${top_srcdir}/skeletons       \
+    -DDATADIR=\"$(pkgdatadir)\"
+
+asn1c_LDADD = \
+    $(top_builddir)/libasn1common/libasn1common.la      \
+    $(top_builddir)/libasn1parser/libasn1parser.la      \
+    $(top_builddir)/libasn1print/libasn1print.la        \
+    $(top_builddir)/libasn1fix/libasn1fix.la            \
+    $(top_builddir)/libasn1compiler/libasn1compiler.la
+
+unber_LDADD = \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+noinst_HEADERS = sys-common.h
+dist_check_SCRIPTS = check-xxber.sh
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-xxber.*.tmp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign asn1c/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign asn1c/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+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 \
+        || test -f $$p1 \
+         ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+asn1c$(EXEEXT): $(asn1c_OBJECTS) $(asn1c_DEPENDENCIES) $(EXTRA_asn1c_DEPENDENCIES) 
+       @rm -f asn1c$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(asn1c_OBJECTS) $(asn1c_LDADD) $(LIBS)
+
+enber$(EXEEXT): $(enber_OBJECTS) $(enber_DEPENDENCIES) $(EXTRA_enber_DEPENDENCIES) 
+       @rm -f enber$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(enber_OBJECTS) $(enber_LDADD) $(LIBS)
+
+unber$(EXEEXT): $(unber_OBJECTS) $(unber_DEPENDENCIES) $(EXTRA_unber_DEPENDENCIES) 
+       @rm -f unber$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unber_OBJECTS) $(unber_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1c.Po
+include ./$(DEPDIR)/enber.Po
+include ./$(DEPDIR)/unber.Po
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-xxber.sh.log: check-xxber.sh
+       @p='check-xxber.sh'; \
+       b='check-xxber.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; 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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+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-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+# 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:
diff --git a/asn1c/Makefile.am b/asn1c/Makefile.am
new file mode 100644 (file)
index 0000000..40f000f
--- /dev/null
@@ -0,0 +1,30 @@
+@CODE_COVERAGE_RULES@
+
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS =                       \
+    -I${top_srcdir}/libasn1compiler \
+    -I${top_srcdir}/libasn1common   \
+    -I${top_srcdir}/libasn1parser   \
+    -I${top_srcdir}/libasn1print    \
+    -I${top_srcdir}/libasn1fix      \
+    -I${top_srcdir}/skeletons       \
+    -DDATADIR=\"$(pkgdatadir)\"
+
+asn1c_LDADD =                                           \
+    $(top_builddir)/libasn1common/libasn1common.la      \
+    $(top_builddir)/libasn1parser/libasn1parser.la      \
+    $(top_builddir)/libasn1print/libasn1print.la        \
+    $(top_builddir)/libasn1fix/libasn1fix.la            \
+    $(top_builddir)/libasn1compiler/libasn1compiler.la
+
+unber_LDADD =                                           \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+bin_PROGRAMS = asn1c unber enber
+
+noinst_HEADERS = sys-common.h
+
+dist_check_SCRIPTS = check-xxber.sh
+TESTS_ENVIRONMENT= top_srcdir=${top_srcdir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-xxber.*.tmp
diff --git a/asn1c/Makefile.in b/asn1c/Makefile.in
new file mode 100644 (file)
index 0000000..b27be65
--- /dev/null
@@ -0,0 +1,1078 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+bin_PROGRAMS = asn1c$(EXEEXT) unber$(EXEEXT) enber$(EXEEXT)
+subdir = asn1c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(noinst_HEADERS) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+asn1c_SOURCES = asn1c.c
+asn1c_OBJECTS = asn1c.$(OBJEXT)
+asn1c_DEPENDENCIES = $(top_builddir)/libasn1common/libasn1common.la \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1print/libasn1print.la \
+       $(top_builddir)/libasn1fix/libasn1fix.la \
+       $(top_builddir)/libasn1compiler/libasn1compiler.la
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+enber_SOURCES = enber.c
+enber_OBJECTS = enber.$(OBJEXT)
+enber_LDADD = $(LDADD)
+unber_SOURCES = unber.c
+unber_OBJECTS = unber.$(OBJEXT)
+unber_DEPENDENCIES = $(top_builddir)/libasn1common/libasn1common.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = asn1c.c enber.c unber.c
+DIST_SOURCES = asn1c.c enber.c unber.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = \
+    -I${top_srcdir}/libasn1compiler \
+    -I${top_srcdir}/libasn1common   \
+    -I${top_srcdir}/libasn1parser   \
+    -I${top_srcdir}/libasn1print    \
+    -I${top_srcdir}/libasn1fix      \
+    -I${top_srcdir}/skeletons       \
+    -DDATADIR=\"$(pkgdatadir)\"
+
+asn1c_LDADD = \
+    $(top_builddir)/libasn1common/libasn1common.la      \
+    $(top_builddir)/libasn1parser/libasn1parser.la      \
+    $(top_builddir)/libasn1print/libasn1print.la        \
+    $(top_builddir)/libasn1fix/libasn1fix.la            \
+    $(top_builddir)/libasn1compiler/libasn1compiler.la
+
+unber_LDADD = \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+noinst_HEADERS = sys-common.h
+dist_check_SCRIPTS = check-xxber.sh
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-xxber.*.tmp
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign asn1c/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign asn1c/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+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 \
+        || test -f $$p1 \
+         ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+asn1c$(EXEEXT): $(asn1c_OBJECTS) $(asn1c_DEPENDENCIES) $(EXTRA_asn1c_DEPENDENCIES) 
+       @rm -f asn1c$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(asn1c_OBJECTS) $(asn1c_LDADD) $(LIBS)
+
+enber$(EXEEXT): $(enber_OBJECTS) $(enber_DEPENDENCIES) $(EXTRA_enber_DEPENDENCIES) 
+       @rm -f enber$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(enber_OBJECTS) $(enber_LDADD) $(LIBS)
+
+unber$(EXEEXT): $(unber_OBJECTS) $(unber_DEPENDENCIES) $(EXTRA_unber_DEPENDENCIES) 
+       @rm -f unber$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unber_OBJECTS) $(unber_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enber.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unber.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-xxber.sh.log: check-xxber.sh
+       @p='check-xxber.sh'; \
+       b='check-xxber.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; 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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+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-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-binPROGRAMS \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+# 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:
diff --git a/asn1c/README b/asn1c/README
new file mode 100644 (file)
index 0000000..47541d9
--- /dev/null
@@ -0,0 +1,3 @@
+asn1c  - The ASN.1 Compiler
+unber  - The ASN.1 BER Decoder
+enber  - Reverse unber(1) output back into BER
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
new file mode 100644 (file)
index 0000000..b67f9e7
--- /dev/null
@@ -0,0 +1,585 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info> and contributors.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ */
+/*
+ * This is the program that connects the libasn1* libraries together.
+ * It uses them in turn to parse, fix and then compile or print the ASN.1 tree.
+ */
+#include "sys-common.h"
+
+#undef COPYRIGHT
+#define COPYRIGHT "Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info> and contributors.\n"
+
+#include <asn1parser.h>   /* Parse the ASN.1 file and build a tree */
+#include <asn1fix.h>      /* Fix the ASN.1 tree */
+#include <asn1print.h>    /* Print the ASN.1 tree */
+#include <asn1compiler.h> /* Compile the ASN.1 tree */
+#include <asn1fix_export.h>
+
+#include <asn1c_compat.h> /* Portable basename(3) and dirname(3) */
+
+#ifdef _WIN32
+#include <io.h>
+#include <direct.h>
+#else
+#include <dirent.h>
+#endif
+
+static void usage(const char *av0); /* Print the Usage screen and exit */
+static int importStandardModules(asn1p_t *asn, const char *skeletons_dir);
+
+int
+main(int ac, char **av) {
+    enum asn1p_flags asn1_parser_flags = A1P_NOFLAGS;
+    enum asn1f_flags asn1_fixer_flags = A1F_NOFLAGS;
+    enum asn1c_flags asn1_compiler_flags =
+        A1C_NO_C99 | A1C_GEN_OER | A1C_GEN_PER | A1C_GEN_EXAMPLE;
+    enum asn1print_flags asn1_printer_flags = APF_NOFLAGS;
+    int print_arg__print_out = 0;   /* Don't compile, just print parsed */
+    int print_arg__fix_n_print = 0; /* Fix and print */
+    int warnings_as_errors = 0;     /* Treat warnings as errors */
+    char *skeletons_dir = NULL;     /* Directory with supplementary stuff */
+    char *destdir = NULL;           /* Destination for generated files */
+    char **debug_type_names = 0;    /* Debug stuff */
+    size_t debug_type_names_count = 0;
+    asn1p_t *asn = 0;               /* An ASN.1 parsed tree */
+    int ret;                        /* Return value from misc functions */
+    int ch;                         /* Command line character */
+    int i;                          /* Index in some loops */
+    int exit_code = 0;              /* Exit code */
+
+    /*
+     * Process command-line options.
+     */
+    while((ch = getopt(ac, av, "D:d:EFf:g:hn:LPp:RS:vW:X")) != -1) switch(ch) {
+        case 'D':
+            if(optarg && *optarg) {
+                size_t optarg_len = strlen(optarg);
+                free(destdir);
+                destdir = calloc(1, optarg_len + 2); /* + "/\0" */
+                assert(destdir);
+                strcpy(destdir, optarg);
+                if(destdir[optarg_len - 1] != '/') {
+                    destdir[optarg_len] = '/';
+                }
+            } else {
+                free(destdir);
+                destdir = NULL;
+            }
+            break;
+        case 'd':
+            if(strncmp(optarg, "ebug-type-naming=", 17) == 0) {
+                char **p = realloc(debug_type_names,
+                                   (debug_type_names_count + 2) * sizeof(*p));
+                assert(p);
+                debug_type_names = p;
+                debug_type_names[debug_type_names_count++] =
+                    strdup(optarg + 17);
+                debug_type_names[debug_type_names_count] = NULL;
+                break;
+            } else if(strcmp(optarg, "ebug-output-origin-lines") == 0) {
+                asn1_compiler_flags |= A1C_DEBUG_OUTPUT_ORIGIN_LINES;
+                break;
+            }
+            usage(av[0]);
+        case 'E':
+            print_arg__print_out = 1;
+            break;
+        case 'F':
+            print_arg__fix_n_print = 1;
+            break;
+        case 'f':
+            if(strcmp(optarg, "all-defs-global") == 0) {
+                asn1_compiler_flags |= A1C_ALL_DEFS_GLOBAL;
+            } else if(strcmp(optarg, "bless-SIZE") == 0) {
+                asn1_fixer_flags |= A1F_EXTENDED_SizeConstraint;
+            } else if(strcmp(optarg, "compound-names") == 0) {
+                asn1_compiler_flags |= A1C_COMPOUND_NAMES;
+            } else if(strcmp(optarg, "indirect-choice") == 0) {
+                asn1_compiler_flags |= A1C_INDIRECT_CHOICE;
+            } else if(strncmp(optarg, "known-extern-type=", 18) == 0) {
+                char *known_type = optarg + 18;
+                ret = asn1f_make_known_external_type(known_type);
+                assert(ret == 0 || errno == EEXIST);
+            } else if(strcmp(optarg, "native-types") == 0) {
+                fprintf(stderr, "-f%s: Deprecated option\n", optarg);
+                asn1_compiler_flags &= ~A1C_USE_WIDE_TYPES;
+            } else if(strcmp(optarg, "wide-types") == 0) {
+                asn1_compiler_flags |= A1C_USE_WIDE_TYPES;
+            } else if(strcmp(optarg, "line-refs") == 0) {
+                asn1_compiler_flags |= A1C_LINE_REFS;
+            } else if(strcmp(optarg, "no-constraints") == 0) {
+                asn1_compiler_flags |= A1C_NO_CONSTRAINTS;
+            } else if(strcmp(optarg, "no-include-deps") == 0) {
+                asn1_compiler_flags |= A1C_NO_INCLUDE_DEPS;
+            } else if(strcmp(optarg, "includes-quoted") == 0) {
+                asn1_compiler_flags |= A1C_INCLUDES_QUOTED;
+            } else if(strcmp(optarg, "unnamed-unions") == 0) {
+                asn1_compiler_flags |= A1C_UNNAMED_UNIONS;
+            } else if(strcmp(optarg, "skeletons-copy") == 0) {
+                fprintf(stderr, "-f%s: Deprecated option\n", optarg);
+                asn1_compiler_flags &= ~A1C_LINK_SKELETONS;
+            } else if(strcmp(optarg, "link-skeletons") == 0) {
+                asn1_compiler_flags |= A1C_LINK_SKELETONS;
+            } else {
+                fprintf(stderr, "-f%s: Invalid argument\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'g':
+            if(strcmp(optarg, "en-PER") == 0) {
+                asn1_compiler_flags |= A1C_GEN_PER;
+            } else if(strcmp(optarg, "en-OER") == 0) {
+                asn1_compiler_flags |= A1C_GEN_OER;
+            } else if(strcmp(optarg, "en-example") == 0) {
+                asn1_compiler_flags |= A1C_GEN_EXAMPLE;
+            } else if(strcmp(optarg, "en-autotools") == 0) {
+                asn1_compiler_flags |= A1C_GEN_AUTOTOOLS_EXAMPLE;
+            } else {
+                fprintf(stderr, "-g%s: Invalid argument\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'h':
+            usage(av[0]);
+        case 'n':
+            if(strcmp(optarg, "o-gen-PER") == 0) {
+                asn1_compiler_flags &= ~A1C_GEN_PER;
+            } else if(strcmp(optarg, "o-gen-OER") == 0) {
+                asn1_compiler_flags &= ~A1C_GEN_OER;
+            } else if(strcmp(optarg, "o-gen-example") == 0) {
+                asn1_compiler_flags &= ~A1C_GEN_EXAMPLE;
+            } else if(strcmp(optarg, "o-gen-autotools") == 0) {
+                asn1_compiler_flags &= ~A1C_GEN_AUTOTOOLS_EXAMPLE;
+            } else {
+                fprintf(stderr, "-n%s: Invalid argument\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'P':
+            asn1_compiler_flags |= A1C_PRINT_COMPILED;
+            asn1_compiler_flags &= ~A1C_NO_C99;
+            break;
+        case 'p':
+            if(strncmp(optarg, "du=", 3) == 0) {
+                char *pduname = optarg + 3;
+                if(strcmp(pduname, "all") == 0) {
+                    asn1_compiler_flags |= A1C_PDU_ALL;
+                } else if(strcmp(pduname, "auto") == 0) {
+                    asn1_compiler_flags |= A1C_PDU_AUTO;
+                } else if(pduname[0] >= 'A' && pduname[0] <= 'Z') {
+                    asn1c__add_pdu_type(pduname);
+                    asn1_compiler_flags |= A1C_PDU_TYPE;
+                } else {
+                    fprintf(stderr, "-pdu=%s: expected -pdu={all|auto|Type}\n",
+                            pduname);
+                    exit(EX_USAGE);
+                }
+            } else if(strcmp(optarg, "rint-class-matrix") == 0) {
+                asn1_printer_flags |= APF_PRINT_CLASS_MATRIX;
+            } else if(strcmp(optarg, "rint-constraints") == 0) {
+                asn1_printer_flags |= APF_PRINT_CONSTRAINTS;
+            } else if(strcmp(optarg, "rint-lines") == 0) {
+                asn1_printer_flags |= APF_LINE_COMMENTS;
+            } else {
+                fprintf(stderr, "-p%s: Invalid argument\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'R':
+            asn1_compiler_flags |= A1C_OMIT_SUPPORT_CODE;
+            break;
+        case 'S':
+            skeletons_dir = optarg;
+            break;
+        case 'v':
+            fprintf(stderr, "ASN.1 Compiler, v" VERSION "\n" COPYRIGHT);
+            exit(0);
+            break;
+        case 'W':
+            if(strcmp(optarg, "error") == 0) {
+                warnings_as_errors = 1;
+                break;
+            } else if(strcmp(optarg, "debug-lexer") == 0) {
+                asn1_parser_flags |= A1P_DEBUG_LEXER;
+                break;
+            } else if(strcmp(optarg, "debug-parser") == 0) {
+                asn1_parser_flags |= A1P_DEBUG_PARSER;
+                break;
+            } else if(strcmp(optarg, "debug-fixer") == 0) {
+                asn1_fixer_flags |= A1F_DEBUG;
+                break;
+            } else if(strcmp(optarg, "debug-compiler") == 0) {
+                asn1_compiler_flags |= A1C_DEBUG;
+                break;
+            } else {
+                fprintf(stderr, "-W%s: Invalid argument\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'X':
+            print_arg__print_out = 1;   /* Implicit -E */
+            print_arg__fix_n_print = 1; /* Implicit -F */
+            asn1_printer_flags |= APF_PRINT_XML_DTD;
+            break;
+        default:
+            usage(av[0]);
+        }
+
+    /*
+     * Validate the options combination.
+     */
+    if(print_arg__print_out) {
+        if((asn1_printer_flags & APF_PRINT_CONSTRAINTS)
+           && !print_arg__fix_n_print) {
+            fprintf(stderr,
+                    "Error: -print-constraints argument requires -E -F\n");
+            exit(EX_USAGE);
+        }
+    } else {
+        if(print_arg__fix_n_print) {
+            fprintf(stderr, "Error: -F requires -E\n");
+            exit(EX_USAGE);
+        }
+        if(asn1_printer_flags) {
+            fprintf(stderr, "Error: -print-... arguments require -E\n");
+            exit(EX_USAGE);
+        }
+    }
+
+    /*
+     * Ensure that there are some input files present.
+     */
+    if(ac > optind) {
+        ac -= optind;
+        av += optind;
+    } else {
+        const char *bin_name = a1c_basename(av[0], NULL);
+        fprintf(stderr,
+                "%s: No input files specified. "
+                "Try '%s -h' for more information\n",
+                bin_name, bin_name);
+        exit(1);
+    }
+
+    /*
+     * Make sure the skeleton directory is out there.
+     */
+    if(skeletons_dir == NULL) {
+        struct stat sb;
+        skeletons_dir = DATADIR;
+        if((av[-optind][0] == '.' || av[-optind][1] == '/')
+           && stat(skeletons_dir, &sb)) {
+            /*
+             * The default skeletons directory does not exist,
+             * compute it from my file name:
+             * ./asn1c/asn1c -> ./skeletons
+             */
+            const char *skel_dir;
+            size_t len;
+
+            skel_dir = a1c_dirname(av[-optind]);
+
+            len = strlen(skel_dir) + sizeof("/../skeletons");
+            skeletons_dir = malloc(len);
+            assert(skeletons_dir);
+            snprintf(skeletons_dir, len, "%s/../skeletons", skel_dir);
+            if(stat(skeletons_dir, &sb)) {
+                fprintf(stderr,
+                        "WARNING: skeletons are neither in "
+                        "\"%s\" nor in \"%s\"!\n",
+                        DATADIR, skeletons_dir);
+                if(warnings_as_errors) exit(EX_OSFILE);
+            }
+        }
+    }
+
+    /*
+     * Iterate over input files and parse each.
+     * All syntax trees from all files will be bundled together.
+     */
+    for(i = 0; i < ac; i++) {
+        asn1p_t *new_asn;
+
+        new_asn = asn1p_parse_file(av[i], asn1_parser_flags);
+        if(new_asn == NULL) {
+            fprintf(stderr, "Cannot parse \"%s\"\n", av[i]);
+            exit_code = EX_DATAERR;
+            goto cleanup;
+        }
+
+        /*
+         * Bundle the parsed tree with existing one.
+         */
+        if(asn) {
+            asn1p_module_t *mod;
+            while((mod = TQ_REMOVE(&(new_asn->modules), mod_next)))
+                TQ_ADD(&(asn->modules), mod, mod_next);
+            asn1p_delete(new_asn);
+        } else {
+            asn = new_asn;
+        }
+    }
+
+    /* These are mostly notes for the human readers */
+    assert(asn);
+    assert(skeletons_dir);
+
+    /*
+     * Dump the parsed ASN.1 tree if -E specified and -F is NOT given.
+     */
+    if(print_arg__print_out && !print_arg__fix_n_print) {
+        if(asn1print(asn, asn1_printer_flags)) {
+            exit_code = EX_SOFTWARE;
+            goto cleanup;
+        }
+        return 0;
+    }
+
+    /*
+     * Read in the files from skeletons/standard-modules
+     */
+    if(importStandardModules(asn, skeletons_dir)) {
+        if(warnings_as_errors) {
+            exit_code = EX_DATAERR;
+            goto cleanup;
+        }
+    } else {
+        asn1f_use_standard_namespaces(asn);
+    }
+
+    /*
+     * Process the ASN.1 specification: perform semantic checks,
+     * expand references, etc, etc.
+     * This function will emit necessary warnings and error messages.
+     */
+    ret = asn1f_process(asn, asn1_fixer_flags,
+                        NULL /* default fprintf(stderr) */);
+    switch(ret) {
+    case 0:
+        break; /* All clear */
+    case 1:
+        if(!warnings_as_errors) {
+            break;
+        }
+        /* Fall through */
+    case -1:
+        exit_code = EX_DATAERR; /* Fatal failure */
+        goto cleanup;
+    }
+
+    /*
+     * Dump the parsed ASN.1 tree if -E specified and -F is given.
+     */
+    if(print_arg__print_out && print_arg__fix_n_print) {
+        if(asn1print(asn, asn1_printer_flags)) {
+            exit_code = EX_SOFTWARE;
+            goto cleanup;
+        }
+        return 0;
+    }
+
+    /*
+     * -debug-type-naming=Type
+     */
+    if(debug_type_names) {
+        asn1c_debug_type_naming(asn, asn1_compiler_flags, debug_type_names);
+        return 0;
+    }
+
+    /*
+     * Compile the ASN.1 tree into a set of source files
+     * of another language.
+     */
+    if(asn1_compile(asn, skeletons_dir, destdir ? destdir : "",
+                    asn1_compiler_flags, ac + optind, optind, av - optind)) {
+        exit_code = EX_SOFTWARE;
+    }
+
+cleanup:
+    asn1p_delete(asn);
+    asn1p_lex_destroy();
+    if (exit_code) exit(exit_code);
+
+    return 0;
+}
+
+/*
+ * Parse and import *.asn1 from skeletons/standard-modules
+ */
+static int
+importStandardModules(asn1p_t *asn, const char *skeletons_dir) {
+    asn1p_t *new_asn;
+    asn1p_module_t *mod;
+    const char *filename;
+    char *fullname;
+    char *target_dir;
+    int target_dir_len;
+    int len;
+#ifdef _WIN32
+    intptr_t dir;
+    struct _finddata_t c_file;
+    char *pattern;
+#else
+    struct dirent *dp;
+    DIR *dir;
+#endif
+    int ret = 0;
+
+    /* Notes for the human reader */
+    assert(asn);
+    assert(skeletons_dir);
+
+    /*
+     * Figure out the standard-modules directory.
+     */
+    target_dir_len = strlen(skeletons_dir) + sizeof("/standard-modules") - 1;
+    target_dir = malloc(target_dir_len + 1);
+    assert(target_dir);
+    snprintf(target_dir, target_dir_len + 1, "%s/standard-modules",
+             skeletons_dir);
+
+#ifdef _WIN32
+    len = target_dir_len + sizeof("/*.asn1");
+    pattern = malloc(len);
+    assert(pattern);
+    snprintf(pattern, len, "%s/*.asn1", target_dir);
+    dir = _findfirst(pattern, &c_file);
+    if(dir == -1L) {
+#else
+    dir = opendir(target_dir);
+    if(!dir) {
+#endif
+        fprintf(stderr, "WARNING: Cannot find standard modules in %s\n",
+                target_dir);
+        return -1;
+    }
+
+#ifdef _WIN32
+    do {
+        filename = c_file.name;
+#else
+    while((dp = readdir(dir))) {
+        filename = dp->d_name;
+#endif
+        len = strlen(filename);
+        if(len <= 5 || strcmp(filename + len - 5, ".asn1")) continue;
+        len = target_dir_len + 1 + len + 1;
+        fullname = malloc(len);
+        if(!fullname) continue; /* Just skip it, no big deal */
+        snprintf(fullname, len, "%s/%s", target_dir, filename);
+        filename = fullname;
+
+        new_asn = asn1p_parse_file(filename, A1P_NOFLAGS);
+        if(new_asn == NULL) {
+            fprintf(stderr, "WARNING: Cannot parse standard module \"%s\"\n",
+                    filename);
+            ret = -1;
+            continue;
+        }
+
+        /* Import these modules and mark them as "standard" */
+        while((mod = TQ_REMOVE(&(new_asn->modules), mod_next))) {
+            mod->_tags |= MT_STANDARD_MODULE;
+            TQ_ADD(&(asn->modules), mod, mod_next);
+        }
+        asn1p_delete(new_asn);
+        asn1p_lex_destroy();
+
+#ifdef _WIN32
+    } while(_findnext(dir, &c_file) == 0);
+    _findclose(dir);
+#else
+        free(fullname);
+    } /* while(readdir()) */
+    closedir(dir);
+#endif
+
+#ifdef _WIN32
+    free(pattern);
+#endif
+    free(target_dir);
+
+    return ret;
+}
+
+/*
+ * Print the usage screen and exit(EX_USAGE).
+ */
+static void __attribute__((noreturn))
+usage(const char *av0) {
+    /* clang-format off */
+       fprintf(stderr,
+"ASN.1 Compiler, v" VERSION "\n" COPYRIGHT
+"Usage: %s [options] file ...\n"
+"Options:\n"
+"  -E                    Run only the ASN.1 parser and print out the tree\n"
+"  -F                    During -E operation, also perform tree fixing\n"
+"\n"
+"  -P                    Concatenate and print the compiled text\n"
+"  -R                    Restrict output (tables only, no support code)\n"
+"  -S <dir>              Directory with support (skeleton?) files\n"
+"                        (Default is \"%s\")\n"
+"  -D <dir>              Destination directory for generated files (default current dir)\n"
+"  -X                    Generate and print the XML DTD\n"
+"\n"
+
+"  -Werror               Treat warnings as errors; abort if any warning\n"
+"  -Wdebug-lexer         Enable verbose debugging output from lexer\n"
+"  -Wdebug-parser        Enable verbose debugging output from parser\n"
+"  -Wdebug-fixer         --//-- semantics processor\n"
+"  -Wdebug-compiler      --//-- compiler\n"
+"\n"
+
+"  -fbless-SIZE          Allow SIZE() constraint for INTEGER etc (non-std.)\n"
+"  -fcompound-names      Disambiguate C's struct NAME's inside top-level types\n"
+"  -findirect-choice     Compile members of CHOICE as indirect pointers\n"
+"  -fincludes-quoted     Generate #includes in \"double\" instead of <angle> quotes\n"
+"  -fknown-extern-type=<name>    Pretend the specified type is known\n"
+"  -fline-refs           Include ASN.1 module's line numbers in comments\n"
+"  -fno-constraints      Do not generate the constraint checking code\n"
+"  -fno-include-deps     Do not generate the courtesy #includes for dependencies\n"
+"  -funnamed-unions      Enable unnamed unions in structures\n"
+"  -fwide-types          Use INTEGER_t instead of \"long\" by default, etc.\n"
+"\n"
+
+"  -no-gen-OER           Do not generate the OER (X.696) support code\n"
+"  -no-gen-PER           Do not generate the PER (X.691) support code\n"
+"  -no-gen-example       Do not generate the ASN.1 format converter example\n"
+"  -gen-autotools        Generate example top-level configure.ac and Makefile.am\n"
+"  -pdu={all|auto|Type}  Generate PDU table (discover PDUs automatically)\n"
+"\n"
+
+"  -print-class-matrix   Print out the collected object class matrix (debug)\n"
+"  -print-constraints    Explain subtype constraints (debug)\n"
+"  -print-lines          Generate \"-- #line\" comments in -E output\n"
+
+       ,
+       a1c_basename(av0, NULL), DATADIR);
+    /* clang-format on */
+    exit(EX_USAGE);
+}
diff --git a/asn1c/check-xxber.sh b/asn1c/check-xxber.sh
new file mode 100755 (executable)
index 0000000..e099707
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+ORIG="./.check-xxber.orig.$$.tmp"
+TEST="./.check-xxber.test.$$.tmp"
+
+# Test diff(1) capabilities
+diff -a . . 2>/dev/null && diffArgs="-a"               # Assume text files
+diff -u . . 2>/dev/null && diffArgs="$diffArgs -u"     # Unified diff output
+
+cat<<EOM > $ORIG
+<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+<P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">&#x55;&#x53;</P>
+<C O="6" T="[UNIVERSAL 16]" TL="2" V="22" A="SEQUENCE">
+<P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">&#x31;&#xa6;&#x20;&#x47;</P>
+<C O="14" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+<P O="16" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">&#x31;&#xa6;&#x20;&#x47;</P>
+</C O="22" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+<C O="22" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+<P O="24" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER">&#x31;&#xa6;&#x20;&#x47;</P>
+</C O="30" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+</C O="30" T="[UNIVERSAL 16]" A="SEQUENCE" L="24">
+<I O="30" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+</I O="32" T="[UNIVERSAL 0]" TL="2" L="4">
+EOM
+
+./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1
+diff $diffArgs "$ORIG" "$TEST" >/dev/null 2>&1
+diffExitCode=$?
+
+if [ "$diffExitCode" = "0" ]; then
+       echo "FAILED: $0: expected failure, got success"
+       exit 42;
+fi
+
+# Append necessary terminator
+echo '</I O="34" T="[UNIVERSAL 0]" TL="2" L="36">' >> $ORIG
+
+# Try trancoding again
+./enber $ORIG | ./unber -p -i 0 - > $TEST 2>&1
+
+diff $diffArgs "$ORIG" "$TEST"
+diffExitCode=$?
+
+rm -f $ORIG $TEST
+
+exit $diffExitCode
diff --git a/asn1c/enber.c b/asn1c/enber.c
new file mode 100644 (file)
index 0000000..3aeab6c
--- /dev/null
@@ -0,0 +1,404 @@
+/*-
+ * Copyright (c) 2004, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ */
+#include "sys-common.h"
+
+#include <asn1parser.h> /* For static string tables */
+
+#include <asn_application.h>
+#include <constraints.c>
+#include <ber_tlv_tag.c>
+#include <ber_tlv_length.c>
+
+#undef COPYRIGHT
+#define COPYRIGHT "Copyright (c) 2004, 2005 Lev Walkin <vlm@lionet.info>\n"
+
+static void usage(const char *av0, int); /* Print the Usage screen and exit */
+static int process(const char *fname);   /* Perform the BER decoding */
+static int process_line(const char *fname, char *line, int lineno);
+
+static int no_validation; /* -n */
+
+int
+main(int ac, char **av) {
+    int ch; /* Command line character */
+    int i;  /* Index in some loops */
+
+    /*
+     * Process command-line options.
+     */
+    while((ch = getopt(ac, av, "nhv")) != -1) switch(ch) {
+        case 'n':
+            no_validation++;
+            break;
+        case 'v':
+            usage(av[0], 1);
+            break;
+        case 'h':
+        default:
+            usage(av[0], 0);
+        }
+
+    /*
+     * Ensure that there are some input files present.
+     */
+    if(ac > optind) {
+        ac -= optind;
+        av += optind;
+    } else {
+        fprintf(stderr, "%s: No input files specified\n", av[0]);
+        exit(1);
+    }
+
+    setvbuf(stdout, 0, _IOLBF, 0);
+
+    /*
+     * Iterate over input files and parse each.
+     * All syntax trees from all files will be bundled together.
+     */
+    for(i = 0; i < ac; i++) {
+        if(process(av[i])) exit(EX_DATAERR);
+    }
+
+    return 0;
+}
+
+/*
+ * Print the usage screen and exit(EX_USAGE).
+ */
+static void
+usage(const char *av0, int copyright_only) {
+    fprintf(stderr,
+            "Convert unber(1)'s output back into BER, "
+            "v" VERSION "\n" COPYRIGHT);
+    if(copyright_only) exit(0);
+    fprintf(stderr,
+            "Usage: %s [-n] [-] [file ...]\n"
+            "Options:\n"
+            "  -n      Disable XML input validation\n",
+            av0);
+    exit(EX_USAGE);
+}
+
+/*
+ * Open the file and initiate recursive processing.
+ */
+static int
+process(const char *fname) {
+    char buf[8192];
+    char *collector = 0;
+    size_t collector_size = sizeof(buf);
+    size_t collector_offset = 0;
+    int lineno = 0;
+    FILE *fp;
+
+    if(strcmp(fname, "-")) {
+        fp = fopen(fname, "r");
+        if(!fp) {
+            perror(fname);
+            return -1;
+        }
+    } else {
+        fp = stdin;
+    }
+
+
+    while(fgets(buf, sizeof(buf), fp) || !feof(fp)) {
+        size_t len = strlen(buf);
+
+        if(!len) continue;
+        if(collector_offset || buf[len - 1] != '\n') {
+            if((collector_size - collector_offset) <= len || !collector) {
+                collector_size <<= 1;
+                collector = REALLOC(collector, collector_size);
+                if(!collector) {
+                    perror("realloc()");
+                    exit(EX_OSERR);
+                }
+            }
+            memcpy(collector + collector_offset, buf, len + 1);
+            collector_offset += len;
+        }
+        if(buf[len - 1] != '\n') continue;
+
+        if(collector_offset) {
+            assert(collector[collector_offset - 1] == '\n');
+            process_line(fname, collector, ++lineno);
+            collector_offset = 0;
+        } else {
+            process_line(fname, buf, ++lineno);
+        }
+    }
+
+    if(fp != stdin) fclose(fp);
+
+    return 0;
+}
+
+static int
+process_line(const char *fname, char *line, int lineno) {
+    char buf[32];
+    char *op;      /* '<' */
+    char *cl;      /* '>' */
+    char *tcl_pos; /* tag class (T=") position */
+    char *tl_pos;  /* tag length (TL=") position */
+    char *v_pos;   /* value length (V=") position */
+    int constr;
+    ber_tlv_tag_t tag_value;
+    ber_tlv_tag_t tag_class;
+    ber_tlv_tag_t tlv_tag;
+    ber_tlv_len_t tlv_len;
+    ber_tlv_len_t opt_tl_len; /* optional TL length */
+    ssize_t ret;
+
+    /* Skip the whitespace */
+    for(; *line == ' ' || *line == '\t'; line++)
+        ;
+
+    /* Find a tag opening angle bracket */
+    op = line;
+    switch(*op) {
+    case '<': /* That's what we want! A tag opening */
+        break;
+    case '\r':
+    case '\n':
+    case '#': /* This is a comment */
+        return 0;
+    case '-': /* This is a comment (dash-dash) */
+        if(op[1] == '-') {
+            return 0;
+        }
+        /* Fall through */
+    default:
+        fprintf(stderr, "%s: Missing '<' after whitespace at line %d\n", fname,
+                lineno);
+        exit(EX_DATAERR);
+    }
+
+    /* Find a tag closing angle bracket */
+    for(; *line && *line != '>'; line++) {
+        if(*line < ' ') {
+            fprintf(stderr, "%s: Invalid charset (%d) at line %d\n", fname,
+                    *(const unsigned char *)line, lineno);
+            exit(EX_DATAERR);
+        }
+    }
+    cl = line;
+    if(*cl != '>') {
+        fprintf(stderr, "%s: Missing '>' at line %d\n", fname, lineno);
+        exit(EX_DATAERR);
+    }
+
+    /* Ignore closing tags */
+    if(op[1] == '/') {
+        if(strchr(cl, '<')) { /* We are not very robust */
+            fprintf(stderr, "%s: Multiple tags per line at line %d\n", fname,
+                    lineno);
+            exit(EX_DATAERR);
+        }
+        /* End-of-content octets */
+        if(op[2] == 'I') {
+            buf[0] = buf[1] = 0x00;
+            fwrite(buf, 1, 2, stdout);
+        }
+        return 0;
+    }
+
+    switch(op[1]) {
+    case '!':
+        return 0; /* A comment */
+    case '?':
+        return 0; /* An XML preamble */
+    case 'C':
+        constr = 1;
+        break;
+    case 'P':
+        constr = 0;
+        break;
+    case 'I':
+        constr = 2;
+        break;
+    default:
+        fprintf(stderr,
+                "%s: Expected \"C\"/\"P\"/\"I\" as the XML tag name (%c) at "
+                "line %d\n",
+                fname, op[1], lineno);
+        exit(EX_DATAERR);
+    }
+
+    *cl = '\0';
+    if(cl[-1] == 'F') {
+        fprintf(stderr,
+                "%s: Detected pretty-printing of primitive types at line %d. "
+                "Re-run `unber` with -p option to disable pretty-printing.\n",
+                fname, lineno);
+        exit(EX_DATAERR);
+    }
+
+    tcl_pos = strstr(op, "T=\"[");
+    tl_pos = strstr(op, "TL=\"");
+    v_pos = strstr(op, "V=\"");
+    if(!tcl_pos || (!v_pos && constr != 2)) {
+        fprintf(stderr, "%s: Mandatory attribute %s is not found at line %d\n",
+                fname, (!tcl_pos) ? "T" : "V", lineno);
+        exit(EX_DATAERR);
+    }
+    errno = 0;
+    opt_tl_len = tl_pos ? strtoul(tl_pos + 4, 0, 10) : 0;
+    if(constr == 2) {
+        tlv_len = 0;
+    } else {
+        tlv_len = strtoul(v_pos + 3, 0, 10);
+    }
+    if(errno || (opt_tl_len && opt_tl_len < 2) || tlv_len < 0) {
+        fprintf(stderr, "%s: Invalid TL or V value at line %d\n", fname,
+                lineno);
+        exit(EX_DATAERR);
+    }
+
+    /* clang-format off */
+       tcl_pos += 4;
+       switch(*tcl_pos) {
+       case 'U':       /* UNIVERSAL */
+               tag_class = ASN_TAG_CLASS_UNIVERSAL; break;
+       case 'P':       /* PRIVATE */
+               tag_class = ASN_TAG_CLASS_PRIVATE; break;
+       case 'A':       /* APPLICATION */
+               tag_class = ASN_TAG_CLASS_APPLICATION; break;
+       case '0': case '1': case '2': case '3': case '4':
+       case '5': case '6': case '7': case '8': case '9':       /* context */
+               tag_class = ASN_TAG_CLASS_CONTEXT; break;
+       default:
+               fprintf(stderr, "%s: Invalid tag class (%c) at line %d\n",
+                       fname, tcl_pos[4], lineno);
+               exit(EX_DATAERR);
+       }
+       for(;; tcl_pos++) {
+               switch(*tcl_pos) {
+               case '"': tcl_pos = "";
+               case '\0':
+               case '0': case '1': case '2': case '3': case '4':
+               case '5': case '6': case '7': case '8': case '9':
+                       break;
+               default: continue;
+               }
+               break;
+       }
+    /* clang-format on */
+
+    unsigned long tag_value_UL;
+    errno = 0;
+    if(!*tcl_pos || ((tag_value_UL = strtoul(tcl_pos, 0, 10)) > UINT_MAX)
+       || errno) {
+        fprintf(stderr, "%s: Invalid tag value (%c) at line %d\n", fname,
+                *tcl_pos, lineno);
+        exit(EX_DATAERR);
+    } else {
+        tag_value = tag_value_UL;
+    }
+    tlv_tag = ((tag_value << 2) | tag_class);
+
+    ret = ber_tlv_tag_serialize(tlv_tag, buf, sizeof(buf));
+    assert(ret >= 1 && (size_t)ret < sizeof(buf));
+    if(constr == 2) {
+        buf[ret] = 0x80;
+        ret += 1;
+    } else {
+        ret += der_tlv_length_serialize(tlv_len, buf + ret, sizeof(buf) - ret);
+        assert(ret >= 2 && (size_t)ret < sizeof(buf));
+    }
+    if(opt_tl_len && ret != opt_tl_len) {
+        fprintf(stderr,
+                "%s: Cannot encode TL at line %d "
+                "in the given number of bytes (%ld!=%ld)\n",
+                fname, lineno, (long)ret, (long)opt_tl_len);
+        exit(EX_DATAERR);
+    }
+    if(constr) *buf |= 0x20; /* Enable "constructed" bit */
+    fwrite(buf, 1, ret, stdout);
+
+    if(!constr) {
+        ber_tlv_len_t len;
+        for(len = 0, cl++; *cl && *cl != '<'; cl++, len++) {
+            unsigned char v;
+            int h;
+            if(*cl != '&') {
+                fputc(*cl, stdout);
+                continue;
+            }
+            cl++;
+            if(*cl != '#') {
+                fputc(*cl, stdout);
+                continue;
+            }
+            cl++;
+            if(*cl != 'x') {
+                fprintf(stderr, "%s: Expected \"&#xNN;\" at line %d\n", fname,
+                        lineno);
+                exit(EX_DATAERR);
+            }
+            for(v = 0, h = 0; h < 2; h++) {
+                unsigned char clv = *++cl;
+                v <<= 4;
+                /* clang-format off */
+                       switch(clv) {
+                       case '0': case '1': case '2': case '3': case '4':
+                       case '5': case '6': case '7': case '8': case '9':
+                               v |= clv - '0'; break;
+                       case 'A': case 'B': case 'C':
+                       case 'D': case 'E': case 'F':
+                               v |= clv - 'A' + 10; break;
+                       case 'a': case 'b': case 'c':
+                       case 'd': case 'e': case 'f':
+                               v |= clv - 'a' + 10; break;
+                       default:
+                               fprintf(stderr,
+                                       "%s: Expected \"&#xNN;\" at line %d (%c)\n",
+                                       fname, lineno, clv);
+                               exit(EX_DATAERR);
+                       }
+                /* clang-format on */
+            }
+            cl++;
+            if(*cl != ';') {
+                fprintf(stderr, "%s: Expected \"&#xNN;\" at line %d\n", fname,
+                        lineno);
+                exit(EX_DATAERR);
+            }
+            fputc(v, stdout);
+        }
+        if(len != tlv_len) {
+            if(no_validation) fprintf(stderr, "Warning: ");
+            fprintf(stderr,
+                    "%s: Could not encode value of %ld chars "
+                    "at line %d in %ld bytes\n",
+                    fname, (long)len, lineno, (long)tlv_len);
+            if(!no_validation) exit(EX_DATAERR);
+        }
+    }
+
+    return 0;
+}
diff --git a/asn1c/sys-common.h b/asn1c/sys-common.h
new file mode 100644 (file)
index 0000000..abbfd8f
--- /dev/null
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h> /* for stat(2) */
+#endif
+
+#ifndef _WIN32
+#include <sysexits.h> /* for EX_USAGE & others */
+#else                 /* _WIN32 */
+#ifndef EX_USAGE
+#define EX_USAGE 64
+#endif
+#ifndef EX_DATAERR
+#define EX_DATAERR 65
+#endif
+#ifndef EX_SOFTWARE
+#define EX_SOFTWARE 70
+#endif
+#ifndef EX_OSERR
+#define EX_OSERR 71
+#endif
+#ifndef EX_OSFILE
+#define EX_OSFILE 72
+#endif
+#define snprintf _snprintf
+#endif /* _WIN32 */
diff --git a/asn1c/unber.c b/asn1c/unber.c
new file mode 100644 (file)
index 0000000..a344921
--- /dev/null
@@ -0,0 +1,846 @@
+/*-
+ * Copyright (c) 2004, 2005, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id$
+ */
+#include "sys-common.h"
+
+#define ASN_DISABLE_PER_SUPPORT 1
+#define ASN_DISABLE_OER_SUPPORT 1
+
+#include <asn1parser.h> /* For static string tables */
+
+#include <asn_application.h>
+#include <constraints.c>
+#include <ber_tlv_tag.c>
+#include <ber_tlv_length.c>
+#include <INTEGER.c>
+#include <OBJECT_IDENTIFIER.c>
+#include <RELATIVE-OID.c>
+#include <asn_codecs_prim.c>
+#include <asn1p_integer.c>
+#include <asn_internal.c>
+
+#undef COPYRIGHT
+#define COPYRIGHT "Copyright (c) 2004, 2005 Lev Walkin <vlm@lionet.info>\n"
+
+static void usage(const char *av0);    /* Print the Usage screen and exit */
+static int process(const char *fname); /* Perform the BER decoding */
+static int decode_tlv_from_string(const char *datastring);
+
+static int single_type_decoding = 0;   /* -1 enables that */
+static int minimalistic = 0;           /* -m enables that */
+static int pretty_printing = 1;        /* -p disables that */
+static long skip_bytes = 0;            /* -s controls that */
+static char indent_bytes[16] = "    "; /* -i controls that */
+
+int
+main(int ac, char **av) {
+    int ch; /* Command line character */
+    int i;  /* Index in some loops */
+
+    /*
+     * Process command-line options.
+     */
+    while((ch = getopt(ac, av, "1hi:mps:t:v")) != -1) switch(ch) {
+        case '1':
+            single_type_decoding = 1;
+            break;
+        case 'i':
+            i = atoi(optarg);
+            if(i >= 0 && i < (int)sizeof(indent_bytes)) {
+                memset(indent_bytes, ' ', i);
+                indent_bytes[i] = '\0';
+            } else {
+                fprintf(stderr, "-i %s: Invalid indent value\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 'm':
+            minimalistic = 1;
+            break;
+        case 'p':
+            pretty_printing = 0;
+            break;
+        case 's':
+            skip_bytes = atol(optarg);
+            if(skip_bytes < 0) {
+                fprintf(stderr, "-s %s: positive value expected\n", optarg);
+                exit(EX_USAGE);
+            }
+            break;
+        case 't':
+            if(decode_tlv_from_string(optarg)) exit(EX_DATAERR);
+            exit(0);
+        case 'v':
+            fprintf(stderr, "ASN.1 BER Decoder, v" VERSION "\n" COPYRIGHT);
+            exit(0);
+            break;
+        case 'h':
+        default:
+            usage(av[0]);
+        }
+
+    /*
+     * Ensure that there are some input files present.
+     */
+    if(ac > optind) {
+        ac -= optind;
+        av += optind;
+    } else {
+        fprintf(stderr, "%s: No input files specified\n", av[0]);
+        exit(1);
+    }
+
+    setvbuf(stdout, 0, _IOLBF, 0);
+
+    /*
+     * Iterate over input files and parse each.
+     * All syntax trees from all files will be bundled together.
+     */
+    for(i = 0; i < ac; i++) {
+        if(process(av[i])) exit(EX_DATAERR);
+    }
+
+    return 0;
+}
+
+/*
+ * Print the usage screen and exit(EX_USAGE).
+ */
+static void
+usage(const char *av0) {
+    /* clang-format off */
+       fprintf(stderr,
+"ASN.1 BER Decoder, v" VERSION "\n" COPYRIGHT
+"Usage: %s [options] [-] [file ...]\n"
+"Options:\n"
+"  -1                Decode only the first BER structure (otherwise, until EOF)\n"
+"  -i <indent>       Amount of spaces for output indentation (default is 4)\n"
+"  -m                Minimalistic mode: print as little as possible\n"
+"  -p                Do not attempt pretty-printing of known ASN.1 types\n"
+"  -s <skip>         Ignore first <skip> bytes of input\n"
+"  -t <hex-string>   Decode the given tag[/length] sequence (e.g. -t \"bf20\")\n"
+"\n"
+"The XML opening tag format is as follows:\n"
+"  <tform O=\"off\" T=\"tag\" TL=\"tl_len\" V=\"{Indefinite|v_len}\" [A=\"type\"] [F]>\n"
+"Where:\n"
+"  tform    Which form the value is in: constructed (\"C\", \"I\") or primitive (\"P\")\n"
+"  off      Offset of the encoded element in the unber input stream\n"
+"  tag      The tag class and value in human readable form\n"
+"  tl_len   The length of the TL (BER Tag and Length) encoding\n"
+"  v_len    The length of the value (V, encoded by the L), may be \"Indefinite\"\n"
+"  type     Likely name of the underlying ASN.1 type (for [UNIVERSAL n] tags)\n"
+"  [F]      Indicates that the value was reformatted (pretty-printed)\n"
+"See the manual page for details\n"
+       , av0);
+    /* clang-format on */
+    exit(EX_USAGE);
+}
+
+typedef enum pd_code {
+    PD_FAILED = -1,
+    PD_FINISHED = 0,
+    PD_EOF = 1,
+} pd_code_e;
+static pd_code_e process_deeper(const char *fname, FILE *fp,
+                                size_t *offset, int level,
+                                ssize_t limit, ber_tlv_len_t *frame_size,
+                                ber_tlv_len_t effective_size, int expect_eoc);
+static void print_TL(int fin, size_t offset, int level, int constr,
+                     ssize_t tlen, ber_tlv_tag_t, ber_tlv_len_t,
+                     ber_tlv_len_t effective_frame_size);
+static int print_V(const char *fname, FILE *fp, ber_tlv_tag_t, ber_tlv_len_t);
+
+/*
+ * Open the file and initiate recursive processing.
+ */
+static int
+process(const char *fname) {
+    FILE *fp;
+    pd_code_e pdc;
+    size_t offset = 0;   /* Stream decoding position */
+    ber_tlv_len_t frame_size = 0; /* Single frame size */
+
+    if(strcmp(fname, "-")) {
+        fp = fopen(fname, "rb");
+        if(!fp) {
+            perror(fname);
+            return -1;
+        }
+    } else {
+        fp = stdin;
+    }
+
+    /*
+     * Skip the requested amount of bytes.
+     */
+    for(; offset < (size_t)skip_bytes; offset++) {
+        if(fgetc(fp) == -1) {
+            fprintf(stderr, "%s: input source (%zu bytes) "
+                            "has less data than \"-s %ld\" switch "
+                            "wants to skip\n",
+                    fname, offset, skip_bytes);
+            if(fp != stdin) fclose(fp);
+            return -1;
+        }
+    }
+
+    /*
+     * Fetch out BER-encoded data until EOF or error.
+     */
+    do {
+        pdc = process_deeper(fname, fp, &offset, 0, -1, &frame_size, 0, 0);
+    } while(pdc == PD_FINISHED && !single_type_decoding);
+
+    if(fp != stdin) fclose(fp);
+
+    if(pdc == PD_FAILED) return -1;
+    return 0;
+}
+
+/*
+ * Process the TLV recursively.
+ */
+static pd_code_e
+process_deeper(const char *fname, FILE *fp, size_t *offset, int level,
+               ssize_t limit, ber_tlv_len_t *frame_size,
+               ber_tlv_len_t effective_size, int expect_eoc) {
+    unsigned char tagbuf[32];
+    ssize_t tblen = 0;
+    pd_code_e pdc = PD_FINISHED;
+    ber_tlv_tag_t tlv_tag;
+    ber_tlv_len_t tlv_len;
+    ssize_t t_len;
+    ssize_t l_len;
+
+    for(;;) {
+        ber_tlv_len_t local_esize = 0;
+        int constr;
+        int ch;
+
+        if(limit == 0) return PD_FINISHED;
+
+        if(limit >= 0 && tblen >= limit) {
+            fprintf(stderr,
+                    "%s: Too long TL sequence (%ld >= %ld)"
+                    " at %zu. "
+                    "Broken or maliciously constructed file\n",
+                    fname, (long)tblen, (long)limit, *offset);
+            return PD_FAILED;
+        }
+
+        /* Get the next byte from the input stream */
+        ch = fgetc(fp);
+        if(ch == -1) {
+            if(limit > 0 || expect_eoc) {
+                fprintf(stderr,
+                        "%s: Unexpected end of file (TL)"
+                        " at %zu\n",
+                        fname, *offset);
+                return PD_FAILED;
+            } else {
+                return PD_EOF;
+            }
+        }
+
+        tagbuf[tblen++] = ch;
+
+        /*
+         * Decode the TLV tag.
+         */
+        t_len = ber_fetch_tag(tagbuf, tblen, &tlv_tag);
+        switch(t_len) {
+        case -1:
+            fprintf(stderr,
+                    "%s: Fatal error decoding tag"
+                    " at %zu+%ld\n",
+                    fname, *offset, (long)tblen);
+            return PD_FAILED;
+        case 0:
+            /* More data expected */
+            continue;
+        }
+
+        /*
+         * Decode the TLV length.
+         */
+        constr = BER_TLV_CONSTRUCTED(tagbuf);
+        l_len =
+            ber_fetch_length(constr, tagbuf + t_len, tblen - t_len, &tlv_len);
+        switch(l_len) {
+        case -1:
+            fprintf(stderr,
+                    "%s: Fatal error decoding value length"
+                    " at %zu\n",
+                    fname, *offset + t_len);
+            return PD_FAILED;
+        case 0:
+            /* More data expected */
+            continue;
+        }
+
+        /* Make sure the T & L decoders took exactly the whole buffer */
+        assert((t_len + l_len) == tblen);
+
+        if(!expect_eoc || tagbuf[0] || tagbuf[1])
+            print_TL(0, *offset, level, constr, tblen, tlv_tag, tlv_len,
+                     effective_size);
+
+        if(limit != -1) {
+            /* If limit is set, account for the TL sequence */
+            limit -= (t_len + l_len);
+            assert(limit >= 0);
+
+            if(tlv_len > limit) {
+                fprintf(stderr,
+                        "%s: Structure advertizes length (%ld) "
+                        "greater than of a parent container (%ld)\n",
+                        fname, (long)tlv_len, (long)limit);
+                return PD_FAILED;
+            }
+        }
+
+        *offset += t_len + l_len;
+        *frame_size += t_len + l_len;
+        effective_size += t_len + l_len;
+        local_esize += t_len + l_len;
+
+        if(expect_eoc && !tagbuf[0] && !tagbuf[1]) {
+            /* End of content octets */
+            print_TL(1, *offset - 2, level - 1, 1, 2, 0, -1, effective_size);
+            return PD_FINISHED;
+        }
+
+        if(constr) {
+            ber_tlv_len_t dec = 0;
+            /*
+             * This is a constructed type. Process recursively.
+             */
+            printf(">\n"); /* Close the opening tag */
+            if(tlv_len != -1 && limit != -1) {
+                assert(limit >= tlv_len);
+            }
+            pdc = process_deeper(fname, fp, offset, level + 1,
+                                 tlv_len == -1 ? limit : tlv_len, &dec,
+                                 t_len + l_len, tlv_len == -1);
+            if(pdc == PD_FAILED) return pdc;
+            if(limit != -1) {
+                assert(limit >= dec);
+                limit -= dec;
+            }
+            *frame_size += dec;
+            effective_size += dec;
+            local_esize += dec;
+            if(tlv_len == -1) {
+                tblen = 0;
+                if(pdc == PD_FINISHED && limit < 0 && !expect_eoc) return pdc;
+                continue;
+            }
+        } else {
+            assert(tlv_len >= 0);
+            if(print_V(fname, fp, tlv_tag, tlv_len)) return PD_FAILED;
+
+            if(limit != -1) {
+                assert(limit >= tlv_len);
+                limit -= tlv_len;
+            }
+            *offset += tlv_len;
+            *frame_size += tlv_len;
+            effective_size += tlv_len;
+            local_esize += tlv_len;
+        }
+
+        print_TL(1, *offset, level, constr, tblen, tlv_tag, tlv_len,
+                 local_esize);
+
+        tblen = 0;
+
+        /* Report success for a single top level TLV */
+        if(level == 0 && limit == -1 && !expect_eoc) break;
+    } /* for(;;) */
+
+    return pdc;
+}
+
+static void
+print_TL(int fin, size_t offset, int level, int constr, ssize_t tlen,
+         ber_tlv_tag_t tlv_tag, ber_tlv_len_t tlv_len,
+         ber_tlv_len_t effective_size) {
+    if(fin && !constr) {
+        printf("</P>\n");
+        return;
+    }
+
+    while(level-- > 0) fputs(indent_bytes, stdout); /* Print indent */
+    printf(fin ? "</" : "<");
+
+    printf(constr ? ((tlv_len == -1) ? "I" : "C") : "P");
+
+    /* Print out the offset of this boundary, even if closing tag */
+    if(!minimalistic) printf(" O=\"%zu\"", offset);
+
+    printf(" T=\"");
+    ber_tlv_tag_fwrite(tlv_tag, stdout);
+    printf("\"");
+
+    if(!fin || (tlv_len == -1 && !minimalistic))
+        printf(" TL=\"%ld\"", (long)tlen);
+    if(!fin) {
+        if(tlv_len == -1)
+            printf(" V=\"Indefinite\"");
+        else
+            printf(" V=\"%ld\"", (long)tlv_len);
+    }
+
+    if(!minimalistic && BER_TAG_CLASS(tlv_tag) == ASN_TAG_CLASS_UNIVERSAL) {
+        const char *str;
+        ber_tlv_tag_t tvalue = BER_TAG_VALUE(tlv_tag);
+        str = ASN_UNIVERSAL_TAG2STR(tvalue);
+        if(str) printf(" A=\"%s\"", str);
+    }
+
+    if(fin) {
+        if(constr && !minimalistic) printf(" L=\"%ld\"", (long)effective_size);
+        printf(">\n");
+    }
+}
+
+/*
+ * Print the value in binary form, or reformat for pretty-printing.
+ */
+static int
+print_V(const char *fname, FILE *fp, ber_tlv_tag_t tlv_tag,
+        ber_tlv_len_t tlv_len) {
+    asn_oid_arc_t *arcs = 0; /* Object identifier arcs */
+    unsigned char *vbuf = 0;
+    asn1p_expr_type_e etype = 0;
+    asn1c_integer_t collector = 0;
+    int special_format = 0;
+    ssize_t i;
+
+    /* Figure out what type is it */
+    if(BER_TAG_CLASS(tlv_tag) == ASN_TAG_CLASS_UNIVERSAL && pretty_printing) {
+        ber_tlv_tag_t tvalue = BER_TAG_VALUE(tlv_tag);
+        etype = ASN_UNIVERSAL_TAG2TYPE(tvalue);
+    }
+
+    /*
+     * Determine how to print the value, either in its native binary form,
+     * encoded with &xNN characters, or using pretty-printing.
+     * The basic string types (including "useful types", like UTCTime)
+     * are excempt from this determination logic, because their alphabets
+     * are subsets of the XML's native UTF-8 encoding.
+     */
+    switch(etype) {
+    case ASN_BASIC_BOOLEAN:
+        if(tlv_len == 1)
+            special_format = 1;
+        else
+            etype = 0;
+        break;
+    case ASN_BASIC_INTEGER:
+    case ASN_BASIC_ENUMERATED:
+        if((size_t)tlv_len <= sizeof(collector))
+            special_format = 1;
+        else
+            etype = 0;
+        break;
+    case ASN_BASIC_OBJECT_IDENTIFIER:
+    case ASN_BASIC_RELATIVE_OID:
+        if(tlv_len > 0 && tlv_len < 128 * 1024 /* VERY long OID! */) {
+            arcs = MALLOC(sizeof(*arcs) * (tlv_len + 1));
+            if(arcs) {
+                vbuf = MALLOC(tlv_len + 1);
+                /* Not checking is intentional */
+            }
+        }
+    case ASN_BASIC_UTCTime:
+    case ASN_BASIC_GeneralizedTime:
+    case ASN_STRING_NumericString:
+    case ASN_STRING_PrintableString:
+    case ASN_STRING_VisibleString:
+    case ASN_STRING_IA5String:
+    case ASN_STRING_UTF8String:
+        break; /* Directly compatible with UTF-8 */
+    case ASN_STRING_BMPString:
+    case ASN_STRING_UniversalString:
+        break; /* Not directly compatible with UTF-8 */
+    default:
+        /* Conditionally compatible with UTF-8 */
+        if(((etype & ASN_STRING_MASK) || (etype == ASN_BASIC_OCTET_STRING) ||
+            /*
+             * AUTOMATIC TAGS or IMPLICIT TAGS in effect,
+             * Treat this primitive type as OCTET_STRING.
+             */
+            (BER_TAG_CLASS(tlv_tag) != ASN_TAG_CLASS_UNIVERSAL
+             && pretty_printing))
+           && (tlv_len > 0 && tlv_len < 128 * 1024)) {
+            vbuf = MALLOC(tlv_len + 1);
+            /* Not checking is intentional */
+        }
+        break;
+    }
+
+    /* If collection vbuf is present, defer printing the F flag. */
+    if(!vbuf) printf(special_format ? " F>" : ">");
+
+    /*
+     * Print the value in binary or text form,
+     * or collect the bytes into vbuf.
+     */
+    for(i = 0; i < tlv_len; i++) {
+        int ch = fgetc(fp);
+        if(ch == -1) {
+            fprintf(stderr, "%s: Unexpected end of file (V)\n", fname);
+            if(vbuf) FREEMEM(vbuf);
+            if(arcs) FREEMEM(arcs);
+            return -1;
+        }
+        switch(etype) {
+        case ASN_BASIC_UTCTime:
+        case ASN_BASIC_GeneralizedTime:
+        case ASN_STRING_NumericString:
+        case ASN_STRING_PrintableString:
+        case ASN_STRING_VisibleString:
+        case ASN_STRING_IA5String:
+        case ASN_STRING_UTF8String:
+            switch(ch) {
+            default:
+                if(((etype == ASN_STRING_UTF8String) || !(ch & 0x80))
+                   && (ch >= 0x20)) {
+                    printf("%c", ch);
+                    break;
+                }
+            /* Fall through */
+            case 0x3c:
+            case 0x3e:
+            case 0x26:
+                printf("&#x%02x;", ch);
+            }
+            break;
+        case ASN_BASIC_BOOLEAN:
+            switch(ch) {
+            case 0:
+                printf("<false/>");
+                break;
+            case 0xff:
+                printf("<true/>");
+                break;
+            default:
+                printf("<true value=\"&#x%02x\"/>", ch);
+            }
+            break;
+        case ASN_BASIC_INTEGER:
+        case ASN_BASIC_ENUMERATED:
+            if(i)
+                collector = collector * 256 + ch;
+            else
+                collector = (int)(signed char)ch;
+            break;
+        default:
+            if(vbuf) {
+                vbuf[i] = ch;
+            } else {
+                printf("&#x%02x;", ch);
+            }
+        }
+    }
+
+    /* Do post-processing */
+    switch(etype) {
+    case ASN_BASIC_INTEGER:
+    case ASN_BASIC_ENUMERATED:
+        printf("%s", asn1p_itoa(collector));
+        break;
+    case ASN_BASIC_OBJECT_IDENTIFIER:
+        if(vbuf) {
+            OBJECT_IDENTIFIER_t oid = {0, 0};
+            ssize_t arcno;
+
+            oid.buf = vbuf;
+            oid.size = tlv_len;
+
+            arcno = OBJECT_IDENTIFIER_get_arcs(&oid, arcs, tlv_len + 1);
+            if(arcno >= 0) {
+                assert(arcno <= (tlv_len + 1));
+                printf(" F>");
+                for(i = 0; i < arcno; i++) {
+                    if(i) printf(".");
+                    printf("%" PRIu32, arcs[i]);
+                }
+                FREEMEM(vbuf);
+                vbuf = 0;
+            }
+        }
+        break;
+    case ASN_BASIC_RELATIVE_OID:
+        if(vbuf) {
+            RELATIVE_OID_t oid;
+            int arcno;
+
+            oid.buf = vbuf;
+            oid.size = tlv_len;
+
+            arcno = RELATIVE_OID_get_arcs(&oid, arcs, tlv_len);
+            if(arcno >= 0) {
+                assert(arcno <= tlv_len);
+                printf(" F>");
+                for(i = 0; i < arcno; i++) {
+                    if(i) printf(".");
+                    printf("%" PRIu32, arcs[i]);
+                }
+                FREEMEM(vbuf);
+                vbuf = 0;
+            }
+        }
+        break;
+    default:
+        break;
+    }
+
+    /*
+     * If the buffer was not consumed, print it out.
+     * It might be an OCTET STRING or other primitive type,
+     * which might actually be printable, but we need to figure it out.
+     */
+    if(vbuf) {
+        int binary;
+
+        /*
+         * Check whether the data could be represented as text
+         */
+        binary = -1 * (tlv_len >> 3); /* Threshold is 12.5% binary */
+        for(i = 0; i < tlv_len; i++) {
+            switch(vbuf[i]) {
+            case 0x1b:
+                binary = 1;
+                break;
+            case 0x09:
+            case 0x0a:
+            case 0x0d:
+                continue;
+            default:
+                if(vbuf[i] < 0x20 || vbuf[i] >= 0x7f)
+                    if(++binary > 0) /* Way too many */
+                        break;
+                continue;
+            }
+            break;
+        }
+        printf(">");
+        for(i = 0; i < tlv_len; i++) {
+            if(binary > 0 || vbuf[i] < 0x20 || vbuf[i] >= 0x7f
+               || vbuf[i] == 0x26 /* '&' */
+               || vbuf[i] == 0x3c /* '<' */
+               || vbuf[i] == 0x3e /* '>' */
+               )
+                printf("&#x%02x;", vbuf[i]);
+            else
+                printf("%c", vbuf[i]);
+        }
+        FREEMEM(vbuf);
+    }
+
+    if(arcs) FREEMEM(arcs);
+    return 0;
+}
+
+
+static int
+decode_tlv_from_string(const char *datastring) {
+    unsigned char *data, *dp;
+    size_t dsize; /* Data size */
+    ssize_t len;
+    ber_tlv_tag_t tlv_tag;
+    ber_tlv_len_t tlv_len;
+    const char *p;
+    int half;
+
+    dsize = strlen(datastring) + 1;
+    dp = data = CALLOC(1, dsize);
+    assert(data);
+
+    for(half = 0, p = datastring; *p; p++) {
+        /* clang-format off */
+               switch(*p) {
+               case '0': case '1': case '2': case '3': case '4':
+               case '5': case '6': case '7': case '8': case '9':
+                       *dp |= *p - '0'; break;
+               case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+                       *dp |= *p - 'A' + 10; break;
+               case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+                       *dp |= *p - 'a' + 10; break;
+               case ' ': case '\t': case '\r': case '\n':
+                       continue;
+               default:
+                       fprintf(stderr, "Unexpected symbols in data string:\n");
+                       fprintf(stderr, "%s\n", datastring);
+                       for(dp = data; datastring < p; datastring++, dp++)
+                               *dp = ' ';
+                       *dp = '\0';
+                       fprintf(stderr, "%s^ <- here\n", (char *)data);
+                       return -1;
+               }
+        /* clang-format on */
+        if(half)
+            dp++;
+        else
+            (*dp) <<= 4;
+        half = !half;
+    }
+
+    assert((size_t)(dp - data) <= dsize);
+    dsize = dp - data;
+
+    printf("BER: ");
+    for(dp = data; dp < data + dsize; dp++) printf("%02X", *dp);
+    printf("\n");
+
+    len = ber_fetch_tag(data, dsize, &tlv_tag);
+    switch(len) {
+    case -1:
+        fprintf(stderr, "TAG: Fatal error decoding tag\n");
+        return -1;
+    case 0:
+        fprintf(stderr, "TAG: More data expected\n");
+        return -1;
+    default:
+        printf("TAG: ");
+        ber_tlv_tag_fwrite(tlv_tag, stdout);
+        if(BER_TLV_CONSTRUCTED(data)) {
+            printf(" (constructed)");
+        } else if(dsize >= 2 && data[0] == 0 && data[1] == 0) {
+            printf(" (end-of-content)");
+        } else {
+            printf(" (primitive)");
+        }
+        if(BER_TAG_CLASS(tlv_tag) == ASN_TAG_CLASS_UNIVERSAL) {
+            const char *str;
+            ber_tlv_tag_t tvalue = BER_TAG_VALUE(tlv_tag);
+            str = ASN_UNIVERSAL_TAG2STR(tvalue);
+            if(str) printf(" \"%s\"", str);
+        }
+        printf("\n");
+    }
+
+    if(dsize > (size_t)len) {
+        len = ber_fetch_length(BER_TLV_CONSTRUCTED(data), data + len,
+                               dsize - len, &tlv_len);
+        switch(len) {
+        case -1:
+            fprintf(stderr, "LEN: Fatal error decoding length\n");
+            return -1;
+        case 0:
+            fprintf(stderr, "LEN: More data expected\n");
+            return -1;
+        default:
+            if(tlv_len == (ber_tlv_len_t)-1)
+                printf("LEN: Indefinite length encoding\n");
+            else
+                printf("LEN: %ld bytes\n", (long)tlv_len);
+        }
+    }
+
+    return 0;
+}
+
+/*
+ * Dummy functions.
+ */
+asn_dec_rval_t
+ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx,
+               const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx,
+               const void *ptr, size_t size, int tag_mode, int last_tag_form,
+               ber_tlv_len_t *last_length, int *opt_tlv_form) {
+    asn_dec_rval_t rv = {0, 0};
+    (void)opt_codec_ctx;
+    (void)td;
+    (void)opt_ctx;
+    (void)ptr;
+    (void)size;
+    (void)tag_mode;
+    (void)last_tag_form;
+    (void)last_length;
+    (void)opt_tlv_form;
+    return rv;
+}
+
+ssize_t
+der_write_tags(const asn_TYPE_descriptor_t *td, size_t slen, int tag_mode,
+               int last_tag_form, ber_tlv_tag_t tag,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+    (void)td;
+    (void)slen;
+    (void)tag_mode;
+    (void)last_tag_form;
+    (void)tag;
+    (void)cb;
+    (void)app_key;
+    return -1;
+}
+
+asn_dec_rval_t
+xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx,
+                   void *struct_key, const char *xml_tag, const void *buf_ptr,
+                   size_t size,
+                   int (*otd)(void *struct_key, const void *chunk_buf,
+                              size_t chunk_size),
+                   ssize_t (*br)(void *struct_key, const void *chunk_buf,
+                                 size_t chunk_size, int have_more)) {
+    asn_dec_rval_t rv = {0, 0};
+    (void)opt_codec_ctx;
+    (void)ctx;
+    (void)struct_key;
+    (void)xml_tag;
+    (void)buf_ptr;
+    (void)size;
+    (void)otd;
+    (void)br;
+    return rv;
+}
+
+size_t
+xer_whitespace_span(const void *chunk_buf, size_t chunk_size) {
+    (void)chunk_buf;
+    (void)chunk_size;
+    return 0;
+}
+
+int
+OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *a,
+                     const void *b) {
+    (void)td;
+    (void)a;
+    (void)b;
+    return 0;
+}
+
+intmax_t
+asn_random_between(intmax_t a, intmax_t b) {
+    (void)b;
+    return a;
+};
+
diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0
new file mode 100644 (file)
index 0000000..bc1c70d
--- /dev/null
@@ -0,0 +1,21483 @@
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.69 for asn1c 0.9.29.
+@%:@
+@%:@ Report bugs to <vlm@lionet.info>.
+@%:@ 
+@%:@ 
+@%:@ 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 vlm@lionet.info
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: 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 @S|@? 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 "@S|@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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 @S|@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'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+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=.
+LIB@&t@OBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='asn1c'
+PACKAGE_TARNAME='asn1c'
+PACKAGE_VERSION='0.9.29'
+PACKAGE_STRING='asn1c 0.9.29'
+PACKAGE_BUGREPORT='vlm@lionet.info'
+PACKAGE_URL=''
+
+# 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_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIB@&t@OBJS
+HAVE_PANDOC_FALSE
+HAVE_PANDOC_TRUE
+PANDOC
+TEST_64BIT_FALSE
+TEST_64BIT_TRUE
+ASAN_ENV_FLAGS
+SKELETONS_CFLAGS
+TESTSUITE_CFLAGS
+SANITIZER_CFLAGS
+LIBFUZZER_CFLAGS
+ADD_CFLAGS
+EXPLICIT_M32_FALSE
+EXPLICIT_M32_TRUE
+CFLAGS_M32
+CODE_COVERAGE_RULES
+CODE_COVERAGE_LDFLAGS
+CODE_COVERAGE_LIBS
+CODE_COVERAGE_CXXFLAGS
+CODE_COVERAGE_CFLAGS
+CODE_COVERAGE_CPPFLAGS
+GENHTML
+LCOV
+GCOV
+CODE_COVERAGE_ENABLED
+CODE_COVERAGE_ENABLED_FALSE
+CODE_COVERAGE_ENABLED_TRUE
+CXXCPP
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+ac_ct_AR
+AR
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+YFLAGS
+YACC
+LN_S
+CPP
+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
+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
+runstatedir
+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_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_ASN_DEBUG
+with_gcov
+enable_code_coverage
+enable_Werror
+enable_test_Werror
+enable_test_32bit
+enable_test_ubsan
+enable_test_asan
+enable_test_fuzzer
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS
+CXX
+CXXFLAGS
+CCC
+LT_SYS_LIBRARY_PATH
+CXXCPP'
+
+
+# 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'
+runstatedir='${localstatedir}/run'
+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 ;;
+
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
+  -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 runstatedir
+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 asn1c 0.9.29 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
+                          @<:@@S|@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]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
+  --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/asn1c@:>@
+  --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 asn1c 0.9.29:";;
+   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-dependency-tracking 
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking 
+                          speeds up one-time build
+  --enable-shared@<:@=PKGS@:>@  build shared libraries @<:@default=yes@:>@
+  --enable-static@<:@=PKGS@:>@  build static libraries @<:@default=yes@:>@
+  --enable-fast-install@<:@=PKGS@:>@ 
+                          optimize for fast installation @<:@default=yes@:>@
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-ASN_DEBUG      produce debug log during `make check` testing
+  --enable-code-coverage  enable code coverage statistics collection
+  --enable-Werror         abort compilation after any C compiler warning
+  --enable-test-Werror    abort compiling tests after any C compiler warning
+  --enable-test-32bit     enable tests for 32-bit compatibility
+  --disable-test-ubsan    disable Undefined Behavior Sanitizer for tests
+  --disable-test-asan     disable Address Sanitizer for tests
+  --enable-test-fuzzer    enable LLVM LibFuzzer for randomized testing
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic@<:@=PKGS@:>@       try to use only PIC/non-PIC objects @<:@default=use
+                          both@:>@
+  --with-aix-soname=aix|svr4|both 
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, @<:@default=aix@:>@.
+  --with-gnu-ld           assume the C compiler uses GNU ld @<:@default=no@:>@
+  --with-sysroot@<:@=DIR@:>@    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
+  --with-gcov=GCOV        use given GCOV for coverage (GCOV=gcov).
+
+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
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to @S|@YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LT_SYS_LIBRARY_PATH 
+              User-defined run-time library search path.
+  CXXCPP      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 <vlm@lionet.info>.
+_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
+asn1c configure 0.9.29
+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.@S|@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_cpp LINENO
+@%:@ ----------------------
+@%:@ Try to preprocess conftest.@S|@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_try_link LINENO
+@%:@ -----------------------
+@%:@ Try to link conftest.@S|@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_cxx_try_compile LINENO
+@%:@ ----------------------------
+@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_compile
+
+@%:@ 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_try_run LINENO
+@%:@ ----------------------
+@%:@ Try to link conftest.@S|@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_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_cxx_try_cpp LINENO
+@%:@ ------------------------
+@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_try_cpp
+
+@%:@ ac_fn_cxx_try_link LINENO
+@%:@ -------------------------
+@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_link
+
+@%:@ 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 vlm@lionet.info ##
+## ------------------------------ ##"
+     ) | 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_compute_int LINENO EXPR VAR INCLUDES
+@%:@ --------------------------------------------
+@%:@ Tries to find the compile-time value of EXPR in a program that includes
+@%:@ INCLUDES, setting VAR accordingly. Returns whether the value could be
+@%:@ computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) < 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in @%:@((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+@%:@include <stdio.h>
+@%:@include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} @%:@ ac_fn_c_compute_int
+
+@%:@ 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 asn1c $as_me 0.9.29, 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
+
+# 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
+
+
+
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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.
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+am__api_version='1.15'
+
+# 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; }
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+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+set}" != 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; }
+
+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
+
+@%:@ 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=1;;
+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='\'
+
+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='asn1c'
+ VERSION='0.9.29'
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE "$PACKAGE"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+@%:@define VERSION "$VERSION"
+_ACEOF
+
+# 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"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  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}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+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
+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
+
+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 whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_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.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != 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
+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 10 /bin/sh.
+      echo '/* dummy */' > 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
+
+
+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 whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; 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, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+{ $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
+
+for ac_prog in 'bison -y' byacc
+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_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # 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_YACC="$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
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+
+for ac_prog in flex lex
+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_LEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LEX"; then
+  ac_cv_prog_LEX="$LEX" # 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_LEX="$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
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+  cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+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 "$LEX conftest.l") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+if test -f lex.yy.c; then
+  ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+  ac_cv_prog_lex_root=lexyy
+else
+  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+  
+$as_echo "@%:@define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar lib "link -lib"
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar lib "link -lib"
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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_cv_ar_interface=ar
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+  ;;
+esac
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # 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_CXX="$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
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  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
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# 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
+
+{ $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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+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
+
+depcc="$CXX"  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_CXX_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_CXX_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 10 /bin/sh.
+      echo '/* dummy */' > 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_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if 
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+CXXFLAGS="-std=c++11"
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# 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
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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 fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_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 fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_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_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+test -z "$GREP" && GREP=grep
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  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
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+    
+    
+    
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+    
+    
+    
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump"
+    $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
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump"
+    $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  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
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+    
+    
+    
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool"
+    $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
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool"
+    $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  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
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+    
+    
+    
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test 0 -eq "$ac_status"; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+       if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+    
+    
+    
+
+
+
+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
+
+test -z "$STRIP" && STRIP=:
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    $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
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
+    $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+    
+    
+    
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t@_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
+         LIBS=conftstm.$ac_objext
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+           pipe_works=yes
+         fi
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+@%:@ Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot; 
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_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 dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+    
+    
+    
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+@%:@ Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock; 
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE=32
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE=64
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $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
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt"
+    $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  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
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+
+    
+    
+    
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $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
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil"
+    $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  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
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit"
+    $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
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit"
+    $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  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
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo"
+    $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
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo"
+    $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_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  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
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool"
+    $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
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool"
+    $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  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
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64"
+    $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
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64"
+    $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  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
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&5
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS=$save_LDFLAGS
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&5
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[012][,.]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+{ $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
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DLFCN_H 1
+_ACEOF
+fi
+
+done
+
+
+
+
+func_stripname_cnf ()
+{
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+  
+
+  enable_win32_dll=no
+  
+
+            @%:@ Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  @%:@ Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  
+@%:@ Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+       IFS=$lt_save_ifs
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+
+    
+    
+    
+
+
+  @%:@ Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+    
+    
+    
+
+
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+  
+@%:@ Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+    
+    
+    
+
+
+  
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+test -z "$LN_S" && LN_S="ln -s"
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+    
+    
+    
+
+cat >>confdefs.h <<_ACEOF
+@%:@define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+    
+    
+    
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+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
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+    
+    
+    
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      nagfor*)
+       # NAG Fortran compiler
+       lt_prog_compiler_wl='-Wl,-Wl,,'
+       lt_prog_compiler_pic='-PIC'
+       lt_prog_compiler_static='-Bstatic'
+       ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Qoption ld '
+         ;;
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+        *Intel*\ [CF]*Compiler*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fPIC'
+         lt_prog_compiler_static='-static'
+         ;;
+       *Portland\ Group*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fpic'
+         lt_prog_compiler_static='-Bstatic'
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+    
+    
+    
+
+
+
+    
+    
+    
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+         *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test no = "$tmp_diet"
+      then
+       tmp_addflag=' $pic_flag'
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+       xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       tcc*)
+         export_dynamic_flag_spec='-rdynamic'
+         ;;
+       xlf* | bgf* | bgxlf* | mpixlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+         if test yes = "$supports_anon_versioning"; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs"; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX nm.
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       hardcode_direct=no
+       hardcode_direct_absolute=no
+       ;;
+      esac
+
+      if test yes = "$GCC"; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
+       fi
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
+      else
+       # not using gcc
+       if test ia64 = "$host_cpu"; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
+         else
+           shared_flag='$wl-bM:SRE'
+         fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
+       fi
+      fi
+
+      export_dynamic_flag_spec='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+       if test ia64 = "$host_cpu"; then
+         hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' $wl-bernotok'
+         allow_undefined_flag=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
+           # We only use this code for GNU lds that support --whole-archive.
+           whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec='$convenience'
+         fi
+         archive_cmds_need_lc=yes
+         archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       always_export_symbols=yes
+       file_list_spec='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+       enable_shared_with_static_runtimes=yes
+       exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       old_postinstall_cmds='chmod 644 $oldlib'
+       postlink_cmds='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       old_archive_from_new_cmds='true'
+       # FIXME: Should let the user specify the lib program.
+       old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       enable_shared_with_static_runtimes=yes
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      
+  
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='$wl-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+       
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+         ;;
+       esac
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='$wl-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+       # This should be the same for all languages, so no per-tag cache variable.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+       fi
+       link_all_deplibs=no
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       ld_shlibs=yes
+       archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+         export_dynamic_flag_spec='$wl-E'
+       else
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='$wl'
+         archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test yes = "$GCC"; then
+         whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='$wl-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='$wl-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl
+         pic_flag=$lt_prog_compiler_pic
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag
+         allow_undefined_flag=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc=no
+         else
+           lt_cv_archive_cmds_need_lc=yes
+         fi
+         allow_undefined_flag=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test yes = "$hardcode_automatic"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+    
+    
+    
+
+
+  if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    
+fi
+
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+             
+fi
+
+           
+fi
+
+         
+fi
+
+       
+fi
+
+      
+fi
+
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+      
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $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; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+  # Report what library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+  
+
+
+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
+
+CC=$lt_save_CC
+
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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_CXXCPP=$CXXCPP
+  
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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 \"$CXXCPP\" 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
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
+
+      
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+             # With aix-soname=svr4, we create the lib.so.V shared archives only,
+             # so we don't have lib.a shared libs to link our executables.
+             # We have to force runtime linking in this case.
+             aix_use_runtimelinking=yes
+             LDFLAGS="$LDFLAGS -Wl,-brtl"
+           fi
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;      # no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          hardcode_direct_CXX=no
+          hardcode_direct_absolute_CXX=no
+          ;;
+        esac
+
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
+         fi
+         # Need to ensure runtime linking is disabled for the traditional
+         # shared library, or the linker may eventually find shared libraries
+         # /with/ Import File - we do not want to mix them.
+         shared_flag_aix='-shared'
+         shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
+           else
+             shared_flag='$wl-bM:SRE'
+           fi
+           shared_flag_aix='$wl-bM:SRE'
+           shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+       if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          no_undefined_flag_CXX='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+           hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+           hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' $wl-bernotok'
+           allow_undefined_flag_CXX=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
+             # We only use this code for GNU lds that support --whole-archive.
+             whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             whole_archive_flag_spec_CXX='$convenience'
+           fi
+           archive_cmds_need_lc_CXX=yes
+           archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+           # -brtl affects multiple linker settings, -berok does not and is overridden later
+           compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+           if test svr4 != "$with_aix_soname"; then
+             # This is similar to how AIX traditionally builds its shared
+             # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+           fi
+           if test aix != "$with_aix_soname"; then
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           else
+             # used by -dlpreopen to get the symbols
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+           fi
+           archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX=' '
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=yes
+         file_list_spec_CXX='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=.dll
+         # FIXME: Setting linknames here is a bad hack.
+         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[     ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+         enable_shared_with_static_runtimes_CXX=yes
+         # Don't use ranlib
+         old_postinstall_cmds_CXX='chmod 644 $oldlib'
+         postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+         # as there is no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX='-L$libdir'
+         export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=no
+         enable_shared_with_static_runtimes_CXX=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           ld_shlibs_CXX=no
+         fi
+         ;;
+       esac
+       ;;
+      darwin* | rhapsody*)
+        
+  
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      os2*)
+       hardcode_libdir_flag_spec_CXX='-L$libdir'
+       hardcode_minus_L_CXX=yes
+       allow_undefined_flag_CXX=unsupported
+       shrext_cmds=.dll
+       archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         prefix_cmds="$SED"~
+         if test EXPORTS = "`$SED 1q $export_symbols`"; then
+           prefix_cmds="$prefix_cmds -e 1d";
+         fi~
+         prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+         cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+       enable_shared_with_static_runtimes_CXX=yes
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='$wl-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+         hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='$wl-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           *) # Version 6 and above use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           ;;
+         xl* | mpixl* | bgxl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='func_echo_all'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd* | bitrig*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='$wl-E'
+           whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=func_echo_all
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+         *)
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands '-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='func_echo_all'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             no_undefined_flag_CXX=' $wl-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='$wl-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We CANNOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='$wl-z,text'
+       allow_undefined_flag_CXX='$wl-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='$wl-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+              '"$old_archive_cmds_CXX"
+           reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+              '"$reload_cmds_CXX"
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+    GCC_CXX=$GXX
+    LD_CXX=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+        prev=$p
+        continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
+        -L | -R)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX=$prev$p
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX=$prev$p
+        else
+          postdeps_CXX="${postdeps_CXX} $prev$p"
+        fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX=$p
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX=$p
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static_CXX='$wl-static'
+       ;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test ia64 = "$host_cpu"; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64, which still supported -KPIC.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_CXX=no
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl_CXX
+         pic_flag=$lt_prog_compiler_pic_CXX
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+         allow_undefined_flag_CXX=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc_CXX=no
+         else
+           lt_cv_archive_cmds_need_lc_CXX=yes
+         fi
+         allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test yes = "$hardcode_automatic_CXX"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_CXX" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+    
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+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
+
+
+
+
+
+
+
+
+       
+       
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+@%:@ 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='\'
+
+
+case "$host_os" in
+cygwin)
+       case "$target" in
+       *mingw*)
+               CC="$CC -mno-cygwin"
+       esac
+       ;;
+esac
+
+@%:@ Check whether --enable-ASN_DEBUG was given.
+if test "${enable_ASN_DEBUG+set}" = set; then :
+  enableval=$enable_ASN_DEBUG; enable_asn_debug=$enableval
+else
+  enable_asn_debug=no
+fi
+
+  if test x$enable_asn_debug != xno; then :
+  
+      TESTSUITE_CFLAGS="-DASN_EMIT_DEBUG"
+      SKELETONS_CFLAGS="-DASN_EMIT_DEBUG"
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wall" >&5
+$as_echo_n "checking whether C compiler accepts -Wall... " >&6; }
+if ${ax_cv_check_cflags___Wall+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wall"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wall=yes
+else
+  ax_cv_check_cflags___Wall=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wall" >&5
+$as_echo "$ax_cv_check_cflags___Wall" >&6; }
+if test x"$ax_cv_check_cflags___Wall" = xyes; then :
+  CFLAGS="$CFLAGS -Wall"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wcast-qual" >&5
+$as_echo_n "checking whether C compiler accepts -Wcast-qual... " >&6; }
+if ${ax_cv_check_cflags___Wcast_qual+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wcast-qual"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wcast_qual=yes
+else
+  ax_cv_check_cflags___Wcast_qual=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wcast_qual" >&5
+$as_echo "$ax_cv_check_cflags___Wcast_qual" >&6; }
+if test x"$ax_cv_check_cflags___Wcast_qual" = xyes; then :
+  CFLAGS="$CFLAGS -Wcast-qual"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wchar-subscripts" >&5
+$as_echo_n "checking whether C compiler accepts -Wchar-subscripts... " >&6; }
+if ${ax_cv_check_cflags___Wchar_subscripts+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wchar-subscripts"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wchar_subscripts=yes
+else
+  ax_cv_check_cflags___Wchar_subscripts=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wchar_subscripts" >&5
+$as_echo "$ax_cv_check_cflags___Wchar_subscripts" >&6; }
+if test x"$ax_cv_check_cflags___Wchar_subscripts" = xyes; then :
+  CFLAGS="$CFLAGS -Wchar-subscripts"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-prototypes" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-prototypes... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_prototypes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-prototypes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_prototypes=yes
+else
+  ax_cv_check_cflags___Wmissing_prototypes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_prototypes" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_prototypes" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_prototypes" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-prototypes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-declarations" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-declarations... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_declarations+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-declarations"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_declarations=yes
+else
+  ax_cv_check_cflags___Wmissing_declarations=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_declarations" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_declarations" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_declarations" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-declarations"
+else
+  :
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=attributes" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=attributes... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_attributes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=attributes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_attributes=yes
+else
+  ax_cv_check_cflags___Wno_error_attributes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_attributes" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_attributes" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_attributes" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=attributes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=cast-align" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=cast-align... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_cast_align+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=cast-align"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_cast_align=yes
+else
+  ax_cv_check_cflags___Wno_error_cast_align=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_cast_align" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_cast_align" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_cast_align" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=cast-align"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=visibility" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=visibility... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_visibility+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=visibility"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_visibility=yes
+else
+  ax_cv_check_cflags___Wno_error_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_visibility" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_visibility" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_visibility" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=visibility"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=parentheses-equality" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=parentheses-equality... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_parentheses_equality+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=parentheses-equality"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_parentheses_equality=yes
+else
+  ax_cv_check_cflags___Wno_error_parentheses_equality=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_parentheses_equality" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_parentheses_equality" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_parentheses_equality" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=parentheses-equality"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=gnu99" >&5
+$as_echo_n "checking whether C compiler accepts -std=gnu99... " >&6; }
+if ${ax_cv_check_cflags___std_gnu99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=gnu99"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_gnu99=yes
+else
+  ax_cv_check_cflags___std_gnu99=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_gnu99" >&5
+$as_echo "$ax_cv_check_cflags___std_gnu99" >&6; }
+if test x"$ax_cv_check_cflags___std_gnu99" = xyes; then :
+  CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=unused-variable" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=unused-variable... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_unused_variable+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=unused-variable"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_unused_variable=yes
+else
+  ax_cv_check_cflags___Wno_error_unused_variable=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_unused_variable" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_unused_variable" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_unused_variable" = xyes; then :
+  TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"
+else
+  :
+fi
+
+
+
+
+               
+
+       # allow to override gcov location
+       
+@%:@ Check whether --with-gcov was given.
+if test "${with_gcov+set}" = set; then :
+  withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov
+else
+  _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov
+fi
+
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5
+$as_echo_n "checking whether to build with code coverage support... " >&6; }
+       @%:@ Check whether --enable-code-coverage was given.
+if test "${enable_code_coverage+set}" = set; then :
+  enableval=$enable_code_coverage; 
+else
+  enable_code_coverage=no
+fi
+
+
+        if test x$enable_code_coverage = xyes; then
+  CODE_COVERAGE_ENABLED_TRUE=
+  CODE_COVERAGE_ENABLED_FALSE='#'
+else
+  CODE_COVERAGE_ENABLED_TRUE='#'
+  CODE_COVERAGE_ENABLED_FALSE=
+fi
+
+       CODE_COVERAGE_ENABLED=$enable_code_coverage
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5
+$as_echo "$enable_code_coverage" >&6; }
+
+       if  test "$enable_code_coverage" = "yes" ; then :
+  
+               # check for gcov
+               if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GCOV"; then
+  ac_cv_prog_GCOV="$GCOV" # 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_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GCOV"; then
+  ac_ct_GCOV=$GCOV
+  # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GCOV"; then
+  ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # 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_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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_GCOV=$ac_cv_prog_ac_ct_GCOV
+if test -n "$ac_ct_GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5
+$as_echo "$ac_ct_GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GCOV" = x; then
+    GCOV=":"
+  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
+    GCOV=$ac_ct_GCOV
+  fi
+else
+  GCOV="$ac_cv_prog_GCOV"
+fi
+
+               if test "X$GCOV" = "X:"; then :
+  as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5
+fi
+               
+
+                               if  test "$GCC" = "no" ; then :
+  
+                       as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5
+               
+fi
+
+               # Extract the first word of "lcov", so it can be a program name with args.
+set dummy lcov; 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_LCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LCOV"; then
+  ac_cv_prog_LCOV="$LCOV" # 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_LCOV="lcov"
+    $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
+LCOV=$ac_cv_prog_LCOV
+if test -n "$LCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5
+$as_echo "$LCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+               # Extract the first word of "genhtml", so it can be a program name with args.
+set dummy genhtml; 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_GENHTML+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GENHTML"; then
+  ac_cv_prog_GENHTML="$GENHTML" # 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_GENHTML="genhtml"
+    $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
+GENHTML=$ac_cv_prog_GENHTML
+if test -n "$GENHTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5
+$as_echo "$GENHTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+               if  test -z "$LCOV" ; then :
+  
+                       as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5
+               
+fi
+
+               if  test -z "$GENHTML" ; then :
+  
+                       as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5
+               
+fi
+
+                               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -coverage" >&5
+$as_echo_n "checking whether C compiler accepts -coverage... " >&6; }
+if ${ax_cv_check_cflags___coverage+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -coverage"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___coverage=yes
+else
+  ax_cv_check_cflags___coverage=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___coverage" >&5
+$as_echo "$ax_cv_check_cflags___coverage" >&6; }
+if test x"$ax_cv_check_cflags___coverage" = xyes; then :
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               
+else
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                                               CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               
+fi
+
+
+               
+               
+               
+               
+               
+
+               CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+'
+               CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+'
+               CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+'
+       
+else
+  
+               CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+'
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       
+fi
+
+CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+'
+
+       
+       
+
+if test x$enable_code_coverage != xno; then :
+  
+       CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
+       # The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
+       # which removes assert(...) macros from code coverage and improves the
+       # branches score. But when it is defined it results in few
+       # unsed-but-set-variable warnings that are treated as errors in the travis-ci
+       # build because these variables are only used inside assert macros.
+       # error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
+       #CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
+       CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gcov_open" >&5
+$as_echo_n "checking for library containing gcov_open... " >&6; }
+if ${ac_cv_search_gcov_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 gcov_open ();
+int
+main ()
+{
+return gcov_open ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' gcov; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_gcov_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_gcov_open+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_gcov_open+:} false; then :
+  
+else
+  ac_cv_search_gcov_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_gcov_open" >&5
+$as_echo "$ac_cv_search_gcov_open" >&6; }
+ac_res=$ac_cv_search_gcov_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"
+fi
+
+
+fi
+
+SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=c89" >&5
+$as_echo_n "checking whether C compiler accepts -std=c89... " >&6; }
+if ${ax_cv_check_cflags___std_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=c89"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_c89=yes
+else
+  ax_cv_check_cflags___std_c89=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_c89" >&5
+$as_echo "$ax_cv_check_cflags___std_c89" >&6; }
+if test x"$ax_cv_check_cflags___std_c89" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wpedantic" >&5
+$as_echo_n "checking whether C compiler accepts -Wpedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__Wpedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -Wpedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__Wpedantic=yes
+else
+  ax_cv_check_cflags__Werror__Wpedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__Wpedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__Wpedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__Wpedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"
+else
+  
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -pedantic" >&5
+$as_echo_n "checking whether C compiler accepts -pedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__pedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -pedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__pedantic=yes
+else
+  ax_cv_check_cflags__Werror__pedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__pedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__pedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__pedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"
+else
+  :
+fi
+
+    
+fi
+ #clang 3.0 prints warning when the flag is not supported
+
+@%:@ Check whether --enable-Werror was given.
+if test "${enable_Werror+set}" = set; then :
+  enableval=$enable_Werror; enable_werror=$enableval
+else
+  enable_werror=no
+fi
+
+  if test x$enable_werror != xno; then :
+  
+      ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wgnu" >&5
+$as_echo_n "checking whether C compiler accepts -Wgnu... " >&6; }
+if ${ax_cv_check_cflags___Wgnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wgnu"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wgnu=yes
+else
+  ax_cv_check_cflags___Wgnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wgnu" >&5
+$as_echo "$ax_cv_check_cflags___Wgnu" >&6; }
+if test x"$ax_cv_check_cflags___Wgnu" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"
+else
+  :
+fi
+
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-long-long" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-long-long... " >&6; }
+if ${ax_cv_check_cflags___Wno_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-long-long"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_long_long=yes
+else
+  ax_cv_check_cflags___Wno_long_long=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_long_long" >&5
+$as_echo "$ax_cv_check_cflags___Wno_long_long" >&6; }
+if test x"$ax_cv_check_cflags___Wno_long_long" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"
+else
+  :
+fi
+
+
+@%:@ Check whether --enable-test-Werror was given.
+if test "${enable_test_Werror+set}" = set; then :
+  enableval=$enable_test_Werror; enable_test_werror=$enableval
+else
+  enable_test_werror=no
+fi
+
+  if test x$enable_test_werror != xno; then :
+  
+      TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
+  
+fi
+
+@%:@ Check whether --enable-test-32bit was given.
+if test "${enable_test_32bit+set}" = set; then :
+  enableval=$enable_test_32bit; enable_test_32bit=$enableval
+else
+  enable_test_32bit=no
+fi
+
+if test "x$enable_test_32bit" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -m32" >&5
+$as_echo_n "checking whether C compiler accepts -m32... " >&6; }
+if ${ax_cv_check_cflags___m32+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -m32"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___m32=yes
+else
+  ax_cv_check_cflags___m32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___m32" >&5
+$as_echo "$ax_cv_check_cflags___m32" >&6; }
+if test x"$ax_cv_check_cflags___m32" = xyes; then :
+  CFLAGS_M32="-m32 -DEXPLICIT_32BIT"
+else
+  
+        CFLAGS_M32=""
+        { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--enable-test-32bit=$enable_test_32bit is requested but not supported by the C compiler
+See \`config.log' for more details" "$LINENO" 5; }
+      
+fi
+
+
+fi
+
+ if test "x${CFLAGS_M32}" != "x"; then
+  EXPLICIT_M32_TRUE=
+  EXPLICIT_M32_FALSE='#'
+else
+  EXPLICIT_M32_TRUE='#'
+  EXPLICIT_M32_FALSE=
+fi
+
+
+SANITIZER_CFLAGS=""
+
+@%:@ Check whether --enable-test-ubsan was given.
+if test "${enable_test_ubsan+set}" = set; then :
+  enableval=$enable_test_ubsan; disable_test_ubsan=$enableval
+else
+  disable_test_ubsan=maybe
+fi
+
+if test "x$disable_test_ubsan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=undefined" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=undefined... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+void test(int *);void test(int *n) { *n = 0; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_undefined=yes
+else
+  ax_cv_check_cclflags___fsanitize_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_undefined" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_undefined" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"
+else
+  
+        if test "x$disable_test_ubsan" != xmaybe; 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 $? "--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=undefined" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=undefined... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_undefined" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_undefined" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int test(unsigned); int test(unsigned n) { return n + 1; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=nullability" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=nullability... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_nullability=yes
+else
+  ax_cv_check_cclflags___fsanitize_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_nullability" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_nullability" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=nullability" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=nullability... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_nullability" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_nullability" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"
+else
+  :
+fi
+
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+ASAN_ENV_FLAGS=""
+@%:@ Check whether --enable-test-asan was given.
+if test "${enable_test_asan+set}" = set; then :
+  enableval=$enable_test_asan; disable_test_asan=$enableval
+else
+  disable_test_asan=maybe
+fi
+
+if test "x$disable_test_asan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=address" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=address... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_address+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=address"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_address=yes
+else
+  ax_cv_check_cclflags___fsanitize_address=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_address" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_address" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_address" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"
+else
+  
+        if test "x$disable_test_asan" != xmaybe; 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 $? "--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+
+                ASAN_OPTIONS="detect_leaks=1"
+    export ASAN_OPTIONS
+    save_cflags="${CFLAGS}"
+    CFLAGS="${CFLAGS} ${SANITIZER_CFLAGS}"
+    if test "$cross_compiling" = yes; 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 $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  
+        ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
+    
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    CFLAGS="${save_cflags}"
+    unset ASAN_OPTIONS
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+LIBFUZZER_CFLAGS=""
+@%:@ Check whether --enable-test-fuzzer was given.
+if test "${enable_test_fuzzer+set}" = set; then :
+  enableval=$enable_test_fuzzer; enable_test_fuzzer=$enableval
+else
+  enable_test_fuzzer=no
+fi
+
+if test "x$enable_test_fuzzer" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=fuzzer" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=fuzzer... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_fuzzer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=fuzzer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_fuzzer=yes
+else
+  ax_cv_check_cclflags___fsanitize_fuzzer=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_fuzzer" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_fuzzer" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_fuzzer" = xyes; then :
+  LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"
+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 $? "--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+fi
+
+TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
+SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
+
+
+
+
+
+
+
+
+{ $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
+
+for ac_header in sys/param.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_SYS_PARAM_H 1
+_ACEOF
+fi
+
+done
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+           
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+          
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+             
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+          
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+             
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+             
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+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_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "@%:@define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+       
+$as_echo "@%:@define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define off_t long 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
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+  
+$as_echo "@%:@define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "__int128" "ac_cv_type___int128" "$ac_includes_default"
+if test "x$ac_cv_type___int128" = xyes; then :
+  
+$as_echo "@%:@define HAVE_128_BIT_INT 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define intmax_t int64_t
+_ACEOF
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+  
+else
+  if test "$ac_cv_type_void_p" = yes; 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 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+ if test "$ac_cv_sizeof_void_p" -eq 8; then
+  TEST_64BIT_TRUE=
+  TEST_64BIT_FALSE='#'
+else
+  TEST_64BIT_TRUE='#'
+  TEST_64BIT_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getopt" >&5
+$as_echo_n "checking for library containing getopt... " >&6; }
+if ${ac_cv_search_getopt+:} 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 getopt ();
+int
+main ()
+{
+return getopt ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' iberty; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_getopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_getopt+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_getopt+:} false; then :
+  
+else
+  ac_cv_search_getopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getopt" >&5
+$as_echo "$ac_cv_search_getopt" >&6; }
+ac_res=$ac_cv_search_getopt
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  
+fi
+
+
+for ac_func in strtoimax strtoll
+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
+
+for ac_func in mergesort
+do :
+  ac_fn_c_check_func "$LINENO" "mergesort" "ac_cv_func_mergesort"
+if test "x$ac_cv_func_mergesort" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MERGESORT 1
+_ACEOF
+fi
+done
+
+for ac_func in mkstemps
+do :
+  ac_fn_c_check_func "$LINENO" "mkstemps" "ac_cv_func_mkstemps"
+if test "x$ac_cv_func_mkstemps" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MKSTEMPS 1
+_ACEOF
+fi
+done
+
+for ac_func in timegm
+do :
+  ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm"
+if test "x$ac_cv_func_timegm" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_TIMEGM 1
+_ACEOF
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_VASPRINTF $ac_have_decl
+_ACEOF
+
+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 symlink ();
+int
+main ()
+{
+return symlink ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+$as_echo "@%:@define HAVE_SYMLINK 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+# Extract the first word of "pandoc", so it can be a program name with args.
+set dummy pandoc; 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_PANDOC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PANDOC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PANDOC="$PANDOC" # 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_PANDOC="$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
+PANDOC=$ac_cv_path_PANDOC
+if test -n "$PANDOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5
+$as_echo "$PANDOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -n "$PANDOC"; then
+  HAVE_PANDOC_TRUE=
+  HAVE_PANDOC_FALSE='#'
+else
+  HAVE_PANDOC_TRUE='#'
+  HAVE_PANDOC_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files tests/tests-c-compiler/check-src/Makefile tests/tests-asn1c-compiler/Makefile tests/tests-asn1c-smoke/Makefile tests/tests-randomized/Makefile tests/tests-c-compiler/Makefile tests/tests-skeletons/Makefile libasn1compiler/Makefile libasn1common/Makefile libasn1parser/Makefile libasn1print/Makefile libasn1fix/Makefile doc/docsrc/Makefile skeletons/Makefile examples/Makefile doc/man/Makefile tests/Makefile asn1c/Makefile doc/Makefile Makefile"
+
+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 : $LIB@&t@OBJS; 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
+LIB@&t@OBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then
+  as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXPLICIT_M32_TRUE}" && test -z "${EXPLICIT_M32_FALSE}"; then
+  as_fn_error $? "conditional \"EXPLICIT_M32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${TEST_64BIT_TRUE}" && test -z "${TEST_64BIT_FALSE}"; then
+  as_fn_error $? "conditional \"TEST_64BIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PANDOC_TRUE}" && test -z "${HAVE_PANDOC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PANDOC\" 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 @S|@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 @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 "@S|@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 asn1c $as_me 0.9.29, 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 <vlm@lionet.info>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+asn1c config.status 0.9.29
+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"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_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
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "tests/tests-c-compiler/check-src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/check-src/Makefile" ;;
+    "tests/tests-asn1c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-compiler/Makefile" ;;
+    "tests/tests-asn1c-smoke/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-smoke/Makefile" ;;
+    "tests/tests-randomized/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-randomized/Makefile" ;;
+    "tests/tests-c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/Makefile" ;;
+    "tests/tests-skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-skeletons/Makefile" ;;
+    "libasn1compiler/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1compiler/Makefile" ;;
+    "libasn1common/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1common/Makefile" ;;
+    "libasn1parser/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1parser/Makefile" ;;
+    "libasn1print/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1print/Makefile" ;;
+    "libasn1fix/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1fix/Makefile" ;;
+    "doc/docsrc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/docsrc/Makefile" ;;
+    "skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES skeletons/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "asn1c/Makefile") CONFIG_FILES="$CONFIG_FILES asn1c/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) 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 = "\a"
+
+}
+{
+  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 = "\a"
+}
+/^[\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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+ ;;
+    "libtool":C) 
+    
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 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.
+
+# GNU Libtool 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 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags='CXX '
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  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/autom4te.cache/output.1 b/autom4te.cache/output.1
new file mode 100644 (file)
index 0000000..bc1c70d
--- /dev/null
@@ -0,0 +1,21483 @@
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.69 for asn1c 0.9.29.
+@%:@
+@%:@ Report bugs to <vlm@lionet.info>.
+@%:@ 
+@%:@ 
+@%:@ 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 vlm@lionet.info
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: 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 @S|@? 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 "@S|@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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 @S|@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'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+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=.
+LIB@&t@OBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='asn1c'
+PACKAGE_TARNAME='asn1c'
+PACKAGE_VERSION='0.9.29'
+PACKAGE_STRING='asn1c 0.9.29'
+PACKAGE_BUGREPORT='vlm@lionet.info'
+PACKAGE_URL=''
+
+# 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_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIB@&t@OBJS
+HAVE_PANDOC_FALSE
+HAVE_PANDOC_TRUE
+PANDOC
+TEST_64BIT_FALSE
+TEST_64BIT_TRUE
+ASAN_ENV_FLAGS
+SKELETONS_CFLAGS
+TESTSUITE_CFLAGS
+SANITIZER_CFLAGS
+LIBFUZZER_CFLAGS
+ADD_CFLAGS
+EXPLICIT_M32_FALSE
+EXPLICIT_M32_TRUE
+CFLAGS_M32
+CODE_COVERAGE_RULES
+CODE_COVERAGE_LDFLAGS
+CODE_COVERAGE_LIBS
+CODE_COVERAGE_CXXFLAGS
+CODE_COVERAGE_CFLAGS
+CODE_COVERAGE_CPPFLAGS
+GENHTML
+LCOV
+GCOV
+CODE_COVERAGE_ENABLED
+CODE_COVERAGE_ENABLED_FALSE
+CODE_COVERAGE_ENABLED_TRUE
+CXXCPP
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+ac_ct_AR
+AR
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+YFLAGS
+YACC
+LN_S
+CPP
+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
+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
+runstatedir
+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_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_ASN_DEBUG
+with_gcov
+enable_code_coverage
+enable_Werror
+enable_test_Werror
+enable_test_32bit
+enable_test_ubsan
+enable_test_asan
+enable_test_fuzzer
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS
+CXX
+CXXFLAGS
+CCC
+LT_SYS_LIBRARY_PATH
+CXXCPP'
+
+
+# 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'
+runstatedir='${localstatedir}/run'
+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 ;;
+
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
+  -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 runstatedir
+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 asn1c 0.9.29 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
+                          @<:@@S|@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]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
+  --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/asn1c@:>@
+  --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 asn1c 0.9.29:";;
+   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-dependency-tracking 
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking 
+                          speeds up one-time build
+  --enable-shared@<:@=PKGS@:>@  build shared libraries @<:@default=yes@:>@
+  --enable-static@<:@=PKGS@:>@  build static libraries @<:@default=yes@:>@
+  --enable-fast-install@<:@=PKGS@:>@ 
+                          optimize for fast installation @<:@default=yes@:>@
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-ASN_DEBUG      produce debug log during `make check` testing
+  --enable-code-coverage  enable code coverage statistics collection
+  --enable-Werror         abort compilation after any C compiler warning
+  --enable-test-Werror    abort compiling tests after any C compiler warning
+  --enable-test-32bit     enable tests for 32-bit compatibility
+  --disable-test-ubsan    disable Undefined Behavior Sanitizer for tests
+  --disable-test-asan     disable Address Sanitizer for tests
+  --enable-test-fuzzer    enable LLVM LibFuzzer for randomized testing
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic@<:@=PKGS@:>@       try to use only PIC/non-PIC objects @<:@default=use
+                          both@:>@
+  --with-aix-soname=aix|svr4|both 
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, @<:@default=aix@:>@.
+  --with-gnu-ld           assume the C compiler uses GNU ld @<:@default=no@:>@
+  --with-sysroot@<:@=DIR@:>@    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
+  --with-gcov=GCOV        use given GCOV for coverage (GCOV=gcov).
+
+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
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to @S|@YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LT_SYS_LIBRARY_PATH 
+              User-defined run-time library search path.
+  CXXCPP      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 <vlm@lionet.info>.
+_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
+asn1c configure 0.9.29
+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.@S|@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_cpp LINENO
+@%:@ ----------------------
+@%:@ Try to preprocess conftest.@S|@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_try_link LINENO
+@%:@ -----------------------
+@%:@ Try to link conftest.@S|@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_cxx_try_compile LINENO
+@%:@ ----------------------------
+@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_compile
+
+@%:@ 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_try_run LINENO
+@%:@ ----------------------
+@%:@ Try to link conftest.@S|@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_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_cxx_try_cpp LINENO
+@%:@ ------------------------
+@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_try_cpp
+
+@%:@ ac_fn_cxx_try_link LINENO
+@%:@ -------------------------
+@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_link
+
+@%:@ 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 vlm@lionet.info ##
+## ------------------------------ ##"
+     ) | 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_compute_int LINENO EXPR VAR INCLUDES
+@%:@ --------------------------------------------
+@%:@ Tries to find the compile-time value of EXPR in a program that includes
+@%:@ INCLUDES, setting VAR accordingly. Returns whether the value could be
+@%:@ computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) < 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in @%:@((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+@%:@include <stdio.h>
+@%:@include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} @%:@ ac_fn_c_compute_int
+
+@%:@ 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 asn1c $as_me 0.9.29, 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
+
+# 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
+
+
+
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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.
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+am__api_version='1.15'
+
+# 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; }
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+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+set}" != 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; }
+
+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
+
+@%:@ 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=1;;
+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='\'
+
+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='asn1c'
+ VERSION='0.9.29'
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE "$PACKAGE"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+@%:@define VERSION "$VERSION"
+_ACEOF
+
+# 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"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  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}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+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
+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
+
+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 whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_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.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != 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
+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 10 /bin/sh.
+      echo '/* dummy */' > 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
+
+
+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 whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; 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, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+{ $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
+
+for ac_prog in 'bison -y' byacc
+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_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # 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_YACC="$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
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+
+for ac_prog in flex lex
+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_LEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LEX"; then
+  ac_cv_prog_LEX="$LEX" # 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_LEX="$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
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+  cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+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 "$LEX conftest.l") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+if test -f lex.yy.c; then
+  ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+  ac_cv_prog_lex_root=lexyy
+else
+  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+  
+$as_echo "@%:@define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar lib "link -lib"
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar lib "link -lib"
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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_cv_ar_interface=ar
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+  ;;
+esac
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # 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_CXX="$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
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  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
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# 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
+
+{ $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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+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
+
+depcc="$CXX"  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_CXX_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_CXX_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 10 /bin/sh.
+      echo '/* dummy */' > 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_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if 
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+CXXFLAGS="-std=c++11"
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# 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
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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 fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_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 fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_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_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+test -z "$GREP" && GREP=grep
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  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
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+    
+    
+    
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+    
+    
+    
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump"
+    $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
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump"
+    $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  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
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+    
+    
+    
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool"
+    $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
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool"
+    $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  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
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+    
+    
+    
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test 0 -eq "$ac_status"; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+       if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+    
+    
+    
+
+
+
+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
+
+test -z "$STRIP" && STRIP=:
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    $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
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
+    $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+    
+    
+    
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t@_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
+         LIBS=conftstm.$ac_objext
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+           pipe_works=yes
+         fi
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+@%:@ Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot; 
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_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 dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+    
+    
+    
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+@%:@ Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock; 
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE=32
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE=64
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $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
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt"
+    $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  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
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+
+    
+    
+    
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $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
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil"
+    $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  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
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit"
+    $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
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit"
+    $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  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
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo"
+    $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
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo"
+    $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_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  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
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool"
+    $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
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool"
+    $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  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
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64"
+    $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
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64"
+    $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  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
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&5
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS=$save_LDFLAGS
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&5
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[012][,.]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+{ $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
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DLFCN_H 1
+_ACEOF
+fi
+
+done
+
+
+
+
+func_stripname_cnf ()
+{
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+  
+
+  enable_win32_dll=no
+  
+
+            @%:@ Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  @%:@ Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  
+@%:@ Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+       IFS=$lt_save_ifs
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+
+    
+    
+    
+
+
+  @%:@ Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+    
+    
+    
+
+
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+  
+@%:@ Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+    
+    
+    
+
+
+  
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+test -z "$LN_S" && LN_S="ln -s"
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+    
+    
+    
+
+cat >>confdefs.h <<_ACEOF
+@%:@define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+    
+    
+    
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+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
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+    
+    
+    
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      nagfor*)
+       # NAG Fortran compiler
+       lt_prog_compiler_wl='-Wl,-Wl,,'
+       lt_prog_compiler_pic='-PIC'
+       lt_prog_compiler_static='-Bstatic'
+       ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Qoption ld '
+         ;;
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+        *Intel*\ [CF]*Compiler*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fPIC'
+         lt_prog_compiler_static='-static'
+         ;;
+       *Portland\ Group*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fpic'
+         lt_prog_compiler_static='-Bstatic'
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+    
+    
+    
+
+
+
+    
+    
+    
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+         *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test no = "$tmp_diet"
+      then
+       tmp_addflag=' $pic_flag'
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+       xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       tcc*)
+         export_dynamic_flag_spec='-rdynamic'
+         ;;
+       xlf* | bgf* | bgxlf* | mpixlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+         if test yes = "$supports_anon_versioning"; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs"; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX nm.
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       hardcode_direct=no
+       hardcode_direct_absolute=no
+       ;;
+      esac
+
+      if test yes = "$GCC"; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
+       fi
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
+      else
+       # not using gcc
+       if test ia64 = "$host_cpu"; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
+         else
+           shared_flag='$wl-bM:SRE'
+         fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
+       fi
+      fi
+
+      export_dynamic_flag_spec='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+       if test ia64 = "$host_cpu"; then
+         hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' $wl-bernotok'
+         allow_undefined_flag=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
+           # We only use this code for GNU lds that support --whole-archive.
+           whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec='$convenience'
+         fi
+         archive_cmds_need_lc=yes
+         archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       always_export_symbols=yes
+       file_list_spec='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+       enable_shared_with_static_runtimes=yes
+       exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       old_postinstall_cmds='chmod 644 $oldlib'
+       postlink_cmds='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       old_archive_from_new_cmds='true'
+       # FIXME: Should let the user specify the lib program.
+       old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       enable_shared_with_static_runtimes=yes
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      
+  
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='$wl-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+       
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+         ;;
+       esac
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='$wl-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+       # This should be the same for all languages, so no per-tag cache variable.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+       fi
+       link_all_deplibs=no
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       ld_shlibs=yes
+       archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+         export_dynamic_flag_spec='$wl-E'
+       else
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='$wl'
+         archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test yes = "$GCC"; then
+         whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='$wl-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='$wl-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl
+         pic_flag=$lt_prog_compiler_pic
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag
+         allow_undefined_flag=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc=no
+         else
+           lt_cv_archive_cmds_need_lc=yes
+         fi
+         allow_undefined_flag=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test yes = "$hardcode_automatic"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+    
+    
+    
+
+
+  if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    
+fi
+
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+             
+fi
+
+           
+fi
+
+         
+fi
+
+       
+fi
+
+      
+fi
+
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+      
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $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; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+  # Report what library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+  
+
+
+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
+
+CC=$lt_save_CC
+
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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_CXXCPP=$CXXCPP
+  
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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 \"$CXXCPP\" 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
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
+
+      
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+             # With aix-soname=svr4, we create the lib.so.V shared archives only,
+             # so we don't have lib.a shared libs to link our executables.
+             # We have to force runtime linking in this case.
+             aix_use_runtimelinking=yes
+             LDFLAGS="$LDFLAGS -Wl,-brtl"
+           fi
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;      # no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          hardcode_direct_CXX=no
+          hardcode_direct_absolute_CXX=no
+          ;;
+        esac
+
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
+         fi
+         # Need to ensure runtime linking is disabled for the traditional
+         # shared library, or the linker may eventually find shared libraries
+         # /with/ Import File - we do not want to mix them.
+         shared_flag_aix='-shared'
+         shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
+           else
+             shared_flag='$wl-bM:SRE'
+           fi
+           shared_flag_aix='$wl-bM:SRE'
+           shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+       if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          no_undefined_flag_CXX='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+           hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+           hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' $wl-bernotok'
+           allow_undefined_flag_CXX=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
+             # We only use this code for GNU lds that support --whole-archive.
+             whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             whole_archive_flag_spec_CXX='$convenience'
+           fi
+           archive_cmds_need_lc_CXX=yes
+           archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+           # -brtl affects multiple linker settings, -berok does not and is overridden later
+           compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+           if test svr4 != "$with_aix_soname"; then
+             # This is similar to how AIX traditionally builds its shared
+             # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+           fi
+           if test aix != "$with_aix_soname"; then
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           else
+             # used by -dlpreopen to get the symbols
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+           fi
+           archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX=' '
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=yes
+         file_list_spec_CXX='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=.dll
+         # FIXME: Setting linknames here is a bad hack.
+         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[     ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+         enable_shared_with_static_runtimes_CXX=yes
+         # Don't use ranlib
+         old_postinstall_cmds_CXX='chmod 644 $oldlib'
+         postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+         # as there is no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX='-L$libdir'
+         export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=no
+         enable_shared_with_static_runtimes_CXX=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           ld_shlibs_CXX=no
+         fi
+         ;;
+       esac
+       ;;
+      darwin* | rhapsody*)
+        
+  
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      os2*)
+       hardcode_libdir_flag_spec_CXX='-L$libdir'
+       hardcode_minus_L_CXX=yes
+       allow_undefined_flag_CXX=unsupported
+       shrext_cmds=.dll
+       archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         prefix_cmds="$SED"~
+         if test EXPORTS = "`$SED 1q $export_symbols`"; then
+           prefix_cmds="$prefix_cmds -e 1d";
+         fi~
+         prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+         cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+       enable_shared_with_static_runtimes_CXX=yes
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='$wl-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+         hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='$wl-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           *) # Version 6 and above use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           ;;
+         xl* | mpixl* | bgxl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='func_echo_all'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd* | bitrig*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='$wl-E'
+           whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=func_echo_all
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+         *)
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands '-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='func_echo_all'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             no_undefined_flag_CXX=' $wl-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='$wl-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We CANNOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='$wl-z,text'
+       allow_undefined_flag_CXX='$wl-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='$wl-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+              '"$old_archive_cmds_CXX"
+           reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+              '"$reload_cmds_CXX"
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+    GCC_CXX=$GXX
+    LD_CXX=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+        prev=$p
+        continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
+        -L | -R)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX=$prev$p
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX=$prev$p
+        else
+          postdeps_CXX="${postdeps_CXX} $prev$p"
+        fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX=$p
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX=$p
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static_CXX='$wl-static'
+       ;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test ia64 = "$host_cpu"; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64, which still supported -KPIC.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_CXX=no
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl_CXX
+         pic_flag=$lt_prog_compiler_pic_CXX
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+         allow_undefined_flag_CXX=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc_CXX=no
+         else
+           lt_cv_archive_cmds_need_lc_CXX=yes
+         fi
+         allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test yes = "$hardcode_automatic_CXX"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_CXX" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+    
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+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
+
+
+
+
+
+
+
+
+       
+       
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+@%:@ 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='\'
+
+
+case "$host_os" in
+cygwin)
+       case "$target" in
+       *mingw*)
+               CC="$CC -mno-cygwin"
+       esac
+       ;;
+esac
+
+@%:@ Check whether --enable-ASN_DEBUG was given.
+if test "${enable_ASN_DEBUG+set}" = set; then :
+  enableval=$enable_ASN_DEBUG; enable_asn_debug=$enableval
+else
+  enable_asn_debug=no
+fi
+
+  if test x$enable_asn_debug != xno; then :
+  
+      TESTSUITE_CFLAGS="-DASN_EMIT_DEBUG"
+      SKELETONS_CFLAGS="-DASN_EMIT_DEBUG"
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wall" >&5
+$as_echo_n "checking whether C compiler accepts -Wall... " >&6; }
+if ${ax_cv_check_cflags___Wall+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wall"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wall=yes
+else
+  ax_cv_check_cflags___Wall=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wall" >&5
+$as_echo "$ax_cv_check_cflags___Wall" >&6; }
+if test x"$ax_cv_check_cflags___Wall" = xyes; then :
+  CFLAGS="$CFLAGS -Wall"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wcast-qual" >&5
+$as_echo_n "checking whether C compiler accepts -Wcast-qual... " >&6; }
+if ${ax_cv_check_cflags___Wcast_qual+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wcast-qual"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wcast_qual=yes
+else
+  ax_cv_check_cflags___Wcast_qual=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wcast_qual" >&5
+$as_echo "$ax_cv_check_cflags___Wcast_qual" >&6; }
+if test x"$ax_cv_check_cflags___Wcast_qual" = xyes; then :
+  CFLAGS="$CFLAGS -Wcast-qual"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wchar-subscripts" >&5
+$as_echo_n "checking whether C compiler accepts -Wchar-subscripts... " >&6; }
+if ${ax_cv_check_cflags___Wchar_subscripts+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wchar-subscripts"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wchar_subscripts=yes
+else
+  ax_cv_check_cflags___Wchar_subscripts=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wchar_subscripts" >&5
+$as_echo "$ax_cv_check_cflags___Wchar_subscripts" >&6; }
+if test x"$ax_cv_check_cflags___Wchar_subscripts" = xyes; then :
+  CFLAGS="$CFLAGS -Wchar-subscripts"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-prototypes" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-prototypes... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_prototypes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-prototypes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_prototypes=yes
+else
+  ax_cv_check_cflags___Wmissing_prototypes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_prototypes" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_prototypes" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_prototypes" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-prototypes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-declarations" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-declarations... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_declarations+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-declarations"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_declarations=yes
+else
+  ax_cv_check_cflags___Wmissing_declarations=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_declarations" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_declarations" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_declarations" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-declarations"
+else
+  :
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=attributes" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=attributes... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_attributes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=attributes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_attributes=yes
+else
+  ax_cv_check_cflags___Wno_error_attributes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_attributes" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_attributes" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_attributes" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=attributes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=cast-align" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=cast-align... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_cast_align+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=cast-align"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_cast_align=yes
+else
+  ax_cv_check_cflags___Wno_error_cast_align=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_cast_align" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_cast_align" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_cast_align" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=cast-align"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=visibility" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=visibility... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_visibility+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=visibility"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_visibility=yes
+else
+  ax_cv_check_cflags___Wno_error_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_visibility" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_visibility" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_visibility" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=visibility"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=parentheses-equality" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=parentheses-equality... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_parentheses_equality+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=parentheses-equality"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_parentheses_equality=yes
+else
+  ax_cv_check_cflags___Wno_error_parentheses_equality=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_parentheses_equality" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_parentheses_equality" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_parentheses_equality" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=parentheses-equality"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=gnu99" >&5
+$as_echo_n "checking whether C compiler accepts -std=gnu99... " >&6; }
+if ${ax_cv_check_cflags___std_gnu99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=gnu99"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_gnu99=yes
+else
+  ax_cv_check_cflags___std_gnu99=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_gnu99" >&5
+$as_echo "$ax_cv_check_cflags___std_gnu99" >&6; }
+if test x"$ax_cv_check_cflags___std_gnu99" = xyes; then :
+  CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=unused-variable" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=unused-variable... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_unused_variable+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=unused-variable"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_unused_variable=yes
+else
+  ax_cv_check_cflags___Wno_error_unused_variable=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_unused_variable" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_unused_variable" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_unused_variable" = xyes; then :
+  TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"
+else
+  :
+fi
+
+
+
+
+               
+
+       # allow to override gcov location
+       
+@%:@ Check whether --with-gcov was given.
+if test "${with_gcov+set}" = set; then :
+  withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov
+else
+  _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov
+fi
+
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5
+$as_echo_n "checking whether to build with code coverage support... " >&6; }
+       @%:@ Check whether --enable-code-coverage was given.
+if test "${enable_code_coverage+set}" = set; then :
+  enableval=$enable_code_coverage; 
+else
+  enable_code_coverage=no
+fi
+
+
+        if test x$enable_code_coverage = xyes; then
+  CODE_COVERAGE_ENABLED_TRUE=
+  CODE_COVERAGE_ENABLED_FALSE='#'
+else
+  CODE_COVERAGE_ENABLED_TRUE='#'
+  CODE_COVERAGE_ENABLED_FALSE=
+fi
+
+       CODE_COVERAGE_ENABLED=$enable_code_coverage
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5
+$as_echo "$enable_code_coverage" >&6; }
+
+       if  test "$enable_code_coverage" = "yes" ; then :
+  
+               # check for gcov
+               if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GCOV"; then
+  ac_cv_prog_GCOV="$GCOV" # 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_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GCOV"; then
+  ac_ct_GCOV=$GCOV
+  # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GCOV"; then
+  ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # 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_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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_GCOV=$ac_cv_prog_ac_ct_GCOV
+if test -n "$ac_ct_GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5
+$as_echo "$ac_ct_GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GCOV" = x; then
+    GCOV=":"
+  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
+    GCOV=$ac_ct_GCOV
+  fi
+else
+  GCOV="$ac_cv_prog_GCOV"
+fi
+
+               if test "X$GCOV" = "X:"; then :
+  as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5
+fi
+               
+
+                               if  test "$GCC" = "no" ; then :
+  
+                       as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5
+               
+fi
+
+               # Extract the first word of "lcov", so it can be a program name with args.
+set dummy lcov; 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_LCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LCOV"; then
+  ac_cv_prog_LCOV="$LCOV" # 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_LCOV="lcov"
+    $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
+LCOV=$ac_cv_prog_LCOV
+if test -n "$LCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5
+$as_echo "$LCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+               # Extract the first word of "genhtml", so it can be a program name with args.
+set dummy genhtml; 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_GENHTML+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GENHTML"; then
+  ac_cv_prog_GENHTML="$GENHTML" # 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_GENHTML="genhtml"
+    $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
+GENHTML=$ac_cv_prog_GENHTML
+if test -n "$GENHTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5
+$as_echo "$GENHTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+               if  test -z "$LCOV" ; then :
+  
+                       as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5
+               
+fi
+
+               if  test -z "$GENHTML" ; then :
+  
+                       as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5
+               
+fi
+
+                               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -coverage" >&5
+$as_echo_n "checking whether C compiler accepts -coverage... " >&6; }
+if ${ax_cv_check_cflags___coverage+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -coverage"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___coverage=yes
+else
+  ax_cv_check_cflags___coverage=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___coverage" >&5
+$as_echo "$ax_cv_check_cflags___coverage" >&6; }
+if test x"$ax_cv_check_cflags___coverage" = xyes; then :
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               
+else
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                                               CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               
+fi
+
+
+               
+               
+               
+               
+               
+
+               CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+'
+               CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+'
+               CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+'
+       
+else
+  
+               CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+'
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       
+fi
+
+CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+'
+
+       
+       
+
+if test x$enable_code_coverage != xno; then :
+  
+       CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
+       # The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
+       # which removes assert(...) macros from code coverage and improves the
+       # branches score. But when it is defined it results in few
+       # unsed-but-set-variable warnings that are treated as errors in the travis-ci
+       # build because these variables are only used inside assert macros.
+       # error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
+       #CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
+       CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gcov_open" >&5
+$as_echo_n "checking for library containing gcov_open... " >&6; }
+if ${ac_cv_search_gcov_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 gcov_open ();
+int
+main ()
+{
+return gcov_open ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' gcov; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_gcov_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_gcov_open+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_gcov_open+:} false; then :
+  
+else
+  ac_cv_search_gcov_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_gcov_open" >&5
+$as_echo "$ac_cv_search_gcov_open" >&6; }
+ac_res=$ac_cv_search_gcov_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"
+fi
+
+
+fi
+
+SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=c89" >&5
+$as_echo_n "checking whether C compiler accepts -std=c89... " >&6; }
+if ${ax_cv_check_cflags___std_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=c89"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_c89=yes
+else
+  ax_cv_check_cflags___std_c89=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_c89" >&5
+$as_echo "$ax_cv_check_cflags___std_c89" >&6; }
+if test x"$ax_cv_check_cflags___std_c89" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wpedantic" >&5
+$as_echo_n "checking whether C compiler accepts -Wpedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__Wpedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -Wpedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__Wpedantic=yes
+else
+  ax_cv_check_cflags__Werror__Wpedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__Wpedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__Wpedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__Wpedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"
+else
+  
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -pedantic" >&5
+$as_echo_n "checking whether C compiler accepts -pedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__pedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -pedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__pedantic=yes
+else
+  ax_cv_check_cflags__Werror__pedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__pedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__pedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__pedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"
+else
+  :
+fi
+
+    
+fi
+ #clang 3.0 prints warning when the flag is not supported
+
+@%:@ Check whether --enable-Werror was given.
+if test "${enable_Werror+set}" = set; then :
+  enableval=$enable_Werror; enable_werror=$enableval
+else
+  enable_werror=no
+fi
+
+  if test x$enable_werror != xno; then :
+  
+      ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wgnu" >&5
+$as_echo_n "checking whether C compiler accepts -Wgnu... " >&6; }
+if ${ax_cv_check_cflags___Wgnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wgnu"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wgnu=yes
+else
+  ax_cv_check_cflags___Wgnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wgnu" >&5
+$as_echo "$ax_cv_check_cflags___Wgnu" >&6; }
+if test x"$ax_cv_check_cflags___Wgnu" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"
+else
+  :
+fi
+
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-long-long" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-long-long... " >&6; }
+if ${ax_cv_check_cflags___Wno_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-long-long"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_long_long=yes
+else
+  ax_cv_check_cflags___Wno_long_long=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_long_long" >&5
+$as_echo "$ax_cv_check_cflags___Wno_long_long" >&6; }
+if test x"$ax_cv_check_cflags___Wno_long_long" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"
+else
+  :
+fi
+
+
+@%:@ Check whether --enable-test-Werror was given.
+if test "${enable_test_Werror+set}" = set; then :
+  enableval=$enable_test_Werror; enable_test_werror=$enableval
+else
+  enable_test_werror=no
+fi
+
+  if test x$enable_test_werror != xno; then :
+  
+      TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
+  
+fi
+
+@%:@ Check whether --enable-test-32bit was given.
+if test "${enable_test_32bit+set}" = set; then :
+  enableval=$enable_test_32bit; enable_test_32bit=$enableval
+else
+  enable_test_32bit=no
+fi
+
+if test "x$enable_test_32bit" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -m32" >&5
+$as_echo_n "checking whether C compiler accepts -m32... " >&6; }
+if ${ax_cv_check_cflags___m32+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -m32"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___m32=yes
+else
+  ax_cv_check_cflags___m32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___m32" >&5
+$as_echo "$ax_cv_check_cflags___m32" >&6; }
+if test x"$ax_cv_check_cflags___m32" = xyes; then :
+  CFLAGS_M32="-m32 -DEXPLICIT_32BIT"
+else
+  
+        CFLAGS_M32=""
+        { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--enable-test-32bit=$enable_test_32bit is requested but not supported by the C compiler
+See \`config.log' for more details" "$LINENO" 5; }
+      
+fi
+
+
+fi
+
+ if test "x${CFLAGS_M32}" != "x"; then
+  EXPLICIT_M32_TRUE=
+  EXPLICIT_M32_FALSE='#'
+else
+  EXPLICIT_M32_TRUE='#'
+  EXPLICIT_M32_FALSE=
+fi
+
+
+SANITIZER_CFLAGS=""
+
+@%:@ Check whether --enable-test-ubsan was given.
+if test "${enable_test_ubsan+set}" = set; then :
+  enableval=$enable_test_ubsan; disable_test_ubsan=$enableval
+else
+  disable_test_ubsan=maybe
+fi
+
+if test "x$disable_test_ubsan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=undefined" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=undefined... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+void test(int *);void test(int *n) { *n = 0; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_undefined=yes
+else
+  ax_cv_check_cclflags___fsanitize_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_undefined" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_undefined" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"
+else
+  
+        if test "x$disable_test_ubsan" != xmaybe; 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 $? "--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=undefined" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=undefined... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_undefined" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_undefined" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int test(unsigned); int test(unsigned n) { return n + 1; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=nullability" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=nullability... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_nullability=yes
+else
+  ax_cv_check_cclflags___fsanitize_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_nullability" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_nullability" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=nullability" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=nullability... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_nullability" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_nullability" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"
+else
+  :
+fi
+
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+ASAN_ENV_FLAGS=""
+@%:@ Check whether --enable-test-asan was given.
+if test "${enable_test_asan+set}" = set; then :
+  enableval=$enable_test_asan; disable_test_asan=$enableval
+else
+  disable_test_asan=maybe
+fi
+
+if test "x$disable_test_asan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=address" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=address... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_address+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=address"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_address=yes
+else
+  ax_cv_check_cclflags___fsanitize_address=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_address" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_address" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_address" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"
+else
+  
+        if test "x$disable_test_asan" != xmaybe; 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 $? "--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+
+                ASAN_OPTIONS="detect_leaks=1"
+    export ASAN_OPTIONS
+    save_cflags="${CFLAGS}"
+    CFLAGS="${CFLAGS} ${SANITIZER_CFLAGS}"
+    if test "$cross_compiling" = yes; 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 $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  
+        ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
+    
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    CFLAGS="${save_cflags}"
+    unset ASAN_OPTIONS
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+LIBFUZZER_CFLAGS=""
+@%:@ Check whether --enable-test-fuzzer was given.
+if test "${enable_test_fuzzer+set}" = set; then :
+  enableval=$enable_test_fuzzer; enable_test_fuzzer=$enableval
+else
+  enable_test_fuzzer=no
+fi
+
+if test "x$enable_test_fuzzer" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=fuzzer" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=fuzzer... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_fuzzer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=fuzzer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_fuzzer=yes
+else
+  ax_cv_check_cclflags___fsanitize_fuzzer=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_fuzzer" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_fuzzer" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_fuzzer" = xyes; then :
+  LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"
+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 $? "--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+fi
+
+TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
+SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
+
+
+
+
+
+
+
+
+{ $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
+
+for ac_header in sys/param.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_SYS_PARAM_H 1
+_ACEOF
+fi
+
+done
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+           
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+          
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+             
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+          
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+             
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+             
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+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_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "@%:@define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+       
+$as_echo "@%:@define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define off_t long 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
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+  
+$as_echo "@%:@define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "__int128" "ac_cv_type___int128" "$ac_includes_default"
+if test "x$ac_cv_type___int128" = xyes; then :
+  
+$as_echo "@%:@define HAVE_128_BIT_INT 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define intmax_t int64_t
+_ACEOF
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+  
+else
+  if test "$ac_cv_type_void_p" = yes; 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 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+ if test "$ac_cv_sizeof_void_p" -eq 8; then
+  TEST_64BIT_TRUE=
+  TEST_64BIT_FALSE='#'
+else
+  TEST_64BIT_TRUE='#'
+  TEST_64BIT_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getopt" >&5
+$as_echo_n "checking for library containing getopt... " >&6; }
+if ${ac_cv_search_getopt+:} 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 getopt ();
+int
+main ()
+{
+return getopt ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' iberty; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_getopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_getopt+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_getopt+:} false; then :
+  
+else
+  ac_cv_search_getopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getopt" >&5
+$as_echo "$ac_cv_search_getopt" >&6; }
+ac_res=$ac_cv_search_getopt
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  
+fi
+
+
+for ac_func in strtoimax strtoll
+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
+
+for ac_func in mergesort
+do :
+  ac_fn_c_check_func "$LINENO" "mergesort" "ac_cv_func_mergesort"
+if test "x$ac_cv_func_mergesort" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MERGESORT 1
+_ACEOF
+fi
+done
+
+for ac_func in mkstemps
+do :
+  ac_fn_c_check_func "$LINENO" "mkstemps" "ac_cv_func_mkstemps"
+if test "x$ac_cv_func_mkstemps" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MKSTEMPS 1
+_ACEOF
+fi
+done
+
+for ac_func in timegm
+do :
+  ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm"
+if test "x$ac_cv_func_timegm" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_TIMEGM 1
+_ACEOF
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_VASPRINTF $ac_have_decl
+_ACEOF
+
+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 symlink ();
+int
+main ()
+{
+return symlink ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+$as_echo "@%:@define HAVE_SYMLINK 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+# Extract the first word of "pandoc", so it can be a program name with args.
+set dummy pandoc; 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_PANDOC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PANDOC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PANDOC="$PANDOC" # 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_PANDOC="$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
+PANDOC=$ac_cv_path_PANDOC
+if test -n "$PANDOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5
+$as_echo "$PANDOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -n "$PANDOC"; then
+  HAVE_PANDOC_TRUE=
+  HAVE_PANDOC_FALSE='#'
+else
+  HAVE_PANDOC_TRUE='#'
+  HAVE_PANDOC_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files tests/tests-c-compiler/check-src/Makefile tests/tests-asn1c-compiler/Makefile tests/tests-asn1c-smoke/Makefile tests/tests-randomized/Makefile tests/tests-c-compiler/Makefile tests/tests-skeletons/Makefile libasn1compiler/Makefile libasn1common/Makefile libasn1parser/Makefile libasn1print/Makefile libasn1fix/Makefile doc/docsrc/Makefile skeletons/Makefile examples/Makefile doc/man/Makefile tests/Makefile asn1c/Makefile doc/Makefile Makefile"
+
+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 : $LIB@&t@OBJS; 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
+LIB@&t@OBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then
+  as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXPLICIT_M32_TRUE}" && test -z "${EXPLICIT_M32_FALSE}"; then
+  as_fn_error $? "conditional \"EXPLICIT_M32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${TEST_64BIT_TRUE}" && test -z "${TEST_64BIT_FALSE}"; then
+  as_fn_error $? "conditional \"TEST_64BIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PANDOC_TRUE}" && test -z "${HAVE_PANDOC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PANDOC\" 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 @S|@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 @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 "@S|@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 asn1c $as_me 0.9.29, 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 <vlm@lionet.info>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+asn1c config.status 0.9.29
+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"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_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
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "tests/tests-c-compiler/check-src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/check-src/Makefile" ;;
+    "tests/tests-asn1c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-compiler/Makefile" ;;
+    "tests/tests-asn1c-smoke/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-smoke/Makefile" ;;
+    "tests/tests-randomized/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-randomized/Makefile" ;;
+    "tests/tests-c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/Makefile" ;;
+    "tests/tests-skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-skeletons/Makefile" ;;
+    "libasn1compiler/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1compiler/Makefile" ;;
+    "libasn1common/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1common/Makefile" ;;
+    "libasn1parser/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1parser/Makefile" ;;
+    "libasn1print/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1print/Makefile" ;;
+    "libasn1fix/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1fix/Makefile" ;;
+    "doc/docsrc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/docsrc/Makefile" ;;
+    "skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES skeletons/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "asn1c/Makefile") CONFIG_FILES="$CONFIG_FILES asn1c/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) 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 = "\a"
+
+}
+{
+  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 = "\a"
+}
+/^[\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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+ ;;
+    "libtool":C) 
+    
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 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.
+
+# GNU Libtool 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 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags='CXX '
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  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/autom4te.cache/output.2 b/autom4te.cache/output.2
new file mode 100644 (file)
index 0000000..bc1c70d
--- /dev/null
@@ -0,0 +1,21483 @@
+@%:@! /bin/sh
+@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by GNU Autoconf 2.69 for asn1c 0.9.29.
+@%:@
+@%:@ Report bugs to <vlm@lionet.info>.
+@%:@ 
+@%:@ 
+@%:@ 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 vlm@lionet.info
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: 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 @S|@? 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 "@S|@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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 @S|@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'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+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=.
+LIB@&t@OBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='asn1c'
+PACKAGE_TARNAME='asn1c'
+PACKAGE_VERSION='0.9.29'
+PACKAGE_STRING='asn1c 0.9.29'
+PACKAGE_BUGREPORT='vlm@lionet.info'
+PACKAGE_URL=''
+
+# 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_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIB@&t@OBJS
+HAVE_PANDOC_FALSE
+HAVE_PANDOC_TRUE
+PANDOC
+TEST_64BIT_FALSE
+TEST_64BIT_TRUE
+ASAN_ENV_FLAGS
+SKELETONS_CFLAGS
+TESTSUITE_CFLAGS
+SANITIZER_CFLAGS
+LIBFUZZER_CFLAGS
+ADD_CFLAGS
+EXPLICIT_M32_FALSE
+EXPLICIT_M32_TRUE
+CFLAGS_M32
+CODE_COVERAGE_RULES
+CODE_COVERAGE_LDFLAGS
+CODE_COVERAGE_LIBS
+CODE_COVERAGE_CXXFLAGS
+CODE_COVERAGE_CFLAGS
+CODE_COVERAGE_CPPFLAGS
+GENHTML
+LCOV
+GCOV
+CODE_COVERAGE_ENABLED
+CODE_COVERAGE_ENABLED_FALSE
+CODE_COVERAGE_ENABLED_TRUE
+CXXCPP
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+DLLTOOL
+OBJDUMP
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+LIBTOOL
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+ac_ct_CXX
+CXXFLAGS
+CXX
+ac_ct_AR
+AR
+LEXLIB
+LEX_OUTPUT_ROOT
+LEX
+YFLAGS
+YACC
+LN_S
+CPP
+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
+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
+runstatedir
+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_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_ASN_DEBUG
+with_gcov
+enable_code_coverage
+enable_Werror
+enable_test_Werror
+enable_test_32bit
+enable_test_ubsan
+enable_test_asan
+enable_test_fuzzer
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS
+CXX
+CXXFLAGS
+CCC
+LT_SYS_LIBRARY_PATH
+CXXCPP'
+
+
+# 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'
+runstatedir='${localstatedir}/run'
+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 ;;
+
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
+  -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 runstatedir
+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 asn1c 0.9.29 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
+                          @<:@@S|@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]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
+  --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/asn1c@:>@
+  --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 asn1c 0.9.29:";;
+   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-dependency-tracking 
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking 
+                          speeds up one-time build
+  --enable-shared@<:@=PKGS@:>@  build shared libraries @<:@default=yes@:>@
+  --enable-static@<:@=PKGS@:>@  build static libraries @<:@default=yes@:>@
+  --enable-fast-install@<:@=PKGS@:>@ 
+                          optimize for fast installation @<:@default=yes@:>@
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-ASN_DEBUG      produce debug log during `make check` testing
+  --enable-code-coverage  enable code coverage statistics collection
+  --enable-Werror         abort compilation after any C compiler warning
+  --enable-test-Werror    abort compiling tests after any C compiler warning
+  --enable-test-32bit     enable tests for 32-bit compatibility
+  --disable-test-ubsan    disable Undefined Behavior Sanitizer for tests
+  --disable-test-asan     disable Address Sanitizer for tests
+  --enable-test-fuzzer    enable LLVM LibFuzzer for randomized testing
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic@<:@=PKGS@:>@       try to use only PIC/non-PIC objects @<:@default=use
+                          both@:>@
+  --with-aix-soname=aix|svr4|both 
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, @<:@default=aix@:>@.
+  --with-gnu-ld           assume the C compiler uses GNU ld @<:@default=no@:>@
+  --with-sysroot@<:@=DIR@:>@    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
+  --with-gcov=GCOV        use given GCOV for coverage (GCOV=gcov).
+
+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
+  YACC        The `Yet Another Compiler Compiler' implementation to use.
+              Defaults to the first program found out of: `bison -y', `byacc',
+              `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to @S|@YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LT_SYS_LIBRARY_PATH 
+              User-defined run-time library search path.
+  CXXCPP      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 <vlm@lionet.info>.
+_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
+asn1c configure 0.9.29
+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.@S|@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_cpp LINENO
+@%:@ ----------------------
+@%:@ Try to preprocess conftest.@S|@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_try_link LINENO
+@%:@ -----------------------
+@%:@ Try to link conftest.@S|@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_cxx_try_compile LINENO
+@%:@ ----------------------------
+@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_compile
+
+@%:@ 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_try_run LINENO
+@%:@ ----------------------
+@%:@ Try to link conftest.@S|@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_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_cxx_try_cpp LINENO
+@%:@ ------------------------
+@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_try_cpp
+
+@%:@ ac_fn_cxx_try_link LINENO
+@%:@ -------------------------
+@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded.
+ac_fn_cxx_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_cxx_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_cxx_try_link
+
+@%:@ 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 vlm@lionet.info ##
+## ------------------------------ ##"
+     ) | 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_compute_int LINENO EXPR VAR INCLUDES
+@%:@ --------------------------------------------
+@%:@ Tries to find the compile-time value of EXPR in a program that includes
+@%:@ INCLUDES, setting VAR accordingly. Returns whether the value could be
+@%:@ computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) < 0)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) >= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in @%:@((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+@%:@include <stdio.h>
+@%:@include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} @%:@ ac_fn_c_compute_int
+
+@%:@ 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 asn1c $as_me 0.9.29, 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
+
+# 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
+
+
+
+ac_aux_dir=
+for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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.
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+am__api_version='1.15'
+
+# 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; }
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+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+set}" != 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; }
+
+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
+
+@%:@ 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=1;;
+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='\'
+
+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='asn1c'
+ VERSION='0.9.29'
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define PACKAGE "$PACKAGE"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+@%:@define VERSION "$VERSION"
+_ACEOF
+
+# 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"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  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}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+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
+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
+
+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 whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_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.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != 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
+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 10 /bin/sh.
+      echo '/* dummy */' > 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
+
+
+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 whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; 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, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+{ $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
+
+for ac_prog in 'bison -y' byacc
+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_YACC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # 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_YACC="$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
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+
+for ac_prog in flex lex
+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_LEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LEX"; then
+  ac_cv_prog_LEX="$LEX" # 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_LEX="$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
+LEX=$ac_cv_prog_LEX
+if test -n "$LEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5
+$as_echo "$LEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=":"
+
+if test "x$LEX" != "x:"; then
+  cat >conftest.l <<_ACEOF
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+    yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+  return ! yylex () + ! yywrap ();
+}
+_ACEOF
+{ { ac_try="$LEX conftest.l"
+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 "$LEX conftest.l") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5
+$as_echo_n "checking lex output file root... " >&6; }
+if ${ac_cv_prog_lex_root+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+if test -f lex.yy.c; then
+  ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+  ac_cv_prog_lex_root=lexyy
+else
+  as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5
+$as_echo "$ac_cv_prog_lex_root" >&6; }
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+if test -z "${LEXLIB+set}"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5
+$as_echo_n "checking lex library... " >&6; }
+if ${ac_cv_lib_lex+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+    ac_save_LIBS=$LIBS
+    ac_cv_lib_lex='none needed'
+    for ac_lib in '' -lfl -ll; do
+      LIBS="$ac_lib $ac_save_LIBS"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_lex=$ac_lib
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      test "$ac_cv_lib_lex" != 'none needed' && break
+    done
+    LIBS=$ac_save_LIBS
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5
+$as_echo "$ac_cv_lib_lex" >&6; }
+  test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5
+$as_echo_n "checking whether yytext is a pointer... " >&6; }
+if ${ac_cv_prog_lex_yytext_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent.  Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  #define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_prog_lex_yytext_pointer=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5
+$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; }
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+  
+$as_echo "@%:@define YYTEXT_POINTER 1" >>confdefs.h
+
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+
+fi
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar lib "link -lib"
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar lib "link -lib"
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
+$as_echo_n "checking the archiver ($AR) interface... " >&6; }
+if ${am_cv_ar_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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_cv_ar_interface=ar
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int some_variable = 0;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
+  (eval $am_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
+$as_echo "$am_cv_ar_interface" >&6; }
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  as_fn_error $? "could not determine $AR interface" "$LINENO" 5
+  ;;
+esac
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # 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_CXX="$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
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+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_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$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_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  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
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# 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
+
+{ $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_cxx_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_cxx_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_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+        CXXFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_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_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+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
+
+depcc="$CXX"  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_CXX_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_CXX_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 10 /bin/sh.
+      echo '/* dummy */' > 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_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if 
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+CXXFLAGS="-std=c++11"
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.6'
+macro_revision='2.4.6'
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# 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
+
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
+esac
+
+
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $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 fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_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 fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_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_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+test -z "$GREP" && GREP=grep
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
+  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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
+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_DUMPBIN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  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
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+    
+    
+    
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+    
+    
+    
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+    
+    
+    
+
+    
+    
+    
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump"
+    $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
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; 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_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump"
+    $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  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
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+    
+    
+    
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool"
+    $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
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; 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_DLLTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool"
+    $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  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
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+    
+    
+    
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # 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_AR="$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
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+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_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  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
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test 0 -eq "$ac_status"; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+       if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+    
+    
+    
+
+
+
+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
+
+test -z "$STRIP" && STRIP=:
+
+    
+    
+    
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
+    $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
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; 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_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
+    $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  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
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+    
+    
+    
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t@_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
+         LIBS=conftstm.$ac_objext
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+           pipe_works=yes
+         fi
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+@%:@ Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot; 
+else
+  with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+    
+    
+    
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_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 dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+    
+    
+    
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+@%:@ Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock; 
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE=32
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE=64
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  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
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt"
+    $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
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; 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_MANIFEST_TOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt"
+    $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  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
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+
+    
+    
+    
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $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
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; 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_DSYMUTIL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil"
+    $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  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
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit"
+    $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
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; 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_NMEDIT+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit"
+    $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  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
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo"
+    $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
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; 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_LIPO+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo"
+    $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_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  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
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool"
+    $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
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; 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_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool"
+    $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  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
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64"
+    $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
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; 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_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64"
+    $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  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
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+    
+    
+    
+    
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&5
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS=$save_LDFLAGS
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&5
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[012][,.]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+{ $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
+
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DLFCN_H 1
+_ACEOF
+fi
+
+done
+
+
+
+
+func_stripname_cnf ()
+{
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+  esac
+} # func_stripname_cnf
+
+
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+  
+
+  enable_win32_dll=no
+  
+
+            @%:@ Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  @%:@ Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+    
+    
+    
+    
+
+
+
+  
+@%:@ Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+       IFS=$lt_save_ifs
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  pic_mode=default
+fi
+
+
+
+    
+    
+    
+
+
+  @%:@ Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+    
+    
+    
+
+
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+  
+@%:@ Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+    
+    
+    
+
+
+  
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+test -z "$LN_S" && LN_S="ln -s"
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+    
+    
+    
+
+cat >>confdefs.h <<_ACEOF
+@%:@define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+    
+    
+    
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+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
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+    
+    
+    
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      nagfor*)
+       # NAG Fortran compiler
+       lt_prog_compiler_wl='-Wl,-Wl,,'
+       lt_prog_compiler_pic='-PIC'
+       lt_prog_compiler_static='-Bstatic'
+       ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Qoption ld '
+         ;;
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+        *Intel*\ [CF]*Compiler*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fPIC'
+         lt_prog_compiler_static='-static'
+         ;;
+       *Portland\ Group*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fpic'
+         lt_prog_compiler_static='-Bstatic'
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+    
+    
+    
+
+
+
+    
+    
+    
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+         *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test no = "$tmp_diet"
+      then
+       tmp_addflag=' $pic_flag'
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+       xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       tcc*)
+         export_dynamic_flag_spec='-rdynamic'
+         ;;
+       xlf* | bgf* | bgxlf* | mpixlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+         if test yes = "$supports_anon_versioning"; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs"; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX nm.
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       hardcode_direct=no
+       hardcode_direct_absolute=no
+       ;;
+      esac
+
+      if test yes = "$GCC"; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
+       fi
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
+      else
+       # not using gcc
+       if test ia64 = "$host_cpu"; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
+         else
+           shared_flag='$wl-bM:SRE'
+         fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
+       fi
+      fi
+
+      export_dynamic_flag_spec='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+       if test ia64 = "$host_cpu"; then
+         hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath_
+fi
+
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' $wl-bernotok'
+         allow_undefined_flag=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
+           # We only use this code for GNU lds that support --whole-archive.
+           whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           whole_archive_flag_spec='$convenience'
+         fi
+         archive_cmds_need_lc=yes
+         archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       always_export_symbols=yes
+       file_list_spec='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+       enable_shared_with_static_runtimes=yes
+       exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       old_postinstall_cmds='chmod 644 $oldlib'
+       postlink_cmds='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       hardcode_libdir_flag_spec=' '
+       allow_undefined_flag=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       old_archive_from_new_cmds='true'
+       # FIXME: Should let the user specify the lib program.
+       old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       enable_shared_with_static_runtimes=yes
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      
+  
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='$wl-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+       
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+         ;;
+       esac
+      fi
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='$wl-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+       # This should be the same for all languages, so no per-tag cache variable.
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+       fi
+       link_all_deplibs=no
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       ld_shlibs=yes
+       archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+         export_dynamic_flag_spec='$wl-E'
+       else
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='$wl'
+         archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test yes = "$GCC"; then
+         whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='$wl-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='$wl-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+    
+    
+    
+
+    
+    
+    
+
+    
+    
+    
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl
+         pic_flag=$lt_prog_compiler_pic
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag
+         allow_undefined_flag=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc=no
+         else
+           lt_cv_archive_cmds_need_lc=yes
+         fi
+         allow_undefined_flag=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test yes = "$hardcode_automatic"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+    
+    
+    
+
+
+  if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    
+fi
+
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $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
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $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 dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+             
+fi
+
+           
+fi
+
+         
+fi
+
+       
+fi
+
+      
+fi
+
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+    
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+      
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+  
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $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; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+
+  # Report what library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+  
+
+
+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
+
+CC=$lt_save_CC
+
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_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; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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_CXXCPP=$CXXCPP
+  
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_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_cxx_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_cxx_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 \"$CXXCPP\" 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
+
+else
+  _lt_caught_CXX_error=yes
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
+
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
+
+      
+
+@%:@ Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+             # With aix-soname=svr4, we create the lib.so.V shared archives only,
+             # so we don't have lib.a shared libs to link our executables.
+             # We have to force runtime linking in this case.
+             aix_use_runtimelinking=yes
+             LDFLAGS="$LDFLAGS -Wl,-brtl"
+           fi
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;      # no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          hardcode_direct_CXX=no
+          hardcode_direct_absolute_CXX=no
+          ;;
+        esac
+
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           hardcode_direct_CXX=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           hardcode_minus_L_CXX=yes
+           hardcode_libdir_flag_spec_CXX='-L$libdir'
+           hardcode_libdir_separator_CXX=
+         fi
+          esac
+          shared_flag='-shared'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
+         fi
+         # Need to ensure runtime linking is disabled for the traditional
+         # shared library, or the linker may eventually find shared libraries
+         # /with/ Import File - we do not want to mix them.
+         shared_flag_aix='-shared'
+         shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
+           else
+             shared_flag='$wl-bM:SRE'
+           fi
+           shared_flag_aix='$wl-bM:SRE'
+           shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        always_export_symbols_CXX=yes
+       if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          no_undefined_flag_CXX='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+           hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
+           allow_undefined_flag_CXX="-z nodefs"
+           archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+  
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+           hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           no_undefined_flag_CXX=' $wl-bernotok'
+           allow_undefined_flag_CXX=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
+             # We only use this code for GNU lds that support --whole-archive.
+             whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             whole_archive_flag_spec_CXX='$convenience'
+           fi
+           archive_cmds_need_lc_CXX=yes
+           archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+           # -brtl affects multiple linker settings, -berok does not and is overridden later
+           compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+           if test svr4 != "$with_aix_soname"; then
+             # This is similar to how AIX traditionally builds its shared
+             # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+           fi
+           if test aix != "$with_aix_soname"; then
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           else
+             # used by -dlpreopen to get the symbols
+             archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+           fi
+           archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         allow_undefined_flag_CXX=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         ld_shlibs_CXX=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX=' '
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=yes
+         file_list_spec_CXX='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=.dll
+         # FIXME: Setting linknames here is a bad hack.
+         archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[     ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+         enable_shared_with_static_runtimes_CXX=yes
+         # Don't use ranlib
+         old_postinstall_cmds_CXX='chmod 644 $oldlib'
+         postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+         # as there is no search path for DLLs.
+         hardcode_libdir_flag_spec_CXX='-L$libdir'
+         export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
+         allow_undefined_flag_CXX=unsupported
+         always_export_symbols_CXX=no
+         enable_shared_with_static_runtimes_CXX=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           ld_shlibs_CXX=no
+         fi
+         ;;
+       esac
+       ;;
+      darwin* | rhapsody*)
+        
+  
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+    fi
+
+  else
+  ld_shlibs_CXX=no
+  fi
+
+       ;;
+
+      os2*)
+       hardcode_libdir_flag_spec_CXX='-L$libdir'
+       hardcode_minus_L_CXX=yes
+       allow_undefined_flag_CXX=unsupported
+       shrext_cmds=.dll
+       archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         prefix_cmds="$SED"~
+         if test EXPORTS = "`$SED 1q $export_symbols`"; then
+           prefix_cmds="$prefix_cmds -e 1d";
+         fi~
+         prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+         cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+       enable_shared_with_static_runtimes_CXX=yes
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='$wl-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+         hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+         hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             export_dynamic_flag_spec_CXX='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               case $host_cpu in
+                 hppa*64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+       hardcode_direct_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+       export_dynamic_flag_spec_CXX='$wl-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+             else
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+             fi
+           fi
+           link_all_deplibs_CXX=yes
+           ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           archive_cmds_need_lc_CXX=no
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+             prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+             old_archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+             archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           *) # Version 6 and above use weak symbols
+             archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           esac
+
+           hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           ;;
+         xl* | mpixl* | bgxl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+           export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+           archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
+             archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             no_undefined_flag_CXX=' -zdefs'
+             archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+             hardcode_libdir_flag_spec_CXX='-R$libdir'
+             whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+             compiler_needs_object_CXX=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='func_echo_all'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       ld_shlibs_CXX=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         hardcode_libdir_flag_spec_CXX='-R$libdir'
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+       ;;
+
+      openbsd* | bitrig*)
+       if test -f /usr/libexec/ld.so; then
+         hardcode_direct_CXX=yes
+         hardcode_shlibpath_var_CXX=no
+         hardcode_direct_absolute_CXX=yes
+         archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           export_dynamic_flag_spec_CXX='$wl-E'
+           whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=func_echo_all
+       else
+         ld_shlibs_CXX=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+           hardcode_libdir_separator_CXX=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+               ;;
+             *)
+               allow_undefined_flag_CXX=' -expect_unresolved \*'
+               archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+               hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+               ;;
+           esac
+
+           hardcode_libdir_separator_CXX=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+         *)
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+             case $host in
+               osf3*)
+                 archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+               *)
+                 archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+             esac
+
+             hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+             hardcode_libdir_separator_CXX=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             ld_shlibs_CXX=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+           no_undefined_flag_CXX=' -zdefs'
+           archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           hardcode_libdir_flag_spec_CXX='-R$libdir'
+           hardcode_shlibpath_var_CXX=no
+           case $host_os in
+             solaris2.[0-5] | solaris2.[0-5].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands '-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           link_all_deplibs_CXX=yes
+
+           output_verbose_link_cmd='func_echo_all'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             no_undefined_flag_CXX=' $wl-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
+               # platform.
+               archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             fi
+
+             hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
+             case $host_os in
+               solaris2.[0-5] | solaris2.[0-5].*) ;;
+               *)
+                 whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='$wl-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We CANNOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       no_undefined_flag_CXX='$wl-z,text'
+       allow_undefined_flag_CXX='$wl-z,nodefs'
+       archive_cmds_need_lc_CXX=no
+       hardcode_shlibpath_var_CXX=no
+       hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
+       hardcode_libdir_separator_CXX=':'
+       link_all_deplibs_CXX=yes
+       export_dynamic_flag_spec_CXX='$wl-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+              '"$old_archive_cmds_CXX"
+           reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+              '"$reload_cmds_CXX"
+           ;;
+         *)
+           archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           ld_shlibs_CXX=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+    GCC_CXX=$GXX
+    LD_CXX=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+        prev=$p
+        continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
+        -L | -R)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$compiler_lib_search_path_CXX"; then
+            compiler_lib_search_path_CXX=$prev$p
+          else
+            compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$postdeps_CXX"; then
+          postdeps_CXX=$prev$p
+        else
+          postdeps_CXX="${postdeps_CXX} $prev$p"
+        fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+        if test -z "$predep_objects_CXX"; then
+          predep_objects_CXX=$p
+        else
+          predep_objects_CXX="$predep_objects_CXX $p"
+        fi
+       else
+        if test -z "$postdep_objects_CXX"; then
+          postdep_objects_CXX=$p
+        else
+          postdep_objects_CXX="$postdep_objects_CXX $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    
+    
+    
+
+
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static_CXX='$wl-static'
+       ;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       lt_prog_compiler_pic_CXX='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+       # All AIX code is PIC.
+       if test ia64 = "$host_cpu"; then
+         # AIX 5 now supports IA64 processor
+         lt_prog_compiler_static_CXX='-Bstatic'
+       else
+         lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
+             lt_prog_compiler_pic_CXX='+Z'
+           fi
+           ;;
+         aCC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             lt_prog_compiler_pic_CXX='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_static_CXX='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64, which still supported -KPIC.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fPIC'
+           lt_prog_compiler_static_CXX='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-fpic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-qpic'
+           lt_prog_compiler_static_CXX='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             lt_prog_compiler_pic_CXX='-KPIC'
+             lt_prog_compiler_static_CXX='-Bstatic'
+             lt_prog_compiler_wl_CXX='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           lt_prog_compiler_pic_CXX='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           lt_prog_compiler_wl_CXX='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           lt_prog_compiler_wl_CXX='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           lt_prog_compiler_pic_CXX=
+           lt_prog_compiler_static_CXX='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           lt_prog_compiler_wl_CXX='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           lt_prog_compiler_pic_CXX='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           lt_prog_compiler_pic_CXX='-pic'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           lt_prog_compiler_pic_CXX='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           lt_prog_compiler_wl_CXX='-Wl,'
+           lt_prog_compiler_pic_CXX='-KPIC'
+           lt_prog_compiler_static_CXX='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           lt_prog_compiler_pic_CXX='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       lt_prog_compiler_can_build_shared_CXX=no
+       ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_CXX=no
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+with_gnu_ld_CXX=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$lt_prog_compiler_wl_CXX
+         pic_flag=$lt_prog_compiler_pic_CXX
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+         allow_undefined_flag_CXX=
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+         then
+           lt_cv_archive_cmds_need_lc_CXX=no
+         else
+           lt_cv_archive_cmds_need_lc_CXX=yes
+         fi
+         allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+        LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test yes = "$hardcode_automatic_CXX"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_CXX" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+    
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+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
+
+
+
+
+
+
+
+
+       
+       
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+@%:@ 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='\'
+
+
+case "$host_os" in
+cygwin)
+       case "$target" in
+       *mingw*)
+               CC="$CC -mno-cygwin"
+       esac
+       ;;
+esac
+
+@%:@ Check whether --enable-ASN_DEBUG was given.
+if test "${enable_ASN_DEBUG+set}" = set; then :
+  enableval=$enable_ASN_DEBUG; enable_asn_debug=$enableval
+else
+  enable_asn_debug=no
+fi
+
+  if test x$enable_asn_debug != xno; then :
+  
+      TESTSUITE_CFLAGS="-DASN_EMIT_DEBUG"
+      SKELETONS_CFLAGS="-DASN_EMIT_DEBUG"
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wall" >&5
+$as_echo_n "checking whether C compiler accepts -Wall... " >&6; }
+if ${ax_cv_check_cflags___Wall+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wall"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wall=yes
+else
+  ax_cv_check_cflags___Wall=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wall" >&5
+$as_echo "$ax_cv_check_cflags___Wall" >&6; }
+if test x"$ax_cv_check_cflags___Wall" = xyes; then :
+  CFLAGS="$CFLAGS -Wall"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wcast-qual" >&5
+$as_echo_n "checking whether C compiler accepts -Wcast-qual... " >&6; }
+if ${ax_cv_check_cflags___Wcast_qual+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wcast-qual"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wcast_qual=yes
+else
+  ax_cv_check_cflags___Wcast_qual=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wcast_qual" >&5
+$as_echo "$ax_cv_check_cflags___Wcast_qual" >&6; }
+if test x"$ax_cv_check_cflags___Wcast_qual" = xyes; then :
+  CFLAGS="$CFLAGS -Wcast-qual"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wchar-subscripts" >&5
+$as_echo_n "checking whether C compiler accepts -Wchar-subscripts... " >&6; }
+if ${ax_cv_check_cflags___Wchar_subscripts+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wchar-subscripts"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wchar_subscripts=yes
+else
+  ax_cv_check_cflags___Wchar_subscripts=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wchar_subscripts" >&5
+$as_echo "$ax_cv_check_cflags___Wchar_subscripts" >&6; }
+if test x"$ax_cv_check_cflags___Wchar_subscripts" = xyes; then :
+  CFLAGS="$CFLAGS -Wchar-subscripts"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-prototypes" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-prototypes... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_prototypes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-prototypes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_prototypes=yes
+else
+  ax_cv_check_cflags___Wmissing_prototypes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_prototypes" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_prototypes" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_prototypes" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-prototypes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wmissing-declarations" >&5
+$as_echo_n "checking whether C compiler accepts -Wmissing-declarations... " >&6; }
+if ${ax_cv_check_cflags___Wmissing_declarations+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wmissing-declarations"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wmissing_declarations=yes
+else
+  ax_cv_check_cflags___Wmissing_declarations=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wmissing_declarations" >&5
+$as_echo "$ax_cv_check_cflags___Wmissing_declarations" >&6; }
+if test x"$ax_cv_check_cflags___Wmissing_declarations" = xyes; then :
+  CFLAGS="$CFLAGS -Wmissing-declarations"
+else
+  :
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=attributes" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=attributes... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_attributes+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=attributes"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_attributes=yes
+else
+  ax_cv_check_cflags___Wno_error_attributes=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_attributes" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_attributes" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_attributes" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=attributes"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=cast-align" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=cast-align... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_cast_align+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=cast-align"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_cast_align=yes
+else
+  ax_cv_check_cflags___Wno_error_cast_align=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_cast_align" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_cast_align" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_cast_align" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=cast-align"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=visibility" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=visibility... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_visibility+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=visibility"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_visibility=yes
+else
+  ax_cv_check_cflags___Wno_error_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_visibility" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_visibility" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_visibility" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=visibility"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=parentheses-equality" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=parentheses-equality... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_parentheses_equality+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=parentheses-equality"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_parentheses_equality=yes
+else
+  ax_cv_check_cflags___Wno_error_parentheses_equality=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_parentheses_equality" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_parentheses_equality" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_parentheses_equality" = xyes; then :
+  CFLAGS="$CFLAGS -Wno-error=parentheses-equality"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=gnu99" >&5
+$as_echo_n "checking whether C compiler accepts -std=gnu99... " >&6; }
+if ${ax_cv_check_cflags___std_gnu99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=gnu99"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_gnu99=yes
+else
+  ax_cv_check_cflags___std_gnu99=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_gnu99" >&5
+$as_echo "$ax_cv_check_cflags___std_gnu99" >&6; }
+if test x"$ax_cv_check_cflags___std_gnu99" = xyes; then :
+  CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-error=unused-variable" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-error=unused-variable... " >&6; }
+if ${ax_cv_check_cflags___Wno_error_unused_variable+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-error=unused-variable"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_error_unused_variable=yes
+else
+  ax_cv_check_cflags___Wno_error_unused_variable=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_error_unused_variable" >&5
+$as_echo "$ax_cv_check_cflags___Wno_error_unused_variable" >&6; }
+if test x"$ax_cv_check_cflags___Wno_error_unused_variable" = xyes; then :
+  TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"
+else
+  :
+fi
+
+
+
+
+               
+
+       # allow to override gcov location
+       
+@%:@ Check whether --with-gcov was given.
+if test "${with_gcov+set}" = set; then :
+  withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov
+else
+  _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov
+fi
+
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5
+$as_echo_n "checking whether to build with code coverage support... " >&6; }
+       @%:@ Check whether --enable-code-coverage was given.
+if test "${enable_code_coverage+set}" = set; then :
+  enableval=$enable_code_coverage; 
+else
+  enable_code_coverage=no
+fi
+
+
+        if test x$enable_code_coverage = xyes; then
+  CODE_COVERAGE_ENABLED_TRUE=
+  CODE_COVERAGE_ENABLED_FALSE='#'
+else
+  CODE_COVERAGE_ENABLED_TRUE='#'
+  CODE_COVERAGE_ENABLED_FALSE=
+fi
+
+       CODE_COVERAGE_ENABLED=$enable_code_coverage
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5
+$as_echo "$enable_code_coverage" >&6; }
+
+       if  test "$enable_code_coverage" = "yes" ; then :
+  
+               # check for gcov
+               if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GCOV"; then
+  ac_cv_prog_GCOV="$GCOV" # 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_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GCOV"; then
+  ac_ct_GCOV=$GCOV
+  # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args.
+set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; 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_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GCOV"; then
+  ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # 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_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH"
+    $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_GCOV=$ac_cv_prog_ac_ct_GCOV
+if test -n "$ac_ct_GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5
+$as_echo "$ac_ct_GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GCOV" = x; then
+    GCOV=":"
+  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
+    GCOV=$ac_ct_GCOV
+  fi
+else
+  GCOV="$ac_cv_prog_GCOV"
+fi
+
+               if test "X$GCOV" = "X:"; then :
+  as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5
+fi
+               
+
+                               if  test "$GCC" = "no" ; then :
+  
+                       as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5
+               
+fi
+
+               # Extract the first word of "lcov", so it can be a program name with args.
+set dummy lcov; 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_LCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LCOV"; then
+  ac_cv_prog_LCOV="$LCOV" # 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_LCOV="lcov"
+    $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
+LCOV=$ac_cv_prog_LCOV
+if test -n "$LCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5
+$as_echo "$LCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+               # Extract the first word of "genhtml", so it can be a program name with args.
+set dummy genhtml; 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_GENHTML+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GENHTML"; then
+  ac_cv_prog_GENHTML="$GENHTML" # 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_GENHTML="genhtml"
+    $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
+GENHTML=$ac_cv_prog_GENHTML
+if test -n "$GENHTML"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5
+$as_echo "$GENHTML" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+               if  test -z "$LCOV" ; then :
+  
+                       as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5
+               
+fi
+
+               if  test -z "$GENHTML" ; then :
+  
+                       as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5
+               
+fi
+
+                               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -coverage" >&5
+$as_echo_n "checking whether C compiler accepts -coverage... " >&6; }
+if ${ax_cv_check_cflags___coverage+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -coverage"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___coverage=yes
+else
+  ax_cv_check_cflags___coverage=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___coverage" >&5
+$as_echo "$ax_cv_check_cflags___coverage" >&6; }
+if test x"$ax_cv_check_cflags___coverage" = xyes; then :
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               
+else
+  
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                                               CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               
+fi
+
+
+               
+               
+               
+               
+               
+
+               CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+'
+               CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+'
+               CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+'
+       
+else
+  
+               CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+'
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       
+fi
+
+CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+'
+
+       
+       
+
+if test x$enable_code_coverage != xno; then :
+  
+       CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
+       # The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
+       # which removes assert(...) macros from code coverage and improves the
+       # branches score. But when it is defined it results in few
+       # unsed-but-set-variable warnings that are treated as errors in the travis-ci
+       # build because these variables are only used inside assert macros.
+       # error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
+       #CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
+       CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gcov_open" >&5
+$as_echo_n "checking for library containing gcov_open... " >&6; }
+if ${ac_cv_search_gcov_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 gcov_open ();
+int
+main ()
+{
+return gcov_open ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' gcov; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_gcov_open=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_gcov_open+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_gcov_open+:} false; then :
+  
+else
+  ac_cv_search_gcov_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_gcov_open" >&5
+$as_echo "$ac_cv_search_gcov_open" >&6; }
+ac_res=$ac_cv_search_gcov_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"
+fi
+
+
+fi
+
+SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -std=c89" >&5
+$as_echo_n "checking whether C compiler accepts -std=c89... " >&6; }
+if ${ax_cv_check_cflags___std_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -std=c89"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___std_c89=yes
+else
+  ax_cv_check_cflags___std_c89=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___std_c89" >&5
+$as_echo "$ax_cv_check_cflags___std_c89" >&6; }
+if test x"$ax_cv_check_cflags___std_c89" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"
+else
+  :
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wpedantic" >&5
+$as_echo_n "checking whether C compiler accepts -Wpedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__Wpedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -Wpedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__Wpedantic=yes
+else
+  ax_cv_check_cflags__Werror__Wpedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__Wpedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__Wpedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__Wpedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"
+else
+  
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -pedantic" >&5
+$as_echo_n "checking whether C compiler accepts -pedantic... " >&6; }
+if ${ax_cv_check_cflags__Werror__pedantic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS -Werror -pedantic"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags__Werror__pedantic=yes
+else
+  ax_cv_check_cflags__Werror__pedantic=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__Werror__pedantic" >&5
+$as_echo "$ax_cv_check_cflags__Werror__pedantic" >&6; }
+if test x"$ax_cv_check_cflags__Werror__pedantic" = xyes; then :
+  SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"
+else
+  :
+fi
+
+    
+fi
+ #clang 3.0 prints warning when the flag is not supported
+
+@%:@ Check whether --enable-Werror was given.
+if test "${enable_Werror+set}" = set; then :
+  enableval=$enable_Werror; enable_werror=$enableval
+else
+  enable_werror=no
+fi
+
+  if test x$enable_werror != xno; then :
+  
+      ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wgnu" >&5
+$as_echo_n "checking whether C compiler accepts -Wgnu... " >&6; }
+if ${ax_cv_check_cflags___Wgnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wgnu"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wgnu=yes
+else
+  ax_cv_check_cflags___Wgnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wgnu" >&5
+$as_echo "$ax_cv_check_cflags___Wgnu" >&6; }
+if test x"$ax_cv_check_cflags___Wgnu" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"
+else
+  :
+fi
+
+  
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wno-long-long" >&5
+$as_echo_n "checking whether C compiler accepts -Wno-long-long... " >&6; }
+if ${ax_cv_check_cflags___Wno_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -Wno-long-long"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___Wno_long_long=yes
+else
+  ax_cv_check_cflags___Wno_long_long=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wno_long_long" >&5
+$as_echo "$ax_cv_check_cflags___Wno_long_long" >&6; }
+if test x"$ax_cv_check_cflags___Wno_long_long" = xyes; then :
+  SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"
+else
+  :
+fi
+
+
+@%:@ Check whether --enable-test-Werror was given.
+if test "${enable_test_Werror+set}" = set; then :
+  enableval=$enable_test_Werror; enable_test_werror=$enableval
+else
+  enable_test_werror=no
+fi
+
+  if test x$enable_test_werror != xno; then :
+  
+      TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
+  
+fi
+
+@%:@ Check whether --enable-test-32bit was given.
+if test "${enable_test_32bit+set}" = set; then :
+  enableval=$enable_test_32bit; enable_test_32bit=$enableval
+else
+  enable_test_32bit=no
+fi
+
+if test "x$enable_test_32bit" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -m32" >&5
+$as_echo_n "checking whether C compiler accepts -m32... " >&6; }
+if ${ax_cv_check_cflags___m32+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -m32"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___m32=yes
+else
+  ax_cv_check_cflags___m32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___m32" >&5
+$as_echo "$ax_cv_check_cflags___m32" >&6; }
+if test x"$ax_cv_check_cflags___m32" = xyes; then :
+  CFLAGS_M32="-m32 -DEXPLICIT_32BIT"
+else
+  
+        CFLAGS_M32=""
+        { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "--enable-test-32bit=$enable_test_32bit is requested but not supported by the C compiler
+See \`config.log' for more details" "$LINENO" 5; }
+      
+fi
+
+
+fi
+
+ if test "x${CFLAGS_M32}" != "x"; then
+  EXPLICIT_M32_TRUE=
+  EXPLICIT_M32_FALSE='#'
+else
+  EXPLICIT_M32_TRUE='#'
+  EXPLICIT_M32_FALSE=
+fi
+
+
+SANITIZER_CFLAGS=""
+
+@%:@ Check whether --enable-test-ubsan was given.
+if test "${enable_test_ubsan+set}" = set; then :
+  enableval=$enable_test_ubsan; disable_test_ubsan=$enableval
+else
+  disable_test_ubsan=maybe
+fi
+
+if test "x$disable_test_ubsan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=undefined" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=undefined... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+void test(int *);void test(int *n) { *n = 0; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_undefined=yes
+else
+  ax_cv_check_cclflags___fsanitize_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_undefined" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_undefined" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"
+else
+  
+        if test "x$disable_test_ubsan" != xmaybe; 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 $? "--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=undefined" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=undefined... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_undefined+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=undefined"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_undefined=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_undefined" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_undefined" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_undefined" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int test(unsigned); int test(unsigned n) { return n + 1; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=unsigned-integer-overflow"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"
+else
+  :
+fi
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=nullability" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=nullability... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_nullability=yes
+else
+  ax_cv_check_cclflags___fsanitize_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_nullability" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_nullability" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"
+else
+  :
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-sanitize-recover=nullability" >&5
+$as_echo_n "checking whether C compiler accepts -fno-sanitize-recover=nullability... " >&6; }
+if ${ax_cv_check_cflags___fno_sanitize_recover_nullability+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-sanitize-recover=nullability"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=yes
+else
+  ax_cv_check_cflags___fno_sanitize_recover_nullability=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_sanitize_recover_nullability" >&5
+$as_echo "$ax_cv_check_cflags___fno_sanitize_recover_nullability" >&6; }
+if test x"$ax_cv_check_cflags___fno_sanitize_recover_nullability" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"
+else
+  :
+fi
+
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+ASAN_ENV_FLAGS=""
+@%:@ Check whether --enable-test-asan was given.
+if test "${enable_test_asan+set}" = set; then :
+  enableval=$enable_test_asan; disable_test_asan=$enableval
+else
+  disable_test_asan=maybe
+fi
+
+if test "x$disable_test_asan" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=address" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=address... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_address+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=address"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_address=yes
+else
+  ax_cv_check_cclflags___fsanitize_address=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_address" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_address" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_address" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"
+else
+  
+        if test "x$disable_test_asan" != xmaybe; 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 $? "--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+      
+fi
+
+
+                ASAN_OPTIONS="detect_leaks=1"
+    export ASAN_OPTIONS
+    save_cflags="${CFLAGS}"
+    CFLAGS="${CFLAGS} ${SANITIZER_CFLAGS}"
+    if test "$cross_compiling" = yes; 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 $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  
+        ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
+    
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    CFLAGS="${save_cflags}"
+    unset ASAN_OPTIONS
+
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5
+$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; }
+if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fno-omit-frame-pointer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ax_cv_check_cflags___fno_omit_frame_pointer=yes
+else
+  ax_cv_check_cflags___fno_omit_frame_pointer=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5
+$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; }
+if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then :
+  SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"
+else
+  :
+fi
+
+
+fi
+
+LIBFUZZER_CFLAGS=""
+@%:@ Check whether --enable-test-fuzzer was given.
+if test "${enable_test_fuzzer+set}" = set; then :
+  enableval=$enable_test_fuzzer; enable_test_fuzzer=$enableval
+else
+  enable_test_fuzzer=no
+fi
+
+if test "x$enable_test_fuzzer" != xno; then :
+  
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler and linker accept -fsanitize=fuzzer" >&5
+$as_echo_n "checking whether C compiler and linker accept -fsanitize=fuzzer... " >&6; }
+if ${ax_cv_check_cclflags___fsanitize_fuzzer+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  
+  ax_check_save_flags=$CFLAGS
+  CFLAGS="$CFLAGS  -fsanitize=fuzzer"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ax_cv_check_cclflags___fsanitize_fuzzer=yes
+else
+  ax_cv_check_cclflags___fsanitize_fuzzer=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  CFLAGS=$ax_check_save_flags
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cclflags___fsanitize_fuzzer" >&5
+$as_echo "$ax_cv_check_cclflags___fsanitize_fuzzer" >&6; }
+if test x"$ax_cv_check_cclflags___fsanitize_fuzzer" = xyes; then :
+  LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"
+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 $? "--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+
+fi
+
+TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
+SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
+
+
+
+
+
+
+
+
+{ $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
+
+for ac_header in sys/param.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_SYS_PARAM_H 1
+_ACEOF
+fi
+
+done
+
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+           
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+          
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+             
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+          
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+             
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+             
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+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
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+             
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+          
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+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_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "@%:@define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+       
+$as_echo "@%:@define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define off_t long 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
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+                                    int *p = &tm.tm_sec;
+                                    return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+  
+$as_echo "@%:@define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "__int128" "ac_cv_type___int128" "$ac_includes_default"
+if test "x$ac_cv_type___int128" = xyes; then :
+  
+$as_echo "@%:@define HAVE_128_BIT_INT 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes; then :
+  
+else
+  
+cat >>confdefs.h <<_ACEOF
+@%:@define intmax_t int64_t
+_ACEOF
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
+$as_echo_n "checking size of void *... " >&6; }
+if ${ac_cv_sizeof_void_p+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p"        "$ac_includes_default"; then :
+  
+else
+  if test "$ac_cv_type_void_p" = yes; 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 77 "cannot compute sizeof (void *)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_void_p=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
+$as_echo "$ac_cv_sizeof_void_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+@%:@define SIZEOF_VOID_P $ac_cv_sizeof_void_p
+_ACEOF
+
+
+ if test "$ac_cv_sizeof_void_p" -eq 8; then
+  TEST_64BIT_TRUE=
+  TEST_64BIT_FALSE='#'
+else
+  TEST_64BIT_TRUE='#'
+  TEST_64BIT_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getopt" >&5
+$as_echo_n "checking for library containing getopt... " >&6; }
+if ${ac_cv_search_getopt+:} 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 getopt ();
+int
+main ()
+{
+return getopt ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' iberty; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_getopt=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_getopt+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_getopt+:} false; then :
+  
+else
+  ac_cv_search_getopt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getopt" >&5
+$as_echo "$ac_cv_search_getopt" >&6; }
+ac_res=$ac_cv_search_getopt
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  
+fi
+
+
+for ac_func in strtoimax strtoll
+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
+
+for ac_func in mergesort
+do :
+  ac_fn_c_check_func "$LINENO" "mergesort" "ac_cv_func_mergesort"
+if test "x$ac_cv_func_mergesort" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MERGESORT 1
+_ACEOF
+fi
+done
+
+for ac_func in mkstemps
+do :
+  ac_fn_c_check_func "$LINENO" "mkstemps" "ac_cv_func_mkstemps"
+if test "x$ac_cv_func_mkstemps" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_MKSTEMPS 1
+_ACEOF
+fi
+done
+
+for ac_func in timegm
+do :
+  ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm"
+if test "x$ac_cv_func_timegm" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_TIMEGM 1
+_ACEOF
+fi
+done
+
+ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vasprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+@%:@define HAVE_DECL_VASPRINTF $ac_have_decl
+_ACEOF
+
+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 symlink ();
+int
+main ()
+{
+return symlink ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  
+$as_echo "@%:@define HAVE_SYMLINK 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+# Extract the first word of "pandoc", so it can be a program name with args.
+set dummy pandoc; 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_PANDOC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PANDOC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PANDOC="$PANDOC" # 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_PANDOC="$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
+PANDOC=$ac_cv_path_PANDOC
+if test -n "$PANDOC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5
+$as_echo "$PANDOC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test -n "$PANDOC"; then
+  HAVE_PANDOC_TRUE=
+  HAVE_PANDOC_FALSE='#'
+else
+  HAVE_PANDOC_TRUE='#'
+  HAVE_PANDOC_FALSE=
+fi
+
+
+ac_config_files="$ac_config_files tests/tests-c-compiler/check-src/Makefile tests/tests-asn1c-compiler/Makefile tests/tests-asn1c-smoke/Makefile tests/tests-randomized/Makefile tests/tests-c-compiler/Makefile tests/tests-skeletons/Makefile libasn1compiler/Makefile libasn1common/Makefile libasn1parser/Makefile libasn1print/Makefile libasn1fix/Makefile doc/docsrc/Makefile skeletons/Makefile examples/Makefile doc/man/Makefile tests/Makefile asn1c/Makefile doc/Makefile Makefile"
+
+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 : $LIB@&t@OBJS; 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
+LIB@&t@OBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+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 "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then
+  as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${EXPLICIT_M32_TRUE}" && test -z "${EXPLICIT_M32_FALSE}"; then
+  as_fn_error $? "conditional \"EXPLICIT_M32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${TEST_64BIT_TRUE}" && test -z "${TEST_64BIT_FALSE}"; then
+  as_fn_error $? "conditional \"TEST_64BIT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PANDOC_TRUE}" && test -z "${HAVE_PANDOC_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PANDOC\" 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 @S|@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 @S|@? 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 @S|@as_val. Take advantage of shells that can avoid forks. The arguments
+@%:@ must be portable across @S|@(()) 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 "@S|@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 asn1c $as_me 0.9.29, 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 <vlm@lionet.info>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+asn1c config.status 0.9.29
+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"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+LD_CXX \
+reload_flag_CXX \
+compiler_CXX \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_static_CXX \
+lt_cv_prog_compiler_c_o_CXX \
+export_dynamic_flag_spec_CXX \
+whole_archive_flag_spec_CXX \
+compiler_needs_object_CXX \
+with_gnu_ld_CXX \
+allow_undefined_flag_CXX \
+no_undefined_flag_CXX \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_separator_CXX \
+exclude_expsyms_CXX \
+include_expsyms_CXX \
+file_list_spec_CXX \
+compiler_lib_search_dirs_CXX \
+predep_objects_CXX \
+postdep_objects_CXX \
+predeps_CXX \
+postdeps_CXX \
+compiler_lib_search_path_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path \
+reload_cmds_CXX \
+old_archive_cmds_CXX \
+old_archive_from_new_cmds_CXX \
+old_archive_from_expsyms_cmds_CXX \
+archive_cmds_CXX \
+archive_expsym_cmds_CXX \
+module_cmds_CXX \
+module_expsym_cmds_CXX \
+export_symbols_cmds_CXX \
+prelink_cmds_CXX \
+postlink_cmds_CXX; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+_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
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "tests/tests-c-compiler/check-src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/check-src/Makefile" ;;
+    "tests/tests-asn1c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-compiler/Makefile" ;;
+    "tests/tests-asn1c-smoke/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-smoke/Makefile" ;;
+    "tests/tests-randomized/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-randomized/Makefile" ;;
+    "tests/tests-c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/Makefile" ;;
+    "tests/tests-skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-skeletons/Makefile" ;;
+    "libasn1compiler/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1compiler/Makefile" ;;
+    "libasn1common/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1common/Makefile" ;;
+    "libasn1parser/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1parser/Makefile" ;;
+    "libasn1print/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1print/Makefile" ;;
+    "libasn1fix/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1fix/Makefile" ;;
+    "doc/docsrc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/docsrc/Makefile" ;;
+    "skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES skeletons/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "asn1c/Makefile") CONFIG_FILES="$CONFIG_FILES asn1c/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) 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 = "\a"
+
+}
+{
+  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 = "\a"
+}
+/^[\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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+ ;;
+    "libtool":C) 
+    
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 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.
+
+# GNU Libtool 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 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags='CXX '
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  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/autom4te.cache/requests b/autom4te.cache/requests
new file mode 100644 (file)
index 0000000..2c763cc
--- /dev/null
@@ -0,0 +1,539 @@
+# This file was generated by Autom4te Fri Oct 23 20:57:39 UTC 2015.
+# It contains the lists of macros which have been traced.
+# It can be safely removed.
+
+@request = (
+             bless( [
+                      '0',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        '-',
+                        '/usr/share/aclocal-1.15/internal/ac-config-macro-dirs.m4',
+                        '/usr/share/aclocal/libtool.m4',
+                        '/usr/share/aclocal/ltargz.m4',
+                        '/usr/share/aclocal/ltdl.m4',
+                        '/usr/share/aclocal/ltoptions.m4',
+                        '/usr/share/aclocal/ltsugar.m4',
+                        '/usr/share/aclocal/ltversion.m4',
+                        '/usr/share/aclocal/lt~obsolete.m4',
+                        '/usr/share/aclocal-1.15/amversion.m4',
+                        '/usr/share/aclocal-1.15/ar-lib.m4',
+                        '/usr/share/aclocal-1.15/auxdir.m4',
+                        '/usr/share/aclocal-1.15/cond.m4',
+                        '/usr/share/aclocal-1.15/depend.m4',
+                        '/usr/share/aclocal-1.15/depout.m4',
+                        '/usr/share/aclocal-1.15/init.m4',
+                        '/usr/share/aclocal-1.15/install-sh.m4',
+                        '/usr/share/aclocal-1.15/lead-dot.m4',
+                        '/usr/share/aclocal-1.15/lex.m4',
+                        '/usr/share/aclocal-1.15/make.m4',
+                        '/usr/share/aclocal-1.15/missing.m4',
+                        '/usr/share/aclocal-1.15/options.m4',
+                        '/usr/share/aclocal-1.15/prog-cc-c-o.m4',
+                        '/usr/share/aclocal-1.15/runlog.m4',
+                        '/usr/share/aclocal-1.15/sanity.m4',
+                        '/usr/share/aclocal-1.15/silent.m4',
+                        '/usr/share/aclocal-1.15/strip.m4',
+                        '/usr/share/aclocal-1.15/substnot.m4',
+                        '/usr/share/aclocal-1.15/tar.m4',
+                        'm4/ax_check_compile_and_link_flag.m4',
+                        'm4/ax_check_compile_flag.m4',
+                        'm4/ax_code_coverage.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
+                        '_LT_PROG_ECHO_BACKSLASH' => 1,
+                        'AC_PROG_EGREP' => 1,
+                        'LT_AC_PROG_RC' => 1,
+                        '_LT_LINKER_OPTION' => 1,
+                        'AC_DISABLE_SHARED' => 1,
+                        'AC_LIBTOOL_FC' => 1,
+                        'AX_CHECK_COMPILE_AND_LINK_FLAG' => 1,
+                        '_AC_PROG_LIBTOOL' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        '_LT_AC_FILE_LTDLL_C' => 1,
+                        'AC_DISABLE_FAST_INSTALL' => 1,
+                        'AC_LTDL_SHLIBPATH' => 1,
+                        '_LT_CC_BASENAME' => 1,
+                        'AC_LIBTOOL_DLOPEN' => 1,
+                        'AC_LTDL_OBJDIR' => 1,
+                        'AC_LTDL_SHLIBEXT' => 1,
+                        '_LT_AC_PROG_CXXCPP' => 1,
+                        'AC_LIBTOOL_SETUP' => 1,
+                        'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
+                        '_LT_AC_LANG_F77_CONFIG' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
+                        '_LT_PROG_F77' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'LT_OUTPUT' => 1,
+                        'AC_LIBTOOL_COMPILER_OPTION' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AC_LTDL_PREOPEN' => 1,
+                        'AC_PATH_TOOL_PREFIX' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AC_WITH_LTDL' => 1,
+                        'LT_INIT' => 1,
+                        'LTOPTIONS_VERSION' => 1,
+                        'AC_ENABLE_STATIC' => 1,
+                        'AC_LTDL_DLSYM_USCORE' => 1,
+                        'AC_CHECK_LIBM' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        '_LT_AC_LANG_CXX_CONFIG' => 1,
+                        'AC_LTDL_DLLIB' => 1,
+                        '_LT_PROG_LTMAIN' => 1,
+                        'LT_CMD_MAX_LEN' => 1,
+                        'LT_PROG_GO' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'AC_ENABLE_FAST_INSTALL' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'LTSUGAR_VERSION' => 1,
+                        'LT_PATH_NM' => 1,
+                        'LT_PATH_LD' => 1,
+                        'LT_SYS_DLOPEN_DEPLIBS' => 1,
+                        'LT_AC_PROG_GCJ' => 1,
+                        'AM_PROG_LEX' => 1,
+                        'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
+                        '_LT_AC_LANG_C_CONFIG' => 1,
+                        'LT_AC_PROG_SED' => 1,
+                        'AC_PROG_LD' => 1,
+                        'AC_PATH_MAGIC' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'LT_FUNC_DLSYM_USCORE' => 1,
+                        'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
+                        'AC_LIB_LTDL' => 1,
+                        '_LT_AC_TAGVAR' => 1,
+                        'AM_PROG_AR' => 1,
+                        '_m4_warn' => 1,
+                        '_LT_AC_LANG_GCJ' => 1,
+                        '_LT_AC_LOCK' => 1,
+                        'LT_AC_PROG_EGREP' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'LT_FUNC_ARGZ' => 1,
+                        'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
+                        'LTDL_INSTALLABLE' => 1,
+                        '_LT_LINKER_BOILERPLATE' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
+                        'LT_SYS_MODULE_EXT' => 1,
+                        'AM_DISABLE_SHARED' => 1,
+                        '_LT_WITH_SYSROOT' => 1,
+                        'm4_include' => 1,
+                        'AC_LIBTOOL_CXX' => 1,
+                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+                        'AC_ENABLE_SHARED' => 1,
+                        'LTVERSION_VERSION' => 1,
+                        'AX_CHECK_COMPILE_FLAG' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        '_AM_PROG_CC_C_O' => 1,
+                        'AC_LIBTOOL_CONFIG' => 1,
+                        '_LT_DLL_DEF_P' => 1,
+                        '_AM_SET_OPTIONS' => 1,
+                        'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
+                        'AC_CONFIG_MACRO_DIR' => 1,
+                        '_LT_AC_LANG_GCJ_CONFIG' => 1,
+                        'AC_LTDL_SYSSEARCHPATH' => 1,
+                        'AC_LIBLTDL_CONVENIENCE' => 1,
+                        '_LT_AC_TRY_DLOPEN_SELF' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        'LT_LIB_DLLOAD' => 1,
+                        'AX_CODE_COVERAGE' => 1,
+                        'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
+                        '_LT_REQUIRED_DARWIN_CHECKS' => 1,
+                        'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
+                        'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
+                        'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
+                        'AC_LIBTOOL_WIN32_DLL' => 1,
+                        '_LTDL_SETUP' => 1,
+                        '_LT_LIBOBJ' => 1,
+                        'include' => 1,
+                        'AC_LIBTOOL_F77' => 1,
+                        'AC_DEPLIBS_CHECK_METHOD' => 1,
+                        'AC_LTDL_SYMBOL_USCORE' => 1,
+                        'LT_PROG_GCJ' => 1,
+                        'AM_SET_DEPDIR' => 1,
+                        'AM_PROG_LD' => 1,
+                        'AC_LIBTOOL_PROG_CC_C_O' => 1,
+                        'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
+                        '_LT_AC_SYS_COMPILER' => 1,
+                        '_LT_AC_LANG_CXX' => 1,
+                        'AM_PROG_NM' => 1,
+                        'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
+                        'AC_DEFUN' => 1,
+                        'AC_LIBTOOL_GCJ' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'AM_DISABLE_STATIC' => 1,
+                        '_LT_AC_LANG_RC_CONFIG' => 1,
+                        'LTDL_INIT' => 1,
+                        'AM_RUN_LOG' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        'AC_LIBLTDL_INSTALLABLE' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        '_LT_AC_SYS_LIBPATH_AIX' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        '_LT_PROG_CXX' => 1,
+                        'LTOBSOLETE_VERSION' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AM_ENABLE_STATIC' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
+                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'AC_LIBTOOL_OBJDIR' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        'AC_LIBTOOL_LINKER_OPTION' => 1,
+                        '_LT_AC_SHELL_INIT' => 1,
+                        'AU_DEFUN' => 1,
+                        'AM_PROG_LIBTOOL' => 1,
+                        'AC_PROG_LD_GNU' => 1,
+                        '_LT_PREPARE_SED_QUOTE_VARS' => 1,
+                        'AC_LIBTOOL_PICMODE' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AM_ENABLE_SHARED' => 1,
+                        '_LT_COMPILER_OPTION' => 1,
+                        'AC_LTDL_ENABLE_INSTALL' => 1,
+                        'LT_SYS_DLSEARCH_PATH' => 1,
+                        'LT_WITH_LTDL' => 1,
+                        'LT_SYS_SYMBOL_USCORE' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
+                        '_LT_PATH_TOOL_PREFIX' => 1,
+                        '_LT_PROG_FC' => 1,
+                        'LT_PROG_RC' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        'AC_LIBTOOL_DLOPEN_SELF' => 1,
+                        '_AM_CONFIG_MACRO_DIRS' => 1,
+                        '_LT_COMPILER_BOILERPLATE' => 1,
+                        'LT_SYS_MODULE_PATH' => 1,
+                        'AC_DISABLE_STATIC' => 1,
+                        'AC_LIBTOOL_LANG_C_CONFIG' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'LTDL_CONVENIENCE' => 1,
+                        'AC_LIBTOOL_RC' => 1,
+                        'LT_LIB_M' => 1,
+                        'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        '_LT_AC_LANG_F77' => 1,
+                        '_LT_AC_PROG_ECHO_BACKSLASH' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
+                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+                        'LT_SYS_DLOPEN_SELF' => 1,
+                        '_LT_AC_CHECK_DLFCN' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'AC_PROG_NM' => 1,
+                        'AC_PROG_LD_RELOAD_FLAG' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'LT_LANG' => 1
+                      }
+                    ], 'Autom4te::Request' ),
+             bless( [
+                      '1',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        'aclocal.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        'AC_CANONICAL_TARGET' => 1,
+                        'AC_SUBST_TRACE' => 1,
+                        'include' => 1,
+                        '_AM_COND_IF' => 1,
+                        'AM_PROG_MOC' => 1,
+                        'AM_PROG_LIBTOOL' => 1,
+                        'AC_REQUIRE_AUX_FILE' => 1,
+                        'AM_PROG_FC_C_O' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'AM_PATH_GUILE' => 1,
+                        'AM_POT_TOOLS' => 1,
+                        'AM_MAINTAINER_MODE' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'm4_sinclude' => 1,
+                        'AM_PROG_AR' => 1,
+                        '_m4_warn' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'AC_CONFIG_LINKS' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
+                        'AC_CONFIG_FILES' => 1,
+                        'AC_CANONICAL_BUILD' => 1,
+                        'AM_PROG_MKDIR_P' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_FC_SRCEXT' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AC_INIT' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AC_CONFIG_HEADERS' => 1,
+                        '_AM_COND_ELSE' => 1,
+                        'AH_OUTPUT' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AC_CANONICAL_HOST' => 1,
+                        'AM_PROG_F77_C_O' => 1,
+                        'AC_FC_PP_DEFINE' => 1,
+                        'sinclude' => 1,
+                        'm4_include' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'AM_MAKEFILE_INCLUDE' => 1,
+                        'AM_NLS' => 1,
+                        'AC_SUBST' => 1,
+                        'AM_ENABLE_MULTILIB' => 1,
+                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
+                        '_AM_COND_ENDIF' => 1,
+                        'AC_DEFINE_TRACE_LITERAL' => 1,
+                        'AC_LIBSOURCE' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+                        'AC_CONFIG_SUBDIRS' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'AM_PROG_CXX_C_O' => 1,
+                        '_AM_MAKEFILE_INCLUDE' => 1,
+                        'AC_FC_PP_SRCEXT' => 1,
+                        'AC_FC_FREEFORM' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'LT_INIT' => 1
+                      }
+                    ], 'Autom4te::Request' ),
+             bless( [
+                      '2',
+                      1,
+                      [
+                        '/usr/share/autoconf'
+                      ],
+                      [
+                        '/usr/share/autoconf/autoconf/autoconf.m4f',
+                        '-',
+                        '/usr/share/aclocal-1.15/internal/ac-config-macro-dirs.m4',
+                        '/usr/share/aclocal/ltargz.m4',
+                        '/usr/share/aclocal/ltdl.m4',
+                        '/usr/share/aclocal-1.15/amversion.m4',
+                        '/usr/share/aclocal-1.15/ar-lib.m4',
+                        '/usr/share/aclocal-1.15/auxdir.m4',
+                        '/usr/share/aclocal-1.15/cond.m4',
+                        '/usr/share/aclocal-1.15/depend.m4',
+                        '/usr/share/aclocal-1.15/depout.m4',
+                        '/usr/share/aclocal-1.15/init.m4',
+                        '/usr/share/aclocal-1.15/install-sh.m4',
+                        '/usr/share/aclocal-1.15/lead-dot.m4',
+                        '/usr/share/aclocal-1.15/lex.m4',
+                        '/usr/share/aclocal-1.15/make.m4',
+                        '/usr/share/aclocal-1.15/missing.m4',
+                        '/usr/share/aclocal-1.15/options.m4',
+                        '/usr/share/aclocal-1.15/prog-cc-c-o.m4',
+                        '/usr/share/aclocal-1.15/runlog.m4',
+                        '/usr/share/aclocal-1.15/sanity.m4',
+                        '/usr/share/aclocal-1.15/silent.m4',
+                        '/usr/share/aclocal-1.15/strip.m4',
+                        '/usr/share/aclocal-1.15/substnot.m4',
+                        '/usr/share/aclocal-1.15/tar.m4',
+                        'm4/ax_check_compile_and_link_flag.m4',
+                        'm4/ax_check_compile_flag.m4',
+                        'm4/ax_code_coverage.m4',
+                        'm4/libtool.m4',
+                        'm4/ltoptions.m4',
+                        'm4/ltsugar.m4',
+                        'm4/ltversion.m4',
+                        'm4/lt~obsolete.m4',
+                        'configure.ac'
+                      ],
+                      {
+                        'LT_PATH_NM' => 1,
+                        'LTSUGAR_VERSION' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'LT_PROG_GO' => 1,
+                        'AC_ENABLE_FAST_INSTALL' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'AM_PROG_LEX' => 1,
+                        'LT_AC_PROG_GCJ' => 1,
+                        'LT_SYS_DLOPEN_DEPLIBS' => 1,
+                        'LT_PATH_LD' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'AC_PATH_MAGIC' => 1,
+                        'LT_FUNC_DLSYM_USCORE' => 1,
+                        'AC_PROG_LD' => 1,
+                        'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
+                        'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
+                        'LT_AC_PROG_SED' => 1,
+                        '_LT_AC_LANG_C_CONFIG' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        '_m4_warn' => 1,
+                        'AC_LIB_LTDL' => 1,
+                        '_LT_AC_TAGVAR' => 1,
+                        'AM_PROG_AR' => 1,
+                        'LT_AC_PROG_EGREP' => 1,
+                        '_LT_AC_LOCK' => 1,
+                        '_LT_AC_LANG_GCJ' => 1,
+                        'AC_LIBTOOL_CXX' => 1,
+                        'm4_include' => 1,
+                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+                        'AC_ENABLE_SHARED' => 1,
+                        'LT_FUNC_ARGZ' => 1,
+                        '_LT_WITH_SYSROOT' => 1,
+                        'AM_DISABLE_SHARED' => 1,
+                        'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
+                        'LTDL_INSTALLABLE' => 1,
+                        'LT_SYS_MODULE_EXT' => 1,
+                        '_LT_LINKER_BOILERPLATE' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        '_AM_PROG_CC_C_O' => 1,
+                        'AC_LIBTOOL_CONFIG' => 1,
+                        'AX_CHECK_COMPILE_FLAG' => 1,
+                        'LTVERSION_VERSION' => 1,
+                        'AC_CONFIG_MACRO_DIR' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
+                        '_AM_SET_OPTIONS' => 1,
+                        '_LT_DLL_DEF_P' => 1,
+                        'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
+                        'AX_CODE_COVERAGE' => 1,
+                        'AC_LIBLTDL_CONVENIENCE' => 1,
+                        'AC_LTDL_SYSSEARCHPATH' => 1,
+                        '_LT_AC_LANG_GCJ_CONFIG' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        '_LT_AC_TRY_DLOPEN_SELF' => 1,
+                        'LT_LIB_DLLOAD' => 1,
+                        'LT_AC_PROG_RC' => 1,
+                        'AC_PROG_EGREP' => 1,
+                        'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
+                        '_LT_PROG_ECHO_BACKSLASH' => 1,
+                        'AC_LIBTOOL_FC' => 1,
+                        'AC_DISABLE_SHARED' => 1,
+                        'AX_CHECK_COMPILE_AND_LINK_FLAG' => 1,
+                        '_LT_LINKER_OPTION' => 1,
+                        'AC_DISABLE_FAST_INSTALL' => 1,
+                        'AC_LTDL_SHLIBPATH' => 1,
+                        '_LT_AC_FILE_LTDLL_C' => 1,
+                        'AC_LTDL_OBJDIR' => 1,
+                        '_LT_CC_BASENAME' => 1,
+                        'AC_LIBTOOL_DLOPEN' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        '_AC_PROG_LIBTOOL' => 1,
+                        'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        '_LT_AC_LANG_F77_CONFIG' => 1,
+                        'AC_LTDL_SHLIBEXT' => 1,
+                        '_LT_AC_PROG_CXXCPP' => 1,
+                        'AC_LIBTOOL_SETUP' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        '_LT_PROG_F77' => 1,
+                        'AC_LIBTOOL_COMPILER_OPTION' => 1,
+                        'LT_OUTPUT' => 1,
+                        'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AC_LTDL_DLSYM_USCORE' => 1,
+                        'AC_CHECK_LIBM' => 1,
+                        'AC_ENABLE_STATIC' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AC_PATH_TOOL_PREFIX' => 1,
+                        'AC_LTDL_PREOPEN' => 1,
+                        'AC_WITH_LTDL' => 1,
+                        'LTOPTIONS_VERSION' => 1,
+                        'LT_INIT' => 1,
+                        'LT_CMD_MAX_LEN' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        '_LT_AC_LANG_CXX_CONFIG' => 1,
+                        '_LT_PROG_LTMAIN' => 1,
+                        'AC_LTDL_DLLIB' => 1,
+                        'AM_PROG_LIBTOOL' => 1,
+                        'AC_PROG_LD_GNU' => 1,
+                        'AU_DEFUN' => 1,
+                        '_LT_PREPARE_SED_QUOTE_VARS' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AC_LIBTOOL_PICMODE' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        'LT_WITH_LTDL' => 1,
+                        'AC_LTDL_ENABLE_INSTALL' => 1,
+                        'LT_SYS_DLSEARCH_PATH' => 1,
+                        '_LT_COMPILER_OPTION' => 1,
+                        'AM_ENABLE_SHARED' => 1,
+                        'LT_SYS_SYMBOL_USCORE' => 1,
+                        'LT_PROG_RC' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        '_LT_PROG_FC' => 1,
+                        '_LT_PATH_TOOL_PREFIX' => 1,
+                        '_AM_CONFIG_MACRO_DIRS' => 1,
+                        'AC_LIBTOOL_DLOPEN_SELF' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
+                        'AC_LIBTOOL_RC' => 1,
+                        'LTDL_CONVENIENCE' => 1,
+                        '_LT_COMPILER_BOILERPLATE' => 1,
+                        'AC_LIBTOOL_LANG_C_CONFIG' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'LT_SYS_MODULE_PATH' => 1,
+                        'AC_DISABLE_STATIC' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'm4_pattern_allow' => 1,
+                        'LT_LIB_M' => 1,
+                        'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
+                        '_LT_AC_PROG_ECHO_BACKSLASH' => 1,
+                        '_LT_AC_LANG_F77' => 1,
+                        'LT_LANG' => 1,
+                        'AC_PROG_LD_RELOAD_FLAG' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        '_LT_AC_CHECK_DLFCN' => 1,
+                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+                        'LT_SYS_DLOPEN_SELF' => 1,
+                        'AC_PROG_NM' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
+                        'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
+                        'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
+                        '_LT_LIBOBJ' => 1,
+                        'AC_LIBTOOL_WIN32_DLL' => 1,
+                        '_LTDL_SETUP' => 1,
+                        'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
+                        '_LT_REQUIRED_DARWIN_CHECKS' => 1,
+                        'AC_LTDL_SYMBOL_USCORE' => 1,
+                        'LT_PROG_GCJ' => 1,
+                        'AM_PROG_LD' => 1,
+                        'AM_SET_DEPDIR' => 1,
+                        'AC_LIBTOOL_F77' => 1,
+                        'include' => 1,
+                        'AC_DEPLIBS_CHECK_METHOD' => 1,
+                        'AC_LIBTOOL_PROG_CC_C_O' => 1,
+                        '_LT_AC_SYS_COMPILER' => 1,
+                        'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
+                        'AC_LIBTOOL_GCJ' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        '_LT_AC_LANG_CXX' => 1,
+                        'AM_PROG_NM' => 1,
+                        'AC_DEFUN' => 1,
+                        'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
+                        'AM_RUN_LOG' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        'AM_DISABLE_STATIC' => 1,
+                        '_LT_AC_LANG_RC_CONFIG' => 1,
+                        'LT_CONFIG_LTDL_DIR' => 1,
+                        'LTDL_INIT' => 1,
+                        '_LT_AC_SYS_LIBPATH_AIX' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_LIBLTDL_INSTALLABLE' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        '_LT_PROG_CXX' => 1,
+                        'LTOBSOLETE_VERSION' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        '_LT_AC_SHELL_INIT' => 1,
+                        'AC_LIBTOOL_LINKER_OPTION' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        'AM_ENABLE_STATIC' => 1,
+                        'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AC_LIBTOOL_OBJDIR' => 1,
+                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1
+                      }
+                    ], 'Autom4te::Request' )
+           );
+
diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0
new file mode 100644 (file)
index 0000000..3ca87dc
--- /dev/null
@@ -0,0 +1,3157 @@
+m4trace:/usr/share/aclocal/libtool.m4:61: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])
+m4trace:/usr/share/aclocal/libtool.m4:99: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:99: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:100: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:100: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:619: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])
+m4trace:/usr/share/aclocal/libtool.m4:812: -1- AC_DEFUN([LT_SUPPORTED_TAG], [])
+m4trace:/usr/share/aclocal/libtool.m4:823: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Go],                        [_LT_LANG(GO)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])
+m4trace:/usr/share/aclocal/libtool.m4:915: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+m4trace:/usr/share/aclocal/libtool.m4:915: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(C++)])
+m4trace:/usr/share/aclocal/libtool.m4:916: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+m4trace:/usr/share/aclocal/libtool.m4:916: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran 77)])
+m4trace:/usr/share/aclocal/libtool.m4:917: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+m4trace:/usr/share/aclocal/libtool.m4:917: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran)])
+m4trace:/usr/share/aclocal/libtool.m4:918: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+m4trace:/usr/share/aclocal/libtool.m4:918: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Java)])
+m4trace:/usr/share/aclocal/libtool.m4:919: -1- AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+m4trace:/usr/share/aclocal/libtool.m4:919: -1- AC_DEFUN([AC_LIBTOOL_RC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_RC' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Windows Resource)])
+m4trace:/usr/share/aclocal/libtool.m4:1247: -1- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([$with_sysroot])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+m4trace:/usr/share/aclocal/libtool.m4:1578: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])
+m4trace:/usr/share/aclocal/libtool.m4:1620: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1620: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1629: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])
+m4trace:/usr/share/aclocal/libtool.m4:1664: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1664: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1671: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])
+m4trace:/usr/share/aclocal/libtool.m4:1810: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1810: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:1921: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen=shl_load],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen=dlopen],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])
+m4trace:/usr/share/aclocal/libtool.m4:2046: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:2046: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3167: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])
+m4trace:/usr/share/aclocal/libtool.m4:3229: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3229: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3252: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test no = "$withval" || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])
+m4trace:/usr/share/aclocal/libtool.m4:3341: -1- AU_DEFUN([AM_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3341: -1- AC_DEFUN([AM_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3342: -1- AU_DEFUN([AC_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3342: -1- AC_DEFUN([AC_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3671: -1- AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])
+m4trace:/usr/share/aclocal/libtool.m4:3766: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3766: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3767: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3767: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3838: -1- AC_DEFUN([_LT_DLL_DEF_P], [dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[        ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[  ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])
+m4trace:/usr/share/aclocal/libtool.m4:3852: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
+  ;;
+esac
+AC_SUBST([LIBM])
+])
+m4trace:/usr/share/aclocal/libtool.m4:3871: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:3871: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8141: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+m4trace:/usr/share/aclocal/libtool.m4:8150: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8150: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8157: -1- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,)
+])
+m4trace:/usr/share/aclocal/libtool.m4:8164: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,)
+])
+m4trace:/usr/share/aclocal/libtool.m4:8169: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8169: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8289: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:/usr/share/aclocal/libtool.m4:8289: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:/usr/share/aclocal/ltargz.m4:12: -1- AC_DEFUN([LT_FUNC_ARGZ], [
+AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_TYPES([error_t],
+  [],
+  [AC_DEFINE([error_t], [int],
+   [Define to a type to use for 'error_t' if it is not otherwise available.])
+   AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
+    does not typedef error_t.])],
+  [#if defined(HAVE_ARGZ_H)
+#  include <argz.h>
+#endif])
+
+LT_ARGZ_H=
+AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \
+       argz_next argz_stringify], [], [LT_ARGZ_H=lt__argz.h; AC_LIBOBJ([lt__argz])])
+
+dnl if have system argz functions, allow forced use of
+dnl libltdl-supplied implementation (and default to do so
+dnl on "known bad" systems). Could use a runtime check, but
+dnl (a) detecting malloc issues is notoriously unreliable
+dnl (b) only known system that declares argz functions,
+dnl     provides them, yet they are broken, is cygwin
+dnl     releases prior to 16-Mar-2007 (1.5.24 and earlier)
+dnl So, it's more straightforward simply to special case
+dnl this for known bad systems.
+AS_IF([test -z "$LT_ARGZ_H"],
+    [AC_CACHE_CHECK(
+        [if argz actually works],
+        [lt_cv_sys_argz_works],
+        [[case $host_os in #(
+        *cygwin*)
+          lt_cv_sys_argz_works=no
+          if test no != "$cross_compiling"; then
+            lt_cv_sys_argz_works="guessing no"
+          else
+            lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+            save_IFS=$IFS
+            IFS=-.
+            set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+            IFS=$save_IFS
+            lt_os_major=${2-0}
+            lt_os_minor=${3-0}
+            lt_os_micro=${4-0}
+            if test 1 -lt "$lt_os_major" \
+               || { test 1 -eq "$lt_os_major" \
+                 && { test 5 -lt "$lt_os_minor" \
+                   || { test 5 -eq "$lt_os_minor" \
+                     && test 24 -lt "$lt_os_micro"; }; }; }; then
+              lt_cv_sys_argz_works=yes
+            fi
+          fi
+          ;; #(
+        *) lt_cv_sys_argz_works=yes ;;
+        esac]])
+     AS_IF([test yes = "$lt_cv_sys_argz_works"],
+        [AC_DEFINE([HAVE_WORKING_ARGZ], 1,
+                   [This value is set to 1 to indicate that the system argz facility works])],
+        [LT_ARGZ_H=lt__argz.h
+        AC_LIBOBJ([lt__argz])])])
+
+AC_SUBST([LT_ARGZ_H])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT])
+_$0($*)
+])
+m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [
+  m4_pattern_allow([^_LT_LIBOBJS$])
+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+])
+m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+dnl We need to keep our own list of libobjs separate from our parent project,
+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+dnl we look for our own LIBOBJs.
+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+m4_pushdef([AC_LIBSOURCES])
+
+dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
+m4_if(_LTDL_MODE, [],
+        [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
+        m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
+                [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
+
+AC_ARG_WITH([included_ltdl],
+    [AS_HELP_STRING([--with-included-ltdl],
+                    [use the GNU ltdl sources included here])])
+
+if test yes != "$with_included_ltdl"; then
+  # We are not being forced to use the included libltdl sources, so
+  # decide whether there is a useful installed version we can use.
+  AC_CHECK_HEADER([ltdl.h],
+      [AC_CHECK_DECL([lt_dlinterface_register],
+          [AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
+              [with_included_ltdl=no],
+              [with_included_ltdl=yes])],
+          [with_included_ltdl=yes],
+          [AC_INCLUDES_DEFAULT
+           #include <ltdl.h>])],
+      [with_included_ltdl=yes],
+      [AC_INCLUDES_DEFAULT]
+  )
+fi
+
+dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
+dnl was called yet, then for old times' sake, we assume libltdl is in an
+dnl eponymous directory:
+AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
+
+AC_ARG_WITH([ltdl_include],
+    [AS_HELP_STRING([--with-ltdl-include=DIR],
+                    [use the ltdl headers installed in DIR])])
+
+if test -n "$with_ltdl_include"; then
+  if test -f "$with_ltdl_include/ltdl.h"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl include directory: '$with_ltdl_include'])
+  fi
+else
+  with_ltdl_include=no
+fi
+
+AC_ARG_WITH([ltdl_lib],
+    [AS_HELP_STRING([--with-ltdl-lib=DIR],
+                    [use the libltdl.la installed in DIR])])
+
+if test -n "$with_ltdl_lib"; then
+  if test -f "$with_ltdl_lib/libltdl.la"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl library directory: '$with_ltdl_lib'])
+  fi
+else
+  with_ltdl_lib=no
+fi
+
+case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
+  ,yes,no,no,)
+       m4_case(m4_default(_LTDL_TYPE, [convenience]),
+           [convenience], [_LTDL_CONVENIENCE],
+           [installable], [_LTDL_INSTALLABLE],
+         [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
+       ;;
+  ,no,no,no,)
+       # If the included ltdl is not to be used, then use the
+       # preinstalled libltdl we found.
+       AC_DEFINE([HAVE_LTDL], [1],
+         [Define this if a modern libltdl is already installed])
+       LIBLTDL=-lltdl
+       LTDLDEPS=
+       LTDLINCL=
+       ;;
+  ,no*,no,*)
+       AC_MSG_ERROR(['--with-ltdl-include' and '--with-ltdl-lib' options must be used together])
+       ;;
+  *)   with_included_ltdl=no
+       LIBLTDL="-L$with_ltdl_lib -lltdl"
+       LTDLDEPS=
+       LTDLINCL=-I$with_ltdl_include
+       ;;
+esac
+INCLTDL=$LTDLINCL
+
+# Report our decision...
+AC_MSG_CHECKING([where to find libltdl headers])
+AC_MSG_RESULT([$LTDLINCL])
+AC_MSG_CHECKING([where to find libltdl library])
+AC_MSG_RESULT([$LIBLTDL])
+
+_LTDL_SETUP
+
+dnl restore autoconf definition.
+m4_popdef([AC_LIBOBJ])
+m4_popdef([AC_LIBSOURCES])
+
+AC_CONFIG_COMMANDS_PRE([
+    _ltdl_libobjs=
+    _ltdl_ltlibobjs=
+    if test -n "$_LT_LIBOBJS"; then
+      # Remove the extension.
+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+      done
+    fi
+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+])
+
+# Only expand once:
+m4_define([LTDL_INIT])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
+AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
+AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
+AC_REQUIRE([LT_LIB_DLLOAD])dnl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
+AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
+AC_REQUIRE([LT_FUNC_ARGZ])dnl
+
+m4_require([_LT_CHECK_OBJDIR])dnl
+m4_require([_LT_HEADER_DLFCN])dnl
+m4_require([_LT_CHECK_DLPREOPEN])dnl
+m4_require([_LT_DECL_SED])dnl
+
+dnl Don't require this, or it will be expanded earlier than the code
+dnl that sets the variables it relies on:
+_LT_ENABLE_INSTALL
+
+dnl _LTDL_MODE specific code must be called at least once:
+_LTDL_MODE_DISPATCH
+
+# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
+# the user used.  This is so that ltdl.h can pick up the parent projects
+# config.h file, The first file in AC_CONFIG_HEADERS must contain the
+# definitions required by ltdl.c.
+# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
+AC_CONFIG_COMMANDS_PRE([dnl
+m4_pattern_allow([^LT_CONFIG_H$])dnl
+m4_ifset([AH_HEADER],
+    [LT_CONFIG_H=AH_HEADER],
+    [m4_ifset([AC_LIST_HEADERS],
+           [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's|^[[      ]]*||;s|[[ :]].*$||'`],
+       [])])])
+AC_SUBST([LT_CONFIG_H])
+
+AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+       [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+
+m4_pattern_allow([LT_LIBEXT])dnl
+AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+
+name=
+eval "lt_libprefix=\"$libname_spec\""
+m4_pattern_allow([LT_LIBPREFIX])dnl
+AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix])
+
+name=ltdl
+eval "LTDLOPEN=\"$libname_spec\""
+AC_SUBST([LTDLOPEN])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:443: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
+  [lt_cv_sys_dlopen_deplibs],
+  [# PORTME does your system automatically load deplibs for dlopen?
+  # or its logical equivalent (e.g. shl_load for HP-UX < 11)
+  # For now, we just catch OSes we know something about -- in the
+  # future, we'll try test this programmatically.
+  lt_cv_sys_dlopen_deplibs=unknown
+  case $host_os in
+  aix3*|aix4.1.*|aix4.2.*)
+    # Unknown whether this is true for these versions of AIX, but
+    # we want this 'case' here to explicitly catch those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  aix[[4-9]]*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  amigaos*)
+    case $host_cpu in
+    powerpc)
+      lt_cv_sys_dlopen_deplibs=no
+      ;;
+    esac
+    ;;
+  bitrig*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  darwin*)
+    # Assuming the user has installed a libdl from somewhere, this is true
+    # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  freebsd* | dragonfly*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    # GNU and its variants, using gnu ld.so (Glibc)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  hpux10*|hpux11*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  interix*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  irix[[12345]]*|irix6.[[01]]*)
+    # Catch all versions of IRIX before 6.2, and indicate that we don't
+    # know how it worked for any of those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  irix*)
+    # The case above catches anything before 6.2, and it's known that
+    # at 6.2 and later dlopen does load deplibs.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  netbsd* | netbsdelf*-gnu)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  openbsd*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  osf[[1234]]*)
+    # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
+    # it did *not* use an RPATH in a shared library to find objects the
+    # library depends on, so we explicitly say 'no'.
+    lt_cv_sys_dlopen_deplibs=no
+    ;;
+  osf5.0|osf5.0a|osf5.1)
+    # dlopen *does* load deplibs and with the right loader patch applied
+    # it even uses RPATH in a shared library to search for shared objects
+    # that the library depends on, but there's no easy way to know if that
+    # patch is installed.  Since this is the case, all we can really
+    # say is unknown -- it depends on the patch being installed.  If
+    # it is, this changes to 'yes'.  Without it, it would be 'no'.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  osf*)
+    # the two cases above should catch all versions of osf <= 5.1.  Read
+    # the comments above for what we know about them.
+    # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
+    # is used to find them so we can finally say 'yes'.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  qnx*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  solaris*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    libltdl_cv_sys_dlopen_deplibs=yes
+    ;;
+  esac
+  ])
+if test yes != "$lt_cv_sys_dlopen_deplibs"; then
+ AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
+    [Define if the OS needs help to load dependent libraries for dlopen().])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:545: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:545: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:552: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([what extension is used for runtime loadable modules],
+  [libltdl_cv_shlibext],
+[
+module=yes
+eval libltdl_cv_shlibext=$shrext_cmds
+module=no
+eval libltdl_cv_shrext=$shrext_cmds
+  ])
+if test -n "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_MODULE_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+    [Define to the extension used for runtime loadable modules, say, ".so".])
+fi
+if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_SHARED_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"],
+    [Define to the shared library suffix, say, ".dylib".])
+fi
+if test -n "$shared_archive_member_spec"; then
+  m4_pattern_allow([LT_SHARED_LIB_MEMBER])dnl
+  AC_DEFINE_UNQUOTED([LT_SHARED_LIB_MEMBER], ["($shared_archive_member_spec.o)"],
+    [Define to the shared archive member specification, say "(shr.o)".])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:580: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:580: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:587: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([what variable specifies run-time module search path],
+  [lt_cv_module_path_var], [lt_cv_module_path_var=$shlibpath_var])
+if test -n "$lt_cv_module_path_var"; then
+  m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
+    [Define to the name of the environment variable that determines the run-time module search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:599: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:599: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([for the default library search path],
+  [lt_cv_sys_dlsearch_path],
+  [lt_cv_sys_dlsearch_path=$sys_lib_dlsearch_path_spec])
+if test -n "$lt_cv_sys_dlsearch_path"; then
+  sys_dlsearch_path=
+  for dir in $lt_cv_sys_dlsearch_path; do
+    if test -z "$sys_dlsearch_path"; then
+      sys_dlsearch_path=$dir
+    else
+      sys_dlsearch_path=$sys_dlsearch_path$PATH_SEPARATOR$dir
+    fi
+  done
+  m4_pattern_allow([LT_DLSEARCH_PATH])dnl
+  AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
+    [Define to the system default library search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:627: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:627: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:653: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$])
+LT_DLLOADERS=
+AC_SUBST([LT_DLLOADERS])
+
+AC_LANG_PUSH([C])
+lt_dlload_save_LIBS=$LIBS
+
+LIBADD_DLOPEN=
+AC_SEARCH_LIBS([dlopen], [dl],
+       [AC_DEFINE([HAVE_LIBDL], [1],
+                  [Define if you have the libdl library or equivalent.])
+       if test "$ac_cv_search_dlopen" != "none required"; then
+         LIBADD_DLOPEN=-ldl
+       fi
+       libltdl_cv_lib_dl_dlopen=yes
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
+#  include <dlfcn.h>
+#endif
+    ]], [[dlopen(0, 0);]])],
+           [AC_DEFINE([HAVE_LIBDL], [1],
+                      [Define if you have the libdl library or equivalent.])
+           libltdl_cv_func_dlopen=yes
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+       [AC_CHECK_LIB([svld], [dlopen],
+               [AC_DEFINE([HAVE_LIBDL], [1],
+                        [Define if you have the libdl library or equivalent.])
+               LIBADD_DLOPEN=-lsvld libltdl_cv_func_dlopen=yes
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
+if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen"
+then
+  lt_save_LIBS=$LIBS
+  LIBS="$LIBS $LIBADD_DLOPEN"
+  AC_CHECK_FUNCS([dlerror])
+  LIBS=$lt_save_LIBS
+fi
+AC_SUBST([LIBADD_DLOPEN])
+
+LIBADD_SHL_LOAD=
+AC_CHECK_FUNC([shl_load],
+       [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                  [Define if you have the shl_load function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
+    [AC_CHECK_LIB([dld], [shl_load],
+           [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                      [Define if you have the shl_load function.])
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
+           LIBADD_SHL_LOAD=-ldld])])
+AC_SUBST([LIBADD_SHL_LOAD])
+
+case $host_os in
+darwin[[1567]].*)
+# We only want this for pre-Mac OS X 10.4.
+  AC_CHECK_FUNC([_dyld_func_lookup],
+       [AC_DEFINE([HAVE_DYLD], [1],
+                  [Define if you have the _dyld_func_lookup function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
+  ;;
+beos*)
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+  ;;
+cygwin* | mingw* | pw32*)
+  AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+  ;;
+esac
+
+AC_CHECK_LIB([dld], [dld_link],
+       [AC_DEFINE([HAVE_DLD], [1],
+                  [Define if you have the GNU dld library.])
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
+AC_SUBST([LIBADD_DLD_LINK])
+
+m4_pattern_allow([^LT_DLPREOPEN$])
+LT_DLPREOPEN=
+if test -n "$LT_DLLOADERS"
+then
+  for lt_loader in $LT_DLLOADERS; do
+    LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
+  done
+  AC_DEFINE([HAVE_LIBDLLOADER], [1],
+            [Define if libdlloader will be built on this platform])
+fi
+AC_SUBST([LT_DLPREOPEN])
+
+dnl This isn't used anymore, but set it for backwards compatibility
+LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
+AC_SUBST([LIBADD_DL])
+
+LIBS=$lt_dlload_save_LIBS
+AC_LANG_POP
+])
+m4trace:/usr/share/aclocal/ltdl.m4:748: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:748: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:756: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+AC_CACHE_CHECK([for _ prefix in compiled symbols],
+  [lt_cv_sys_symbol_underscore],
+  [lt_cv_sys_symbol_underscore=no
+  cat > conftest.$ac_ext <<_LT_EOF
+void nm_test_func(){}
+int main(){nm_test_func;return 0;}
+_LT_EOF
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    ac_nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
+      # See whether the symbols have a leading underscore.
+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+        lt_cv_sys_symbol_underscore=yes
+      else
+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+         :
+        else
+         echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
+        fi
+      fi
+    else
+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.c >&AS_MESSAGE_LOG_FD
+  fi
+  rm -rf conftest*
+  ])
+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+  AC_SUBST([sys_symbol_underscore])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:793: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:793: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:800: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([_LT_COMPILER_PIC])dnl        for lt_prog_compiler_wl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl  for lt_cv_sys_symbol_underscore
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl     for libltdl_cv_shlibext
+if test yes = "$lt_cv_sys_symbol_underscore"; then
+  if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen"; then
+    AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+      [libltdl_cv_need_uscore],
+      [libltdl_cv_need_uscore=unknown
+      dlsym_uscore_save_LIBS=$LIBS
+      LIBS="$LIBS $LIBADD_DLOPEN"
+      libname=conftmod # stay within 8.3 filename limits!
+      cat >$libname.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+int fnord () { return 42; }]
+_LT_EOF
+
+      # ltfn_module_cmds module_cmds
+      # Execute tilde-delimited MODULE_CMDS with environment primed for
+      # $module_cmds or $archive_cmds type content.
+      ltfn_module_cmds ()
+      {( # subshell avoids polluting parent global environment
+          module_cmds_save_ifs=$IFS; IFS='~'
+          for cmd in @S|@1; do
+            IFS=$module_cmds_save_ifs
+            libobjs=$libname.$ac_objext; lib=$libname$libltdl_cv_shlibext
+            rpath=/not-exists; soname=$libname$libltdl_cv_shlibext; output_objdir=.
+            major=; versuffix=; verstring=; deplibs=
+            ECHO=echo; wl=$lt_prog_compiler_wl; allow_undefined_flag=
+            eval $cmd
+          done
+          IFS=$module_cmds_save_ifs
+      )}
+
+      # Compile a loadable module using libtool macro expansion results.
+      $CC $pic_flag -c $libname.$ac_ext
+      ltfn_module_cmds "${module_cmds:-$archive_cmds}"
+
+      # Try to fetch fnord with dlsym().
+      libltdl_dlunknown=0; libltdl_dlnouscore=1; libltdl_dluscore=2
+      cat >conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+#include <stdio.h>
+#ifndef RTLD_GLOBAL
+#  ifdef DL_GLOBAL
+#    define RTLD_GLOBAL DL_GLOBAL
+#  else
+#    define RTLD_GLOBAL 0
+#  endif
+#endif
+#ifndef RTLD_NOW
+#  ifdef DL_NOW
+#    define RTLD_NOW DL_NOW
+#  else
+#    define RTLD_NOW 0
+#  endif
+#endif
+int main () {
+  void *handle = dlopen ("`pwd`/$libname$libltdl_cv_shlibext", RTLD_GLOBAL|RTLD_NOW);
+  int status = $libltdl_dlunknown;
+  if (handle) {
+    if (dlsym (handle, "fnord"))
+      status = $libltdl_dlnouscore;
+    else {
+      if (dlsym (handle, "_fnord"))
+        status = $libltdl_dluscore;
+      else
+       puts (dlerror ());
+    }
+    dlclose (handle);
+  } else
+    puts (dlerror ());
+  return status;
+}]
+_LT_EOF
+      if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+        (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+        libltdl_status=$?
+        case x$libltdl_status in
+          x$libltdl_dlnouscore) libltdl_cv_need_uscore=no ;;
+         x$libltdl_dluscore) libltdl_cv_need_uscore=yes ;;
+         x*) libltdl_cv_need_uscore=unknown ;;
+        esac
+      fi
+      rm -rf conftest* $libname*
+      LIBS=$dlsym_uscore_save_LIBS
+    ])
+  fi
+fi
+
+if test yes = "$libltdl_cv_need_uscore"; then
+  AC_DEFINE([NEED_USCORE], [1],
+    [Define if dlsym() requires a leading underscore in symbol names.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:907: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:907: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltoptions.m4:14: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+m4trace:/usr/share/aclocal/ltoptions.m4:113: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:113: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:148: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:148: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
+You should run autoupdate.])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:197: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:201: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:205: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:205: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_SHARED($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:206: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:206: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_SHARED($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:251: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:255: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:259: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:259: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_STATIC($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:260: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:260: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_STATIC($@)])
+m4trace:/usr/share/aclocal/ltoptions.m4:305: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:305: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:312: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:312: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:411: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltoptions.m4:411: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:/usr/share/aclocal/ltsugar.m4:14: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+m4trace:/usr/share/aclocal/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:37: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SHELL_INIT])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:43: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([_LT_AC_TAGVAR])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([AC_LTDL_PREOPEN])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_SYS_COMPILER])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([_LT_AC_LOCK])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LTDL_OBJDIR])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PATH_MAGIC])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_GNU])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:67: -1- AC_DEFUN([LT_AC_PROG_EGREP])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([_AC_PROG_LIBTOOL])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([AC_LIBTOOL_SETUP])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:76: -1- AC_DEFUN([_LT_AC_TAGCONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_CXX])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_F77])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([_LT_AC_LANG_GCJ])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:94: -1- AC_DEFUN([_LT_AC_PROG_CXXCPP])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:97: -1- AC_DEFUN([_LT_PROG_F77])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:98: -1- AC_DEFUN([_LT_PROG_FC])
+m4trace:/usr/share/aclocal/lt~obsolete.m4:99: -1- AC_DEFUN([_LT_PROG_CXX])
+m4trace:/usr/share/aclocal-1.15/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15'
+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.15], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+m4trace:/usr/share/aclocal-1.15/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+m4trace:/usr/share/aclocal-1.15/ar-lib.m4:13: -1- AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+  [AC_LANG_PUSH([C])
+   am_cv_ar_interface=ar
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([am_ar_try])
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+        AC_TRY_EVAL([am_ar_try])
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     ])
+   AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  m4_default([$1],
+             [AC_MSG_ERROR([could not determine $AR interface])])
+  ;;
+esac
+AC_SUBST([AR])dnl
+])
+m4trace:/usr/share/aclocal-1.15/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+m4trace:/usr/share/aclocal-1.15/cond.m4:12: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl
+ m4_if([$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])])
+m4trace:/usr/share/aclocal-1.15/depend.m4:26: -1- 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
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh.
+      echo '/* dummy */' > 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])
+])
+m4trace:/usr/share/aclocal-1.15/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+m4trace:/usr/share/aclocal-1.15/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+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
+])
+m4trace:/usr/share/aclocal-1.15/depout.m4:12: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+])
+m4trace:/usr/share/aclocal-1.15/depout.m4:71: -1- 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"])
+])
+m4trace:/usr/share/aclocal-1.15/init.m4:29: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])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],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [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([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver).  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])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+m4trace:/usr/share/aclocal-1.15/init.m4:186: -1- 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])
+m4trace:/usr/share/aclocal-1.15/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != 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])])
+m4trace:/usr/share/aclocal-1.15/lead-dot.m4:10: -1- 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])])
+m4trace:/usr/share/aclocal-1.15/lex.m4:13: -1- AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi])
+m4trace:/usr/share/aclocal-1.15/make.m4:12: -1- 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
+])
+m4trace:/usr/share/aclocal-1.15/missing.m4:11: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+m4trace:/usr/share/aclocal-1.15/missing.m4:20: -1- 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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+m4trace:/usr/share/aclocal-1.15/options.m4:11: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+m4trace:/usr/share/aclocal-1.15/options.m4:17: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+m4trace:/usr/share/aclocal-1.15/options.m4:23: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+m4trace:/usr/share/aclocal-1.15/options.m4:29: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+m4trace:/usr/share/aclocal-1.15/prog-cc-c-o.m4:12: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != 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
+AC_LANG_POP([C])])
+m4trace:/usr/share/aclocal-1.15/prog-cc-c-o.m4:47: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+m4trace:/usr/share/aclocal-1.15/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+m4trace:/usr/share/aclocal-1.15/sanity.m4:11: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane])
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+m4trace:/usr/share/aclocal-1.15/silent.m4:12: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+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
+])
+m4trace:/usr/share/aclocal-1.15/strip.m4:17: -1- 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])])
+m4trace:/usr/share/aclocal-1.15/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE])
+m4trace:/usr/share/aclocal-1.15/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+m4trace:/usr/share/aclocal-1.15/tar.m4:23: -1- 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}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  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])
+      AM_RUN_LOG([cat conftest.dir/file])
+      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])
+])
+m4trace:m4/ax_check_compile_and_link_flag.m4:57: -1- AC_DEFUN([AX_CHECK_COMPILE_AND_LINK_FLAG], [AC_PREREQ(2.61)dnl
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]clflags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler and linker accept $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])
+m4trace:m4/ax_check_compile_flag.m4:60: -1- AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])
+m4trace:m4/ax_code_coverage.m4:75: -1- AC_DEFUN([AX_CODE_COVERAGE], [
+       dnl Check for --enable-code-coverage
+       AC_REQUIRE([AC_PROG_SED])
+
+       # allow to override gcov location
+       AC_ARG_WITH([gcov],
+         [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])
+
+       AC_MSG_CHECKING([whether to build with code coverage support])
+       AC_ARG_ENABLE([code-coverage],
+         AS_HELP_STRING([--enable-code-coverage],
+         [enable code coverage statistics collection]),,
+         enable_code_coverage=no)
+
+       AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+       AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
+       AC_MSG_RESULT($enable_code_coverage)
+
+       AS_IF([ test "$enable_code_coverage" = "yes" ], [
+               # check for gcov
+               AC_CHECK_TOOL([GCOV],
+                 [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],
+                 [:])
+               AS_IF([test "X$GCOV" = "X:"],
+                 [AC_MSG_ERROR([gcov is needed to do coverage])])
+               AC_SUBST([GCOV])
+
+               dnl Check if gcc is being used
+               AS_IF([ test "$GCC" = "no" ], [
+                       AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])
+               ])
+
+               AC_CHECK_PROG([LCOV], [lcov], [lcov])
+               AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
+
+               AS_IF([ test -z "$LCOV" ], [
+                       AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])
+               ])
+
+               AS_IF([ test -z "$GENHTML" ], [
+                       AC_MSG_ERROR([Could not find genhtml from the lcov package])
+               ])
+
+               dnl Build the code coverage flags
+               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               AX_CHECK_COMPILE_FLAG([-coverage], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               ], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                       dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
+                       CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               ])
+
+               AC_SUBST([CODE_COVERAGE_CPPFLAGS])
+               AC_SUBST([CODE_COVERAGE_CFLAGS])
+               AC_SUBST([CODE_COVERAGE_CXXFLAGS])
+               AC_SUBST([CODE_COVERAGE_LIBS])
+               AC_SUBST([CODE_COVERAGE_LDFLAGS])
+
+               [CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+']
+               [CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+']
+               [CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+']
+       ], [
+               [CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+']
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       ])
+
+[CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+']
+
+       AC_SUBST([CODE_COVERAGE_RULES])
+       m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])])
+])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^runstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:5: -1- AM_INIT_AUTOMAKE([foreign])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:5: -1- AM_SET_CURRENT_AUTOMAKE_VERSION
+m4trace:configure.ac:5: -1- AM_AUTOMAKE_VERSION([1.15])
+m4trace:configure.ac:5: -1- _AM_AUTOCONF_VERSION([2.69])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__isrc$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([am__isrc])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:5: -1- _AM_SET_OPTIONS([foreign])
+m4trace:configure.ac:5: -1- _AM_SET_OPTION([foreign])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([foreign])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([no-define])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- AM_SANITY_CHECK
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+m4trace:configure.ac:5: -1- AM_MISSING_HAS_RUN
+m4trace:configure.ac:5: -1- AM_AUX_DIR_EXPAND
+m4trace:configure.ac:5: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOCONF], [autoconf])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:5: -1- AM_PROG_INSTALL_SH
+m4trace:configure.ac:5: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:5: -1- AM_PROG_INSTALL_STRIP
+m4trace:configure.ac:5: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MKDIR_P$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^mkdir_p$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:5: -1- AM_SET_LEADING_DOT
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([tar-ustar])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([tar-pax])
+m4trace:configure.ac:5: -1- _AM_PROG_TAR([v7])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__tar$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__untar$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES([CC])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([no-dependencies])
+m4trace:configure.ac:5: -1- AM_SILENT_RULES
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:5: -1- AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:5: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:6: -1- AC_CONFIG_MACRO_DIR([m4])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:9: -1- _AM_PROG_CC_C_O
+m4trace:configure.ac:9: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext])
+m4trace:configure.ac:9: -1- _AM_DEPENDENCIES([CC])
+m4trace:configure.ac:9: -1- AM_SET_DEPDIR
+m4trace:configure.ac:9: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:9: -1- AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:9: -1- AM_MAKE_INCLUDE
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:9: -1- AM_DEP_TRACK
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__nodep$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__nodep])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:12: -1- m4_pattern_allow([^LN_S$])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YFLAGS$])
+m4trace:configure.ac:15: -1- AM_PROG_LEX
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX_OUTPUT_ROOT$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEXLIB$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^YYTEXT_POINTER$])
+m4trace:configure.ac:17: -1- AM_PROG_AR
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:21: -1- _AM_DEPENDENCIES([CXX])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:21: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:24: -1- LT_INIT
+m4trace:configure.ac:24: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
+m4trace:configure.ac:24: -1- LTOPTIONS_VERSION
+m4trace:configure.ac:24: -1- LTSUGAR_VERSION
+m4trace:configure.ac:24: -1- LTVERSION_VERSION
+m4trace:configure.ac:24: -1- LTOBSOLETE_VERSION
+m4trace:configure.ac:24: -1- _LT_PROG_LTMAIN
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIBTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:24: -1- _LT_PREPARE_SED_QUOTE_VARS
+m4trace:configure.ac:24: -1- _LT_PROG_ECHO_BACKSLASH
+m4trace:configure.ac:24: -1- LT_PATH_LD
+m4trace:configure.ac:24: -1- m4_pattern_allow([^SED$])
+m4trace:configure.ac:24: -1- AC_PROG_EGREP
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^FGREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- LT_PATH_NM
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NM$])
+m4trace:configure.ac:24: -1- LT_CMD_MAX_LEN
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.ac:24: -1- _LT_WITH_SYSROOT
+m4trace:configure.ac:24: -1- m4_pattern_allow([LT_OBJDIR])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_OBJDIR$])
+m4trace:configure.ac:24: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:24: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:24: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CC])
+m4trace:configure.ac:24: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"])
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, )=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^MANIFEST_TOOL$])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_REQUIRED_DARWIN_CHECKS
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DSYMUTIL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NMEDIT$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIPO$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL64$])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $CC understands -b], [lt_cv_prog_compiler__b], [-b], [_LT_TAGVAR(archive_cmds, )='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, )='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:24: -1- LT_SYS_DLOPEN_SELF
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
+m4trace:configure.ac:24: -1- LT_LANG([CXX])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CXX])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:24: -1- LT_PATH_LD
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:27: -1- AM_SILENT_RULES([yes])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:27: -1- AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:27: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:47: -1- AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
+m4trace:configure.ac:48: -1- AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"])
+m4trace:configure.ac:49: -1- AX_CHECK_COMPILE_FLAG([-Wchar-subscripts], [CFLAGS="$CFLAGS -Wchar-subscripts"])
+m4trace:configure.ac:51: -1- AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"])
+m4trace:configure.ac:53: -1- AX_CHECK_COMPILE_FLAG([-Wmissing-declarations], [CFLAGS="$CFLAGS -Wmissing-declarations"])
+m4trace:configure.ac:57: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=attributes], [CFLAGS="$CFLAGS -Wno-error=attributes"])
+m4trace:configure.ac:59: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=cast-align], [CFLAGS="$CFLAGS -Wno-error=cast-align"])
+m4trace:configure.ac:61: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=visibility], [CFLAGS="$CFLAGS -Wno-error=visibility"])
+m4trace:configure.ac:63: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=parentheses-equality], [CFLAGS="$CFLAGS -Wno-error=parentheses-equality"])
+m4trace:configure.ac:65: -1- AX_CHECK_COMPILE_FLAG([-std=gnu99], [CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"])
+m4trace:configure.ac:68: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=unused-variable], [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"])
+m4trace:configure.ac:77: -1- AX_CODE_COVERAGE
+m4trace:configure.ac:77: -1- AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_TRUE$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_FALSE$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_TRUE])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_FALSE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^LCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GENHTML$])
+m4trace:configure.ac:77: -1- AX_CHECK_COMPILE_FLAG([-coverage], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               ], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                       dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
+                       CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               ])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CPPFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CXXFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LIBS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LDFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_RULES$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])
+m4trace:configure.ac:94: -1- AX_CHECK_COMPILE_FLAG([-std=c89], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"])
+m4trace:configure.ac:96: -1- AX_CHECK_COMPILE_FLAG([-Wpedantic], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"], [
+        dnl When -Wpedantic is not supported try the -pedantic instead. (gcc-4.7)
+        dnl See https://gcc.gnu.org/gcc-4.8/changes.html
+        AX_CHECK_COMPILE_FLAG([-pedantic],
+            [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
+    ], [-Werror])
+m4trace:configure.ac:96: -1- AX_CHECK_COMPILE_FLAG([-pedantic], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
+m4trace:configure.ac:110: -1- AX_CHECK_COMPILE_FLAG([-Wgnu], [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"])
+m4trace:configure.ac:117: -1- AX_CHECK_COMPILE_FLAG([-Wno-long-long], [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"])
+m4trace:configure.ac:134: -1- AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32="-m32 -DEXPLICIT_32BIT"], [
+        CFLAGS_M32=""
+        AC_MSG_FAILURE([--enable-test-32bit=$enable_test_32bit is requested but not supported by the _AC_LANG compiler])
+      ])
+m4trace:configure.ac:141: -1- m4_pattern_allow([^CFLAGS_M32$])
+m4trace:configure.ac:142: -1- AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_TRUE$])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_FALSE$])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_TRUE])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_FALSE])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=undefined], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"], [
+        AS_IF([test "x$disable_test_ubsan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build])])
+      ], [], [AC_LANG_PROGRAM([void test(int *);void test(int *n) { *n = 0; }])
+    ])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=undefined], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=unsigned-integer-overflow], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"], [], [], [AC_LANG_PROGRAM([int test(unsigned); int test(unsigned n) { return n + 1; }])])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=unsigned-integer-overflow], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=nullability], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=nullability], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+m4trace:configure.ac:192: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=address], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"], [
+        AS_IF([test "x$disable_test_asan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build])])
+      ])
+m4trace:configure.ac:192: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2759: AC_RUN_IFELSE is expanded from...
+../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
+configure.ac:192: the top level])
+m4trace:configure.ac:192: -1- AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+m4trace:configure.ac:228: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=fuzzer], [LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"], [AC_MSG_FAILURE(
+[--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html])], [], [AC_LANG_SOURCE([[
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    ]])])
+m4trace:configure.ac:249: -1- m4_pattern_allow([^ADD_CFLAGS$])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^LIBFUZZER_CFLAGS$])
+m4trace:configure.ac:251: -1- m4_pattern_allow([^SANITIZER_CFLAGS$])
+m4trace:configure.ac:252: -1- m4_pattern_allow([^TESTSUITE_CFLAGS$])
+m4trace:configure.ac:253: -1- m4_pattern_allow([^SKELETONS_CFLAGS$])
+m4trace:configure.ac:254: -1- m4_pattern_allow([^ASAN_ENV_FLAGS$])
+m4trace:configure.ac:257: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:258: -1- m4_pattern_allow([^HAVE_SYS_PARAM_H$])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^WORDS_BIGENDIAN$])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$])
+m4trace:configure.ac:262: -1- m4_pattern_allow([^off_t$])
+m4trace:configure.ac:263: -1- m4_pattern_allow([^size_t$])
+m4trace:configure.ac:264: -1- m4_pattern_allow([^TM_IN_SYS_TIME$])
+m4trace:configure.ac:265: -1- m4_pattern_allow([^HAVE_128_BIT_INT$])
+m4trace:configure.ac:267: -1- m4_pattern_allow([^intmax_t$])
+m4trace:configure.ac:270: -1- m4_pattern_allow([^SIZEOF_VOID_P$])
+m4trace:configure.ac:271: -1- AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_TRUE$])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_FALSE$])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_TRUE])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_FALSE])
+m4trace:configure.ac:277: -1- m4_pattern_allow([^HAVE_MERGESORT$])
+m4trace:configure.ac:278: -1- m4_pattern_allow([^HAVE_MKSTEMPS$])
+m4trace:configure.ac:279: -1- m4_pattern_allow([^HAVE_TIMEGM$])
+m4trace:configure.ac:280: -1- m4_pattern_allow([^HAVE_DECL_STRCASECMP$])
+m4trace:configure.ac:281: -1- m4_pattern_allow([^HAVE_DECL_VASPRINTF$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^HAVE_SYMLINK$])
+m4trace:configure.ac:285: -1- m4_pattern_allow([^PANDOC$])
+m4trace:configure.ac:286: -1- AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_TRUE$])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_FALSE$])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_TRUE])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_FALSE])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:309: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
+m4trace:configure.ac:309: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
+m4trace:configure.ac:309: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:309: -1- _LT_PROG_LTMAIN
diff --git a/autom4te.cache/traces.1 b/autom4te.cache/traces.1
new file mode 100644 (file)
index 0000000..0875255
--- /dev/null
@@ -0,0 +1,820 @@
+m4trace:aclocal.m4:1231: -1- m4_include([m4/ax_check_compile_and_link_flag.m4])
+m4trace:aclocal.m4:1232: -1- m4_include([m4/ax_check_compile_flag.m4])
+m4trace:aclocal.m4:1233: -1- m4_include([m4/ax_code_coverage.m4])
+m4trace:aclocal.m4:1234: -1- m4_include([m4/libtool.m4])
+m4trace:aclocal.m4:1235: -1- m4_include([m4/ltoptions.m4])
+m4trace:aclocal.m4:1236: -1- m4_include([m4/ltsugar.m4])
+m4trace:aclocal.m4:1237: -1- m4_include([m4/ltversion.m4])
+m4trace:aclocal.m4:1238: -1- m4_include([m4/lt~obsolete.m4])
+m4trace:configure.ac:1: -1- AC_INIT([asn1c], [0.9.29], [vlm@lionet.info])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- AC_SUBST([SHELL])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([SHELL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL],       ['AC_PACKAGE_URL'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_URL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([exec_prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([prefix])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([program_transform_name])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([bindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sbindir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libexecdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datarootdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([datadir], ['${datarootdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datadir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sysconfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sharedstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([runstatedir], ['${localstatedir}/run'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([runstatedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^runstatedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([includedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([oldincludedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+                                    ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+                                    ['${datarootdir}/doc/${PACKAGE}'])])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([docdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([infodir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- AC_SUBST([htmldir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([htmldir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- AC_SUBST([dvidir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([dvidir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- AC_SUBST([pdfdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([pdfdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([psdir], ['${docdir}'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([psdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libdir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localedir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([mandir])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+@%:@undef PACKAGE_NAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+@%:@undef PACKAGE_TARNAME])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+@%:@undef PACKAGE_VERSION])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+@%:@undef PACKAGE_STRING])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+@%:@undef PACKAGE_BUGREPORT])
+m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
+@%:@undef PACKAGE_URL])
+m4trace:configure.ac:1: -1- AC_SUBST([DEFS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([DEFS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_C])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_C])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_N])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_N])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- AC_SUBST([ECHO_T])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_T])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- AC_SUBST([build_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([build_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([host_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([host_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- AC_SUBST([target_alias])
+m4trace:configure.ac:1: -1- AC_SUBST_TRACE([target_alias])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:3: -1- AC_CONFIG_AUX_DIR([config])
+m4trace:configure.ac:4: -1- AC_CONFIG_HEADERS([config.h])
+m4trace:configure.ac:5: -1- AM_INIT_AUTOMAKE([foreign])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:5: -1- AM_AUTOMAKE_VERSION([1.15])
+m4trace:configure.ac:5: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.ac:5: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:5: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:5: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([INSTALL_DATA])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:5: -1- AC_SUBST([am__isrc], [' -I$(srcdir)'])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([am__isrc])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__isrc$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([am__isrc])
+m4trace:configure.ac:5: -1- AC_SUBST([CYGPATH_W])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([CYGPATH_W])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:5: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([PACKAGE])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([VERSION])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
+@%:@undef PACKAGE])
+m4trace:configure.ac:5: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- AH_OUTPUT([VERSION], [/* Version number of package */
+@%:@undef VERSION])
+m4trace:configure.ac:5: -1- AC_REQUIRE_AUX_FILE([missing])
+m4trace:configure.ac:5: -1- AC_SUBST([ACLOCAL])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([ACLOCAL])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:5: -1- AC_SUBST([AUTOCONF])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AUTOCONF])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:5: -1- AC_SUBST([AUTOMAKE])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AUTOMAKE])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:5: -1- AC_SUBST([AUTOHEADER])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AUTOHEADER])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:5: -1- AC_SUBST([MAKEINFO])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([MAKEINFO])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:5: -1- AC_SUBST([install_sh])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([install_sh])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:5: -1- AC_SUBST([STRIP])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([STRIP])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:5: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:5: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.ac:5: -1- AC_SUBST([MKDIR_P])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([MKDIR_P])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MKDIR_P$])
+m4trace:configure.ac:5: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([mkdir_p])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^mkdir_p$])
+m4trace:configure.ac:5: -1- AC_SUBST([AWK])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AWK])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:5: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([SET_MAKE])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:5: -1- AC_SUBST([am__leading_dot])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([am__leading_dot])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:5: -1- AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AMTAR])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:5: -1- AC_SUBST([am__tar])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([am__tar])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__tar$])
+m4trace:configure.ac:5: -1- AC_SUBST([am__untar])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([am__untar])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__untar$])
+m4trace:configure.ac:5: -1- AM_SILENT_RULES
+m4trace:configure.ac:5: -1- AC_SUBST([AM_V])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AM_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:5: -1- AC_SUBST([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- AC_SUBST([AM_DEFAULT_VERBOSITY])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:5: -1- AC_SUBST([AM_BACKSLASH])
+m4trace:configure.ac:5: -1- AC_SUBST_TRACE([AM_BACKSLASH])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:9: -1- AC_SUBST([CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([CFLAGS])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CFLAGS])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:9: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:9: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:9: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:9: -1- AC_SUBST([CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([ac_ct_CC])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:9: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([EXEEXT])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:9: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([OBJEXT])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:9: -1- AC_REQUIRE_AUX_FILE([compile])
+m4trace:configure.ac:9: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([DEPDIR])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:9: -1- AC_SUBST([am__include])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([am__include])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:9: -1- AC_SUBST([am__quote])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([am__quote])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:9: -1- AC_SUBST([AMDEP_TRUE])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([AMDEP_TRUE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:9: -1- AC_SUBST([AMDEP_FALSE])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([AMDEP_FALSE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
+m4trace:configure.ac:9: -1- AC_SUBST([AMDEPBACKSLASH])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
+m4trace:configure.ac:9: -1- AC_SUBST([am__nodep])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([am__nodep])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__nodep$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__nodep])
+m4trace:configure.ac:9: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([CCDEPMODE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:9: -1- AC_SUBST([am__fastdepCC_TRUE])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:9: -1- AC_SUBST([am__fastdepCC_FALSE])
+m4trace:configure.ac:9: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
+m4trace:configure.ac:10: -1- AC_SUBST([CPP])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:10: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:10: -1- AC_SUBST([CPP])
+m4trace:configure.ac:10: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:12: -1- AC_SUBST([LN_S], [$as_ln_s])
+m4trace:configure.ac:12: -1- AC_SUBST_TRACE([LN_S])
+m4trace:configure.ac:12: -1- m4_pattern_allow([^LN_S$])
+m4trace:configure.ac:13: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SET_MAKE])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:14: -1- AC_SUBST([YACC])
+m4trace:configure.ac:14: -1- AC_SUBST_TRACE([YACC])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- AC_SUBST([YACC])
+m4trace:configure.ac:14: -1- AC_SUBST_TRACE([YACC])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- AC_SUBST([YFLAGS])
+m4trace:configure.ac:14: -1- AC_SUBST_TRACE([YFLAGS])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YFLAGS$])
+m4trace:configure.ac:15: -1- AC_SUBST([LEX])
+m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LEX])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX$])
+m4trace:configure.ac:15: -1- AC_SUBST([LEX_OUTPUT_ROOT], [$ac_cv_prog_lex_root])
+m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LEX_OUTPUT_ROOT])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX_OUTPUT_ROOT$])
+m4trace:configure.ac:15: -1- AC_SUBST([LEXLIB])
+m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LEXLIB])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEXLIB$])
+m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([YYTEXT_POINTER])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^YYTEXT_POINTER$])
+m4trace:configure.ac:15: -1- AH_OUTPUT([YYTEXT_POINTER], [/* Define to 1 if `lex\' declares `yytext\' as a `char *\' by default, not a
+   `char@<:@@:>@\'. */
+@%:@undef YYTEXT_POINTER])
+m4trace:configure.ac:17: -1- AM_PROG_AR
+m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([ar-lib])
+m4trace:configure.ac:17: -1- AC_SUBST([AR])
+m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:17: -1- AC_SUBST([ac_ct_AR])
+m4trace:configure.ac:17: -1- AC_SUBST_TRACE([ac_ct_AR])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:17: -1- AC_SUBST([AR])
+m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:21: -1- AC_SUBST([CXX])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- AC_SUBST([CXXFLAGS])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([CXXFLAGS])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:21: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:21: -1- AC_SUBST([LIBS])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:21: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:21: -1- AC_SUBST([CXX])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([CXX])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- AC_SUBST([ac_ct_CXX])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([ac_ct_CXX])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:21: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([CXXDEPMODE])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:21: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:21: -1- AC_SUBST([am__fastdepCXX_TRUE])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:21: -1- AC_SUBST([am__fastdepCXX_FALSE])
+m4trace:configure.ac:21: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:24: -1- LT_INIT
+m4trace:configure.ac:24: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
+m4trace:configure.ac:24: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
+m4trace:configure.ac:24: -1- AC_SUBST([LIBTOOL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LIBTOOL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIBTOOL$])
+m4trace:configure.ac:24: -1- AC_CANONICAL_HOST
+m4trace:configure.ac:24: -1- AC_CANONICAL_BUILD
+m4trace:configure.ac:24: -1- AC_REQUIRE_AUX_FILE([config.sub])
+m4trace:configure.ac:24: -1- AC_REQUIRE_AUX_FILE([config.guess])
+m4trace:configure.ac:24: -1- AC_SUBST([build], [$ac_cv_build])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([build])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:24: -1- AC_SUBST([build_cpu], [$[1]])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([build_cpu])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:24: -1- AC_SUBST([build_vendor], [$[2]])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([build_vendor])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:24: -1- AC_SUBST([build_os])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([build_os])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:24: -1- AC_SUBST([host], [$ac_cv_host])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([host])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:24: -1- AC_SUBST([host_cpu], [$[1]])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([host_cpu])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:24: -1- AC_SUBST([host_vendor], [$[2]])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([host_vendor])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:24: -1- AC_SUBST([host_os])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([host_os])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:24: -1- AC_SUBST([SED])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([SED])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^SED$])
+m4trace:configure.ac:24: -1- AC_SUBST([GREP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- AC_SUBST([EGREP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([EGREP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:24: -1- AC_SUBST([FGREP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([FGREP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^FGREP$])
+m4trace:configure.ac:24: -1- AC_SUBST([GREP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- AC_SUBST([LD])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LD])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- AC_SUBST([DUMPBIN])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DUMPBIN])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- AC_SUBST([ac_ct_DUMPBIN])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
+m4trace:configure.ac:24: -1- AC_SUBST([DUMPBIN])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DUMPBIN])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- AC_SUBST([NM])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([NM])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NM$])
+m4trace:configure.ac:24: -1- AC_SUBST([OBJDUMP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([OBJDUMP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- AC_SUBST([OBJDUMP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([OBJDUMP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- AC_SUBST([DLLTOOL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DLLTOOL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- AC_SUBST([DLLTOOL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DLLTOOL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- AC_SUBST([AR])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:24: -1- AC_SUBST([ac_ct_AR])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([ac_ct_AR])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:24: -1- AC_SUBST([STRIP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([STRIP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:24: -1- AC_SUBST([RANLIB])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([RANLIB])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([LT_OBJDIR])
+m4trace:configure.ac:24: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_OBJDIR$])
+m4trace:configure.ac:24: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory where libtool stores uninstalled libraries. */
+@%:@undef LT_OBJDIR])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CC])
+m4trace:configure.ac:24: -1- AC_SUBST([MANIFEST_TOOL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([MANIFEST_TOOL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^MANIFEST_TOOL$])
+m4trace:configure.ac:24: -1- AC_SUBST([DSYMUTIL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([DSYMUTIL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DSYMUTIL$])
+m4trace:configure.ac:24: -1- AC_SUBST([NMEDIT])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([NMEDIT])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NMEDIT$])
+m4trace:configure.ac:24: -1- AC_SUBST([LIPO])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LIPO])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIPO$])
+m4trace:configure.ac:24: -1- AC_SUBST([OTOOL])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([OTOOL])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL$])
+m4trace:configure.ac:24: -1- AC_SUBST([OTOOL64])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([OTOOL64])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL64$])
+m4trace:configure.ac:24: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
+@%:@undef HAVE_DLFCN_H])
+m4trace:configure.ac:24: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:24: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+@%:@undef STDC_HEADERS])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+@%:@undef HAVE_SYS_TYPES_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+@%:@undef HAVE_SYS_STAT_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+@%:@undef HAVE_STDLIB_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+@%:@undef HAVE_STRING_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+@%:@undef HAVE_MEMORY_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+@%:@undef HAVE_STRINGS_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+@%:@undef HAVE_INTTYPES_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+@%:@undef HAVE_STDINT_H])
+m4trace:configure.ac:24: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+@%:@undef HAVE_UNISTD_H])
+m4trace:configure.ac:24: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CXX])
+m4trace:configure.ac:24: -1- AC_SUBST([CXXCPP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([CXXCPP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:24: -1- AC_SUBST([CXXCPP])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([CXXCPP])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- AC_SUBST([LD])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LD])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
+m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:27: -1- AM_SILENT_RULES([yes])
+m4trace:configure.ac:27: -1- AC_SUBST([AM_V])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AM_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:27: -1- AC_SUBST([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- AC_SUBST([AM_DEFAULT_VERBOSITY])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:27: -1- AC_SUBST([AM_BACKSLASH])
+m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AM_BACKSLASH])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:77: -1- AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_ENABLED_TRUE])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_ENABLED_TRUE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_TRUE$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_ENABLED_FALSE])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_ENABLED_FALSE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_FALSE$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_TRUE])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_FALSE])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_ENABLED])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED$])
+m4trace:configure.ac:77: -1- AC_SUBST([GCOV])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([GCOV])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- AC_SUBST([GCOV])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([GCOV])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- AC_SUBST([LCOV])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([LCOV])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^LCOV$])
+m4trace:configure.ac:77: -1- AC_SUBST([GENHTML])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([GENHTML])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GENHTML$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_CPPFLAGS])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_CPPFLAGS])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CPPFLAGS$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_CFLAGS])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_CFLAGS])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CFLAGS$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_CXXFLAGS])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_CXXFLAGS])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CXXFLAGS$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_LIBS])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_LIBS])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LIBS$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_LDFLAGS])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_LDFLAGS])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LDFLAGS$])
+m4trace:configure.ac:77: -1- AC_SUBST([CODE_COVERAGE_RULES])
+m4trace:configure.ac:77: -1- AC_SUBST_TRACE([CODE_COVERAGE_RULES])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_RULES$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])
+m4trace:configure.ac:141: -1- AC_SUBST([CFLAGS_M32])
+m4trace:configure.ac:141: -1- AC_SUBST_TRACE([CFLAGS_M32])
+m4trace:configure.ac:141: -1- m4_pattern_allow([^CFLAGS_M32$])
+m4trace:configure.ac:142: -1- AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])
+m4trace:configure.ac:142: -1- AC_SUBST([EXPLICIT_M32_TRUE])
+m4trace:configure.ac:142: -1- AC_SUBST_TRACE([EXPLICIT_M32_TRUE])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_TRUE$])
+m4trace:configure.ac:142: -1- AC_SUBST([EXPLICIT_M32_FALSE])
+m4trace:configure.ac:142: -1- AC_SUBST_TRACE([EXPLICIT_M32_FALSE])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_FALSE$])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_TRUE])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_FALSE])
+m4trace:configure.ac:192: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2759: AC_RUN_IFELSE is expanded from...
+../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
+configure.ac:192: the top level])
+m4trace:configure.ac:249: -1- AC_SUBST([ADD_CFLAGS])
+m4trace:configure.ac:249: -1- AC_SUBST_TRACE([ADD_CFLAGS])
+m4trace:configure.ac:249: -1- m4_pattern_allow([^ADD_CFLAGS$])
+m4trace:configure.ac:250: -1- AC_SUBST([LIBFUZZER_CFLAGS])
+m4trace:configure.ac:250: -1- AC_SUBST_TRACE([LIBFUZZER_CFLAGS])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^LIBFUZZER_CFLAGS$])
+m4trace:configure.ac:251: -1- AC_SUBST([SANITIZER_CFLAGS])
+m4trace:configure.ac:251: -1- AC_SUBST_TRACE([SANITIZER_CFLAGS])
+m4trace:configure.ac:251: -1- m4_pattern_allow([^SANITIZER_CFLAGS$])
+m4trace:configure.ac:252: -1- AC_SUBST([TESTSUITE_CFLAGS])
+m4trace:configure.ac:252: -1- AC_SUBST_TRACE([TESTSUITE_CFLAGS])
+m4trace:configure.ac:252: -1- m4_pattern_allow([^TESTSUITE_CFLAGS$])
+m4trace:configure.ac:253: -1- AC_SUBST([SKELETONS_CFLAGS])
+m4trace:configure.ac:253: -1- AC_SUBST_TRACE([SKELETONS_CFLAGS])
+m4trace:configure.ac:253: -1- m4_pattern_allow([^SKELETONS_CFLAGS$])
+m4trace:configure.ac:254: -1- AC_SUBST([ASAN_ENV_FLAGS])
+m4trace:configure.ac:254: -1- AC_SUBST_TRACE([ASAN_ENV_FLAGS])
+m4trace:configure.ac:254: -1- m4_pattern_allow([^ASAN_ENV_FLAGS$])
+m4trace:configure.ac:257: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.ac:257: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:257: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+@%:@undef STDC_HEADERS])
+m4trace:configure.ac:258: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+@%:@undef HAVE_SYS_PARAM_H])
+m4trace:configure.ac:258: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_PARAM_H])
+m4trace:configure.ac:258: -1- m4_pattern_allow([^HAVE_SYS_PARAM_H$])
+m4trace:configure.ac:261: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif])
+m4trace:configure.ac:261: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^WORDS_BIGENDIAN$])
+m4trace:configure.ac:261: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$])
+m4trace:configure.ac:261: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */
+@%:@undef AC_APPLE_UNIVERSAL_BUILD])
+m4trace:configure.ac:262: -1- AC_DEFINE_TRACE_LITERAL([off_t])
+m4trace:configure.ac:262: -1- m4_pattern_allow([^off_t$])
+m4trace:configure.ac:262: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if <sys/types.h> does not define. */
+@%:@undef off_t])
+m4trace:configure.ac:263: -1- AC_DEFINE_TRACE_LITERAL([size_t])
+m4trace:configure.ac:263: -1- m4_pattern_allow([^size_t$])
+m4trace:configure.ac:263: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+@%:@undef size_t])
+m4trace:configure.ac:264: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
+m4trace:configure.ac:264: -1- m4_pattern_allow([^TM_IN_SYS_TIME$])
+m4trace:configure.ac:264: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares `struct tm\'. */
+@%:@undef TM_IN_SYS_TIME])
+m4trace:configure.ac:265: -1- AC_DEFINE_TRACE_LITERAL([HAVE_128_BIT_INT])
+m4trace:configure.ac:265: -1- m4_pattern_allow([^HAVE_128_BIT_INT$])
+m4trace:configure.ac:265: -1- AH_OUTPUT([HAVE_128_BIT_INT], [/* Have 128-bit integer */
+@%:@undef HAVE_128_BIT_INT])
+m4trace:configure.ac:267: -1- AC_DEFINE_TRACE_LITERAL([intmax_t])
+m4trace:configure.ac:267: -1- m4_pattern_allow([^intmax_t$])
+m4trace:configure.ac:267: -1- AH_OUTPUT([intmax_t], [/* Define to `int64_t\' if <sys/types.h> does not define. */
+@%:@undef intmax_t])
+m4trace:configure.ac:270: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_VOID_P])
+m4trace:configure.ac:270: -1- m4_pattern_allow([^SIZEOF_VOID_P$])
+m4trace:configure.ac:270: -1- AH_OUTPUT([SIZEOF_VOID_P], [/* The size of `void *\', as computed by sizeof. */
+@%:@undef SIZEOF_VOID_P])
+m4trace:configure.ac:271: -1- AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
+m4trace:configure.ac:271: -1- AC_SUBST([TEST_64BIT_TRUE])
+m4trace:configure.ac:271: -1- AC_SUBST_TRACE([TEST_64BIT_TRUE])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_TRUE$])
+m4trace:configure.ac:271: -1- AC_SUBST([TEST_64BIT_FALSE])
+m4trace:configure.ac:271: -1- AC_SUBST_TRACE([TEST_64BIT_FALSE])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_FALSE$])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_TRUE])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_FALSE])
+m4trace:configure.ac:276: -1- AH_OUTPUT([HAVE_STRTOIMAX], [/* Define to 1 if you have the `strtoimax\' function. */
+@%:@undef HAVE_STRTOIMAX])
+m4trace:configure.ac:276: -1- AH_OUTPUT([HAVE_STRTOLL], [/* Define to 1 if you have the `strtoll\' function. */
+@%:@undef HAVE_STRTOLL])
+m4trace:configure.ac:277: -1- AH_OUTPUT([HAVE_MERGESORT], [/* Define to 1 if you have the `mergesort\' function. */
+@%:@undef HAVE_MERGESORT])
+m4trace:configure.ac:277: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MERGESORT])
+m4trace:configure.ac:277: -1- m4_pattern_allow([^HAVE_MERGESORT$])
+m4trace:configure.ac:278: -1- AH_OUTPUT([HAVE_MKSTEMPS], [/* Define to 1 if you have the `mkstemps\' function. */
+@%:@undef HAVE_MKSTEMPS])
+m4trace:configure.ac:278: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MKSTEMPS])
+m4trace:configure.ac:278: -1- m4_pattern_allow([^HAVE_MKSTEMPS$])
+m4trace:configure.ac:279: -1- AH_OUTPUT([HAVE_TIMEGM], [/* Define to 1 if you have the `timegm\' function. */
+@%:@undef HAVE_TIMEGM])
+m4trace:configure.ac:279: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TIMEGM])
+m4trace:configure.ac:279: -1- m4_pattern_allow([^HAVE_TIMEGM$])
+m4trace:configure.ac:280: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRCASECMP])
+m4trace:configure.ac:280: -1- m4_pattern_allow([^HAVE_DECL_STRCASECMP$])
+m4trace:configure.ac:280: -1- AH_OUTPUT([HAVE_DECL_STRCASECMP], [/* Define to 1 if you have the declaration of `strcasecmp\', and to 0 if you
+   don\'t. */
+@%:@undef HAVE_DECL_STRCASECMP])
+m4trace:configure.ac:281: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_VASPRINTF])
+m4trace:configure.ac:281: -1- m4_pattern_allow([^HAVE_DECL_VASPRINTF$])
+m4trace:configure.ac:281: -1- AH_OUTPUT([HAVE_DECL_VASPRINTF], [/* Define to 1 if you have the declaration of `vasprintf\', and to 0 if you
+   don\'t. */
+@%:@undef HAVE_DECL_VASPRINTF])
+m4trace:configure.ac:282: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYMLINK])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^HAVE_SYMLINK$])
+m4trace:configure.ac:282: -1- AH_OUTPUT([HAVE_SYMLINK], [/* Define to 1 if you have the symlink function. */
+@%:@undef HAVE_SYMLINK])
+m4trace:configure.ac:285: -1- AC_SUBST([PANDOC])
+m4trace:configure.ac:285: -1- AC_SUBST_TRACE([PANDOC])
+m4trace:configure.ac:285: -1- m4_pattern_allow([^PANDOC$])
+m4trace:configure.ac:286: -1- AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
+m4trace:configure.ac:286: -1- AC_SUBST([HAVE_PANDOC_TRUE])
+m4trace:configure.ac:286: -1- AC_SUBST_TRACE([HAVE_PANDOC_TRUE])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_TRUE$])
+m4trace:configure.ac:286: -1- AC_SUBST([HAVE_PANDOC_FALSE])
+m4trace:configure.ac:286: -1- AC_SUBST_TRACE([HAVE_PANDOC_FALSE])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_FALSE$])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_TRUE])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_FALSE])
+m4trace:configure.ac:288: -1- AC_CONFIG_FILES([\
+tests/tests-c-compiler/check-src/Makefile   \
+tests/tests-asn1c-compiler/Makefile         \
+tests/tests-asn1c-smoke/Makefile            \
+tests/tests-randomized/Makefile             \
+tests/tests-c-compiler/Makefile             \
+tests/tests-skeletons/Makefile              \
+libasn1compiler/Makefile                    \
+libasn1common/Makefile                      \
+libasn1parser/Makefile                      \
+libasn1print/Makefile                       \
+libasn1fix/Makefile                         \
+doc/docsrc/Makefile                         \
+skeletons/Makefile                          \
+examples/Makefile                           \
+doc/man/Makefile                            \
+tests/Makefile                              \
+asn1c/Makefile                              \
+doc/Makefile                                \
+Makefile                                    \
+])
+m4trace:configure.ac:309: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.ac:309: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([LTLIBOBJS])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:309: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
+m4trace:configure.ac:309: -1- AC_SUBST([am__EXEEXT_TRUE])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
+m4trace:configure.ac:309: -1- AC_SUBST([am__EXEEXT_FALSE])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([top_builddir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([top_build_prefix])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([srcdir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([abs_srcdir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([top_srcdir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([abs_top_srcdir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([builddir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([abs_builddir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([abs_top_builddir])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([INSTALL])
+m4trace:configure.ac:309: -1- AC_SUBST_TRACE([MKDIR_P])
+m4trace:configure.ac:309: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
diff --git a/autom4te.cache/traces.2 b/autom4te.cache/traces.2
new file mode 100644 (file)
index 0000000..4813498
--- /dev/null
@@ -0,0 +1,3157 @@
+m4trace:/usr/share/aclocal/ltargz.m4:12: -1- AC_DEFUN([LT_FUNC_ARGZ], [
+AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_TYPES([error_t],
+  [],
+  [AC_DEFINE([error_t], [int],
+   [Define to a type to use for 'error_t' if it is not otherwise available.])
+   AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h
+    does not typedef error_t.])],
+  [#if defined(HAVE_ARGZ_H)
+#  include <argz.h>
+#endif])
+
+LT_ARGZ_H=
+AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \
+       argz_next argz_stringify], [], [LT_ARGZ_H=lt__argz.h; AC_LIBOBJ([lt__argz])])
+
+dnl if have system argz functions, allow forced use of
+dnl libltdl-supplied implementation (and default to do so
+dnl on "known bad" systems). Could use a runtime check, but
+dnl (a) detecting malloc issues is notoriously unreliable
+dnl (b) only known system that declares argz functions,
+dnl     provides them, yet they are broken, is cygwin
+dnl     releases prior to 16-Mar-2007 (1.5.24 and earlier)
+dnl So, it's more straightforward simply to special case
+dnl this for known bad systems.
+AS_IF([test -z "$LT_ARGZ_H"],
+    [AC_CACHE_CHECK(
+        [if argz actually works],
+        [lt_cv_sys_argz_works],
+        [[case $host_os in #(
+        *cygwin*)
+          lt_cv_sys_argz_works=no
+          if test no != "$cross_compiling"; then
+            lt_cv_sys_argz_works="guessing no"
+          else
+            lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/'
+            save_IFS=$IFS
+            IFS=-.
+            set x `uname -r | sed -e "$lt_sed_extract_leading_digits"`
+            IFS=$save_IFS
+            lt_os_major=${2-0}
+            lt_os_minor=${3-0}
+            lt_os_micro=${4-0}
+            if test 1 -lt "$lt_os_major" \
+               || { test 1 -eq "$lt_os_major" \
+                 && { test 5 -lt "$lt_os_minor" \
+                   || { test 5 -eq "$lt_os_minor" \
+                     && test 24 -lt "$lt_os_micro"; }; }; }; then
+              lt_cv_sys_argz_works=yes
+            fi
+          fi
+          ;; #(
+        *) lt_cv_sys_argz_works=yes ;;
+        esac]])
+     AS_IF([test yes = "$lt_cv_sys_argz_works"],
+        [AC_DEFINE([HAVE_WORKING_ARGZ], 1,
+                   [This value is set to 1 to indicate that the system argz facility works])],
+        [LT_ARGZ_H=lt__argz.h
+        AC_LIBOBJ([lt__argz])])])
+
+AC_SUBST([LT_ARGZ_H])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT])
+_$0($*)
+])
+m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_CONVENIENCE])
+m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl
+dnl Although the argument is deprecated and no longer documented,
+dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one
+dnl here make sure it is the same as any other declaration of libltdl's
+dnl location!  This also ensures lt_ltdl_dir is set when configure.ac is
+dnl not yet using an explicit LT_CONFIG_LTDL_DIR.
+m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl
+_$0()
+])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete.
+You should run autoupdate.])dnl
+_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])])
+_LTDL_INSTALLABLE])
+m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [
+  m4_pattern_allow([^_LT_LIBOBJS$])
+  _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext"
+])
+m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+dnl We need to keep our own list of libobjs separate from our parent project,
+dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while
+dnl we look for our own LIBOBJs.
+m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ]))
+m4_pushdef([AC_LIBSOURCES])
+
+dnl If not otherwise defined, default to the 1.5.x compatible subproject mode:
+m4_if(_LTDL_MODE, [],
+        [m4_define([_LTDL_MODE], m4_default([$2], [subproject]))
+        m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])],
+                [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])])
+
+AC_ARG_WITH([included_ltdl],
+    [AS_HELP_STRING([--with-included-ltdl],
+                    [use the GNU ltdl sources included here])])
+
+if test yes != "$with_included_ltdl"; then
+  # We are not being forced to use the included libltdl sources, so
+  # decide whether there is a useful installed version we can use.
+  AC_CHECK_HEADER([ltdl.h],
+      [AC_CHECK_DECL([lt_dlinterface_register],
+          [AC_CHECK_LIB([ltdl], [lt_dladvise_preload],
+              [with_included_ltdl=no],
+              [with_included_ltdl=yes])],
+          [with_included_ltdl=yes],
+          [AC_INCLUDES_DEFAULT
+           #include <ltdl.h>])],
+      [with_included_ltdl=yes],
+      [AC_INCLUDES_DEFAULT]
+  )
+fi
+
+dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE
+dnl was called yet, then for old times' sake, we assume libltdl is in an
+dnl eponymous directory:
+AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])])
+
+AC_ARG_WITH([ltdl_include],
+    [AS_HELP_STRING([--with-ltdl-include=DIR],
+                    [use the ltdl headers installed in DIR])])
+
+if test -n "$with_ltdl_include"; then
+  if test -f "$with_ltdl_include/ltdl.h"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl include directory: '$with_ltdl_include'])
+  fi
+else
+  with_ltdl_include=no
+fi
+
+AC_ARG_WITH([ltdl_lib],
+    [AS_HELP_STRING([--with-ltdl-lib=DIR],
+                    [use the libltdl.la installed in DIR])])
+
+if test -n "$with_ltdl_lib"; then
+  if test -f "$with_ltdl_lib/libltdl.la"; then :
+  else
+    AC_MSG_ERROR([invalid ltdl library directory: '$with_ltdl_lib'])
+  fi
+else
+  with_ltdl_lib=no
+fi
+
+case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in
+  ,yes,no,no,)
+       m4_case(m4_default(_LTDL_TYPE, [convenience]),
+           [convenience], [_LTDL_CONVENIENCE],
+           [installable], [_LTDL_INSTALLABLE],
+         [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)])
+       ;;
+  ,no,no,no,)
+       # If the included ltdl is not to be used, then use the
+       # preinstalled libltdl we found.
+       AC_DEFINE([HAVE_LTDL], [1],
+         [Define this if a modern libltdl is already installed])
+       LIBLTDL=-lltdl
+       LTDLDEPS=
+       LTDLINCL=
+       ;;
+  ,no*,no,*)
+       AC_MSG_ERROR(['--with-ltdl-include' and '--with-ltdl-lib' options must be used together])
+       ;;
+  *)   with_included_ltdl=no
+       LIBLTDL="-L$with_ltdl_lib -lltdl"
+       LTDLDEPS=
+       LTDLINCL=-I$with_ltdl_include
+       ;;
+esac
+INCLTDL=$LTDLINCL
+
+# Report our decision...
+AC_MSG_CHECKING([where to find libltdl headers])
+AC_MSG_RESULT([$LTDLINCL])
+AC_MSG_CHECKING([where to find libltdl library])
+AC_MSG_RESULT([$LIBLTDL])
+
+_LTDL_SETUP
+
+dnl restore autoconf definition.
+m4_popdef([AC_LIBOBJ])
+m4_popdef([AC_LIBSOURCES])
+
+AC_CONFIG_COMMANDS_PRE([
+    _ltdl_libobjs=
+    _ltdl_ltlibobjs=
+    if test -n "$_LT_LIBOBJS"; then
+      # Remove the extension.
+      _lt_sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do
+        _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext"
+        _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo"
+      done
+    fi
+    AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs])
+    AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs])
+])
+
+# Only expand once:
+m4_define([LTDL_INIT])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete.
+You should run autoupdate.])dnl
+LTDL_INIT($@)])
+m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl
+AC_REQUIRE([LT_SYS_MODULE_PATH])dnl
+AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl
+AC_REQUIRE([LT_LIB_DLLOAD])dnl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl
+AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl
+AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl
+AC_REQUIRE([LT_FUNC_ARGZ])dnl
+
+m4_require([_LT_CHECK_OBJDIR])dnl
+m4_require([_LT_HEADER_DLFCN])dnl
+m4_require([_LT_CHECK_DLPREOPEN])dnl
+m4_require([_LT_DECL_SED])dnl
+
+dnl Don't require this, or it will be expanded earlier than the code
+dnl that sets the variables it relies on:
+_LT_ENABLE_INSTALL
+
+dnl _LTDL_MODE specific code must be called at least once:
+_LTDL_MODE_DISPATCH
+
+# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS
+# the user used.  This is so that ltdl.h can pick up the parent projects
+# config.h file, The first file in AC_CONFIG_HEADERS must contain the
+# definitions required by ltdl.c.
+# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility).
+AC_CONFIG_COMMANDS_PRE([dnl
+m4_pattern_allow([^LT_CONFIG_H$])dnl
+m4_ifset([AH_HEADER],
+    [LT_CONFIG_H=AH_HEADER],
+    [m4_ifset([AC_LIST_HEADERS],
+           [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's|^[[      ]]*||;s|[[ :]].*$||'`],
+       [])])])
+AC_SUBST([LT_CONFIG_H])
+
+AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h],
+       [], [], [AC_INCLUDES_DEFAULT])
+
+AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])])
+AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])])
+
+m4_pattern_allow([LT_LIBEXT])dnl
+AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension])
+
+name=
+eval "lt_libprefix=\"$libname_spec\""
+m4_pattern_allow([LT_LIBPREFIX])dnl
+AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix])
+
+name=ltdl
+eval "LTDLOPEN=\"$libname_spec\""
+AC_SUBST([LTDLOPEN])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:443: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_CACHE_CHECK([whether deplibs are loaded by dlopen],
+  [lt_cv_sys_dlopen_deplibs],
+  [# PORTME does your system automatically load deplibs for dlopen?
+  # or its logical equivalent (e.g. shl_load for HP-UX < 11)
+  # For now, we just catch OSes we know something about -- in the
+  # future, we'll try test this programmatically.
+  lt_cv_sys_dlopen_deplibs=unknown
+  case $host_os in
+  aix3*|aix4.1.*|aix4.2.*)
+    # Unknown whether this is true for these versions of AIX, but
+    # we want this 'case' here to explicitly catch those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  aix[[4-9]]*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  amigaos*)
+    case $host_cpu in
+    powerpc)
+      lt_cv_sys_dlopen_deplibs=no
+      ;;
+    esac
+    ;;
+  bitrig*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  darwin*)
+    # Assuming the user has installed a libdl from somewhere, this is true
+    # If you are looking for one http://www.opendarwin.org/projects/dlcompat
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  freebsd* | dragonfly*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    # GNU and its variants, using gnu ld.so (Glibc)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  hpux10*|hpux11*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  interix*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  irix[[12345]]*|irix6.[[01]]*)
+    # Catch all versions of IRIX before 6.2, and indicate that we don't
+    # know how it worked for any of those versions.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  irix*)
+    # The case above catches anything before 6.2, and it's known that
+    # at 6.2 and later dlopen does load deplibs.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  netbsd* | netbsdelf*-gnu)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  openbsd*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  osf[[1234]]*)
+    # dlopen did load deplibs (at least at 4.x), but until the 5.x series,
+    # it did *not* use an RPATH in a shared library to find objects the
+    # library depends on, so we explicitly say 'no'.
+    lt_cv_sys_dlopen_deplibs=no
+    ;;
+  osf5.0|osf5.0a|osf5.1)
+    # dlopen *does* load deplibs and with the right loader patch applied
+    # it even uses RPATH in a shared library to search for shared objects
+    # that the library depends on, but there's no easy way to know if that
+    # patch is installed.  Since this is the case, all we can really
+    # say is unknown -- it depends on the patch being installed.  If
+    # it is, this changes to 'yes'.  Without it, it would be 'no'.
+    lt_cv_sys_dlopen_deplibs=unknown
+    ;;
+  osf*)
+    # the two cases above should catch all versions of osf <= 5.1.  Read
+    # the comments above for what we know about them.
+    # At > 5.1, deplibs are loaded *and* any RPATH in a shared library
+    # is used to find them so we can finally say 'yes'.
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  qnx*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  solaris*)
+    lt_cv_sys_dlopen_deplibs=yes
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    libltdl_cv_sys_dlopen_deplibs=yes
+    ;;
+  esac
+  ])
+if test yes != "$lt_cv_sys_dlopen_deplibs"; then
+ AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1],
+    [Define if the OS needs help to load dependent libraries for dlopen().])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:545: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:545: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:552: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([what extension is used for runtime loadable modules],
+  [libltdl_cv_shlibext],
+[
+module=yes
+eval libltdl_cv_shlibext=$shrext_cmds
+module=no
+eval libltdl_cv_shrext=$shrext_cmds
+  ])
+if test -n "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_MODULE_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"],
+    [Define to the extension used for runtime loadable modules, say, ".so".])
+fi
+if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then
+  m4_pattern_allow([LT_SHARED_EXT])dnl
+  AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"],
+    [Define to the shared library suffix, say, ".dylib".])
+fi
+if test -n "$shared_archive_member_spec"; then
+  m4_pattern_allow([LT_SHARED_LIB_MEMBER])dnl
+  AC_DEFINE_UNQUOTED([LT_SHARED_LIB_MEMBER], ["($shared_archive_member_spec.o)"],
+    [Define to the shared archive member specification, say "(shr.o)".])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:580: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:580: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:587: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([what variable specifies run-time module search path],
+  [lt_cv_module_path_var], [lt_cv_module_path_var=$shlibpath_var])
+if test -n "$lt_cv_module_path_var"; then
+  m4_pattern_allow([LT_MODULE_PATH_VAR])dnl
+  AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"],
+    [Define to the name of the environment variable that determines the run-time module search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:599: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:599: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl
+AC_CACHE_CHECK([for the default library search path],
+  [lt_cv_sys_dlsearch_path],
+  [lt_cv_sys_dlsearch_path=$sys_lib_dlsearch_path_spec])
+if test -n "$lt_cv_sys_dlsearch_path"; then
+  sys_dlsearch_path=
+  for dir in $lt_cv_sys_dlsearch_path; do
+    if test -z "$sys_dlsearch_path"; then
+      sys_dlsearch_path=$dir
+    else
+      sys_dlsearch_path=$sys_dlsearch_path$PATH_SEPARATOR$dir
+    fi
+  done
+  m4_pattern_allow([LT_DLSEARCH_PATH])dnl
+  AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"],
+    [Define to the system default library search path.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:627: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:627: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:653: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$])
+LT_DLLOADERS=
+AC_SUBST([LT_DLLOADERS])
+
+AC_LANG_PUSH([C])
+lt_dlload_save_LIBS=$LIBS
+
+LIBADD_DLOPEN=
+AC_SEARCH_LIBS([dlopen], [dl],
+       [AC_DEFINE([HAVE_LIBDL], [1],
+                  [Define if you have the libdl library or equivalent.])
+       if test "$ac_cv_search_dlopen" != "none required"; then
+         LIBADD_DLOPEN=-ldl
+       fi
+       libltdl_cv_lib_dl_dlopen=yes
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H
+#  include <dlfcn.h>
+#endif
+    ]], [[dlopen(0, 0);]])],
+           [AC_DEFINE([HAVE_LIBDL], [1],
+                      [Define if you have the libdl library or equivalent.])
+           libltdl_cv_func_dlopen=yes
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"],
+       [AC_CHECK_LIB([svld], [dlopen],
+               [AC_DEFINE([HAVE_LIBDL], [1],
+                        [Define if you have the libdl library or equivalent.])
+               LIBADD_DLOPEN=-lsvld libltdl_cv_func_dlopen=yes
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])])
+if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen"
+then
+  lt_save_LIBS=$LIBS
+  LIBS="$LIBS $LIBADD_DLOPEN"
+  AC_CHECK_FUNCS([dlerror])
+  LIBS=$lt_save_LIBS
+fi
+AC_SUBST([LIBADD_DLOPEN])
+
+LIBADD_SHL_LOAD=
+AC_CHECK_FUNC([shl_load],
+       [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                  [Define if you have the shl_load function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"],
+    [AC_CHECK_LIB([dld], [shl_load],
+           [AC_DEFINE([HAVE_SHL_LOAD], [1],
+                      [Define if you have the shl_load function.])
+           LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"
+           LIBADD_SHL_LOAD=-ldld])])
+AC_SUBST([LIBADD_SHL_LOAD])
+
+case $host_os in
+darwin[[1567]].*)
+# We only want this for pre-Mac OS X 10.4.
+  AC_CHECK_FUNC([_dyld_func_lookup],
+       [AC_DEFINE([HAVE_DYLD], [1],
+                  [Define if you have the _dyld_func_lookup function.])
+       LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"])
+  ;;
+beos*)
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la"
+  ;;
+cygwin* | mingw* | pw32*)
+  AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include <sys/cygwin.h>]])
+  LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la"
+  ;;
+esac
+
+AC_CHECK_LIB([dld], [dld_link],
+       [AC_DEFINE([HAVE_DLD], [1],
+                  [Define if you have the GNU dld library.])
+               LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"])
+AC_SUBST([LIBADD_DLD_LINK])
+
+m4_pattern_allow([^LT_DLPREOPEN$])
+LT_DLPREOPEN=
+if test -n "$LT_DLLOADERS"
+then
+  for lt_loader in $LT_DLLOADERS; do
+    LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader "
+  done
+  AC_DEFINE([HAVE_LIBDLLOADER], [1],
+            [Define if libdlloader will be built on this platform])
+fi
+AC_SUBST([LT_DLPREOPEN])
+
+dnl This isn't used anymore, but set it for backwards compatibility
+LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD"
+AC_SUBST([LIBADD_DL])
+
+LIBS=$lt_dlload_save_LIBS
+AC_LANG_POP
+])
+m4trace:/usr/share/aclocal/ltdl.m4:748: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:748: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:756: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+AC_CACHE_CHECK([for _ prefix in compiled symbols],
+  [lt_cv_sys_symbol_underscore],
+  [lt_cv_sys_symbol_underscore=no
+  cat > conftest.$ac_ext <<_LT_EOF
+void nm_test_func(){}
+int main(){nm_test_func;return 0;}
+_LT_EOF
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    ac_nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
+      # See whether the symbols have a leading underscore.
+      if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
+        lt_cv_sys_symbol_underscore=yes
+      else
+        if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
+         :
+        else
+         echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD
+        fi
+      fi
+    else
+      echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.c >&AS_MESSAGE_LOG_FD
+  fi
+  rm -rf conftest*
+  ])
+  sys_symbol_underscore=$lt_cv_sys_symbol_underscore
+  AC_SUBST([sys_symbol_underscore])
+])
+m4trace:/usr/share/aclocal/ltdl.m4:793: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:793: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:800: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([_LT_COMPILER_PIC])dnl        for lt_prog_compiler_wl
+AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl  for lt_cv_sys_symbol_underscore
+AC_REQUIRE([LT_SYS_MODULE_EXT])dnl     for libltdl_cv_shlibext
+if test yes = "$lt_cv_sys_symbol_underscore"; then
+  if test yes = "$libltdl_cv_func_dlopen" || test yes = "$libltdl_cv_lib_dl_dlopen"; then
+    AC_CACHE_CHECK([whether we have to add an underscore for dlsym],
+      [libltdl_cv_need_uscore],
+      [libltdl_cv_need_uscore=unknown
+      dlsym_uscore_save_LIBS=$LIBS
+      LIBS="$LIBS $LIBADD_DLOPEN"
+      libname=conftmod # stay within 8.3 filename limits!
+      cat >$libname.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+int fnord () { return 42; }]
+_LT_EOF
+
+      # ltfn_module_cmds module_cmds
+      # Execute tilde-delimited MODULE_CMDS with environment primed for
+      # $module_cmds or $archive_cmds type content.
+      ltfn_module_cmds ()
+      {( # subshell avoids polluting parent global environment
+          module_cmds_save_ifs=$IFS; IFS='~'
+          for cmd in @S|@1; do
+            IFS=$module_cmds_save_ifs
+            libobjs=$libname.$ac_objext; lib=$libname$libltdl_cv_shlibext
+            rpath=/not-exists; soname=$libname$libltdl_cv_shlibext; output_objdir=.
+            major=; versuffix=; verstring=; deplibs=
+            ECHO=echo; wl=$lt_prog_compiler_wl; allow_undefined_flag=
+            eval $cmd
+          done
+          IFS=$module_cmds_save_ifs
+      )}
+
+      # Compile a loadable module using libtool macro expansion results.
+      $CC $pic_flag -c $libname.$ac_ext
+      ltfn_module_cmds "${module_cmds:-$archive_cmds}"
+
+      # Try to fetch fnord with dlsym().
+      libltdl_dlunknown=0; libltdl_dlnouscore=1; libltdl_dluscore=2
+      cat >conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+#include <stdio.h>
+#ifndef RTLD_GLOBAL
+#  ifdef DL_GLOBAL
+#    define RTLD_GLOBAL DL_GLOBAL
+#  else
+#    define RTLD_GLOBAL 0
+#  endif
+#endif
+#ifndef RTLD_NOW
+#  ifdef DL_NOW
+#    define RTLD_NOW DL_NOW
+#  else
+#    define RTLD_NOW 0
+#  endif
+#endif
+int main () {
+  void *handle = dlopen ("`pwd`/$libname$libltdl_cv_shlibext", RTLD_GLOBAL|RTLD_NOW);
+  int status = $libltdl_dlunknown;
+  if (handle) {
+    if (dlsym (handle, "fnord"))
+      status = $libltdl_dlnouscore;
+    else {
+      if (dlsym (handle, "_fnord"))
+        status = $libltdl_dluscore;
+      else
+       puts (dlerror ());
+    }
+    dlclose (handle);
+  } else
+    puts (dlerror ());
+  return status;
+}]
+_LT_EOF
+      if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+        (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+        libltdl_status=$?
+        case x$libltdl_status in
+          x$libltdl_dlnouscore) libltdl_cv_need_uscore=no ;;
+         x$libltdl_dluscore) libltdl_cv_need_uscore=yes ;;
+         x*) libltdl_cv_need_uscore=unknown ;;
+        esac
+      fi
+      rm -rf conftest* $libname*
+      LIBS=$dlsym_uscore_save_LIBS
+    ])
+  fi
+fi
+
+if test yes = "$libltdl_cv_need_uscore"; then
+  AC_DEFINE([NEED_USCORE], [1],
+    [Define if dlsym() requires a leading underscore in symbol names.])
+fi
+])
+m4trace:/usr/share/aclocal/ltdl.m4:907: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal/ltdl.m4:907: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])])
+m4trace:/usr/share/aclocal-1.15/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15'
+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.15], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+m4trace:/usr/share/aclocal-1.15/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+m4trace:/usr/share/aclocal-1.15/ar-lib.m4:13: -1- AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([ar-lib])dnl
+AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
+: ${AR=ar}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+  [AC_LANG_PUSH([C])
+   am_cv_ar_interface=ar
+   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],
+     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([am_ar_try])
+      if test "$ac_status" -eq 0; then
+        am_cv_ar_interface=ar
+      else
+        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'
+        AC_TRY_EVAL([am_ar_try])
+        if test "$ac_status" -eq 0; then
+          am_cv_ar_interface=lib
+        else
+          am_cv_ar_interface=unknown
+        fi
+      fi
+      rm -f conftest.lib libconftest.a
+     ])
+   AC_LANG_POP([C])])
+
+case $am_cv_ar_interface in
+ar)
+  ;;
+lib)
+  # Microsoft lib, so override with the ar-lib wrapper script.
+  # FIXME: It is wrong to rewrite AR.
+  # 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__AR in this case,
+  # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something
+  # similar.
+  AR="$am_aux_dir/ar-lib $AR"
+  ;;
+unknown)
+  m4_default([$1],
+             [AC_MSG_ERROR([could not determine $AR interface])])
+  ;;
+esac
+AC_SUBST([AR])dnl
+])
+m4trace:/usr/share/aclocal-1.15/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+m4trace:/usr/share/aclocal-1.15/cond.m4:12: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl
+ m4_if([$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])])
+m4trace:/usr/share/aclocal-1.15/depend.m4:26: -1- 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
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" 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 10 /bin/sh.
+      echo '/* dummy */' > 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])
+])
+m4trace:/usr/share/aclocal-1.15/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+m4trace:/usr/share/aclocal-1.15/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+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
+])
+m4trace:/usr/share/aclocal-1.15/depout.m4:12: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+])
+m4trace:/usr/share/aclocal-1.15/depout.m4:71: -1- 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"])
+])
+m4trace:/usr/share/aclocal-1.15/init.m4:29: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])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],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [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([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver).  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])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+m4trace:/usr/share/aclocal-1.15/init.m4:186: -1- 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])
+m4trace:/usr/share/aclocal-1.15/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != 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])])
+m4trace:/usr/share/aclocal-1.15/lead-dot.m4:10: -1- 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])])
+m4trace:/usr/share/aclocal-1.15/lex.m4:13: -1- AC_DEFUN([AM_PROG_LEX], [AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_MISSING_HAS_RUN])dnl
+AC_REQUIRE([AC_PROG_LEX])dnl
+if test "$LEX" = :; then
+  LEX=${am_missing_run}flex
+fi])
+m4trace:/usr/share/aclocal-1.15/make.m4:12: -1- 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
+])
+m4trace:/usr/share/aclocal-1.15/missing.m4:11: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+m4trace:/usr/share/aclocal-1.15/missing.m4:20: -1- 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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+m4trace:/usr/share/aclocal-1.15/options.m4:11: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+m4trace:/usr/share/aclocal-1.15/options.m4:17: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+m4trace:/usr/share/aclocal-1.15/options.m4:23: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+m4trace:/usr/share/aclocal-1.15/options.m4:29: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+m4trace:/usr/share/aclocal-1.15/prog-cc-c-o.m4:12: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != 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
+AC_LANG_POP([C])])
+m4trace:/usr/share/aclocal-1.15/prog-cc-c-o.m4:47: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+m4trace:/usr/share/aclocal-1.15/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+m4trace:/usr/share/aclocal-1.15/sanity.m4:11: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane])
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+m4trace:/usr/share/aclocal-1.15/silent.m4:12: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+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
+])
+m4trace:/usr/share/aclocal-1.15/strip.m4:17: -1- 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])])
+m4trace:/usr/share/aclocal-1.15/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE])
+m4trace:/usr/share/aclocal-1.15/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+m4trace:/usr/share/aclocal-1.15/tar.m4:23: -1- 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}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  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])
+      AM_RUN_LOG([cat conftest.dir/file])
+      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])
+])
+m4trace:m4/ax_check_compile_and_link_flag.m4:57: -1- AC_DEFUN([AX_CHECK_COMPILE_AND_LINK_FLAG], [AC_PREREQ(2.61)dnl
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]clflags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler and linker accept $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])
+m4trace:m4/ax_check_compile_flag.m4:60: -1- AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])
+m4trace:m4/ax_code_coverage.m4:75: -1- AC_DEFUN([AX_CODE_COVERAGE], [
+       dnl Check for --enable-code-coverage
+       AC_REQUIRE([AC_PROG_SED])
+
+       # allow to override gcov location
+       AC_ARG_WITH([gcov],
+         [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])
+
+       AC_MSG_CHECKING([whether to build with code coverage support])
+       AC_ARG_ENABLE([code-coverage],
+         AS_HELP_STRING([--enable-code-coverage],
+         [enable code coverage statistics collection]),,
+         enable_code_coverage=no)
+
+       AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+       AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
+       AC_MSG_RESULT($enable_code_coverage)
+
+       AS_IF([ test "$enable_code_coverage" = "yes" ], [
+               # check for gcov
+               AC_CHECK_TOOL([GCOV],
+                 [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],
+                 [:])
+               AS_IF([test "X$GCOV" = "X:"],
+                 [AC_MSG_ERROR([gcov is needed to do coverage])])
+               AC_SUBST([GCOV])
+
+               dnl Check if gcc is being used
+               AS_IF([ test "$GCC" = "no" ], [
+                       AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])
+               ])
+
+               AC_CHECK_PROG([LCOV], [lcov], [lcov])
+               AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
+
+               AS_IF([ test -z "$LCOV" ], [
+                       AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])
+               ])
+
+               AS_IF([ test -z "$GENHTML" ], [
+                       AC_MSG_ERROR([Could not find genhtml from the lcov package])
+               ])
+
+               dnl Build the code coverage flags
+               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               AX_CHECK_COMPILE_FLAG([-coverage], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               ], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                       dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
+                       CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               ])
+
+               AC_SUBST([CODE_COVERAGE_CPPFLAGS])
+               AC_SUBST([CODE_COVERAGE_CFLAGS])
+               AC_SUBST([CODE_COVERAGE_CXXFLAGS])
+               AC_SUBST([CODE_COVERAGE_LIBS])
+               AC_SUBST([CODE_COVERAGE_LDFLAGS])
+
+               [CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+']
+               [CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+']
+               [CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+']
+       ], [
+               [CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+']
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       ])
+
+[CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+']
+
+       AC_SUBST([CODE_COVERAGE_RULES])
+       m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])])
+])
+m4trace:m4/libtool.m4:61: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])
+m4trace:m4/libtool.m4:99: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:m4/libtool.m4:99: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:m4/libtool.m4:100: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:m4/libtool.m4:100: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_INIT], [LT_INIT($@)])])
+m4trace:m4/libtool.m4:619: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])
+m4trace:m4/libtool.m4:812: -1- AC_DEFUN([LT_SUPPORTED_TAG], [])
+m4trace:m4/libtool.m4:823: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Go],                        [_LT_LANG(GO)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])
+m4trace:m4/libtool.m4:915: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+m4trace:m4/libtool.m4:915: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(C++)])
+m4trace:m4/libtool.m4:916: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+m4trace:m4/libtool.m4:916: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran 77)])
+m4trace:m4/libtool.m4:917: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+m4trace:m4/libtool.m4:917: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Fortran)])
+m4trace:m4/libtool.m4:918: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+m4trace:m4/libtool.m4:918: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Java)])
+m4trace:m4/libtool.m4:919: -1- AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+m4trace:m4/libtool.m4:919: -1- AC_DEFUN([AC_LIBTOOL_RC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_RC' is obsolete.
+You should run autoupdate.])dnl
+LT_LANG(Windows Resource)])
+m4trace:m4/libtool.m4:1247: -1- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([$with_sysroot])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+m4trace:m4/libtool.m4:1578: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])
+m4trace:m4/libtool.m4:1620: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:m4/libtool.m4:1620: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])])
+m4trace:m4/libtool.m4:1629: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])
+m4trace:m4/libtool.m4:1664: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:m4/libtool.m4:1664: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])])
+m4trace:m4/libtool.m4:1671: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])
+m4trace:m4/libtool.m4:1810: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:m4/libtool.m4:1810: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])])
+m4trace:m4/libtool.m4:1921: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen=shl_load],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen=dlopen],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])
+m4trace:m4/libtool.m4:2046: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:m4/libtool.m4:2046: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])])
+m4trace:m4/libtool.m4:3167: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])
+m4trace:m4/libtool.m4:3229: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:m4/libtool.m4:3229: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])])
+m4trace:m4/libtool.m4:3252: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test no = "$withval" || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])
+m4trace:m4/libtool.m4:3341: -1- AU_DEFUN([AM_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:m4/libtool.m4:3341: -1- AC_DEFUN([AM_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:m4/libtool.m4:3342: -1- AU_DEFUN([AC_PROG_LD], [m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:m4/libtool.m4:3342: -1- AC_DEFUN([AC_PROG_LD], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LD' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_LD], [LT_PATH_LD($@)])])
+m4trace:m4/libtool.m4:3671: -1- AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])
+m4trace:m4/libtool.m4:3766: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:m4/libtool.m4:3766: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:m4/libtool.m4:3767: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:m4/libtool.m4:3767: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])])
+m4trace:m4/libtool.m4:3838: -1- AC_DEFUN([_LT_DLL_DEF_P], [dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[        ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[  ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])
+m4trace:m4/libtool.m4:3852: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
+  ;;
+esac
+AC_SUBST([LIBM])
+])
+m4trace:m4/libtool.m4:3871: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:m4/libtool.m4:3871: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])])
+m4trace:m4/libtool.m4:8141: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+m4trace:m4/libtool.m4:8150: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:m4/libtool.m4:8150: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])])
+m4trace:m4/libtool.m4:8157: -1- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,)
+])
+m4trace:m4/libtool.m4:8164: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,)
+])
+m4trace:m4/libtool.m4:8169: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:m4/libtool.m4:8169: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])])
+m4trace:m4/libtool.m4:8289: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:m4/libtool.m4:8289: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete.
+You should run autoupdate.])dnl
+m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])])
+m4trace:m4/ltoptions.m4:14: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+m4trace:m4/ltoptions.m4:113: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:113: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:148: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:148: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
+You should run autoupdate.])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:197: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+m4trace:m4/ltoptions.m4:201: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+m4trace:m4/ltoptions.m4:205: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+m4trace:m4/ltoptions.m4:205: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_SHARED($@)])
+m4trace:m4/ltoptions.m4:206: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+m4trace:m4/ltoptions.m4:206: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_SHARED($@)])
+m4trace:m4/ltoptions.m4:251: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+m4trace:m4/ltoptions.m4:255: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+m4trace:m4/ltoptions.m4:259: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+m4trace:m4/ltoptions.m4:259: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_ENABLE_STATIC($@)])
+m4trace:m4/ltoptions.m4:260: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+m4trace:m4/ltoptions.m4:260: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete.
+You should run autoupdate.])dnl
+AC_DISABLE_STATIC($@)])
+m4trace:m4/ltoptions.m4:305: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:305: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:312: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:312: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:411: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltoptions.m4:411: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete.
+You should run autoupdate.])dnl
+_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+m4trace:m4/ltsugar.m4:14: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+m4trace:m4/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
+m4trace:m4/lt~obsolete.m4:37: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+m4trace:m4/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])
+m4trace:m4/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SHELL_INIT])
+m4trace:m4/lt~obsolete.m4:43: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])
+m4trace:m4/lt~obsolete.m4:45: -1- AC_DEFUN([_LT_AC_TAGVAR])
+m4trace:m4/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL])
+m4trace:m4/lt~obsolete.m4:47: -1- AC_DEFUN([AC_LTDL_PREOPEN])
+m4trace:m4/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_SYS_COMPILER])
+m4trace:m4/lt~obsolete.m4:49: -1- AC_DEFUN([_LT_AC_LOCK])
+m4trace:m4/lt~obsolete.m4:50: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])
+m4trace:m4/lt~obsolete.m4:51: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])
+m4trace:m4/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])
+m4trace:m4/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])
+m4trace:m4/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR])
+m4trace:m4/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LTDL_OBJDIR])
+m4trace:m4/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])
+m4trace:m4/lt~obsolete.m4:57: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])
+m4trace:m4/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PATH_MAGIC])
+m4trace:m4/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_GNU])
+m4trace:m4/lt~obsolete.m4:60: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])
+m4trace:m4/lt~obsolete.m4:61: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])
+m4trace:m4/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])
+m4trace:m4/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])
+m4trace:m4/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])
+m4trace:m4/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])
+m4trace:m4/lt~obsolete.m4:66: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])
+m4trace:m4/lt~obsolete.m4:67: -1- AC_DEFUN([LT_AC_PROG_EGREP])
+m4trace:m4/lt~obsolete.m4:72: -1- AC_DEFUN([_AC_PROG_LIBTOOL])
+m4trace:m4/lt~obsolete.m4:73: -1- AC_DEFUN([AC_LIBTOOL_SETUP])
+m4trace:m4/lt~obsolete.m4:74: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN])
+m4trace:m4/lt~obsolete.m4:75: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])
+m4trace:m4/lt~obsolete.m4:76: -1- AC_DEFUN([_LT_AC_TAGCONFIG])
+m4trace:m4/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_CXX])
+m4trace:m4/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_F77])
+m4trace:m4/lt~obsolete.m4:80: -1- AC_DEFUN([_LT_AC_LANG_GCJ])
+m4trace:m4/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])
+m4trace:m4/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG])
+m4trace:m4/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])
+m4trace:m4/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])
+m4trace:m4/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])
+m4trace:m4/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG])
+m4trace:m4/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])
+m4trace:m4/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])
+m4trace:m4/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])
+m4trace:m4/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG])
+m4trace:m4/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG])
+m4trace:m4/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C])
+m4trace:m4/lt~obsolete.m4:94: -1- AC_DEFUN([_LT_AC_PROG_CXXCPP])
+m4trace:m4/lt~obsolete.m4:97: -1- AC_DEFUN([_LT_PROG_F77])
+m4trace:m4/lt~obsolete.m4:98: -1- AC_DEFUN([_LT_PROG_FC])
+m4trace:m4/lt~obsolete.m4:99: -1- AC_DEFUN([_LT_PROG_CXX])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^runstatedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.ac:5: -1- AM_INIT_AUTOMAKE([foreign])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
+m4trace:configure.ac:5: -1- AM_SET_CURRENT_AUTOMAKE_VERSION
+m4trace:configure.ac:5: -1- AM_AUTOMAKE_VERSION([1.15])
+m4trace:configure.ac:5: -1- _AM_AUTOCONF_VERSION([2.69])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__isrc$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([am__isrc])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^CYGPATH_W$])
+m4trace:configure.ac:5: -1- _AM_SET_OPTIONS([foreign])
+m4trace:configure.ac:5: -1- _AM_SET_OPTION([foreign])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([foreign])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([no-define])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^PACKAGE$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^VERSION$])
+m4trace:configure.ac:5: -1- AM_SANITY_CHECK
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+m4trace:configure.ac:5: -1- AM_MISSING_HAS_RUN
+m4trace:configure.ac:5: -1- AM_AUX_DIR_EXPAND
+m4trace:configure.ac:5: -1- m4_pattern_allow([^ACLOCAL$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOCONF], [autoconf])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOCONF$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOMAKE$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AUTOHEADER$])
+m4trace:configure.ac:5: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MAKEINFO$])
+m4trace:configure.ac:5: -1- AM_PROG_INSTALL_SH
+m4trace:configure.ac:5: -1- m4_pattern_allow([^install_sh$])
+m4trace:configure.ac:5: -1- AM_PROG_INSTALL_STRIP
+m4trace:configure.ac:5: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^MKDIR_P$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^mkdir_p$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AWK$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:5: -1- AM_SET_LEADING_DOT
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__leading_dot$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([tar-ustar])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([tar-pax])
+m4trace:configure.ac:5: -1- _AM_PROG_TAR([v7])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AMTAR$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__tar$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^am__untar$])
+m4trace:configure.ac:5: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES([CC])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+m4trace:configure.ac:5: -2- _AM_MANGLE_OPTION([no-dependencies])
+m4trace:configure.ac:5: -1- AM_SILENT_RULES
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:5: -1- AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:5: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:5: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:5: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:6: -1- AC_CONFIG_MACRO_DIR([m4])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.ac:9: -1- _AM_PROG_CC_C_O
+m4trace:configure.ac:9: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext])
+m4trace:configure.ac:9: -1- _AM_DEPENDENCIES([CC])
+m4trace:configure.ac:9: -1- AM_SET_DEPDIR
+m4trace:configure.ac:9: -1- m4_pattern_allow([^DEPDIR$])
+m4trace:configure.ac:9: -1- AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:9: -1- AM_MAKE_INCLUDE
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__include$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__quote$])
+m4trace:configure.ac:9: -1- AM_DEP_TRACK
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_TRUE$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEP_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__nodep$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__nodep])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^CCDEPMODE$])
+m4trace:configure.ac:9: -1- AM_CONDITIONAL([am__fastdepCC], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
+m4trace:configure.ac:9: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
+m4trace:configure.ac:9: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:10: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.ac:12: -1- m4_pattern_allow([^LN_S$])
+m4trace:configure.ac:13: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.ac:14: -1- m4_pattern_allow([^YFLAGS$])
+m4trace:configure.ac:15: -1- AM_PROG_LEX
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEX_OUTPUT_ROOT$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^LEXLIB$])
+m4trace:configure.ac:15: -1- m4_pattern_allow([^YYTEXT_POINTER$])
+m4trace:configure.ac:17: -1- AM_PROG_AR
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:17: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXX$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^ac_ct_CXX$])
+m4trace:configure.ac:21: -1- _AM_DEPENDENCIES([CXX])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^CXXDEPMODE$])
+m4trace:configure.ac:21: -1- AM_CONDITIONAL([am__fastdepCXX], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
+m4trace:configure.ac:21: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
+m4trace:configure.ac:21: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
+m4trace:configure.ac:24: -1- LT_INIT
+m4trace:configure.ac:24: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
+m4trace:configure.ac:24: -1- LTOPTIONS_VERSION
+m4trace:configure.ac:24: -1- LTSUGAR_VERSION
+m4trace:configure.ac:24: -1- LTVERSION_VERSION
+m4trace:configure.ac:24: -1- LTOBSOLETE_VERSION
+m4trace:configure.ac:24: -1- _LT_PROG_LTMAIN
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIBTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.ac:24: -1- _LT_PREPARE_SED_QUOTE_VARS
+m4trace:configure.ac:24: -1- _LT_PROG_ECHO_BACKSLASH
+m4trace:configure.ac:24: -1- LT_PATH_LD
+m4trace:configure.ac:24: -1- m4_pattern_allow([^SED$])
+m4trace:configure.ac:24: -1- AC_PROG_EGREP
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^FGREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- LT_PATH_NM
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DUMPBIN$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NM$])
+m4trace:configure.ac:24: -1- LT_CMD_MAX_LEN
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OBJDUMP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DLLTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^AR$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^ac_ct_AR$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STRIP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.ac:24: -1- _LT_WITH_SYSROOT
+m4trace:configure.ac:24: -1- m4_pattern_allow([LT_OBJDIR])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_OBJDIR$])
+m4trace:configure.ac:24: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:24: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:24: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CC])
+m4trace:configure.ac:24: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"])
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, )=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^MANIFEST_TOOL$])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_REQUIRED_DARWIN_CHECKS
+m4trace:configure.ac:24: -1- m4_pattern_allow([^DSYMUTIL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^NMEDIT$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LIPO$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^OTOOL64$])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $CC understands -b], [lt_cv_prog_compiler__b], [-b], [_LT_TAGVAR(archive_cmds, )='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, )='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:24: -1- LT_SYS_DLOPEN_SELF
+m4trace:configure.ac:24: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
+m4trace:configure.ac:24: -1- LT_LANG([CXX])
+m4trace:configure.ac:24: -1- LT_SUPPORTED_TAG([CXX])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^CXXCPP$])
+m4trace:configure.ac:24: -1- _LT_COMPILER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_LINKER_BOILERPLATE
+m4trace:configure.ac:24: -1- _LT_CC_BASENAME([$compiler])
+m4trace:configure.ac:24: -1- LT_PATH_LD
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LD$])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_DLL_DEF_P([$export_symbols])
+m4trace:configure.ac:24: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;;
+     esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no])
+m4trace:configure.ac:24: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=])
+m4trace:configure.ac:24: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
+m4trace:configure.ac:27: -1- AM_SILENT_RULES([yes])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_V$])
+m4trace:configure.ac:27: -1- AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_V$])
+m4trace:configure.ac:27: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
+m4trace:configure.ac:27: -1- m4_pattern_allow([^AM_BACKSLASH$])
+m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
+m4trace:configure.ac:47: -1- AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
+m4trace:configure.ac:48: -1- AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"])
+m4trace:configure.ac:49: -1- AX_CHECK_COMPILE_FLAG([-Wchar-subscripts], [CFLAGS="$CFLAGS -Wchar-subscripts"])
+m4trace:configure.ac:51: -1- AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"])
+m4trace:configure.ac:53: -1- AX_CHECK_COMPILE_FLAG([-Wmissing-declarations], [CFLAGS="$CFLAGS -Wmissing-declarations"])
+m4trace:configure.ac:57: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=attributes], [CFLAGS="$CFLAGS -Wno-error=attributes"])
+m4trace:configure.ac:59: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=cast-align], [CFLAGS="$CFLAGS -Wno-error=cast-align"])
+m4trace:configure.ac:61: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=visibility], [CFLAGS="$CFLAGS -Wno-error=visibility"])
+m4trace:configure.ac:63: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=parentheses-equality], [CFLAGS="$CFLAGS -Wno-error=parentheses-equality"])
+m4trace:configure.ac:65: -1- AX_CHECK_COMPILE_FLAG([-std=gnu99], [CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"])
+m4trace:configure.ac:68: -1- AX_CHECK_COMPILE_FLAG([-Wno-error=unused-variable], [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"])
+m4trace:configure.ac:77: -1- AX_CODE_COVERAGE
+m4trace:configure.ac:77: -1- AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_TRUE$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED_FALSE$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_TRUE])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_ENABLED_FALSE])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_ENABLED$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^LCOV$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^GENHTML$])
+m4trace:configure.ac:77: -1- AX_CHECK_COMPILE_FLAG([-coverage], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               ], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                       dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
+                       CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               ])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CPPFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_CXXFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LIBS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_LDFLAGS$])
+m4trace:configure.ac:77: -1- m4_pattern_allow([^CODE_COVERAGE_RULES$])
+m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])
+m4trace:configure.ac:94: -1- AX_CHECK_COMPILE_FLAG([-std=c89], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"])
+m4trace:configure.ac:96: -1- AX_CHECK_COMPILE_FLAG([-Wpedantic], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"], [
+        dnl When -Wpedantic is not supported try the -pedantic instead. (gcc-4.7)
+        dnl See https://gcc.gnu.org/gcc-4.8/changes.html
+        AX_CHECK_COMPILE_FLAG([-pedantic],
+            [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
+    ], [-Werror])
+m4trace:configure.ac:96: -1- AX_CHECK_COMPILE_FLAG([-pedantic], [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
+m4trace:configure.ac:110: -1- AX_CHECK_COMPILE_FLAG([-Wgnu], [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"])
+m4trace:configure.ac:117: -1- AX_CHECK_COMPILE_FLAG([-Wno-long-long], [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"])
+m4trace:configure.ac:134: -1- AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32="-m32 -DEXPLICIT_32BIT"], [
+        CFLAGS_M32=""
+        AC_MSG_FAILURE([--enable-test-32bit=$enable_test_32bit is requested but not supported by the _AC_LANG compiler])
+      ])
+m4trace:configure.ac:141: -1- m4_pattern_allow([^CFLAGS_M32$])
+m4trace:configure.ac:142: -1- AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_TRUE$])
+m4trace:configure.ac:142: -1- m4_pattern_allow([^EXPLICIT_M32_FALSE$])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_TRUE])
+m4trace:configure.ac:142: -1- _AM_SUBST_NOTMAKE([EXPLICIT_M32_FALSE])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=undefined], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"], [
+        AS_IF([test "x$disable_test_ubsan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build])])
+      ], [], [AC_LANG_PROGRAM([void test(int *);void test(int *n) { *n = 0; }])
+    ])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=undefined], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=unsigned-integer-overflow], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"], [], [], [AC_LANG_PROGRAM([int test(unsigned); int test(unsigned n) { return n + 1; }])])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=unsigned-integer-overflow], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=nullability], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=nullability], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"])
+m4trace:configure.ac:151: -1- AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+m4trace:configure.ac:192: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=address], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"], [
+        AS_IF([test "x$disable_test_asan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build])])
+      ])
+m4trace:configure.ac:192: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2759: AC_RUN_IFELSE is expanded from...
+../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
+configure.ac:192: the top level])
+m4trace:configure.ac:192: -1- AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+m4trace:configure.ac:228: -1- AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=fuzzer], [LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"], [AC_MSG_FAILURE(
+[--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html])], [], [AC_LANG_SOURCE([[
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    ]])])
+m4trace:configure.ac:249: -1- m4_pattern_allow([^ADD_CFLAGS$])
+m4trace:configure.ac:250: -1- m4_pattern_allow([^LIBFUZZER_CFLAGS$])
+m4trace:configure.ac:251: -1- m4_pattern_allow([^SANITIZER_CFLAGS$])
+m4trace:configure.ac:252: -1- m4_pattern_allow([^TESTSUITE_CFLAGS$])
+m4trace:configure.ac:253: -1- m4_pattern_allow([^SKELETONS_CFLAGS$])
+m4trace:configure.ac:254: -1- m4_pattern_allow([^ASAN_ENV_FLAGS$])
+m4trace:configure.ac:257: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.ac:258: -1- m4_pattern_allow([^HAVE_SYS_PARAM_H$])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^WORDS_BIGENDIAN$])
+m4trace:configure.ac:261: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$])
+m4trace:configure.ac:262: -1- m4_pattern_allow([^off_t$])
+m4trace:configure.ac:263: -1- m4_pattern_allow([^size_t$])
+m4trace:configure.ac:264: -1- m4_pattern_allow([^TM_IN_SYS_TIME$])
+m4trace:configure.ac:265: -1- m4_pattern_allow([^HAVE_128_BIT_INT$])
+m4trace:configure.ac:267: -1- m4_pattern_allow([^intmax_t$])
+m4trace:configure.ac:270: -1- m4_pattern_allow([^SIZEOF_VOID_P$])
+m4trace:configure.ac:271: -1- AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_TRUE$])
+m4trace:configure.ac:271: -1- m4_pattern_allow([^TEST_64BIT_FALSE$])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_TRUE])
+m4trace:configure.ac:271: -1- _AM_SUBST_NOTMAKE([TEST_64BIT_FALSE])
+m4trace:configure.ac:277: -1- m4_pattern_allow([^HAVE_MERGESORT$])
+m4trace:configure.ac:278: -1- m4_pattern_allow([^HAVE_MKSTEMPS$])
+m4trace:configure.ac:279: -1- m4_pattern_allow([^HAVE_TIMEGM$])
+m4trace:configure.ac:280: -1- m4_pattern_allow([^HAVE_DECL_STRCASECMP$])
+m4trace:configure.ac:281: -1- m4_pattern_allow([^HAVE_DECL_VASPRINTF$])
+m4trace:configure.ac:282: -1- m4_pattern_allow([^HAVE_SYMLINK$])
+m4trace:configure.ac:285: -1- m4_pattern_allow([^PANDOC$])
+m4trace:configure.ac:286: -1- AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_TRUE$])
+m4trace:configure.ac:286: -1- m4_pattern_allow([^HAVE_PANDOC_FALSE$])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_TRUE])
+m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([HAVE_PANDOC_FALSE])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.ac:309: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
+m4trace:configure.ac:309: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
+m4trace:configure.ac:309: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
+m4trace:configure.ac:309: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
+m4trace:configure.ac:309: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS
+m4trace:configure.ac:309: -1- _LT_PROG_LTMAIN
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..779c62f
--- /dev/null
@@ -0,0 +1,127 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* Have 128-bit integer */
+#undef HAVE_128_BIT_INT
+
+/* Define to 1 if you have the declaration of `strcasecmp', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRCASECMP
+
+/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VASPRINTF
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mergesort' function. */
+#undef HAVE_MERGESORT
+
+/* Define to 1 if you have the `mkstemps' function. */
+#undef HAVE_MKSTEMPS
+
+/* 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 `strtoimax' function. */
+#undef HAVE_STRTOIMAX
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the symlink function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_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 `timegm' function. */
+#undef HAVE_TIMEGM
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* 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
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Version number of package */
+#undef VERSION
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
+   `char[]'. */
+#undef YYTEXT_POINTER
+
+/* Define to `int64_t' if <sys/types.h> does not define. */
+#undef intmax_t
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/config.log b/config.log
new file mode 100644 (file)
index 0000000..f3545bb
--- /dev/null
@@ -0,0 +1,3733 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by asn1c configure 0.9.29, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ ./configure 
+
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = blueman-HP-ZBook-15
+uname -m = x86_64
+uname -r = 4.4.0-116-lowlatency
+uname -s = Linux
+uname -v = #140-Ubuntu SMP PREEMPT Mon Feb 12 22:41:05 UTC 2018
+
+/usr/bin/uname -p = unknown
+/bin/uname -X     = unknown
+
+/bin/arch              = unknown
+/usr/bin/arch -k       = unknown
+/usr/convex/getsysinfo = unknown
+/usr/bin/hostinfo      = unknown
+/bin/machine           = unknown
+/usr/bin/oslevel       = unknown
+/bin/universe          = unknown
+
+PATH: /opt/ltebox/bin
+PATH: /opt/ltebox/tools
+PATH: /usr/local/sbin
+PATH: /usr/local/bin
+PATH: /usr/sbin
+PATH: /usr/bin
+PATH: /sbin
+PATH: /bin
+PATH: /usr/games
+PATH: /usr/local/games
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+configure:2747: checking for a BSD-compatible install
+configure:2815: result: /usr/bin/install -c
+configure:2826: checking whether build environment is sane
+configure:2881: result: yes
+configure:3032: checking for a thread-safe mkdir -p
+configure:3071: result: /bin/mkdir -p
+configure:3078: checking for gawk
+configure:3094: found /usr/bin/gawk
+configure:3105: result: gawk
+configure:3116: checking whether make sets $(MAKE)
+configure:3138: result: yes
+configure:3167: checking whether make supports nested variables
+configure:3184: result: yes
+configure:3360: checking for gcc
+configure:3376: found /usr/bin/gcc
+configure:3387: result: gcc
+configure:3616: checking for C compiler version
+configure:3625: gcc --version >&5
+gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
+Copyright (C) 2015 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.
+
+configure:3636: $? = 0
+configure:3625: gcc -v >&5
+Using built-in specs.
+COLLECT_GCC=gcc
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.9' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 
+configure:3636: $? = 0
+configure:3625: gcc -V >&5
+gcc: error: unrecognized command line option '-V'
+gcc: fatal error: no input files
+compilation terminated.
+configure:3636: $? = 1
+configure:3625: gcc -qversion >&5
+gcc: error: unrecognized command line option '-qversion'
+gcc: fatal error: no input files
+compilation terminated.
+configure:3636: $? = 1
+configure:3656: checking whether the C compiler works
+configure:3678: gcc    conftest.c  >&5
+configure:3682: $? = 0
+configure:3730: result: yes
+configure:3733: checking for C compiler default output file name
+configure:3735: result: a.out
+configure:3741: checking for suffix of executables
+configure:3748: gcc -o conftest    conftest.c  >&5
+configure:3752: $? = 0
+configure:3774: result: 
+configure:3796: checking whether we are cross compiling
+configure:3804: gcc -o conftest    conftest.c  >&5
+configure:3808: $? = 0
+configure:3815: ./conftest
+configure:3819: $? = 0
+configure:3834: result: no
+configure:3839: checking for suffix of object files
+configure:3861: gcc -c   conftest.c >&5
+configure:3865: $? = 0
+configure:3886: result: o
+configure:3890: checking whether we are using the GNU C compiler
+configure:3909: gcc -c   conftest.c >&5
+configure:3909: $? = 0
+configure:3918: result: yes
+configure:3927: checking whether gcc accepts -g
+configure:3947: gcc -c -g  conftest.c >&5
+configure:3947: $? = 0
+configure:3988: result: yes
+configure:4005: checking for gcc option to accept ISO C89
+configure:4068: gcc  -c -g -O2  conftest.c >&5
+configure:4068: $? = 0
+configure:4081: result: none needed
+configure:4106: checking whether gcc understands -c and -o together
+configure:4128: gcc -c conftest.c -o conftest2.o
+configure:4131: $? = 0
+configure:4128: gcc -c conftest.c -o conftest2.o
+configure:4131: $? = 0
+configure:4143: result: yes
+configure:4171: checking for style of include used by make
+configure:4199: result: GNU
+configure:4225: checking dependency style of gcc
+configure:4336: result: gcc3
+configure:4356: checking how to run the C preprocessor
+configure:4387: gcc -E  conftest.c
+configure:4387: $? = 0
+configure:4401: gcc -E  conftest.c
+conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
+compilation terminated.
+configure:4401: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:4426: result: gcc -E
+configure:4446: gcc -E  conftest.c
+configure:4446: $? = 0
+configure:4460: gcc -E  conftest.c
+conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
+compilation terminated.
+configure:4460: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:4489: checking whether ln -s works
+configure:4493: result: yes
+configure:4500: checking whether make sets $(MAKE)
+configure:4522: result: yes
+configure:4535: checking for bison
+configure:4551: found /usr/bin/bison
+configure:4562: result: bison -y
+configure:4579: checking for flex
+configure:4595: found /usr/bin/flex
+configure:4606: result: flex
+configure:4644: flex conftest.l
+configure:4648: $? = 0
+configure:4650: checking lex output file root
+configure:4664: result: lex.yy
+configure:4669: checking lex library
+configure:4683: gcc -o conftest -g -O2   conftest.c   >&5
+/tmp/cce5iy9z.o: In function `input':
+/home/nokia/mouse07410/asn1c/lex.yy.c:1200: undefined reference to `yywrap'
+/tmp/cce5iy9z.o: In function `yylex':
+/home/nokia/mouse07410/asn1c/lex.yy.c:894: undefined reference to `yywrap'
+/tmp/cce5iy9z.o: In function `main':
+/home/nokia/mouse07410/asn1c/conftest.l:18: undefined reference to `yywrap'
+collect2: error: ld returned 1 exit status
+configure:4683: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| /* end confdefs.h.  */
+| 
+| #line 3 "lex.yy.c"
+| 
+| #define  YY_INT_ALIGNED short int
+| 
+| /* A lexical scanner generated by flex */
+| 
+| #define FLEX_SCANNER
+| #define YY_FLEX_MAJOR_VERSION 2
+| #define YY_FLEX_MINOR_VERSION 6
+| #define YY_FLEX_SUBMINOR_VERSION 0
+| #if YY_FLEX_SUBMINOR_VERSION > 0
+| #define FLEX_BETA
+| #endif
+| 
+| /* First, we deal with  platform-specific or compiler-specific issues. */
+| 
+| /* begin standard C headers. */
+| #include <stdio.h>
+| #include <string.h>
+| #include <errno.h>
+| #include <stdlib.h>
+| 
+| /* end standard C headers. */
+| 
+| /* flex integer type definitions */
+| 
+| #ifndef FLEXINT_H
+| #define FLEXINT_H
+| 
+| /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+| 
+| #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+| 
+| /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+|  * if you want the limit (max/min) macros for int types. 
+|  */
+| #ifndef __STDC_LIMIT_MACROS
+| #define __STDC_LIMIT_MACROS 1
+| #endif
+| 
+| #include <inttypes.h>
+| typedef int8_t flex_int8_t;
+| typedef uint8_t flex_uint8_t;
+| typedef int16_t flex_int16_t;
+| typedef uint16_t flex_uint16_t;
+| typedef int32_t flex_int32_t;
+| typedef uint32_t flex_uint32_t;
+| #else
+| typedef signed char flex_int8_t;
+| typedef short int flex_int16_t;
+| typedef int flex_int32_t;
+| typedef unsigned char flex_uint8_t; 
+| typedef unsigned short int flex_uint16_t;
+| typedef unsigned int flex_uint32_t;
+| 
+| /* Limits of integral types. */
+| #ifndef INT8_MIN
+| #define INT8_MIN               (-128)
+| #endif
+| #ifndef INT16_MIN
+| #define INT16_MIN              (-32767-1)
+| #endif
+| #ifndef INT32_MIN
+| #define INT32_MIN              (-2147483647-1)
+| #endif
+| #ifndef INT8_MAX
+| #define INT8_MAX               (127)
+| #endif
+| #ifndef INT16_MAX
+| #define INT16_MAX              (32767)
+| #endif
+| #ifndef INT32_MAX
+| #define INT32_MAX              (2147483647)
+| #endif
+| #ifndef UINT8_MAX
+| #define UINT8_MAX              (255U)
+| #endif
+| #ifndef UINT16_MAX
+| #define UINT16_MAX             (65535U)
+| #endif
+| #ifndef UINT32_MAX
+| #define UINT32_MAX             (4294967295U)
+| #endif
+| 
+| #endif /* ! C99 */
+| 
+| #endif /* ! FLEXINT_H */
+| 
+| #ifdef __cplusplus
+| 
+| /* The "const" storage-class-modifier is valid. */
+| #define YY_USE_CONST
+| 
+| #else        /* ! __cplusplus */
+| 
+| /* C99 requires __STDC__ to be defined as 1. */
+| #if defined (__STDC__)
+| 
+| #define YY_USE_CONST
+| 
+| #endif       /* defined (__STDC__) */
+| #endif       /* ! __cplusplus */
+| 
+| #ifdef YY_USE_CONST
+| #define yyconst const
+| #else
+| #define yyconst
+| #endif
+| 
+| /* Returned upon end-of-file. */
+| #define YY_NULL 0
+| 
+| /* Promotes a possibly negative, possibly signed char to an unsigned
+|  * integer for use as an array index.  If the signed char is negative,
+|  * we want to instead treat it as an 8-bit unsigned char, hence the
+|  * double cast.
+|  */
+| #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+| 
+| /* Enter a start condition.  This macro really ought to take a parameter,
+|  * but we do it the disgusting crufty way forced on us by the ()-less
+|  * definition of BEGIN.
+|  */
+| #define BEGIN (yy_start) = 1 + 2 *
+| 
+| /* Translate the current start state into a value that can be later handed
+|  * to BEGIN to return to the state.  The YYSTATE alias is for lex
+|  * compatibility.
+|  */
+| #define YY_START (((yy_start) - 1) / 2)
+| #define YYSTATE YY_START
+| 
+| /* Action number for EOF rule of a given start state. */
+| #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+| 
+| /* Special action meaning "start processing a new file". */
+| #define YY_NEW_FILE yyrestart(yyin  )
+| 
+| #define YY_END_OF_BUFFER_CHAR 0
+| 
+| /* Size of default input buffer. */
+| #ifndef YY_BUF_SIZE
+| #ifdef __ia64__
+| /* On IA-64, the buffer size is 16k, not 8k.
+|  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+|  * Ditto for the __ia64__ case accordingly.
+|  */
+| #define YY_BUF_SIZE 32768
+| #else
+| #define YY_BUF_SIZE 16384
+| #endif /* __ia64__ */
+| #endif
+| 
+| /* The state buf must be large enough to hold one state per character in the main buffer.
+|  */
+| #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+| 
+| #ifndef YY_TYPEDEF_YY_BUFFER_STATE
+| #define YY_TYPEDEF_YY_BUFFER_STATE
+| typedef struct yy_buffer_state *YY_BUFFER_STATE;
+| #endif
+| 
+| #ifndef YY_TYPEDEF_YY_SIZE_T
+| #define YY_TYPEDEF_YY_SIZE_T
+| typedef size_t yy_size_t;
+| #endif
+| 
+| extern yy_size_t yyleng;
+| 
+| extern FILE *yyin, *yyout;
+| 
+| #define EOB_ACT_CONTINUE_SCAN 0
+| #define EOB_ACT_END_OF_FILE 1
+| #define EOB_ACT_LAST_MATCH 2
+| 
+|     #define YY_LESS_LINENO(n)
+|     #define YY_LINENO_REWIND_TO(ptr)
+|     
+| /* Return all but the first "n" matched characters back to the input stream. */
+| #define yyless(n) \
+|      do \
+|              { \
+|              /* Undo effects of setting up yytext. */ \
+|         int yyless_macro_arg = (n); \
+|         YY_LESS_LINENO(yyless_macro_arg);\
+|              *yy_cp = (yy_hold_char); \
+|              YY_RESTORE_YY_MORE_OFFSET \
+|              (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+|              YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+|              } \
+|      while ( 0 )
+| 
+| #define unput(c) yyunput( c, (yytext_ptr)  )
+| 
+| #ifndef YY_STRUCT_YY_BUFFER_STATE
+| #define YY_STRUCT_YY_BUFFER_STATE
+| struct yy_buffer_state
+|      {
+|      FILE *yy_input_file;
+| 
+|      char *yy_ch_buf;                /* input buffer */
+|      char *yy_buf_pos;               /* current position in input buffer */
+| 
+|      /* Size of input buffer in bytes, not including room for EOB
+|       * characters.
+|       */
+|      yy_size_t yy_buf_size;
+| 
+|      /* Number of characters read into yy_ch_buf, not including EOB
+|       * characters.
+|       */
+|      int yy_n_chars;
+| 
+|      /* Whether we "own" the buffer - i.e., we know we created it,
+|       * and can realloc() it to grow it, and should free() it to
+|       * delete it.
+|       */
+|      int yy_is_our_buffer;
+| 
+|      /* Whether this is an "interactive" input source; if so, and
+|       * if we're using stdio for input, then we want to use getc()
+|       * instead of fread(), to make sure we stop fetching input after
+|       * each newline.
+|       */
+|      int yy_is_interactive;
+| 
+|      /* Whether we're considered to be at the beginning of a line.
+|       * If so, '^' rules will be active on the next match, otherwise
+|       * not.
+|       */
+|      int yy_at_bol;
+| 
+|     int yy_bs_lineno; /**< The line count. */
+|     int yy_bs_column; /**< The column count. */
+|     
+|      /* Whether to try to fill the input buffer when we reach the
+|       * end of it.
+|       */
+|      int yy_fill_buffer;
+| 
+|      int yy_buffer_status;
+| 
+| #define YY_BUFFER_NEW 0
+| #define YY_BUFFER_NORMAL 1
+|      /* When an EOF's been seen but there's still some text to process
+|       * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+|       * shouldn't try reading from the input source any more.  We might
+|       * still have a bunch of tokens to match, though, because of
+|       * possible backing-up.
+|       *
+|       * When we actually see the EOF, we change the status to "new"
+|       * (via yyrestart()), so that the user can continue scanning by
+|       * just pointing yyin at a new input file.
+|       */
+| #define YY_BUFFER_EOF_PENDING 2
+| 
+|      };
+| #endif /* !YY_STRUCT_YY_BUFFER_STATE */
+| 
+| /* Stack of input buffers. */
+| static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+| static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+| static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+| 
+| /* We provide macros for accessing buffer states in case in the
+|  * future we want to put the buffer states in a more general
+|  * "scanner state".
+|  *
+|  * Returns the top of the stack, or NULL.
+|  */
+| #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+|                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+|                           : NULL)
+| 
+| /* Same as previous macro, but useful when we know that the buffer stack is not
+|  * NULL or when we need an lvalue. For internal use only.
+|  */
+| #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+| 
+| /* yy_hold_char holds the character lost when yytext is formed. */
+| static char yy_hold_char;
+| static int yy_n_chars;               /* number of characters read into yy_ch_buf */
+| yy_size_t yyleng;
+| 
+| /* Points to current character in buffer. */
+| static char *yy_c_buf_p = (char *) 0;
+| static int yy_init = 0;              /* whether we need to initialize */
+| static int yy_start = 0;     /* start state number */
+| 
+| /* Flag which is used to allow yywrap()'s to do buffer switches
+|  * instead of setting up a fresh yyin.  A bit of a hack ...
+|  */
+| static int yy_did_buffer_switch_on_eof;
+| 
+| void yyrestart (FILE *input_file  );
+| void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+| YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
+| void yy_delete_buffer (YY_BUFFER_STATE b  );
+| void yy_flush_buffer (YY_BUFFER_STATE b  );
+| void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
+| void yypop_buffer_state (void );
+| 
+| static void yyensure_buffer_stack (void );
+| static void yy_load_buffer_state (void );
+| static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );
+| 
+| #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+| 
+| YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
+| YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
+| YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len  );
+| 
+| void *yyalloc (yy_size_t  );
+| void *yyrealloc (void *,yy_size_t  );
+| void yyfree (void *  );
+| 
+| #define yy_new_buffer yy_create_buffer
+| 
+| #define yy_set_interactive(is_interactive) \
+|      { \
+|      if ( ! YY_CURRENT_BUFFER ){ \
+|         yyensure_buffer_stack (); \
+|              YY_CURRENT_BUFFER_LVALUE =    \
+|             yy_create_buffer(yyin,YY_BUF_SIZE ); \
+|      } \
+|      YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+|      }
+| 
+| #define yy_set_bol(at_bol) \
+|      { \
+|      if ( ! YY_CURRENT_BUFFER ){\
+|         yyensure_buffer_stack (); \
+|              YY_CURRENT_BUFFER_LVALUE =    \
+|             yy_create_buffer(yyin,YY_BUF_SIZE ); \
+|      } \
+|      YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+|      }
+| 
+| #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+| 
+| /* Begin user sect3 */
+| 
+| typedef unsigned char YY_CHAR;
+| 
+| FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+| 
+| typedef int yy_state_type;
+| 
+| extern int yylineno;
+| 
+| int yylineno = 1;
+| 
+| extern char *yytext;
+| #ifdef yytext_ptr
+| #undef yytext_ptr
+| #endif
+| #define yytext_ptr yytext
+| 
+| static yy_state_type yy_get_previous_state (void );
+| static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+| static int yy_get_next_buffer (void );
+| #if defined(__GNUC__) && __GNUC__ >= 3
+| __attribute__((__noreturn__))
+| #endif
+| static void yy_fatal_error (yyconst char msg[]  );
+| 
+| /* Done after the current pattern has been matched and before the
+|  * corresponding action - sets up yytext.
+|  */
+| #define YY_DO_BEFORE_ACTION \
+|      (yytext_ptr) = yy_bp; \
+|      (yytext_ptr) -= (yy_more_len); \
+|      yyleng = (size_t) (yy_cp - (yytext_ptr)); \
+|      (yy_hold_char) = *yy_cp; \
+|      *yy_cp = '\0'; \
+|      (yy_c_buf_p) = yy_cp;
+| 
+| #define YY_NUM_RULES 8
+| #define YY_END_OF_BUFFER 9
+| /* This struct is not used in this scanner,
+|    but its presence is necessary. */
+| struct yy_trans_info
+|      {
+|      flex_int32_t yy_verify;
+|      flex_int32_t yy_nxt;
+|      };
+| static yyconst flex_int16_t yy_acclist[23] =
+|     {   0,
+|         9,    7,    8,    8,    1,    7,    8,    2,    7,    8,
+|         3,    7,    8,    4,    7,    8,    5,    7,    8,    6,
+|         7,    8
+|     } ;
+| 
+| static yyconst flex_int16_t yy_accept[14] =
+|     {   0,
+|         1,    1,    1,    2,    4,    5,    8,   11,   14,   17,
+|        20,   23,   23
+|     } ;
+| 
+| static yyconst YY_CHAR yy_ec[256] =
+|     {   0,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    3,    4,    5,    6,
+| 
+|         7,    8,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+| 
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+|         1,    1,    1,    1,    1
+|     } ;
+| 
+| static yyconst YY_CHAR yy_meta[9] =
+|     {   0,
+|         1,    1,    1,    1,    1,    1,    1,    1
+|     } ;
+| 
+| static yyconst flex_uint16_t yy_base[13] =
+|     {   0,
+|         0,    0,    9,   10,   10,   10,   10,   10,   10,   10,
+|        10,   10
+|     } ;
+| 
+| static yyconst flex_int16_t yy_def[13] =
+|     {   0,
+|        12,    1,   12,   12,   12,   12,   12,   12,   12,   12,
+|        12,    0
+|     } ;
+| 
+| static yyconst flex_uint16_t yy_nxt[19] =
+|     {   0,
+|         4,    5,    6,    7,    8,    9,   10,   11,   12,    3,
+|        12,   12,   12,   12,   12,   12,   12,   12
+|     } ;
+| 
+| static yyconst flex_int16_t yy_chk[19] =
+|     {   0,
+|         1,    1,    1,    1,    1,    1,    1,    1,    3,   12,
+|        12,   12,   12,   12,   12,   12,   12,   12
+|     } ;
+| 
+| extern int yy_flex_debug;
+| int yy_flex_debug = 0;
+| 
+| static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
+| static char *yy_full_match;
+| static int yy_lp;
+| #define REJECT \
+| { \
+| *yy_cp = (yy_hold_char); /* undo effects of setting up yytext */ \
+| yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+| ++(yy_lp); \
+| goto find_rule; \
+| }
+| 
+| static int yy_more_flag = 0;
+| static int yy_more_len = 0;
+| #define yymore() ((yy_more_flag) = 1)
+| #define YY_MORE_ADJ (yy_more_len)
+| #define YY_RESTORE_YY_MORE_OFFSET
+| char *yytext;
+| #line 1 "conftest.l"
+| #line 484 "lex.yy.c"
+| 
+| #define INITIAL 0
+| 
+| #ifndef YY_NO_UNISTD_H
+| /* Special case for "unistd.h", since it is non-ANSI. We include it way
+|  * down here because we want the user's section 1 to have been scanned first.
+|  * The user has a chance to override it with an option.
+|  */
+| #include <unistd.h>
+| #endif
+| 
+| #ifndef YY_EXTRA_TYPE
+| #define YY_EXTRA_TYPE void *
+| #endif
+| 
+| static int yy_init_globals (void );
+| 
+| /* Accessor methods to globals.
+|    These are made visible to non-reentrant scanners for convenience. */
+| 
+| int yylex_destroy (void );
+| 
+| int yyget_debug (void );
+| 
+| void yyset_debug (int debug_flag  );
+| 
+| YY_EXTRA_TYPE yyget_extra (void );
+| 
+| void yyset_extra (YY_EXTRA_TYPE user_defined  );
+| 
+| FILE *yyget_in (void );
+| 
+| void yyset_in  (FILE * _in_str  );
+| 
+| FILE *yyget_out (void );
+| 
+| void yyset_out  (FILE * _out_str  );
+| 
+| yy_size_t yyget_leng (void );
+| 
+| char *yyget_text (void );
+| 
+| int yyget_lineno (void );
+| 
+| void yyset_lineno (int _line_number  );
+| 
+| /* Macros after this point can all be overridden by user definitions in
+|  * section 1.
+|  */
+| 
+| #ifndef YY_SKIP_YYWRAP
+| #ifdef __cplusplus
+| extern "C" int yywrap (void );
+| #else
+| extern int yywrap (void );
+| #endif
+| #endif
+| 
+| #ifndef YY_NO_UNPUT
+|     
+|     static void yyunput (int c,char *buf_ptr  );
+|     
+| #endif
+| 
+| #ifndef yytext_ptr
+| static void yy_flex_strncpy (char *,yyconst char *,int );
+| #endif
+| 
+| #ifdef YY_NEED_STRLEN
+| static int yy_flex_strlen (yyconst char * );
+| #endif
+| 
+| #ifndef YY_NO_INPUT
+| 
+| #ifdef __cplusplus
+| static int yyinput (void );
+| #else
+| static int input (void );
+| #endif
+| 
+| #endif
+| 
+| /* Amount of stuff to slurp up with each read. */
+| #ifndef YY_READ_BUF_SIZE
+| #ifdef __ia64__
+| /* On IA-64, the buffer size is 16k, not 8k */
+| #define YY_READ_BUF_SIZE 16384
+| #else
+| #define YY_READ_BUF_SIZE 8192
+| #endif /* __ia64__ */
+| #endif
+| 
+| /* Copy whatever the last rule matched to the standard output. */
+| #ifndef ECHO
+| /* This used to be an fputs(), but since the string might contain NUL's,
+|  * we now use fwrite().
+|  */
+| #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
+| #endif
+| 
+| /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+|  * is returned in "result".
+|  */
+| #ifndef YY_INPUT
+| #define YY_INPUT(buf,result,max_size) \
+|      if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+|              { \
+|              int c = '*'; \
+|              size_t n; \
+|              for ( n = 0; n < max_size && \
+|                           (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+|                      buf[n] = (char) c; \
+|              if ( c == '\n' ) \
+|                      buf[n++] = (char) c; \
+|              if ( c == EOF && ferror( yyin ) ) \
+|                      YY_FATAL_ERROR( "input in flex scanner failed" ); \
+|              result = n; \
+|              } \
+|      else \
+|              { \
+|              errno=0; \
+|              while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+|                      { \
+|                      if( errno != EINTR) \
+|                              { \
+|                              YY_FATAL_ERROR( "input in flex scanner failed" ); \
+|                              break; \
+|                              } \
+|                      errno=0; \
+|                      clearerr(yyin); \
+|                      } \
+|              }\
+| \
+| 
+| #endif
+| 
+| /* No semi-colon after return; correct usage is to write "yyterminate();" -
+|  * we don't want an extra ';' after the "return" because that will cause
+|  * some compilers to complain about unreachable statements.
+|  */
+| #ifndef yyterminate
+| #define yyterminate() return YY_NULL
+| #endif
+| 
+| /* Number of entries by which start-condition stack grows. */
+| #ifndef YY_START_STACK_INCR
+| #define YY_START_STACK_INCR 25
+| #endif
+| 
+| /* Report a fatal error. */
+| #ifndef YY_FATAL_ERROR
+| #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+| #endif
+| 
+| /* end tables serialization structures and prototypes */
+| 
+| /* Default declaration of generated scanner - a define so the user can
+|  * easily add parameters.
+|  */
+| #ifndef YY_DECL
+| #define YY_DECL_IS_OURS 1
+| 
+| extern int yylex (void);
+| 
+| #define YY_DECL int yylex (void)
+| #endif /* !YY_DECL */
+| 
+| /* Code executed at the beginning of each rule, after yytext and yyleng
+|  * have been set up.
+|  */
+| #ifndef YY_USER_ACTION
+| #define YY_USER_ACTION
+| #endif
+| 
+| /* Code executed at the end of each rule. */
+| #ifndef YY_BREAK
+| #define YY_BREAK /*LINTED*/break;
+| #endif
+| 
+| #define YY_RULE_SETUP \
+|      YY_USER_ACTION
+| 
+| /** The main scanner function which does all the work.
+|  */
+| YY_DECL
+| {
+|      yy_state_type yy_current_state;
+|      char *yy_cp, *yy_bp;
+|      int yy_act;
+|     
+|      if ( !(yy_init) )
+|              {
+|              (yy_init) = 1;
+| 
+| #ifdef YY_USER_INIT
+|              YY_USER_INIT;
+| #endif
+| 
+|         /* Create the reject buffer large enough to save one state per allowed character. */
+|         if ( ! (yy_state_buf) )
+|             (yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE  );
+|             if ( ! (yy_state_buf) )
+|                 YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
+| 
+|              if ( ! (yy_start) )
+|                      (yy_start) = 1; /* first start state */
+| 
+|              if ( ! yyin )
+|                      yyin = stdin;
+| 
+|              if ( ! yyout )
+|                      yyout = stdout;
+| 
+|              if ( ! YY_CURRENT_BUFFER ) {
+|                      yyensure_buffer_stack ();
+|                      YY_CURRENT_BUFFER_LVALUE =
+|                              yy_create_buffer(yyin,YY_BUF_SIZE );
+|              }
+| 
+|              yy_load_buffer_state( );
+|              }
+| 
+|      {
+| #line 1 "conftest.l"
+| 
+| #line 710 "lex.yy.c"
+| 
+|      while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
+|              {
+|              (yy_more_len) = 0;
+|              if ( (yy_more_flag) )
+|                      {
+|                      (yy_more_len) = (yy_c_buf_p) - (yytext_ptr);
+|                      (yy_more_flag) = 0;
+|                      }
+|              yy_cp = (yy_c_buf_p);
+| 
+|              /* Support of yytext. */
+|              *yy_cp = (yy_hold_char);
+| 
+|              /* yy_bp points to the position in yy_ch_buf of the start of
+|               * the current run.
+|               */
+|              yy_bp = yy_cp;
+| 
+|              yy_current_state = (yy_start);
+| 
+|              (yy_state_ptr) = (yy_state_buf);
+|              *(yy_state_ptr)++ = yy_current_state;
+| 
+| yy_match:
+|              do
+|                      {
+|                      YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+|                      while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+|                              {
+|                              yy_current_state = (int) yy_def[yy_current_state];
+|                              if ( yy_current_state >= 13 )
+|                                      yy_c = yy_meta[(unsigned int) yy_c];
+|                              }
+|                      yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+|                      *(yy_state_ptr)++ = yy_current_state;
+|                      ++yy_cp;
+|                      }
+|              while ( yy_base[yy_current_state] != 10 );
+| 
+| yy_find_action:
+|              yy_current_state = *--(yy_state_ptr);
+|              (yy_lp) = yy_accept[yy_current_state];
+| find_rule: /* we branch to this label when backing up */
+|              for ( ; ; ) /* until we find what rule we matched */
+|                      {
+|                      if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
+|                              {
+|                              yy_act = yy_acclist[(yy_lp)];
+|                                      {
+|                                      (yy_full_match) = yy_cp;
+|                                      break;
+|                                      }
+|                              }
+|                      --yy_cp;
+|                      yy_current_state = *--(yy_state_ptr);
+|                      (yy_lp) = yy_accept[yy_current_state];
+|                      }
+| 
+|              YY_DO_BEFORE_ACTION;
+| 
+| do_action:   /* This label is used only to access EOF actions. */
+| 
+|              switch ( yy_act )
+|      { /* beginning of action switch */
+| case 1:
+| YY_RULE_SETUP
+| #line 2 "conftest.l"
+| { ECHO; }
+|      YY_BREAK
+| case 2:
+| YY_RULE_SETUP
+| #line 3 "conftest.l"
+| { REJECT; }
+|      YY_BREAK
+| case 3:
+| YY_RULE_SETUP
+| #line 4 "conftest.l"
+| { yymore (); }
+|      YY_BREAK
+| case 4:
+| YY_RULE_SETUP
+| #line 5 "conftest.l"
+| { yyless (1); }
+|      YY_BREAK
+| case 5:
+| YY_RULE_SETUP
+| #line 6 "conftest.l"
+| { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument.  */
+|     yyless ((input () != 0)); }
+|      YY_BREAK
+| case 6:
+| YY_RULE_SETUP
+| #line 8 "conftest.l"
+| { unput (yytext[0]); }
+|      YY_BREAK
+| case 7:
+| YY_RULE_SETUP
+| #line 9 "conftest.l"
+| { BEGIN INITIAL; }
+|      YY_BREAK
+| case 8:
+| YY_RULE_SETUP
+| #line 10 "conftest.l"
+| ECHO;
+|      YY_BREAK
+| #line 817 "lex.yy.c"
+|                      case YY_STATE_EOF(INITIAL):
+|                              yyterminate();
+| 
+|      case YY_END_OF_BUFFER:
+|              {
+|              /* Amount of text matched not including the EOB char. */
+|              int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+| 
+|              /* Undo the effects of YY_DO_BEFORE_ACTION. */
+|              *yy_cp = (yy_hold_char);
+|              YY_RESTORE_YY_MORE_OFFSET
+| 
+|              if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+|                      {
+|                      /* We're scanning a new file or input source.  It's
+|                       * possible that this happened because the user
+|                       * just pointed yyin at a new source and called
+|                       * yylex().  If so, then we have to assure
+|                       * consistency between YY_CURRENT_BUFFER and our
+|                       * globals.  Here is the right place to do so, because
+|                       * this is the first action (other than possibly a
+|                       * back-up) that will match for the new input source.
+|                       */
+|                      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+|                      YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+|                      YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+|                      }
+| 
+|              /* Note that here we test for yy_c_buf_p "<=" to the position
+|               * of the first EOB in the buffer, since yy_c_buf_p will
+|               * already have been incremented past the NUL character
+|               * (since all states make transitions on EOB to the
+|               * end-of-buffer state).  Contrast this with the test
+|               * in input().
+|               */
+|              if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+|                      { /* This was really a NUL. */
+|                      yy_state_type yy_next_state;
+| 
+|                      (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+| 
+|                      yy_current_state = yy_get_previous_state(  );
+| 
+|                      /* Okay, we're now positioned to make the NUL
+|                       * transition.  We couldn't have
+|                       * yy_get_previous_state() go ahead and do it
+|                       * for us because it doesn't know how to deal
+|                       * with the possibility of jamming (and we don't
+|                       * want to build jamming into it because then it
+|                       * will run more slowly).
+|                       */
+| 
+|                      yy_next_state = yy_try_NUL_trans( yy_current_state );
+| 
+|                      yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+| 
+|                      if ( yy_next_state )
+|                              {
+|                              /* Consume the NUL. */
+|                              yy_cp = ++(yy_c_buf_p);
+|                              yy_current_state = yy_next_state;
+|                              goto yy_match;
+|                              }
+| 
+|                      else
+|                              {
+|                              yy_cp = (yy_c_buf_p);
+|                              goto yy_find_action;
+|                              }
+|                      }
+| 
+|              else switch ( yy_get_next_buffer(  ) )
+|                      {
+|                      case EOB_ACT_END_OF_FILE:
+|                              {
+|                              (yy_did_buffer_switch_on_eof) = 0;
+| 
+|                              if ( yywrap( ) )
+|                                      {
+|                                      /* Note: because we've taken care in
+|                                       * yy_get_next_buffer() to have set up
+|                                       * yytext, we can now set up
+|                                       * yy_c_buf_p so that if some total
+|                                       * hoser (like flex itself) wants to
+|                                       * call the scanner after we return the
+|                                       * YY_NULL, it'll still work - another
+|                                       * YY_NULL will get returned.
+|                                       */
+|                                      (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+| 
+|                                      yy_act = YY_STATE_EOF(YY_START);
+|                                      goto do_action;
+|                                      }
+| 
+|                              else
+|                                      {
+|                                      if ( ! (yy_did_buffer_switch_on_eof) )
+|                                              YY_NEW_FILE;
+|                                      }
+|                              break;
+|                              }
+| 
+|                      case EOB_ACT_CONTINUE_SCAN:
+|                              (yy_c_buf_p) =
+|                                      (yytext_ptr) + yy_amount_of_matched_text;
+| 
+|                              yy_current_state = yy_get_previous_state(  );
+| 
+|                              yy_cp = (yy_c_buf_p);
+|                              yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+|                              goto yy_match;
+| 
+|                      case EOB_ACT_LAST_MATCH:
+|                              (yy_c_buf_p) =
+|                              &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+| 
+|                              yy_current_state = yy_get_previous_state(  );
+| 
+|                              yy_cp = (yy_c_buf_p);
+|                              yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+|                              goto yy_find_action;
+|                      }
+|              break;
+|              }
+| 
+|      default:
+|              YY_FATAL_ERROR(
+|                      "fatal flex scanner internal error--no action found" );
+|      } /* end of action switch */
+|              } /* end of scanning one token */
+|      } /* end of user's declarations */
+| } /* end of yylex */
+| 
+| /* yy_get_next_buffer - try to read in a new buffer
+|  *
+|  * Returns a code representing an action:
+|  *   EOB_ACT_LAST_MATCH -
+|  *   EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+|  *   EOB_ACT_END_OF_FILE - end of file
+|  */
+| static int yy_get_next_buffer (void)
+| {
+|      char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+|      char *source = (yytext_ptr);
+|      yy_size_t number_to_move, i;
+|      int ret_val;
+| 
+|      if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+|              YY_FATAL_ERROR(
+|              "fatal flex scanner internal error--end of buffer missed" );
+| 
+|      if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+|              { /* Don't try to fill the buffer, so this is an EOF. */
+|              if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+|                      {
+|                      /* We matched a single character, the EOB, so
+|                       * treat this as a final EOF.
+|                       */
+|                      return EOB_ACT_END_OF_FILE;
+|                      }
+| 
+|              else
+|                      {
+|                      /* We matched some text prior to the EOB, first
+|                       * process it.
+|                       */
+|                      return EOB_ACT_LAST_MATCH;
+|                      }
+|              }
+| 
+|      /* Try to read more data. */
+| 
+|      /* First move last chars to start of buffer. */
+|      number_to_move = (yy_size_t) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+| 
+|      for ( i = 0; i < number_to_move; ++i )
+|              *(dest++) = *(source++);
+| 
+|      if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+|              /* don't do the read, it's not guaranteed to return an EOF,
+|               * just force an EOF
+|               */
+|              YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+| 
+|      else
+|              {
+|                      yy_size_t num_to_read =
+|                      YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+| 
+|              while ( num_to_read <= 0 )
+|                      { /* Not enough room in the buffer - grow it. */
+| 
+|                      YY_FATAL_ERROR(
+| "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+| 
+|                      }
+| 
+|              if ( num_to_read > YY_READ_BUF_SIZE )
+|                      num_to_read = YY_READ_BUF_SIZE;
+| 
+|              /* Read in more data. */
+|              YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+|                      (yy_n_chars), num_to_read );
+| 
+|              YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+|              }
+| 
+|      if ( (yy_n_chars) == 0 )
+|              {
+|              if ( number_to_move == YY_MORE_ADJ )
+|                      {
+|                      ret_val = EOB_ACT_END_OF_FILE;
+|                      yyrestart(yyin  );
+|                      }
+| 
+|              else
+|                      {
+|                      ret_val = EOB_ACT_LAST_MATCH;
+|                      YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+|                              YY_BUFFER_EOF_PENDING;
+|                      }
+|              }
+| 
+|      else
+|              ret_val = EOB_ACT_CONTINUE_SCAN;
+| 
+|      if ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+|              /* Extend the array by 50%, plus the number we really need. */
+|              int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+|              YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+|              if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+|                      YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+|      }
+| 
+|      (yy_n_chars) += number_to_move;
+|      YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+|      YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+| 
+|      (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+| 
+|      return ret_val;
+| }
+| 
+| /* yy_get_previous_state - get the state just before the EOB char was reached */
+| 
+|     static yy_state_type yy_get_previous_state (void)
+| {
+|      yy_state_type yy_current_state;
+|      char *yy_cp;
+|     
+|      yy_current_state = (yy_start);
+| 
+|      (yy_state_ptr) = (yy_state_buf);
+|      *(yy_state_ptr)++ = yy_current_state;
+| 
+|      for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+|              {
+|              YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+|              while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+|                      {
+|                      yy_current_state = (int) yy_def[yy_current_state];
+|                      if ( yy_current_state >= 13 )
+|                              yy_c = yy_meta[(unsigned int) yy_c];
+|                      }
+|              yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+|              *(yy_state_ptr)++ = yy_current_state;
+|              }
+| 
+|      return yy_current_state;
+| }
+| 
+| /* yy_try_NUL_trans - try to make a transition on the NUL character
+|  *
+|  * synopsis
+|  *   next_state = yy_try_NUL_trans( current_state );
+|  */
+|     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+| {
+|      int yy_is_jam;
+|     
+|      YY_CHAR yy_c = 1;
+|      while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+|              {
+|              yy_current_state = (int) yy_def[yy_current_state];
+|              if ( yy_current_state >= 13 )
+|                      yy_c = yy_meta[(unsigned int) yy_c];
+|              }
+|      yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+|      yy_is_jam = (yy_current_state == 12);
+|      if ( ! yy_is_jam )
+|              *(yy_state_ptr)++ = yy_current_state;
+| 
+|              return yy_is_jam ? 0 : yy_current_state;
+| }
+| 
+| #ifndef YY_NO_UNPUT
+| 
+|     static void yyunput (int c, char * yy_bp )
+| {
+|      char *yy_cp;
+|     
+|     yy_cp = (yy_c_buf_p);
+| 
+|      /* undo effects of setting up yytext */
+|      *yy_cp = (yy_hold_char);
+| 
+|      if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+|              { /* need to shift things up to make room */
+|              /* +2 for EOB chars. */
+|              yy_size_t number_to_move = (yy_n_chars) + 2;
+|              char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+|                                      YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+|              char *source =
+|                              &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+| 
+|              while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+|                      *--dest = *--source;
+| 
+|              yy_cp += (int) (dest - source);
+|              yy_bp += (int) (dest - source);
+|              YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+|                      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+| 
+|              if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+|                      YY_FATAL_ERROR( "flex scanner push-back overflow" );
+|              }
+| 
+|      *--yy_cp = (char) c;
+| 
+|      (yytext_ptr) = yy_bp;
+|      (yy_hold_char) = *yy_cp;
+|      (yy_c_buf_p) = yy_cp;
+| }
+| 
+| #endif
+| 
+| #ifndef YY_NO_INPUT
+| #ifdef __cplusplus
+|     static int yyinput (void)
+| #else
+|     static int input  (void)
+| #endif
+| 
+| {
+|      int c;
+|     
+|      *(yy_c_buf_p) = (yy_hold_char);
+| 
+|      if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+|              {
+|              /* yy_c_buf_p now points to the character we want to return.
+|               * If this occurs *before* the EOB characters, then it's a
+|               * valid NUL; if not, then we've hit the end of the buffer.
+|               */
+|              if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+|                      /* This was really a NUL. */
+|                      *(yy_c_buf_p) = '\0';
+| 
+|              else
+|                      { /* need more input */
+|                      yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+|                      ++(yy_c_buf_p);
+| 
+|                      switch ( yy_get_next_buffer(  ) )
+|                              {
+|                              case EOB_ACT_LAST_MATCH:
+|                                      /* This happens because yy_g_n_b()
+|                                       * sees that we've accumulated a
+|                                       * token and flags that we need to
+|                                       * try matching the token before
+|                                       * proceeding.  But for input(),
+|                                       * there's no matching to consider.
+|                                       * So convert the EOB_ACT_LAST_MATCH
+|                                       * to EOB_ACT_END_OF_FILE.
+|                                       */
+| 
+|                                      /* Reset buffer status. */
+|                                      yyrestart(yyin );
+| 
+|                                      /*FALLTHROUGH*/
+| 
+|                              case EOB_ACT_END_OF_FILE:
+|                                      {
+|                                      if ( yywrap( ) )
+|                                              return EOF;
+| 
+|                                      if ( ! (yy_did_buffer_switch_on_eof) )
+|                                              YY_NEW_FILE;
+| #ifdef __cplusplus
+|                                      return yyinput();
+| #else
+|                                      return input();
+| #endif
+|                                      }
+| 
+|                              case EOB_ACT_CONTINUE_SCAN:
+|                                      (yy_c_buf_p) = (yytext_ptr) + offset;
+|                                      break;
+|                              }
+|                      }
+|              }
+| 
+|      c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
+|      *(yy_c_buf_p) = '\0';   /* preserve yytext */
+|      (yy_hold_char) = *++(yy_c_buf_p);
+| 
+|      return c;
+| }
+| #endif       /* ifndef YY_NO_INPUT */
+| 
+| /** Immediately switch to a different input stream.
+|  * @param input_file A readable stream.
+|  * 
+|  * @note This function does not reset the start condition to @c INITIAL .
+|  */
+|     void yyrestart  (FILE * input_file )
+| {
+|     
+|      if ( ! YY_CURRENT_BUFFER ){
+|         yyensure_buffer_stack ();
+|              YY_CURRENT_BUFFER_LVALUE =
+|             yy_create_buffer(yyin,YY_BUF_SIZE );
+|      }
+| 
+|      yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+|      yy_load_buffer_state( );
+| }
+| 
+| /** Switch to a different input buffer.
+|  * @param new_buffer The new input buffer.
+|  * 
+|  */
+|     void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+| {
+|     
+|      /* TODO. We should be able to replace this entire function body
+|       * with
+|       *              yypop_buffer_state();
+|       *              yypush_buffer_state(new_buffer);
+|      */
+|      yyensure_buffer_stack ();
+|      if ( YY_CURRENT_BUFFER == new_buffer )
+|              return;
+| 
+|      if ( YY_CURRENT_BUFFER )
+|              {
+|              /* Flush out information for old buffer. */
+|              *(yy_c_buf_p) = (yy_hold_char);
+|              YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+|              YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+|              }
+| 
+|      YY_CURRENT_BUFFER_LVALUE = new_buffer;
+|      yy_load_buffer_state( );
+| 
+|      /* We don't actually know whether we did this switch during
+|       * EOF (yywrap()) processing, but the only time this flag
+|       * is looked at is after yywrap() is called, so it's safe
+|       * to go ahead and always set it.
+|       */
+|      (yy_did_buffer_switch_on_eof) = 1;
+| }
+| 
+| static void yy_load_buffer_state  (void)
+| {
+|      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+|      (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+|      yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+|      (yy_hold_char) = *(yy_c_buf_p);
+| }
+| 
+| /** Allocate and initialize an input buffer state.
+|  * @param file A readable stream.
+|  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+|  * 
+|  * @return the allocated buffer state.
+|  */
+|     YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
+| {
+|      YY_BUFFER_STATE b;
+|     
+|      b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+|      if ( ! b )
+|              YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+| 
+|      b->yy_buf_size = (yy_size_t)size;
+| 
+|      /* yy_ch_buf has to be 2 characters longer than the size given because
+|       * we need to put in 2 end-of-buffer characters.
+|       */
+|      b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
+|      if ( ! b->yy_ch_buf )
+|              YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+| 
+|      b->yy_is_our_buffer = 1;
+| 
+|      yy_init_buffer(b,file );
+| 
+|      return b;
+| }
+| 
+| /** Destroy the buffer.
+|  * @param b a buffer created with yy_create_buffer()
+|  * 
+|  */
+|     void yy_delete_buffer (YY_BUFFER_STATE  b )
+| {
+|     
+|      if ( ! b )
+|              return;
+| 
+|      if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+|              YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+| 
+|      if ( b->yy_is_our_buffer )
+|              yyfree((void *) b->yy_ch_buf  );
+| 
+|      yyfree((void *) b  );
+| }
+| 
+| /* Initializes or reinitializes a buffer.
+|  * This function is sometimes called more than once on the same buffer,
+|  * such as during a yyrestart() or at EOF.
+|  */
+|     static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+| 
+| {
+|      int oerrno = errno;
+|     
+|      yy_flush_buffer(b );
+| 
+|      b->yy_input_file = file;
+|      b->yy_fill_buffer = 1;
+| 
+|     /* If b is the current buffer, then yy_init_buffer was _probably_
+|      * called from yyrestart() or through yy_get_next_buffer.
+|      * In that case, we don't want to reset the lineno or column.
+|      */
+|     if (b != YY_CURRENT_BUFFER){
+|         b->yy_bs_lineno = 1;
+|         b->yy_bs_column = 0;
+|     }
+| 
+|         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+|     
+|      errno = oerrno;
+| }
+| 
+| /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+|  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+|  * 
+|  */
+|     void yy_flush_buffer (YY_BUFFER_STATE  b )
+| {
+|      if ( ! b )
+|              return;
+| 
+|      b->yy_n_chars = 0;
+| 
+|      /* We always need two end-of-buffer characters.  The first causes
+|       * a transition to the end-of-buffer state.  The second causes
+|       * a jam in that state.
+|       */
+|      b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+|      b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+| 
+|      b->yy_buf_pos = &b->yy_ch_buf[0];
+| 
+|      b->yy_at_bol = 1;
+|      b->yy_buffer_status = YY_BUFFER_NEW;
+| 
+|      if ( b == YY_CURRENT_BUFFER )
+|              yy_load_buffer_state( );
+| }
+| 
+| /** Pushes the new state onto the stack. The new state becomes
+|  *  the current state. This function will allocate the stack
+|  *  if necessary.
+|  *  @param new_buffer The new state.
+|  *  
+|  */
+| void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+| {
+|      if (new_buffer == NULL)
+|              return;
+| 
+|      yyensure_buffer_stack();
+| 
+|      /* This block is copied from yy_switch_to_buffer. */
+|      if ( YY_CURRENT_BUFFER )
+|              {
+|              /* Flush out information for old buffer. */
+|              *(yy_c_buf_p) = (yy_hold_char);
+|              YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+|              YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+|              }
+| 
+|      /* Only push if top exists. Otherwise, replace top. */
+|      if (YY_CURRENT_BUFFER)
+|              (yy_buffer_stack_top)++;
+|      YY_CURRENT_BUFFER_LVALUE = new_buffer;
+| 
+|      /* copied from yy_switch_to_buffer. */
+|      yy_load_buffer_state( );
+|      (yy_did_buffer_switch_on_eof) = 1;
+| }
+| 
+| /** Removes and deletes the top of the stack, if present.
+|  *  The next element becomes the new top.
+|  *  
+|  */
+| void yypop_buffer_state (void)
+| {
+|      if (!YY_CURRENT_BUFFER)
+|              return;
+| 
+|      yy_delete_buffer(YY_CURRENT_BUFFER );
+|      YY_CURRENT_BUFFER_LVALUE = NULL;
+|      if ((yy_buffer_stack_top) > 0)
+|              --(yy_buffer_stack_top);
+| 
+|      if (YY_CURRENT_BUFFER) {
+|              yy_load_buffer_state( );
+|              (yy_did_buffer_switch_on_eof) = 1;
+|      }
+| }
+| 
+| /* Allocates the stack if it does not exist.
+|  *  Guarantees space for at least one push.
+|  */
+| static void yyensure_buffer_stack (void)
+| {
+|      yy_size_t num_to_alloc;
+|     
+|      if (!(yy_buffer_stack)) {
+| 
+|              /* First allocation is just for 2 elements, since we don't know if this
+|               * scanner will even need a stack. We use 2 instead of 1 to avoid an
+|               * immediate realloc on the next call.
+|          */
+|              num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+|              (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+|                                                              (num_to_alloc * sizeof(struct yy_buffer_state*)
+|                                                              );
+|              if ( ! (yy_buffer_stack) )
+|                      YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+|                                                                
+|              memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+|                              
+|              (yy_buffer_stack_max) = num_to_alloc;
+|              (yy_buffer_stack_top) = 0;
+|              return;
+|      }
+| 
+|      if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+| 
+|              /* Increase the buffer to prepare for a possible push. */
+|              yy_size_t grow_size = 8 /* arbitrary grow size */;
+| 
+|              num_to_alloc = (yy_buffer_stack_max) + grow_size;
+|              (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+|                                                              ((yy_buffer_stack),
+|                                                              num_to_alloc * sizeof(struct yy_buffer_state*)
+|                                                              );
+|              if ( ! (yy_buffer_stack) )
+|                      YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+| 
+|              /* zero only the new slots.*/
+|              memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+|              (yy_buffer_stack_max) = num_to_alloc;
+|      }
+| }
+| 
+| /** Setup the input buffer state to scan directly from a user-specified character buffer.
+|  * @param base the character buffer
+|  * @param size the size in bytes of the character buffer
+|  * 
+|  * @return the newly allocated buffer state object. 
+|  */
+| YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
+| {
+|      YY_BUFFER_STATE b;
+|     
+|      if ( size < 2 ||
+|           base[size-2] != YY_END_OF_BUFFER_CHAR ||
+|           base[size-1] != YY_END_OF_BUFFER_CHAR )
+|              /* They forgot to leave room for the EOB's. */
+|              return 0;
+| 
+|      b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
+|      if ( ! b )
+|              YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+| 
+|      b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+|      b->yy_buf_pos = b->yy_ch_buf = base;
+|      b->yy_is_our_buffer = 0;
+|      b->yy_input_file = 0;
+|      b->yy_n_chars = b->yy_buf_size;
+|      b->yy_is_interactive = 0;
+|      b->yy_at_bol = 1;
+|      b->yy_fill_buffer = 0;
+|      b->yy_buffer_status = YY_BUFFER_NEW;
+| 
+|      yy_switch_to_buffer(b  );
+| 
+|      return b;
+| }
+| 
+| /** Setup the input buffer state to scan a string. The next call to yylex() will
+|  * scan from a @e copy of @a str.
+|  * @param yystr a NUL-terminated string to scan
+|  * 
+|  * @return the newly allocated buffer state object.
+|  * @note If you want to scan bytes that may contain NUL values, then use
+|  *       yy_scan_bytes() instead.
+|  */
+| YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+| {
+|     
+|      return yy_scan_bytes(yystr,strlen(yystr) );
+| }
+| 
+| /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+|  * scan from a @e copy of @a bytes.
+|  * @param yybytes the byte buffer to scan
+|  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+|  * 
+|  * @return the newly allocated buffer state object.
+|  */
+| YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+| {
+|      YY_BUFFER_STATE b;
+|      char *buf;
+|      yy_size_t n;
+|      yy_size_t i;
+|     
+|      /* Get memory for full buffer, including space for trailing EOB's. */
+|      n = _yybytes_len + 2;
+|      buf = (char *) yyalloc(n  );
+|      if ( ! buf )
+|              YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+| 
+|      for ( i = 0; i < _yybytes_len; ++i )
+|              buf[i] = yybytes[i];
+| 
+|      buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+| 
+|      b = yy_scan_buffer(buf,n );
+|      if ( ! b )
+|              YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+| 
+|      /* It's okay to grow etc. this buffer, and we should throw it
+|       * away when we're done.
+|       */
+|      b->yy_is_our_buffer = 1;
+| 
+|      return b;
+| }
+| 
+| #ifndef YY_EXIT_FAILURE
+| #define YY_EXIT_FAILURE 2
+| #endif
+| 
+| static void yy_fatal_error (yyconst char* msg )
+| {
+|                      (void) fprintf( stderr, "%s\n", msg );
+|      exit( YY_EXIT_FAILURE );
+| }
+| 
+| /* Redefine yyless() so it works in section 3 code. */
+| 
+| #undef yyless
+| #define yyless(n) \
+|      do \
+|              { \
+|              /* Undo effects of setting up yytext. */ \
+|         int yyless_macro_arg = (n); \
+|         YY_LESS_LINENO(yyless_macro_arg);\
+|              yytext[yyleng] = (yy_hold_char); \
+|              (yy_c_buf_p) = yytext + yyless_macro_arg; \
+|              (yy_hold_char) = *(yy_c_buf_p); \
+|              *(yy_c_buf_p) = '\0'; \
+|              yyleng = yyless_macro_arg; \
+|              } \
+|      while ( 0 )
+| 
+| /* Accessor  methods (get/set functions) to struct members. */
+| 
+| /** Get the current line number.
+|  * 
+|  */
+| int yyget_lineno  (void)
+| {
+|         
+|     return yylineno;
+| }
+| 
+| /** Get the input stream.
+|  * 
+|  */
+| FILE *yyget_in  (void)
+| {
+|         return yyin;
+| }
+| 
+| /** Get the output stream.
+|  * 
+|  */
+| FILE *yyget_out  (void)
+| {
+|         return yyout;
+| }
+| 
+| /** Get the length of the current token.
+|  * 
+|  */
+| yy_size_t yyget_leng  (void)
+| {
+|         return yyleng;
+| }
+| 
+| /** Get the current token.
+|  * 
+|  */
+| 
+| char *yyget_text  (void)
+| {
+|         return yytext;
+| }
+| 
+| /** Set the current line number.
+|  * @param _line_number line number
+|  * 
+|  */
+| void yyset_lineno (int  _line_number )
+| {
+|     
+|     yylineno = _line_number;
+| }
+| 
+| /** Set the input stream. This does not discard the current
+|  * input buffer.
+|  * @param _in_str A readable stream.
+|  * 
+|  * @see yy_switch_to_buffer
+|  */
+| void yyset_in (FILE *  _in_str )
+| {
+|         yyin = _in_str ;
+| }
+| 
+| void yyset_out (FILE *  _out_str )
+| {
+|         yyout = _out_str ;
+| }
+| 
+| int yyget_debug  (void)
+| {
+|         return yy_flex_debug;
+| }
+| 
+| void yyset_debug (int  _bdebug )
+| {
+|         yy_flex_debug = _bdebug ;
+| }
+| 
+| static int yy_init_globals (void)
+| {
+|         /* Initialization is the same as for the non-reentrant scanner.
+|      * This function is called from yylex_destroy(), so don't allocate here.
+|      */
+| 
+|     (yy_buffer_stack) = 0;
+|     (yy_buffer_stack_top) = 0;
+|     (yy_buffer_stack_max) = 0;
+|     (yy_c_buf_p) = (char *) 0;
+|     (yy_init) = 0;
+|     (yy_start) = 0;
+| 
+|     (yy_state_buf) = 0;
+|     (yy_state_ptr) = 0;
+|     (yy_full_match) = 0;
+|     (yy_lp) = 0;
+| 
+| /* Defined in main.c */
+| #ifdef YY_STDINIT
+|     yyin = stdin;
+|     yyout = stdout;
+| #else
+|     yyin = (FILE *) 0;
+|     yyout = (FILE *) 0;
+| #endif
+| 
+|     /* For future reference: Set errno on error, since we are called by
+|      * yylex_init()
+|      */
+|     return 0;
+| }
+| 
+| /* yylex_destroy is for both reentrant and non-reentrant scanners. */
+| int yylex_destroy  (void)
+| {
+|     
+|     /* Pop the buffer stack, destroying each element. */
+|      while(YY_CURRENT_BUFFER){
+|              yy_delete_buffer(YY_CURRENT_BUFFER  );
+|              YY_CURRENT_BUFFER_LVALUE = NULL;
+|              yypop_buffer_state();
+|      }
+| 
+|      /* Destroy the stack itself. */
+|      yyfree((yy_buffer_stack) );
+|      (yy_buffer_stack) = NULL;
+| 
+|     yyfree ( (yy_state_buf) );
+|     (yy_state_buf)  = NULL;
+| 
+|     /* Reset the globals. This is important in a non-reentrant scanner so the next time
+|      * yylex() is called, initialization will occur. */
+|     yy_init_globals( );
+| 
+|     return 0;
+| }
+| 
+| /*
+|  * Internal utility routines.
+|  */
+| 
+| #ifndef yytext_ptr
+| static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+| {
+|              
+|      int i;
+|      for ( i = 0; i < n; ++i )
+|              s1[i] = s2[i];
+| }
+| #endif
+| 
+| #ifdef YY_NEED_STRLEN
+| static int yy_flex_strlen (yyconst char * s )
+| {
+|      int n;
+|      for ( n = 0; s[n]; ++n )
+|              ;
+| 
+|      return n;
+| }
+| #endif
+| 
+| void *yyalloc (yy_size_t  size )
+| {
+|                      return (void *) malloc( size );
+| }
+| 
+| void *yyrealloc  (void * ptr, yy_size_t  size )
+| {
+|              
+|      /* The cast to (char *) in the following accommodates both
+|       * implementations that use char* generic pointers, and those
+|       * that use void* generic pointers.  It works with the latter
+|       * because both ANSI C and C++ allow castless assignment from
+|       * any pointer type to void*, and deal with argument conversions
+|       * as though doing an assignment.
+|       */
+|      return (void *) realloc( (char *) ptr, size );
+| }
+| 
+| void yyfree (void * ptr )
+| {
+|                      free( (char *) ptr );   /* see yyrealloc() for (char *) cast */
+| }
+| 
+| #define YYTABLES_NAME "yytables"
+| 
+| #line 10 "conftest.l"
+| 
+| 
+| #ifdef YYTEXT_POINTER
+| extern char *yytext;
+| #endif
+| int
+| main (void)
+| {
+|   return ! yylex () + ! yywrap ();
+| }
+configure:4683: gcc -o conftest -g -O2   conftest.c -lfl  >&5
+configure:4683: $? = 0
+configure:4693: result: -lfl
+configure:4699: checking whether yytext is a pointer
+configure:4716: gcc -o conftest -g -O2   conftest.c -lfl  >&5
+configure:4716: $? = 0
+configure:4724: result: yes
+configure:4786: checking for ar
+configure:4802: found /usr/bin/ar
+configure:4813: result: ar
+configure:4839: checking the archiver (ar) interface
+configure:4855: gcc -c -g -O2  conftest.c >&5
+configure:4855: $? = 0
+configure:4857: ar cru libconftest.a conftest.o >&5
+ar: `u' modifier ignored since `D' is the default (see `U')
+configure:4860: $? = 0
+configure:4888: result: ar
+configure:4967: checking for g++
+configure:4983: found /usr/bin/g++
+configure:4994: result: g++
+configure:5021: checking for C++ compiler version
+configure:5030: g++ --version >&5
+g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
+Copyright (C) 2015 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.
+
+configure:5041: $? = 0
+configure:5030: g++ -v >&5
+Using built-in specs.
+COLLECT_GCC=g++
+COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
+Target: x86_64-linux-gnu
+Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.9' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+Thread model: posix
+gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 
+configure:5041: $? = 0
+configure:5030: g++ -V >&5
+g++: error: unrecognized command line option '-V'
+g++: fatal error: no input files
+compilation terminated.
+configure:5041: $? = 1
+configure:5030: g++ -qversion >&5
+g++: error: unrecognized command line option '-qversion'
+g++: fatal error: no input files
+compilation terminated.
+configure:5041: $? = 1
+configure:5045: checking whether we are using the GNU C++ compiler
+configure:5064: g++ -c   conftest.cpp >&5
+configure:5064: $? = 0
+configure:5073: result: yes
+configure:5082: checking whether g++ accepts -g
+configure:5102: g++ -c -g  conftest.cpp >&5
+configure:5102: $? = 0
+configure:5143: result: yes
+configure:5168: checking dependency style of g++
+configure:5279: result: gcc3
+configure:5325: checking build system type
+configure:5339: result: x86_64-pc-linux-gnu
+configure:5359: checking host system type
+configure:5372: result: x86_64-pc-linux-gnu
+configure:5413: checking how to print strings
+configure:5440: result: printf
+configure:5461: checking for a sed that does not truncate output
+configure:5525: result: /bin/sed
+configure:5543: checking for grep that handles long lines and -e
+configure:5601: result: /bin/grep
+configure:5606: checking for egrep
+configure:5668: result: /bin/grep -E
+configure:5673: checking for fgrep
+configure:5735: result: /bin/grep -F
+configure:5770: checking for ld used by gcc
+configure:5837: result: /usr/bin/ld
+configure:5844: checking if the linker (/usr/bin/ld) is GNU ld
+configure:5859: result: yes
+configure:5871: checking for BSD- or MS-compatible name lister (nm)
+configure:5925: result: /usr/bin/nm -B
+configure:6055: checking the name lister (/usr/bin/nm -B) interface
+configure:6062: gcc -c -g -O2  conftest.c >&5
+configure:6065: /usr/bin/nm -B "conftest.o"
+configure:6068: output
+0000000000000000 B some_variable
+configure:6075: result: BSD nm
+configure:6079: checking the maximum length of command line arguments
+configure:6210: result: 1572864
+configure:6258: checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format
+configure:6298: result: func_convert_file_noop
+configure:6305: checking how to convert x86_64-pc-linux-gnu file names to toolchain format
+configure:6325: result: func_convert_file_noop
+configure:6332: checking for /usr/bin/ld option to reload object files
+configure:6339: result: -r
+configure:6413: checking for objdump
+configure:6429: found /usr/bin/objdump
+configure:6440: result: objdump
+configure:6472: checking how to recognize dependent libraries
+configure:6672: result: pass_all
+configure:6757: checking for dlltool
+configure:6787: result: no
+configure:6817: checking how to associate runtime and link libraries
+configure:6844: result: printf %s\n
+configure:6968: checking for archiver @FILE support
+configure:6985: gcc -c -g -O2  conftest.c >&5
+configure:6985: $? = 0
+configure:6988: ar cru libconftest.a @conftest.lst >&5
+ar: `u' modifier ignored since `D' is the default (see `U')
+configure:6991: $? = 0
+configure:6996: ar cru libconftest.a @conftest.lst >&5
+ar: `u' modifier ignored since `D' is the default (see `U')
+ar: conftest.o: No such file or directory
+configure:6999: $? = 1
+configure:7011: result: @
+configure:7069: checking for strip
+configure:7085: found /usr/bin/strip
+configure:7096: result: strip
+configure:7168: checking for ranlib
+configure:7184: found /usr/bin/ranlib
+configure:7195: result: ranlib
+configure:7297: checking command to parse /usr/bin/nm -B output from gcc object
+configure:7450: gcc -c -g -O2  conftest.c >&5
+configure:7453: $? = 0
+configure:7457: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm
+configure:7460: $? = 0
+configure:7526: gcc -o conftest -g -O2   conftest.c conftstm.o >&5
+configure:7529: $? = 0
+configure:7567: result: ok
+configure:7614: checking for sysroot
+configure:7644: result: no
+configure:7651: checking for a working dd
+configure:7689: result: /bin/dd
+configure:7693: checking how to truncate binary pipes
+configure:7708: result: /bin/dd bs=4096 count=1
+configure:7844: gcc -c -g -O2  conftest.c >&5
+configure:7847: $? = 0
+configure:8037: checking for mt
+configure:8053: found /bin/mt
+configure:8064: result: mt
+configure:8087: checking if mt is a manifest tool
+configure:8093: mt '-?'
+configure:8101: result: no
+configure:8774: checking for ANSI C header files
+configure:8794: gcc -c -g -O2  conftest.c >&5
+configure:8794: $? = 0
+configure:8867: gcc -o conftest -g -O2   conftest.c  >&5
+configure:8867: $? = 0
+configure:8867: ./conftest
+configure:8867: $? = 0
+configure:8878: result: yes
+configure:8891: checking for sys/types.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for sys/stat.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for stdlib.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for string.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for memory.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for strings.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for inttypes.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for stdint.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8891: checking for unistd.h
+configure:8891: gcc -c -g -O2  conftest.c >&5
+configure:8891: $? = 0
+configure:8891: result: yes
+configure:8905: checking for dlfcn.h
+configure:8905: gcc -c -g -O2  conftest.c >&5
+configure:8905: $? = 0
+configure:8905: result: yes
+configure:9172: checking for objdir
+configure:9187: result: .libs
+configure:9451: checking if gcc supports -fno-rtti -fno-exceptions
+configure:9469: gcc -c -g -O2  -fno-rtti -fno-exceptions conftest.c >&5
+cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C
+configure:9473: $? = 0
+configure:9486: result: no
+configure:9844: checking for gcc option to produce PIC
+configure:9851: result: -fPIC -DPIC
+configure:9859: checking if gcc PIC flag -fPIC -DPIC works
+configure:9877: gcc -c -g -O2  -fPIC -DPIC -DPIC conftest.c >&5
+configure:9881: $? = 0
+configure:9894: result: yes
+configure:9923: checking if gcc static flag -static works
+configure:9951: result: yes
+configure:9966: checking if gcc supports -c -o file.o
+configure:9987: gcc -c -g -O2  -o out/conftest2.o conftest.c >&5
+configure:9991: $? = 0
+configure:10013: result: yes
+configure:10021: checking if gcc supports -c -o file.o
+configure:10068: result: yes
+configure:10101: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:11364: result: yes
+configure:11401: checking whether -lc should be explicitly linked in
+configure:11409: gcc -c -g -O2  conftest.c >&5
+configure:11412: $? = 0
+configure:11427: gcc -shared  -fPIC -DPIC conftest.o  -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep  -lc  \>/dev/null 2\>\&1
+configure:11430: $? = 0
+configure:11444: result: no
+configure:11604: checking dynamic linker characteristics
+configure:12185: gcc -o conftest -g -O2   -Wl,-rpath -Wl,/foo conftest.c  >&5
+configure:12185: $? = 0
+configure:12434: result: GNU/Linux ld.so
+configure:12556: checking how to hardcode library paths into programs
+configure:12581: result: immediate
+configure:13129: checking whether stripping libraries is possible
+configure:13134: result: yes
+configure:13169: checking if libtool supports shared libraries
+configure:13171: result: yes
+configure:13174: checking whether to build shared libraries
+configure:13199: result: yes
+configure:13202: checking whether to build static libraries
+configure:13206: result: yes
+configure:13229: checking how to run the C++ preprocessor
+configure:13256: g++ -E  conftest.cpp
+configure:13256: $? = 0
+configure:13270: g++ -E  conftest.cpp
+conftest.cpp:24:28: fatal error: ac_nonexistent.h: No such file or directory
+compilation terminated.
+configure:13270: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:13295: result: g++ -E
+configure:13315: g++ -E  conftest.cpp
+configure:13315: $? = 0
+configure:13329: g++ -E  conftest.cpp
+conftest.cpp:24:28: fatal error: ac_nonexistent.h: No such file or directory
+compilation terminated.
+configure:13329: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:13491: checking for ld used by g++
+configure:13558: result: /usr/bin/ld -m elf_x86_64
+configure:13565: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld
+configure:13580: result: yes
+configure:13635: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:14708: result: yes
+configure:14744: g++ -c -std=c++11  conftest.cpp >&5
+configure:14747: $? = 0
+configure:15228: checking for g++ option to produce PIC
+configure:15235: result: -fPIC -DPIC
+configure:15243: checking if g++ PIC flag -fPIC -DPIC works
+configure:15261: g++ -c -std=c++11  -fPIC -DPIC -DPIC conftest.cpp >&5
+configure:15265: $? = 0
+configure:15278: result: yes
+configure:15301: checking if g++ static flag -static works
+configure:15329: result: yes
+configure:15341: checking if g++ supports -c -o file.o
+configure:15362: g++ -c -std=c++11  -o out/conftest2.o conftest.cpp >&5
+configure:15366: $? = 0
+configure:15388: result: yes
+configure:15393: checking if g++ supports -c -o file.o
+configure:15440: result: yes
+configure:15470: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries
+configure:15513: result: yes
+configure:15654: checking dynamic linker characteristics
+configure:16411: result: GNU/Linux ld.so
+configure:16476: checking how to hardcode library paths into programs
+configure:16501: result: immediate
+configure:16574: checking whether make supports nested variables
+configure:16591: result: yes
+configure:16626: checking whether C compiler accepts -Wall
+configure:16645: gcc -c -g -O2  -Wall  conftest.c >&5
+configure:16645: $? = 0
+configure:16653: result: yes
+configure:16661: checking whether C compiler accepts -Wcast-qual
+configure:16680: gcc -c -g -O2 -Wall  -Wcast-qual  conftest.c >&5
+configure:16680: $? = 0
+configure:16688: result: yes
+configure:16696: checking whether C compiler accepts -Wchar-subscripts
+configure:16715: gcc -c -g -O2 -Wall -Wcast-qual  -Wchar-subscripts  conftest.c >&5
+configure:16715: $? = 0
+configure:16723: result: yes
+configure:16731: checking whether C compiler accepts -Wmissing-prototypes
+configure:16750: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts  -Wmissing-prototypes  conftest.c >&5
+configure:16750: $? = 0
+configure:16758: result: yes
+configure:16766: checking whether C compiler accepts -Wmissing-declarations
+configure:16785: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes  -Wmissing-declarations  conftest.c >&5
+configure:16785: $? = 0
+configure:16793: result: yes
+configure:16802: checking whether C compiler accepts -Wno-error=attributes
+configure:16821: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations  -Wno-error=attributes  conftest.c >&5
+configure:16821: $? = 0
+configure:16829: result: yes
+configure:16837: checking whether C compiler accepts -Wno-error=cast-align
+configure:16856: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes  -Wno-error=cast-align  conftest.c >&5
+configure:16856: $? = 0
+configure:16864: result: yes
+configure:16872: checking whether C compiler accepts -Wno-error=visibility
+configure:16891: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align  -Wno-error=visibility  conftest.c >&5
+cc1: error: -Werror=visibility: no option -Wvisibility
+configure:16891: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:16899: result: no
+configure:16907: checking whether C compiler accepts -Wno-error=parentheses-equality
+configure:16926: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align  -Wno-error=parentheses-equality  conftest.c >&5
+cc1: error: -Werror=parentheses-equality: no option -Wparentheses-equality
+configure:16926: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:16934: result: no
+configure:16942: checking whether C compiler accepts -std=gnu99
+configure:16961: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align  -std=gnu99  conftest.c >&5
+configure:16961: $? = 0
+configure:16969: result: yes
+configure:16978: checking whether C compiler accepts -Wno-error=unused-variable
+configure:16997: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -Wno-error=unused-variable  conftest.c >&5
+configure:16997: $? = 0
+configure:17005: result: yes
+configure:17028: checking whether to build with code coverage support
+configure:17048: result: no
+configure:17497: checking whether C compiler accepts -std=c89
+configure:17516: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -std=c89  conftest.c >&5
+configure:17516: $? = 0
+configure:17524: result: yes
+configure:17532: checking whether C compiler accepts -Wpedantic
+configure:17551: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99 -Werror -Wpedantic  conftest.c >&5
+configure:17551: $? = 0
+configure:17559: result: yes
+configure:17653: checking whether C compiler accepts -Wno-long-long
+configure:17672: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -Wno-long-long  conftest.c >&5
+configure:17672: $? = 0
+configure:17680: result: yes
+configure:17775: checking whether C compiler and linker accept -fsanitize=undefined
+configure:17795: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fsanitize=undefined   conftest.c  >&5
+configure:17795: $? = 0
+configure:17804: result: yes
+configure:17821: checking whether C compiler accepts -fno-sanitize-recover=undefined
+configure:17840: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fno-sanitize-recover=undefined  conftest.c >&5
+configure:17840: $? = 0
+configure:17848: result: yes
+configure:17857: checking whether C compiler and linker accept -fsanitize=unsigned-integer-overflow
+configure:17876: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fsanitize=unsigned-integer-overflow   conftest.c  >&5
+gcc: error: unrecognized argument to -fsanitize= option: 'unsigned-integer-overflow'
+configure:17876: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| int test(unsigned); int test(unsigned n) { return n + 1; }
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:17885: result: no
+configure:17893: checking whether C compiler accepts -fno-sanitize-recover=unsigned-integer-overflow
+configure:17912: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fno-sanitize-recover=unsigned-integer-overflow  conftest.c >&5
+cc1: error: unrecognized argument to -fsanitize-recover= option: 'unsigned-integer-overflow'
+configure:17912: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:17920: result: no
+configure:17929: checking whether C compiler and linker accept -fsanitize=nullability
+configure:17948: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fsanitize=nullability   conftest.c  >&5
+gcc: error: unrecognized argument to -fsanitize= option: 'nullability'
+configure:17948: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:17957: result: no
+configure:17965: checking whether C compiler accepts -fno-sanitize-recover=nullability
+configure:17984: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fno-sanitize-recover=nullability  conftest.c >&5
+cc1: error: unrecognized argument to -fsanitize-recover= option: 'nullability'
+configure:17984: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| /* end confdefs.h.  */
+| 
+| int
+| main ()
+| {
+| 
+|   ;
+|   return 0;
+| }
+configure:17992: result: no
+configure:18001: checking whether C compiler accepts -fno-omit-frame-pointer
+configure:18020: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fno-omit-frame-pointer  conftest.c >&5
+configure:18020: $? = 0
+configure:18028: result: yes
+configure:18049: checking whether C compiler and linker accept -fsanitize=address
+configure:18068: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fsanitize=address   conftest.c  >&5
+configure:18068: $? = 0
+configure:18077: result: yes
+configure:18116: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address   conftest.c  >&5
+configure:18116: $? = 0
+configure:18116: ./conftest
+configure:18116: $? = 0
+configure:18128: checking whether C compiler accepts -fno-omit-frame-pointer
+configure:18155: result: yes
+configure:18230: checking for ANSI C header files
+configure:18334: result: yes
+configure:18344: checking sys/param.h usability
+configure:18344: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18344: $? = 0
+configure:18344: result: yes
+configure:18344: checking sys/param.h presence
+configure:18344: gcc -E  conftest.c
+configure:18344: $? = 0
+configure:18344: result: yes
+configure:18344: checking for sys/param.h
+configure:18344: result: yes
+configure:18355: checking whether byte ordering is bigendian
+configure:18370: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c:27:9: error: unknown type name 'not'
+         not a universal capable compiler
+         ^
+conftest.c:27:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal'
+         not a universal capable compiler
+               ^
+conftest.c:27:15: error: unknown type name 'universal'
+configure:18370: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| /* end confdefs.h.  */
+| #ifndef __APPLE_CC__
+|             not a universal capable compiler
+|           #endif
+|           typedef int dummy;
+| 
+configure:18415: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18415: $? = 0
+configure:18433: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:33:4: error: unknown type name 'not'
+    not big endian
+    ^
+conftest.c:33:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian'
+    not big endian
+            ^
+configure:18433: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| /* end confdefs.h.  */
+| #include <sys/types.h>
+|              #include <sys/param.h>
+| 
+| int
+| main ()
+| {
+| #if BYTE_ORDER != BIG_ENDIAN
+|               not big endian
+|              #endif
+| 
+|   ;
+|   return 0;
+| }
+configure:18561: result: no
+configure:18579: checking for off_t
+configure:18579: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18579: $? = 0
+configure:18579: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:62:20: error: expected expression before ')' token
+ if (sizeof ((off_t)))
+                    ^
+configure:18579: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| /* end confdefs.h.  */
+| #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
+| int
+| main ()
+| {
+| if (sizeof ((off_t)))
+|          return 0;
+|   ;
+|   return 0;
+| }
+configure:18579: result: yes
+configure:18590: checking for size_t
+configure:18590: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18590: $? = 0
+configure:18590: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:62:21: error: expected expression before ')' token
+ if (sizeof ((size_t)))
+                     ^
+configure:18590: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| /* end confdefs.h.  */
+| #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
+| int
+| main ()
+| {
+| if (sizeof ((size_t)))
+|          return 0;
+|   ;
+|   return 0;
+| }
+configure:18590: result: yes
+configure:18601: checking whether struct tm is in sys/time.h or time.h
+configure:18621: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18621: $? = 0
+configure:18628: result: time.h
+configure:18636: checking for __int128
+configure:18636: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18636: $? = 0
+configure:18636: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:62:23: error: expected expression before ')' token
+ if (sizeof ((__int128)))
+                       ^
+configure:18636: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| /* end confdefs.h.  */
+| #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
+| int
+| main ()
+| {
+| if (sizeof ((__int128)))
+|          return 0;
+|   ;
+|   return 0;
+| }
+configure:18636: result: yes
+configure:18643: checking for intmax_t
+configure:18643: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18643: $? = 0
+configure:18643: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:63:23: error: expected expression before ')' token
+ if (sizeof ((intmax_t)))
+                       ^
+configure:18643: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| #define HAVE_128_BIT_INT 1
+| /* end confdefs.h.  */
+| #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
+| int
+| main ()
+| {
+| if (sizeof ((intmax_t)))
+|          return 0;
+|   ;
+|   return 0;
+| }
+configure:18643: result: yes
+configure:18659: checking size of void *
+configure:18664: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18664: $? = 0
+configure:18664: ./conftest
+configure:18664: $? = 0
+configure:18678: result: 8
+configure:18697: checking for library containing getopt
+configure:18728: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18728: $? = 0
+configure:18745: result: none required
+configure:18757: checking for strtoimax
+configure:18757: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18757: $? = 0
+configure:18757: result: yes
+configure:18757: checking for strtoll
+configure:18757: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18757: $? = 0
+configure:18757: result: yes
+configure:18768: checking for mergesort
+configure:18768: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+/tmp/ccH8gUH5.o: In function `main':
+/home/nokia/mouse07410/asn1c/conftest.c:64: undefined reference to `mergesort'
+collect2: error: ld returned 1 exit status
+configure:18768: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| #define HAVE_128_BIT_INT 1
+| #define SIZEOF_VOID_P 8
+| #define HAVE_STRTOIMAX 1
+| #define HAVE_STRTOLL 1
+| /* end confdefs.h.  */
+| /* Define mergesort to an innocuous variant, in case <limits.h> declares mergesort.
+|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+| #define mergesort innocuous_mergesort
+| 
+| /* System header to define __stub macros and hopefully few prototypes,
+|     which can conflict with char mergesort (); 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 mergesort
+| 
+| /* 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 mergesort ();
+| /* 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_mergesort || defined __stub___mergesort
+| choke me
+| #endif
+| 
+| int
+| main ()
+| {
+| return mergesort ();
+|   ;
+|   return 0;
+| }
+configure:18768: result: no
+configure:18779: checking for mkstemps
+configure:18779: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18779: $? = 0
+configure:18779: result: yes
+configure:18790: checking for timegm
+configure:18790: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18790: $? = 0
+configure:18790: result: yes
+configure:18799: checking whether strcasecmp is declared
+configure:18799: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+configure:18799: $? = 0
+configure:18799: result: yes
+configure:18810: checking whether vasprintf is declared
+configure:18810: gcc -c -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99  conftest.c >&5
+conftest.c: In function 'main':
+conftest.c:73:10: error: 'vasprintf' undeclared (first use in this function)
+   (void) vasprintf;
+          ^
+conftest.c:73:10: note: each undeclared identifier is reported only once for each function it appears in
+configure:18810: $? = 1
+configure: failed program was:
+| /* confdefs.h */
+| #define PACKAGE_NAME "asn1c"
+| #define PACKAGE_TARNAME "asn1c"
+| #define PACKAGE_VERSION "0.9.29"
+| #define PACKAGE_STRING "asn1c 0.9.29"
+| #define PACKAGE_BUGREPORT "vlm@lionet.info"
+| #define PACKAGE_URL ""
+| #define PACKAGE "asn1c"
+| #define VERSION "0.9.29"
+| #define YYTEXT_POINTER 1
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_TYPES_H 1
+| #define HAVE_SYS_STAT_H 1
+| #define HAVE_STDLIB_H 1
+| #define HAVE_STRING_H 1
+| #define HAVE_MEMORY_H 1
+| #define HAVE_STRINGS_H 1
+| #define HAVE_INTTYPES_H 1
+| #define HAVE_STDINT_H 1
+| #define HAVE_UNISTD_H 1
+| #define HAVE_DLFCN_H 1
+| #define LT_OBJDIR ".libs/"
+| #define STDC_HEADERS 1
+| #define HAVE_SYS_PARAM_H 1
+| #define HAVE_128_BIT_INT 1
+| #define SIZEOF_VOID_P 8
+| #define HAVE_STRTOIMAX 1
+| #define HAVE_STRTOLL 1
+| #define HAVE_MKSTEMPS 1
+| #define HAVE_TIMEGM 1
+| #define HAVE_DECL_STRCASECMP 1
+| /* end confdefs.h.  */
+| #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
+| int
+| main ()
+| {
+| #ifndef vasprintf
+| #ifdef __cplusplus
+|   (void) vasprintf;
+| #else
+|   (void) vasprintf;
+| #endif
+| #endif
+| 
+|   ;
+|   return 0;
+| }
+configure:18810: result: no
+configure:18839: gcc -o conftest -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99   conftest.c  >&5
+configure:18839: $? = 0
+configure:18849: checking for pandoc
+configure:18882: result: no
+configure:19007: checking that generated files are newer than configure
+configure:19013: result: done
+configure:19057: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by asn1c config.status 0.9.29, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status 
+
+on blueman-HP-ZBook-15
+
+config.status:1308: creating tests/tests-c-compiler/check-src/Makefile
+config.status:1308: creating tests/tests-asn1c-compiler/Makefile
+config.status:1308: creating tests/tests-asn1c-smoke/Makefile
+config.status:1308: creating tests/tests-randomized/Makefile
+config.status:1308: creating tests/tests-c-compiler/Makefile
+config.status:1308: creating tests/tests-skeletons/Makefile
+config.status:1308: creating libasn1compiler/Makefile
+config.status:1308: creating libasn1common/Makefile
+config.status:1308: creating libasn1parser/Makefile
+config.status:1308: creating libasn1print/Makefile
+config.status:1308: creating libasn1fix/Makefile
+config.status:1308: creating doc/docsrc/Makefile
+config.status:1308: creating skeletons/Makefile
+config.status:1308: creating examples/Makefile
+config.status:1308: creating doc/man/Makefile
+config.status:1308: creating tests/Makefile
+config.status:1308: creating asn1c/Makefile
+config.status:1308: creating doc/Makefile
+config.status:1308: creating Makefile
+config.status:1308: creating config.h
+config.status:1537: executing depfiles commands
+config.status:1537: executing libtool commands
+
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+
+ac_cv_build=x86_64-pc-linux-gnu
+ac_cv_c_bigendian=no
+ac_cv_c_compiler_gnu=yes
+ac_cv_cxx_compiler_gnu=yes
+ac_cv_env_CCC_set=
+ac_cv_env_CCC_value=
+ac_cv_env_CC_set=
+ac_cv_env_CC_value=
+ac_cv_env_CFLAGS_set=
+ac_cv_env_CFLAGS_value=
+ac_cv_env_CPPFLAGS_set=
+ac_cv_env_CPPFLAGS_value=
+ac_cv_env_CPP_set=
+ac_cv_env_CPP_value=
+ac_cv_env_CXXCPP_set=
+ac_cv_env_CXXCPP_value=
+ac_cv_env_CXXFLAGS_set=
+ac_cv_env_CXXFLAGS_value=
+ac_cv_env_CXX_set=
+ac_cv_env_CXX_value=
+ac_cv_env_LDFLAGS_set=
+ac_cv_env_LDFLAGS_value=
+ac_cv_env_LIBS_set=
+ac_cv_env_LIBS_value=
+ac_cv_env_LT_SYS_LIBRARY_PATH_set=
+ac_cv_env_LT_SYS_LIBRARY_PATH_value=
+ac_cv_env_YACC_set=
+ac_cv_env_YACC_value=
+ac_cv_env_YFLAGS_set=
+ac_cv_env_YFLAGS_value=
+ac_cv_env_build_alias_set=
+ac_cv_env_build_alias_value=
+ac_cv_env_host_alias_set=
+ac_cv_env_host_alias_value=
+ac_cv_env_target_alias_set=
+ac_cv_env_target_alias_value=
+ac_cv_func_mergesort=no
+ac_cv_func_mkstemps=yes
+ac_cv_func_strtoimax=yes
+ac_cv_func_strtoll=yes
+ac_cv_func_timegm=yes
+ac_cv_have_decl_strcasecmp=yes
+ac_cv_have_decl_vasprintf=no
+ac_cv_header_dlfcn_h=yes
+ac_cv_header_inttypes_h=yes
+ac_cv_header_memory_h=yes
+ac_cv_header_stdc=yes
+ac_cv_header_stdint_h=yes
+ac_cv_header_stdlib_h=yes
+ac_cv_header_string_h=yes
+ac_cv_header_strings_h=yes
+ac_cv_header_sys_param_h=yes
+ac_cv_header_sys_stat_h=yes
+ac_cv_header_sys_types_h=yes
+ac_cv_header_unistd_h=yes
+ac_cv_host=x86_64-pc-linux-gnu
+ac_cv_lib_lex=-lfl
+ac_cv_objext=o
+ac_cv_path_EGREP='/bin/grep -E'
+ac_cv_path_FGREP='/bin/grep -F'
+ac_cv_path_GREP=/bin/grep
+ac_cv_path_SED=/bin/sed
+ac_cv_path_install='/usr/bin/install -c'
+ac_cv_path_lt_DD=/bin/dd
+ac_cv_path_mkdir=/bin/mkdir
+ac_cv_prog_AWK=gawk
+ac_cv_prog_CPP='gcc -E'
+ac_cv_prog_CXXCPP='g++ -E'
+ac_cv_prog_LEX=flex
+ac_cv_prog_YACC='bison -y'
+ac_cv_prog_ac_ct_AR=ar
+ac_cv_prog_ac_ct_CC=gcc
+ac_cv_prog_ac_ct_CXX=g++
+ac_cv_prog_ac_ct_MANIFEST_TOOL=mt
+ac_cv_prog_ac_ct_OBJDUMP=objdump
+ac_cv_prog_ac_ct_RANLIB=ranlib
+ac_cv_prog_ac_ct_STRIP=strip
+ac_cv_prog_cc_c89=
+ac_cv_prog_cc_g=yes
+ac_cv_prog_cxx_g=yes
+ac_cv_prog_lex_root=lex.yy
+ac_cv_prog_lex_yytext_pointer=yes
+ac_cv_prog_make_make_set=yes
+ac_cv_search_getopt='none required'
+ac_cv_sizeof_void_p=8
+ac_cv_struct_tm=time.h
+ac_cv_type___int128=yes
+ac_cv_type_intmax_t=yes
+ac_cv_type_off_t=yes
+ac_cv_type_size_t=yes
+am_cv_CC_dependencies_compiler_type=gcc3
+am_cv_CXX_dependencies_compiler_type=gcc3
+am_cv_ar_interface=ar
+am_cv_make_support_nested_variables=yes
+am_cv_prog_cc_c_o=yes
+ax_cv_check_cclflags___fsanitize_address=yes
+ax_cv_check_cclflags___fsanitize_nullability=no
+ax_cv_check_cclflags___fsanitize_undefined=yes
+ax_cv_check_cclflags___fsanitize_unsigned_integer_overflow=no
+ax_cv_check_cflags__Werror__Wpedantic=yes
+ax_cv_check_cflags___Wall=yes
+ax_cv_check_cflags___Wcast_qual=yes
+ax_cv_check_cflags___Wchar_subscripts=yes
+ax_cv_check_cflags___Wmissing_declarations=yes
+ax_cv_check_cflags___Wmissing_prototypes=yes
+ax_cv_check_cflags___Wno_error_attributes=yes
+ax_cv_check_cflags___Wno_error_cast_align=yes
+ax_cv_check_cflags___Wno_error_parentheses_equality=no
+ax_cv_check_cflags___Wno_error_unused_variable=yes
+ax_cv_check_cflags___Wno_error_visibility=no
+ax_cv_check_cflags___Wno_long_long=yes
+ax_cv_check_cflags___fno_omit_frame_pointer=yes
+ax_cv_check_cflags___fno_sanitize_recover_nullability=no
+ax_cv_check_cflags___fno_sanitize_recover_undefined=yes
+ax_cv_check_cflags___fno_sanitize_recover_unsigned_integer_overflow=no
+ax_cv_check_cflags___std_c89=yes
+ax_cv_check_cflags___std_gnu99=yes
+lt_cv_ar_at_file=@
+lt_cv_archive_cmds_need_lc=no
+lt_cv_deplibs_check_method=pass_all
+lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_ld_reload_flag=-r
+lt_cv_nm_interface='BSD nm'
+lt_cv_objdir=.libs
+lt_cv_path_LD=/usr/bin/ld
+lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64'
+lt_cv_path_NM='/usr/bin/nm -B'
+lt_cv_path_mainfest_tool=no
+lt_cv_prog_compiler_c_o=yes
+lt_cv_prog_compiler_c_o_CXX=yes
+lt_cv_prog_compiler_pic='-fPIC -DPIC'
+lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC'
+lt_cv_prog_compiler_pic_works=yes
+lt_cv_prog_compiler_pic_works_CXX=yes
+lt_cv_prog_compiler_rtti_exceptions=no
+lt_cv_prog_compiler_static_works=yes
+lt_cv_prog_compiler_static_works_CXX=yes
+lt_cv_prog_gnu_ld=yes
+lt_cv_prog_gnu_ldcxx=yes
+lt_cv_sharedlib_from_linklib_cmd='printf %s\n'
+lt_cv_shlibpath_overrides_runpath=no
+lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[      ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\'''
+lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/  {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/  {"\1", (void *) \&\1},/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/  {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/  {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/  {"lib\1", (void *) \&\1},/p'\'''
+lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
+lt_cv_sys_global_symbol_to_import=
+lt_cv_sys_max_cmd_len=1572864
+lt_cv_to_host_file_cmd=func_convert_file_noop
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+lt_cv_truncate_bin='/bin/dd bs=4096 count=1'
+
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+       @echo "Need to reconfigure with --enable-code-coverage"
+       @echo "Need to reconfigure with --enable-code-coverage"
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+ $(CODE_COVERAGE_OUTPUT_FILE);
+#
+#
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#    (Default: $(top_builddir))
+#    (Default: empty)
+#    Multiple directories may be specified, separated by whitespace.
+#    by lcov for code coverage. (Default:
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#    lcov instance. (Default: empty)
+#    reports to be created. (Default:
+#    set to 0 to disable it and leave empty to stay with the default.
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# Capture code coverage data
+# Code coverage
+# Hook rule executed before code-coverage-capture, overridable by the user
+# Optional variables
+# Optional:
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# Use recursive makes in order to ignore errors during check
+# sanitizes the test-name: replaces with underscores: dashes and dots
+# use the git-version-gen script, available online.
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+'
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+ACLOCAL='${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15'
+ADD_CFLAGS=''
+AMDEPBACKSLASH='\'
+AMDEP_FALSE='#'
+AMDEP_TRUE=''
+AMTAR='$${TAR-tar}'
+AM_BACKSLASH='\'
+AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+AM_DEFAULT_VERBOSITY='0'
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_V='$(V)'
+AR='ar'
+ASAN_ENV_FLAGS=' ASAN_OPTIONS=detect_leaks=1'
+AUTOCONF='${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf'
+AUTOHEADER='${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader'
+AUTOMAKE='${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15'
+AWK='gawk'
+CC='gcc'
+CCDEPMODE='depmode=gcc3'
+CFLAGS='-g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99'
+CFLAGS_M32=''
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_CFLAGS=''
+CODE_COVERAGE_CPPFLAGS=''
+CODE_COVERAGE_CXXFLAGS=''
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_ENABLED='no'
+CODE_COVERAGE_ENABLED_FALSE=''
+CODE_COVERAGE_ENABLED_TRUE='#'
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+CODE_COVERAGE_IGNORE_PATTERN ?=
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+CODE_COVERAGE_LDFLAGS=''
+CODE_COVERAGE_LIBS=''
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_RULES='
+CPP='gcc -E'
+CPPFLAGS=''
+CXX='g++'
+CXXCPP='g++ -E'
+CXXDEPMODE='depmode=gcc3'
+CXXFLAGS='-std=c++11'
+CYGPATH_W='echo'
+DEFS='-DHAVE_CONFIG_H'
+DEPDIR='.deps'
+DLLTOOL='false'
+DSYMUTIL=''
+DUMPBIN=''
+ECHO_C=''
+ECHO_N='-n'
+ECHO_T=''
+EGREP='/bin/grep -E'
+EXEEXT=''
+EXPLICIT_M32_FALSE=''
+EXPLICIT_M32_TRUE='#'
+FGREP='/bin/grep -F'
+GCOV=''
+GENHTML=''
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+GITIGNOREFILES ?=
+GREP='/bin/grep'
+HAVE_PANDOC_FALSE=''
+HAVE_PANDOC_TRUE='#'
+INSTALL_DATA='${INSTALL} -m 644'
+INSTALL_PROGRAM='${INSTALL}'
+INSTALL_SCRIPT='${INSTALL}'
+INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
+LCOV=''
+LD='/usr/bin/ld -m elf_x86_64'
+LDFLAGS=''
+LEX='flex'
+LEXLIB='-lfl'
+LEX_OUTPUT_ROOT='lex.yy'
+LIBFUZZER_CFLAGS=''
+LIBOBJS=''
+LIBS=''
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+LIPO=''
+LN_S='ln -s'
+LTLIBOBJS=''
+LT_SYS_LIBRARY_PATH=''
+MAKEINFO='${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo'
+MANIFEST_TOOL=':'
+MKDIR_P='/bin/mkdir -p'
+NM='/usr/bin/nm -B'
+NMEDIT=''
+OBJDUMP='objdump'
+OBJEXT='o'
+OTOOL64=''
+OTOOL=''
+PACKAGE='asn1c'
+PACKAGE_BUGREPORT='vlm@lionet.info'
+PACKAGE_NAME='asn1c'
+PACKAGE_STRING='asn1c 0.9.29'
+PACKAGE_TARNAME='asn1c'
+PACKAGE_URL=''
+PACKAGE_VERSION='0.9.29'
+PANDOC=''
+PATH_SEPARATOR=':'
+RANLIB='ranlib'
+SANITIZER_CFLAGS=' -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer'
+SED='/bin/sed'
+SET_MAKE=''
+SHELL='/bin/bash'
+SKELETONS_CFLAGS='  -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer'
+STRIP='strip'
+TESTSUITE_CFLAGS=' -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer'
+TEST_64BIT_FALSE='#'
+TEST_64BIT_TRUE=''
+VERSION='0.9.29'
+YACC='bison -y'
+YFLAGS=''
+ac_ct_AR='ar'
+ac_ct_CC='gcc'
+ac_ct_CXX='g++'
+ac_ct_DUMPBIN=''
+am__EXEEXT_FALSE=''
+am__EXEEXT_TRUE='#'
+am__fastdepCC_FALSE='#'
+am__fastdepCC_TRUE=''
+am__fastdepCXX_FALSE='#'
+am__fastdepCXX_TRUE=''
+am__include='include'
+am__isrc=''
+am__leading_dot='.'
+am__nodep='_no'
+am__quote=''
+am__tar='$${TAR-tar} chof - "$$tardir"'
+am__untar='$${TAR-tar} xf -'
+bindir='${exec_prefix}/bin'
+build='x86_64-pc-linux-gnu'
+build_alias=''
+build_cpu='x86_64'
+build_os='linux-gnu'
+build_vendor='pc'
+check-code-coverage:
+code-coverage-capture-hook:
+code-coverage-capture: code-coverage-capture-hook
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+datadir='${datarootdir}'
+datarootdir='${prefix}/share'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+dvidir='${docdir}'
+exec_prefix='${prefix}'
+host='x86_64-pc-linux-gnu'
+host_alias=''
+host_cpu='x86_64'
+host_os='linux-gnu'
+host_vendor='pc'
+htmldir='${docdir}'
+includedir='${prefix}/include'
+infodir='${datarootdir}/info'
+install_sh='${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh'
+libdir='${exec_prefix}/lib'
+libexecdir='${exec_prefix}/libexec'
+localedir='${datarootdir}/locale'
+localstatedir='${prefix}/var'
+mandir='${datarootdir}/man'
+mkdir_p='$(MKDIR_P)'
+oldincludedir='/usr/include'
+pdfdir='${docdir}'
+prefix='/usr/local'
+program_transform_name='s,x,x,'
+psdir='${docdir}'
+runstatedir='${localstatedir}/run'
+sbindir='${exec_prefix}/sbin'
+sharedstatedir='${prefix}/com'
+sysconfdir='${prefix}/etc'
+target_alias=''
+
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+
+/* confdefs.h */
+#define PACKAGE_NAME "asn1c"
+#define PACKAGE_TARNAME "asn1c"
+#define PACKAGE_VERSION "0.9.29"
+#define PACKAGE_STRING "asn1c 0.9.29"
+#define PACKAGE_BUGREPORT "vlm@lionet.info"
+#define PACKAGE_URL ""
+#define PACKAGE "asn1c"
+#define VERSION "0.9.29"
+#define YYTEXT_POINTER 1
+#define STDC_HEADERS 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_DLFCN_H 1
+#define LT_OBJDIR ".libs/"
+#define STDC_HEADERS 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_128_BIT_INT 1
+#define SIZEOF_VOID_P 8
+#define HAVE_STRTOIMAX 1
+#define HAVE_STRTOLL 1
+#define HAVE_MKSTEMPS 1
+#define HAVE_TIMEGM 1
+#define HAVE_DECL_STRCASECMP 1
+#define HAVE_DECL_VASPRINTF 0
+#define HAVE_SYMLINK 1
+
+configure: exit 0
diff --git a/config.status b/config.status
new file mode 100644 (file)
index 0000000..b0d92c3
--- /dev/null
@@ -0,0 +1,2352 @@
+#! /bin/bash
+# Generated by configure.
+# 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-/bin/bash}
+export SHELL
+## -------------------- ##
+## 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. ##
+## ----------------------------------- ##
+# 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 asn1c $as_me 0.9.29, 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`
+"
+
+# Files that config.status was made for.
+config_files=" tests/tests-c-compiler/check-src/Makefile tests/tests-asn1c-compiler/Makefile tests/tests-asn1c-smoke/Makefile tests/tests-randomized/Makefile tests/tests-c-compiler/Makefile tests/tests-skeletons/Makefile libasn1compiler/Makefile libasn1common/Makefile libasn1parser/Makefile libasn1print/Makefile libasn1fix/Makefile doc/docsrc/Makefile skeletons/Makefile examples/Makefile doc/man/Makefile tests/Makefile asn1c/Makefile doc/Makefile Makefile"
+config_headers=" config.h"
+config_commands=" depfiles libtool"
+
+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 <vlm@lionet.info>."
+
+ac_cs_config=""
+ac_cs_version="\
+asn1c config.status 0.9.29
+configured by ./configure, 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='/home/nokia/mouse07410/asn1c'
+srcdir='.'
+INSTALL='/usr/bin/install -c'
+MKDIR_P='/bin/mkdir -p'
+AWK='gawk'
+test -n "$AWK" || AWK=awk
+# 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
+
+if $ac_cs_recheck; then
+  set X /bin/bash './configure'  $ac_configure_extra_args --no-create --no-recursion
+  shift
+  $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6
+  CONFIG_SHELL='/bin/bash'
+  export CONFIG_SHELL
+  exec "$@"
+fi
+
+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
+
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="" ac_aux_dir="config"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+macro_version='2.4.6'
+macro_revision='2.4.6'
+enable_shared='yes'
+enable_static='yes'
+pic_mode='default'
+enable_fast_install='yes'
+shared_archive_member_spec=''
+SHELL='/bin/bash'
+ECHO='printf %s\n'
+PATH_SEPARATOR=':'
+host_alias=''
+host='x86_64-pc-linux-gnu'
+host_os='linux-gnu'
+build_alias=''
+build='x86_64-pc-linux-gnu'
+build_os='linux-gnu'
+SED='/bin/sed'
+Xsed='/bin/sed -e 1s/^X//'
+GREP='/bin/grep'
+EGREP='/bin/grep -E'
+FGREP='/bin/grep -F'
+LD='/usr/bin/ld -m elf_x86_64'
+NM='/usr/bin/nm -B'
+LN_S='ln -s'
+max_cmd_len='1572864'
+ac_objext='o'
+exeext=''
+lt_unset='unset'
+lt_SP2NL='tr \040 \012'
+lt_NL2SP='tr \015\012 \040\040'
+lt_cv_to_host_file_cmd='func_convert_file_noop'
+lt_cv_to_tool_file_cmd='func_convert_file_noop'
+reload_flag=' -r'
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+OBJDUMP='objdump'
+deplibs_check_method='pass_all'
+file_magic_cmd='$MAGIC_CMD'
+file_magic_glob=''
+want_nocaseglob='no'
+DLLTOOL='false'
+sharedlib_from_linklib_cmd='printf %s\n'
+AR='ar'
+AR_FLAGS='cru'
+archiver_list_spec='@'
+STRIP='strip'
+RANLIB='ranlib'
+old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib'
+old_postuninstall_cmds=''
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib'
+lock_old_archive_extraction='no'
+CC='gcc'
+CFLAGS='-g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99'
+compiler='g++'
+GCC='yes'
+lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[      ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\'''
+lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
+lt_cv_sys_global_symbol_to_import=''
+lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/  {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/  {"\1", (void *) \&\1},/p'\'''
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/  {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/  {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/  {"lib\1", (void *) \&\1},/p'\'''
+lt_cv_nm_interface='BSD nm'
+nm_file_list_spec='@'
+lt_sysroot=''
+lt_cv_truncate_bin='/bin/dd bs=4096 count=1'
+objdir='.libs'
+MAGIC_CMD='file'
+lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+lt_prog_compiler_pic=' -fPIC -DPIC'
+lt_prog_compiler_wl='-Wl,'
+lt_prog_compiler_static='-static'
+lt_cv_prog_compiler_c_o='yes'
+need_locks='no'
+MANIFEST_TOOL=':'
+DSYMUTIL=''
+NMEDIT=''
+LIPO=''
+OTOOL=''
+OTOOL64=''
+libext='a'
+shrext_cmds='.so'
+extract_expsyms_cmds=''
+archive_cmds_need_lc='no'
+enable_shared_with_static_runtimes='no'
+export_dynamic_flag_spec='$wl--export-dynamic'
+whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+compiler_needs_object='no'
+old_archive_from_new_cmds=''
+old_archive_from_expsyms_cmds=''
+archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+module_cmds=''
+module_expsym_cmds=''
+with_gnu_ld='yes'
+allow_undefined_flag=''
+no_undefined_flag=''
+hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+hardcode_libdir_separator=''
+hardcode_direct='no'
+hardcode_direct_absolute='no'
+hardcode_minus_L='no'
+hardcode_shlibpath_var='unsupported'
+hardcode_automatic='no'
+inherit_rpath='no'
+link_all_deplibs='no'
+always_export_symbols='no'
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+include_expsyms=''
+prelink_cmds=''
+postlink_cmds=''
+file_list_spec=''
+variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH'
+need_lib_prefix='no'
+need_version='no'
+version_type='linux'
+runpath_var='LD_RUN_PATH'
+shlibpath_var='LD_LIBRARY_PATH'
+shlibpath_overrides_runpath='no'
+libname_spec='lib$name'
+library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+soname_spec='$libname$release$shared_ext$major'
+install_override_mode=''
+postinstall_cmds=''
+postuninstall_cmds=''
+finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+finish_eval=''
+hardcode_into_libs='yes'
+sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/5 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib '
+configure_time_dlsearch_path='/lib /usr/lib /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa-egl /usr/lib/x86_64-linux-gnu/mesa '
+configure_time_lt_sys_library_path=''
+hardcode_action='immediate'
+enable_dlopen='unknown'
+enable_dlopen_self='unknown'
+enable_dlopen_self_static='unknown'
+old_striplib='strip --strip-debug'
+striplib='strip --strip-unneeded'
+compiler_lib_search_dirs=''
+predep_objects=''
+postdep_objects=''
+predeps=''
+postdeps=''
+compiler_lib_search_path=''
+LD_CXX='/usr/bin/ld -m elf_x86_64'
+reload_flag_CXX=' -r'
+reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs'
+old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib'
+compiler_CXX='g++'
+GCC_CXX='yes'
+lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+lt_prog_compiler_pic_CXX=' -fPIC -DPIC'
+lt_prog_compiler_wl_CXX='-Wl,'
+lt_prog_compiler_static_CXX='-static'
+lt_cv_prog_compiler_c_o_CXX='yes'
+archive_cmds_need_lc_CXX='no'
+enable_shared_with_static_runtimes_CXX='no'
+export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+compiler_needs_object_CXX='no'
+old_archive_from_new_cmds_CXX=''
+old_archive_from_expsyms_cmds_CXX=''
+archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+module_cmds_CXX=''
+module_expsym_cmds_CXX=''
+with_gnu_ld_CXX='yes'
+allow_undefined_flag_CXX=''
+no_undefined_flag_CXX=''
+hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+hardcode_libdir_separator_CXX=''
+hardcode_direct_CXX='no'
+hardcode_direct_absolute_CXX='no'
+hardcode_minus_L_CXX='no'
+hardcode_shlibpath_var_CXX='unsupported'
+hardcode_automatic_CXX='no'
+inherit_rpath_CXX='no'
+link_all_deplibs_CXX='no'
+always_export_symbols_CXX='no'
+export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+include_expsyms_CXX=''
+prelink_cmds_CXX=''
+postlink_cmds_CXX=''
+file_list_spec_CXX=''
+hardcode_action_CXX='immediate'
+compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/5 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/5/../../..'
+predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbeginS.o'
+postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/5/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o'
+predeps_CXX=''
+postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s'
+compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../..'
+
+LTCC='gcc'
+LTCFLAGS='-g -O2'
+compiler='gcc'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_import lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_cv_nm_interface nm_file_list_spec lt_cv_truncate_bin lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_separator_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do
+    case `eval \\$ECHO \\""\\$$var"\\"` in
+    *[\\\`\"\$]*)
+      eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_$var=\\\"\$$var\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec configure_time_dlsearch_path configure_time_lt_sys_library_path reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX postlink_cmds_CXX; do
+    case `eval \\$ECHO \\""\\$$var"\\"` in
+    *[\\\`\"\$]*)
+      eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_$var=\\\"\$$var\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='config'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='asn1c'
+    VERSION='0.9.29'
+    RM='rm -f'
+    ofile='libtool'
+
+
+
+
+
+
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "tests/tests-c-compiler/check-src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/check-src/Makefile" ;;
+    "tests/tests-asn1c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-compiler/Makefile" ;;
+    "tests/tests-asn1c-smoke/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-asn1c-smoke/Makefile" ;;
+    "tests/tests-randomized/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-randomized/Makefile" ;;
+    "tests/tests-c-compiler/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-c-compiler/Makefile" ;;
+    "tests/tests-skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES tests/tests-skeletons/Makefile" ;;
+    "libasn1compiler/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1compiler/Makefile" ;;
+    "libasn1common/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1common/Makefile" ;;
+    "libasn1parser/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1parser/Makefile" ;;
+    "libasn1print/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1print/Makefile" ;;
+    "libasn1fix/Makefile") CONFIG_FILES="$CONFIG_FILES libasn1fix/Makefile" ;;
+    "doc/docsrc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/docsrc/Makefile" ;;
+    "skeletons/Makefile") CONFIG_FILES="$CONFIG_FILES skeletons/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "asn1c/Makefile") CONFIG_FILES="$CONFIG_FILES asn1c/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+  *) 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" &&
+cat >>"$ac_tmp/subs1.awk" <<\_ACAWK &&
+S["am__EXEEXT_FALSE"]=""
+S["am__EXEEXT_TRUE"]="#"
+S["LTLIBOBJS"]=""
+S["LIBOBJS"]=""
+S["HAVE_PANDOC_FALSE"]=""
+S["HAVE_PANDOC_TRUE"]="#"
+S["PANDOC"]=""
+S["TEST_64BIT_FALSE"]="#"
+S["TEST_64BIT_TRUE"]=""
+S["ASAN_ENV_FLAGS"]=" ASAN_OPTIONS=detect_leaks=1"
+S["SKELETONS_CFLAGS"]="  -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-fram"\
+"e-pointer"
+S["TESTSUITE_CFLAGS"]=" -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-fr"\
+"ame-pointer"
+S["SANITIZER_CFLAGS"]=" -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer"
+S["LIBFUZZER_CFLAGS"]=""
+S["ADD_CFLAGS"]=""
+S["EXPLICIT_M32_FALSE"]=""
+S["EXPLICIT_M32_TRUE"]="#"
+S["CFLAGS_M32"]=""
+S["CODE_COVERAGE_RULES"]="\n"\
+"# Code coverage\n"\
+"#\n"\
+"# Optional:\n"\
+"#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.\n"\
+"#    Multiple directories may be specified, separated by whitespace.\n"\
+"#    (Default: $(top_builddir))\n"\
+"#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated\n"\
+"#    by lcov for code coverage. (Default:\n"\
+"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)\n"\
+"#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage\n"\
+"#    reports to be created. (Default:\n"\
+"#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)\n"\
+"#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,\n"\
+"#    set to 0 to disable it and leave empty to stay with the default.\n"\
+"#    (Default: empty)\n"\
+"#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov\n"\
+"#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
+"#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov\n"\
+"#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
+"#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov\n"\
+"#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the\n"\
+"#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
+"#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov\n"\
+"#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
+"#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering\n"\
+"#    lcov instance. (Default: empty)\n"\
+"#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov\n"\
+"#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
+"#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the\n"\
+"#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)\n"\
+"#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml\n"\
+"#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\n"\
+"#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore\n"\
+"#\n"\
+"# The generated report will be titled using the $(PACKAGE_NAME) and\n"\
+"# $(PACKAGE_VERSION). In order to add the current git hash to the title,\n"\
+"# use the git-version-gen script, available online.\n"\
+"\n"\
+"# Optional variables\n"\
+"CODE_COVERAGE_DIRECTORY ?= $(top_builddir)\n"\
+"CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info\n"\
+"CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage\n"\
+"CODE_COVERAGE_BRANCH_COVERAGE ?=\n"\
+"CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
+"--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
+"CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)\n"\
+"CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"$(GCOV)\"\n"\
+"CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)\n"\
+"CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)\n"\
+"CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=\n"\
+"CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)\n"\
+"CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\\\n"\
+"$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\\\n"\
+"--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))\n"\
+"CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)\n"\
+"CODE_COVERAGE_IGNORE_PATTERN ?=\n"\
+"\n"\
+"code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))\n"\
+"code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))\n"\
+"code_coverage_v_lcov_cap_0 = @echo \"  LCOV   --capture\"\\\n"\
+" $(CODE_COVERAGE_OUTPUT_FILE);\n"\
+"code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))\n"\
+"code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))\n"\
+"code_coverage_v_lcov_ign_0 = @echo \"  LCOV   --remove /tmp/*\"\\\n"\
+" $(CODE_COVERAGE_IGNORE_PATTERN);\n"\
+"code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))\n"\
+"code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))\n"\
+"code_coverage_v_genhtml_0 = @echo \"  GEN   \" $(CODE_COVERAGE_OUTPUT_DIRECTORY);\n"\
+"code_coverage_quiet = $(code_coverage_quiet_$(V))\n"\
+"code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))\n"\
+"code_coverage_quiet_0 = --quiet\n"\
+"\n"\
+"# sanitizes the test-name: replaces with underscores: dashes and dots\n"\
+"code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))\n"\
+"\n"\
+"# Use recursive makes in order to ignore errors during check\n"\
+"check-code-coverage:\n"\
+"      @echo \"Need to reconfigure with --enable-code-coverage\"\n"\
+"\n"\
+"\n"\
+"# Capture code coverage data\n"\
+"code-coverage-capture: code-coverage-capture-hook\n"\
+"      @echo \"Need to reconfigure with --enable-code-coverage\"\n"\
+"\n"\
+"\n"\
+"# Hook rule executed before code-coverage-capture, overridable by the user\n"\
+"code-coverage-capture-hook:\n"\
+"\n"\
+"\n"\
+"\n"\
+"GITIGNOREFILES ?=\n"\
+"GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)\n"\
+"\n"\
+"AM_DISTCHECK_CONFIGURE_FLAGS ?=\n"\
+"AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage\n"\
+"\n"\
+".PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean\n"\
+""
+S["CODE_COVERAGE_LDFLAGS"]=""
+S["CODE_COVERAGE_LIBS"]=""
+S["CODE_COVERAGE_CXXFLAGS"]=""
+S["CODE_COVERAGE_CFLAGS"]=""
+S["CODE_COVERAGE_CPPFLAGS"]=""
+S["GENHTML"]=""
+S["LCOV"]=""
+S["GCOV"]=""
+S["CODE_COVERAGE_ENABLED"]="no"
+S["CODE_COVERAGE_ENABLED_FALSE"]=""
+S["CODE_COVERAGE_ENABLED_TRUE"]="#"
+S["CXXCPP"]="g++ -E"
+S["LT_SYS_LIBRARY_PATH"]=""
+S["OTOOL64"]=""
+S["OTOOL"]=""
+S["LIPO"]=""
+S["NMEDIT"]=""
+S["DSYMUTIL"]=""
+S["MANIFEST_TOOL"]=":"
+S["RANLIB"]="ranlib"
+S["DLLTOOL"]="false"
+S["OBJDUMP"]="objdump"
+S["NM"]="/usr/bin/nm -B"
+S["ac_ct_DUMPBIN"]=""
+S["DUMPBIN"]=""
+S["LD"]="/usr/bin/ld -m elf_x86_64"
+S["FGREP"]="/bin/grep -F"
+S["EGREP"]="/bin/grep -E"
+S["GREP"]="/bin/grep"
+S["SED"]="/bin/sed"
+S["host_os"]="linux-gnu"
+S["host_vendor"]="pc"
+S["host_cpu"]="x86_64"
+S["host"]="x86_64-pc-linux-gnu"
+S["build_os"]="linux-gnu"
+S["build_vendor"]="pc"
+S["build_cpu"]="x86_64"
+S["build"]="x86_64-pc-linux-gnu"
+S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool"
+S["am__fastdepCXX_FALSE"]="#"
+S["am__fastdepCXX_TRUE"]=""
+S["CXXDEPMODE"]="depmode=gcc3"
+S["ac_ct_CXX"]="g++"
+S["CXXFLAGS"]="-std=c++11"
+S["CXX"]="g++"
+S["ac_ct_AR"]="ar"
+S["AR"]="ar"
+S["LEXLIB"]="-lfl"
+S["LEX_OUTPUT_ROOT"]="lex.yy"
+S["LEX"]="flex"
+S["YFLAGS"]=""
+S["YACC"]="bison -y"
+S["LN_S"]="ln -s"
+S["CPP"]="gcc -E"
+S["am__fastdepCC_FALSE"]="#"
+S["am__fastdepCC_TRUE"]=""
+S["CCDEPMODE"]="depmode=gcc3"
+S["am__nodep"]="_no"
+S["AMDEPBACKSLASH"]="\\"
+S["AMDEP_FALSE"]="#"
+S["AMDEP_TRUE"]=""
+S["am__quote"]=""
+S["am__include"]="include"
+S["DEPDIR"]=".deps"
+S["OBJEXT"]="o"
+S["EXEEXT"]=""
+S["ac_ct_CC"]="gcc"
+S["CPPFLAGS"]=""
+S["LDFLAGS"]=""
+S["CFLAGS"]="-g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99"
+S["CC"]="gcc"
+S["AM_BACKSLASH"]="\\"
+S["AM_DEFAULT_VERBOSITY"]="0"
+S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)"
+S["AM_V"]="$(V)"
+S["am__untar"]="$${TAR-tar} xf -"
+S["am__tar"]="$${TAR-tar} chof - \"$$tardir\""
+S["AMTAR"]="$${TAR-tar}"
+S["am__leading_dot"]="."
+S["SET_MAKE"]=""
+S["AWK"]="gawk"
+S["mkdir_p"]="$(MKDIR_P)"
+S["MKDIR_P"]="/bin/mkdir -p"
+S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s"
+S["STRIP"]="strip"
+S["install_sh"]="${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh"
+S["MAKEINFO"]="${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo"
+S["AUTOHEADER"]="${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader"
+S["AUTOMAKE"]="${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15"
+S["AUTOCONF"]="${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf"
+S["ACLOCAL"]="${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15"
+S["VERSION"]="0.9.29"
+S["PACKAGE"]="asn1c"
+S["CYGPATH_W"]="echo"
+S["am__isrc"]=""
+S["INSTALL_DATA"]="${INSTALL} -m 644"
+S["INSTALL_SCRIPT"]="${INSTALL}"
+S["INSTALL_PROGRAM"]="${INSTALL}"
+S["target_alias"]=""
+S["host_alias"]=""
+S["build_alias"]=""
+S["LIBS"]=""
+S["ECHO_T"]=""
+S["ECHO_N"]="-n"
+S["ECHO_C"]=""
+S["DEFS"]="-DHAVE_CONFIG_H"
+S["mandir"]="${datarootdir}/man"
+S["localedir"]="${datarootdir}/locale"
+S["libdir"]="${exec_prefix}/lib"
+S["psdir"]="${docdir}"
+S["pdfdir"]="${docdir}"
+S["dvidir"]="${docdir}"
+S["htmldir"]="${docdir}"
+S["infodir"]="${datarootdir}/info"
+S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}"
+S["oldincludedir"]="/usr/include"
+S["includedir"]="${prefix}/include"
+S["runstatedir"]="${localstatedir}/run"
+S["localstatedir"]="${prefix}/var"
+S["sharedstatedir"]="${prefix}/com"
+S["sysconfdir"]="${prefix}/etc"
+S["datadir"]="${datarootdir}"
+S["datarootdir"]="${prefix}/share"
+S["libexecdir"]="${exec_prefix}/libexec"
+S["sbindir"]="${exec_prefix}/sbin"
+S["bindir"]="${exec_prefix}/bin"
+S["program_transform_name"]="s,x,x,"
+S["prefix"]="/usr/local"
+S["exec_prefix"]="${prefix}"
+S["PACKAGE_URL"]=""
+S["PACKAGE_BUGREPORT"]="vlm@lionet.info"
+S["PACKAGE_STRING"]="asn1c 0.9.29"
+S["PACKAGE_VERSION"]="0.9.29"
+S["PACKAGE_TARNAME"]="asn1c"
+S["PACKAGE_NAME"]="asn1c"
+S["PATH_SEPARATOR"]=":"
+S["SHELL"]="/bin/bash"
+_ACAWK
+cat >>"$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  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
+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
+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 {
+D["PACKAGE_NAME"]=" \"asn1c\""
+D["PACKAGE_TARNAME"]=" \"asn1c\""
+D["PACKAGE_VERSION"]=" \"0.9.29\""
+D["PACKAGE_STRING"]=" \"asn1c 0.9.29\""
+D["PACKAGE_BUGREPORT"]=" \"vlm@lionet.info\""
+D["PACKAGE_URL"]=" \"\""
+D["PACKAGE"]=" \"asn1c\""
+D["VERSION"]=" \"0.9.29\""
+D["YYTEXT_POINTER"]=" 1"
+D["STDC_HEADERS"]=" 1"
+D["HAVE_SYS_TYPES_H"]=" 1"
+D["HAVE_SYS_STAT_H"]=" 1"
+D["HAVE_STDLIB_H"]=" 1"
+D["HAVE_STRING_H"]=" 1"
+D["HAVE_MEMORY_H"]=" 1"
+D["HAVE_STRINGS_H"]=" 1"
+D["HAVE_INTTYPES_H"]=" 1"
+D["HAVE_STDINT_H"]=" 1"
+D["HAVE_UNISTD_H"]=" 1"
+D["HAVE_DLFCN_H"]=" 1"
+D["LT_OBJDIR"]=" \".libs/\""
+D["STDC_HEADERS"]=" 1"
+D["HAVE_SYS_PARAM_H"]=" 1"
+D["HAVE_128_BIT_INT"]=" 1"
+D["SIZEOF_VOID_P"]=" 8"
+D["HAVE_STRTOIMAX"]=" 1"
+D["HAVE_STRTOLL"]=" 1"
+D["HAVE_MKSTEMPS"]=" 1"
+D["HAVE_TIMEGM"]=" 1"
+D["HAVE_DECL_STRCASECMP"]=" 1"
+D["HAVE_DECL_VASPRINTF"]=" 0"
+D["HAVE_SYMLINK"]=" 1"
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\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
+  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
+# 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;}
+  ac_datarootdir_hack='
+  s&@datadir@&${datarootdir}&g
+  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
+  s&@infodir@&${datarootdir}/info&g
+  s&@localedir@&${datarootdir}/locale&g
+  s&@mandir@&${datarootdir}/man&g
+  s&\${datarootdir}&${prefix}/share&g' ;;
+esac
+ac_sed_extra="/^[       ]*VPATH[        ]*=[    ]*/{
+h
+s///
+s/^/:/
+s/[     ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[  ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[      ]*$//
+}
+
+: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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 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.
+
+# GNU Libtool 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 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags='CXX '
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+
+    cat <<_LT_EOF >> "$ofile"
+
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
diff --git a/config/ar-lib b/config/ar-lib
new file mode 100644 (file)
index 0000000..463b9ec
--- /dev/null
@@ -0,0 +1,270 @@
+#! /bin/sh
+# Wrapper for Microsoft lib.exe
+
+me=ar-lib
+scriptversion=2012-03-01.08; # UTC
+
+# Copyright (C) 2010-2014 Free Software Foundation, Inc.
+# Written by Peter Rosin <peda@lysator.liu.se>.
+#
+# 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>.
+
+
+# func_error message
+func_error ()
+{
+  echo "$me: $1" 1>&2
+  exit 1
+}
+
+file_conv=
+
+# func_file_conv build_file
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts.
+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 in
+       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_at_file at_file operation archive
+# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE
+# for each of them.
+# When interpreting the content of the @FILE, do NOT use func_file_conv,
+# since the user would need to supply preconverted file names to
+# binutils ar, at least for MinGW.
+func_at_file ()
+{
+  operation=$2
+  archive=$3
+  at_file_contents=`cat "$1"`
+  eval set x "$at_file_contents"
+  shift
+
+  for member
+  do
+    $AR -NOLOGO $operation:"$member" "$archive" || exit $?
+  done
+}
+
+case $1 in
+  '')
+     func_error "no command.  Try '$0 --help' for more information."
+     ;;
+  -h | --h*)
+    cat <<EOF
+Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]
+
+Members may be specified in a file named with @FILE.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "$me, version $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test $# -lt 3; then
+  func_error "you must specify a program, an action and an archive"
+fi
+
+AR=$1
+shift
+while :
+do
+  if test $# -lt 2; then
+    func_error "you must specify a program, an action and an archive"
+  fi
+  case $1 in
+    -lib | -LIB \
+    | -ltcg | -LTCG \
+    | -machine* | -MACHINE* \
+    | -subsystem* | -SUBSYSTEM* \
+    | -verbose | -VERBOSE \
+    | -wx* | -WX* )
+      AR="$AR $1"
+      shift
+      ;;
+    *)
+      action=$1
+      shift
+      break
+      ;;
+  esac
+done
+orig_archive=$1
+shift
+func_file_conv "$orig_archive"
+archive=$file
+
+# strip leading dash in $action
+action=${action#-}
+
+delete=
+extract=
+list=
+quick=
+replace=
+index=
+create=
+
+while test -n "$action"
+do
+  case $action in
+    d*) delete=yes  ;;
+    x*) extract=yes ;;
+    t*) list=yes    ;;
+    q*) quick=yes   ;;
+    r*) replace=yes ;;
+    s*) index=yes   ;;
+    S*)             ;; # the index is always updated implicitly
+    c*) create=yes  ;;
+    u*)             ;; # TODO: don't ignore the update modifier
+    v*)             ;; # TODO: don't ignore the verbose modifier
+    *)
+      func_error "unknown action specified"
+      ;;
+  esac
+  action=${action#?}
+done
+
+case $delete$extract$list$quick$replace,$index in
+  yes,* | ,yes)
+    ;;
+  yesyes*)
+    func_error "more than one action specified"
+    ;;
+  *)
+    func_error "no action specified"
+    ;;
+esac
+
+if test -n "$delete"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  for member
+  do
+    case $1 in
+      @*)
+        func_at_file "${1#@}" -REMOVE "$archive"
+        ;;
+      *)
+        func_file_conv "$1"
+        $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $?
+        ;;
+    esac
+  done
+
+elif test -n "$extract"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  if test $# -gt 0; then
+    for member
+    do
+      case $1 in
+        @*)
+          func_at_file "${1#@}" -EXTRACT "$archive"
+          ;;
+        *)
+          func_file_conv "$1"
+          $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $?
+          ;;
+      esac
+    done
+  else
+    $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member
+    do
+      $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $?
+    done
+  fi
+
+elif test -n "$quick$replace"; then
+  if test ! -f "$orig_archive"; then
+    if test -z "$create"; then
+      echo "$me: creating $orig_archive"
+    fi
+    orig_archive=
+  else
+    orig_archive=$archive
+  fi
+
+  for member
+  do
+    case $1 in
+    @*)
+      func_file_conv "${1#@}"
+      set x "$@" "@$file"
+      ;;
+    *)
+      func_file_conv "$1"
+      set x "$@" "$file"
+      ;;
+    esac
+    shift
+    shift
+  done
+
+  if test -n "$orig_archive"; then
+    $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $?
+  else
+    $AR -NOLOGO -OUT:"$archive" "$@" || exit $?
+  fi
+
+elif test -n "$list"; then
+  if test ! -f "$orig_archive"; then
+    func_error "archive not found"
+  fi
+  $AR -NOLOGO -LIST "$archive" || exit $?
+fi
diff --git a/config/compile b/config/compile
new file mode 100644 (file)
index 0000000..a85b723
--- /dev/null
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2014 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
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      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/config.guess b/config/config.guess
new file mode 100644 (file)
index 0000000..1659250
--- /dev/null
@@ -0,0 +1,1441 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
+
+timestamp='2015-08-20'
+
+# 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 3 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.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# 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
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+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 1992-2015 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
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       LIBC=gnu
+
+       eval $set_cc_for_build
+       cat <<-EOF > $dummy.c
+       #include <features.h>
+       #if defined(__UCLIBC__)
+       LIBC=uclibc
+       #elif defined(__dietlibc__)
+       LIBC=dietlibc
+       #else
+       LIBC=gnu
+       #endif
+       EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+       ;;
+esac
+
+# 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=`(uname -p 2>/dev/null || \
+           /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 ;;
+           earmv*)
+               arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine=${arch}${endian}-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*|earm*|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
+       # Determine ABI tags.
+       case "${UNAME_MACHINE_ARCH}" in
+           earm*)
+               expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+               abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+               ;;
+       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/[-_].*//' | cut -d. -f1,2`
+               ;;
+       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}${abi}"
+       exit ;;
+    *:Bitrig:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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 ;;
+    *:Sortix:*:*)
+       echo ${UNAME_MACHINE}-unknown-sortix
+       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/lslpp ] ; then
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+       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 ;;
+    *:MINGW64*:*)
+       echo ${UNAME_MACHINE}-pc-mingw64
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    *: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-${LIBC}`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/[-(].*//'`-${LIBC}
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    aarch64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       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="gnulibc1" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${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-${LIBC}
+       else
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+           else
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+           fi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    cris:Linux:*:*)
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       exit ;;
+    crisv32:Linux:*:*)
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       exit ;;
+    e2k:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    frv:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    i*86:Linux:*:*)
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       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-${LIBC}"; exit; }
+       ;;
+    openrisc*:Linux:*:*)
+       echo or1k-unknown-linux-${LIBC}
+       exit ;;
+    or32:Linux:*:* | or1k*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-${LIBC}
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-${LIBC}
+       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-${LIBC} ;;
+         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+         *)    echo hppa-unknown-linux-${LIBC} ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-${LIBC}
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-${LIBC}
+       exit ;;
+    ppc64le:Linux:*:*)
+       echo powerpc64le-unknown-linux-${LIBC}
+       exit ;;
+    ppcle:Linux:*:*)
+       echo powerpcle-unknown-linux-${LIBC}
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+       exit ;;
+    x86_64:Linux:*:*)
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       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 ;;
+    x86_64:Haiku:*:*)
+       echo x86_64-unknown-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
+       eval $set_cc_for_build
+       if test "$UNAME_PROCESSOR" = unknown ; then
+           UNAME_PROCESSOR=powerpc
+       fi
+       if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+           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
+                   case $UNAME_PROCESSOR in
+                       i386) UNAME_PROCESSOR=x86_64 ;;
+                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
+                   esac
+               fi
+           fi
+       elif test "$UNAME_PROCESSOR" = i386 ; then
+           # Avoid executing cc on OS X 10.9, as it ships with a stub
+           # that puts up a graphical alert prompting to install
+           # developer tools.  Any system running Mac OS X 10.7 or
+           # later (Darwin 11 and later) is required to have a 64-bit
+           # processor. This is not true of the ARM version of Darwin
+           # that Apple uses in portable devices.
+           UNAME_PROCESSOR=x86_64
+       fi
+       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
+
+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/config.sub b/config/config.sub
new file mode 100644 (file)
index 0000000..1acc966
--- /dev/null
@@ -0,0 +1,1813 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
+
+timestamp='2015-08-20'
+
+# 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 3 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.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# 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 1992-2015 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-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+  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 | arceb \
+       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+       | avr | avr32 \
+       | ba \
+       | be32 | be64 \
+       | bfin \
+       | c4x | c8051 | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | e2k | epiphany \
+       | fido | fr30 | frv | ft32 \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | k1om \
+       | le32 | le64 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | microblazeel | 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 \
+       | mipsisa32r6 | mipsisa32r6el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64r6 | mipsisa64r6el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipsr5900 | mipsr5900el \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nds32 | nds32le | nds32be \
+       | nios | nios2 | nios2eb | nios2el \
+       | ns16k | ns32k \
+       | open8 | or1k | or1knd | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
+       | pyramid \
+       | riscv32 | riscv64 \
+       | rl78 | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]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 \
+       | visium \
+       | 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
+               ;;
+       leon|leon[3-9])
+               basic_machine=sparc-$basic_machine
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | 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-* | arceb-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | ba-* \
+       | be32-* | be64-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
+       | c8051-* | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | e2k-* | 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-* \
+       | k1om-* \
+       | le32-* | le64-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | microblaze-* | microblazeel-* \
+       | 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-* \
+       | mipsisa32r6-* | mipsisa32r6el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64r6-* | mipsisa64r6el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipsr5900-* | mipsr5900el-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nds32-* | nds32le-* | nds32be-* \
+       | nios-* | nios2-* | nios2eb-* | nios2el-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
+       | or1k*-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+       | pyramid-* \
+       | riscv32-* | riscv64-* \
+       | 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-* \
+       | visium-* \
+       | 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
+               ;;
+        asmjs)
+               basic_machine=asmjs-unknown
+               ;;
+       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
+               ;;
+       leon-*|leon[3-9]-*)
+               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+               ;;
+       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
+               ;;
+       mingw64)
+               basic_machine=x86_64-pc
+               os=-mingw64
+               ;;
+       mingw32)
+               basic_machine=i686-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
+               ;;
+       moxiebox)
+               basic_machine=moxie-unknown
+               os=-moxiebox
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       msys)
+               basic_machine=i686-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 | rdos64)
+               basic_machine=x86_64-pc
+               os=-rdos
+               ;;
+       rdos32)
+               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* | -plan9* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* | -cloudabi* | -sortix* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -bitrig* | -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* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
+             | -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* | -tirtos*)
+       # 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
+               ;;
+       -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
+               ;;
+       c8051-*)
+               os=-elf
+               ;;
+       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/config/depcomp b/config/depcomp
new file mode 100644 (file)
index 0000000..fc98710
--- /dev/null
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2014 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
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='  '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+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"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# 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 information.
+  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 -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## 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).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
+## - 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 -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # 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.
+## 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.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | 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 -ne 0; then
+    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
+    make_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.
+  set_dir_from "$object"
+  set_base_from "$object"
+  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 -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\' :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
+    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 "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$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.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  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 -ne 0; then
+     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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_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.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool 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$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+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 -ne 0; then
+    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"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  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"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | 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"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | 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/config/install-sh b/config/install-sh
new file mode 100644 (file)
index 0000000..59990a1
--- /dev/null
@@ -0,0 +1,508 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2014-09-12.12; # 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.
+
+tab='  '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# 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_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
+is_target_a_directory=possibly
+
+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
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
+
+    -o) chowncmd="$chownprog $2"
+        shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
+
+    -T) is_target_a_directory=never;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --) shift
+        break;;
+
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
+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
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+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 "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      dstdir=`dirname "$dst"`
+      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.
+            ;;
+          *)
+            # $RANDOM is not portable (e.g. dash);  use it when possible to
+            # lower collision chance
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+            # create the $tmpdir first (and fail if unsuccessful) to make sure
+            # that nobody tries to guess the $tmpdir name.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/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-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 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
+
+      oIFS=$IFS
+      IFS=/
+      set -f
+      set fnord $dstdir
+      shift
+      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` &&
+       set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       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/config/ltmain.sh b/config/ltmain.sh
new file mode 100755 (executable)
index 0000000..147d758
--- /dev/null
@@ -0,0 +1,11156 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+##               by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 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.
+
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION="2.4.6 Debian-2.4.6-0.1"
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 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.
+
+# 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 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES 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/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+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
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+         export $_G_var
+         _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+         _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+       fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp       $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+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
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+    test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+    _G_progs_list=$1
+    _G_check_func=$2
+    _G_PATH=${3-"$PATH"}
+
+    _G_path_prog_max=0
+    _G_path_prog_found=false
+    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+    for _G_dir in $_G_PATH; do
+      IFS=$_G_save_IFS
+      test -z "$_G_dir" && _G_dir=.
+      for _G_prog_name in $_G_progs_list; do
+        for _exeext in '' .EXE; do
+          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+          func_executable_p "$_G_path_prog" || continue
+          case `"$_G_path_prog" --version 2>&1` in
+            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+            *)     $_G_check_func $_G_path_prog
+                  func_path_progs_result=$func_check_prog_result
+                  ;;
+          esac
+          $_G_path_prog_found && break 3
+        done
+      done
+    done
+    IFS=$_G_save_IFS
+    test -z "$func_path_progs_result" && {
+      echo "no acceptable sed could be found in \$PATH" >&2
+      exit 1
+    }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+  for _G_i in 1 2 3 4 5 6 7; do
+    _G_sed_script=$_G_sed_script$nl$_G_sed_script
+  done
+  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+  _G_sed_script=
+
+  func_check_prog_sed ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo '' >> conftest.nl
+      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+  rm -f conftest.sed
+  SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+  func_check_prog_grep ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    _G_path_prog_max=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo 'GREP' >> conftest.nl
+      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+  GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion.  Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+     progdir=`cd "$progdir" && pwd`
+     progpath=$progdir/$progname
+     ;;
+  *)
+     _G_IFS=$IFS
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS=$_G_IFS
+       test -x "$progdir/$progname" && break
+     done
+     IFS=$_G_IFS
+     test -n "$progdir" || progdir=`pwd`
+     progpath=$progdir/$progname
+     ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset='\e[0m'
+        tc_bold='\e[1m';   tc_standout='\e[7m'
+        tc_red='\e[31m';   tc_green='\e[32m'
+        tc_blue='\e[34m';  tc_cyan='\e[36m'
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
+
+    require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+    $debug_cmd
+
+    eval _G_current_value='`$ECHO $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+    $debug_cmd
+
+    '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $debug_cmd
+
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    $debug_cmd
+
+    _G_directory_path=$1
+    _G_dir_list=
+
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$_G_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        _G_dir_list=$_G_directory_path:$_G_dir_list
+
+        # If the last portion added has no slash in it, the list is done
+        case $_G_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+      done
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+       IFS=$func_mkdir_p_IFS
+        # mkdir can fail with a 'File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$_G_dir" 2>/dev/null || :
+      done
+      IFS=$func_mkdir_p_IFS
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
+    fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+    $debug_cmd
+
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+    if test : = "$opt_dry_run"; then
+      # Return a directory name, but don't create it in dry-run mode
+      _G_tmpdir=$_G_template-$$
+    else
+
+      # If mktemp works, use that first and foremost
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$_G_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+        func_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$_G_tmpdir"
+        umask $func_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+               s|/\./|/|g
+               t dotsl
+               s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
+      "")
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
+        ;;
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
+        ;;
+      *)
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+        ;;
+    esac
+
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+    $debug_cmd
+
+    $opt_quiet || func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+    $debug_cmd
+
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
+
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
+    fi
+
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
+    :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
+{
+    $debug_cmd
+
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+         _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+       func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \  ]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+         ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+       func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    $debug_cmd
+
+    case $1 in
+      *[\\\`\"]*)
+       _G_arg=`$ECHO "$1" | $SED \
+           -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
+    esac
+
+    case $_G_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        _G_arg=\"$_G_arg\"
+        ;;
+    esac
+
+    func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    $opt_dry_run || {
+      eval "$_G_user_locale
+           $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $debug_cmd
+
+    $opt_verbose && func_echo "$*"
+
+    :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    printf '%s\n%s\n' "$1" "$2" \
+      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false.  Use it like this:
+#
+#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+    $debug_cmd
+
+    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 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.
+
+# 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 3 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/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
+    done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=: ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
+#          esac
+#        done
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+    $debug_cmd
+
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
+
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
+
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+    $debug_cmd
+
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    func_run_hooks func_options_prep ${1+"$@"}
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+    $debug_cmd
+
+    func_parse_options_result=
+
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      func_run_hooks func_parse_options ${1+"$@"}
+
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
+
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
+
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+                     ;;
+
+        --warnings|--warning|-W)
+                      test $# = 0 && func_missing_arg $_G_opt && break
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+       # Separate optargs to long options (plugins may need this):
+       --*=*)        func_split_equals "$_G_opt"
+                     set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+      esac
+    done
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+    $debug_cmd
+
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+    func_run_hooks func_validate_options ${1+"$@"}
+
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
+
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    eval \$ECHO \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message"
+    exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $debug_cmd
+
+    func_error "Missing argument for '$1'."
+    exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+       h
+       /^Written by/q' < "$progpath"
+    echo
+    eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $debug_cmd
+
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
+
+    exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+    $debug_cmd
+
+    $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --config             show all configuration variables
+       --debug              enable verbose shell tracing
+   -n, --dry-run            display commands without modifying any files
+       --features           display basic configuration information and exit
+       --mode=MODE          use operation mode MODE
+       --no-warnings        equivalent to '-Wnone'
+       --preserve-dup-deps  don't remove duplicate dependency libraries
+       --quiet, --silent    don't print informational messages
+       --tag=TAG            use configuration variables from tag TAG
+   -v, --verbose            print more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+       clean           remove files from the build directory
+       compile         compile a source file into a libtool object
+       execute         automatically set library path, then run a program
+       finish          complete the installation of libtool libraries
+       install         install libraries or executables
+       link            create a library or an executable
+       uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+       host-triplet:   $host
+       shell:          $SHELL
+       compiler:       $LTCC
+       compiler flags: $LTCFLAGS
+       linker:         $LD (gnu? $with_gnu_ld)
+       version:        $progname (GNU libtool) 2.4.6
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+    exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
+
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
+
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test yes = "$build_libtool_libs"; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test yes = "$build_old_libs"; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+    # Global variable:
+    tagname=$1
+
+    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+    sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+    # Validate tagname.
+    case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+        func_fatal_error "invalid tag name: $tagname"
+        ;;
+    esac
+
+    # Don't test for the "default" C tag, as we know it's
+    # there but not specially marked.
+    case $tagname in
+        CC) ;;
+    *)
+        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+         taglist="$taglist $tagname"
+
+         # Evaluate the configuration.  Be careful to quote the path
+         # and the sed script, to avoid splitting on whitespace, but
+         # also don't use non-portable quotes within backquotes within
+         # quotes we have to do it in 2 steps:
+         extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+         eval "$extractedcf"
+        else
+         func_error "ignoring unknown tag $tagname"
+        fi
+        ;;
+    esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+    if test "$package_revision" != "$macro_revision"; then
+      if test "$VERSION" != "$macro_version"; then
+        if test -z "$macro_version"; then
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        else
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        fi
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+      fi
+
+      exit $EXIT_MISMATCH
+    fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+    $debug_mode
+
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
+
+    nonopt=
+    preserve_args=
+
+    # Shorthand for --mode=foo, only valid as the first argument
+    case $1 in
+    clean|clea|cle|cl)
+      shift; set dummy --mode clean ${1+"$@"}; shift
+      ;;
+    compile|compil|compi|comp|com|co|c)
+      shift; set dummy --mode compile ${1+"$@"}; shift
+      ;;
+    execute|execut|execu|exec|exe|ex|e)
+      shift; set dummy --mode execute ${1+"$@"}; shift
+      ;;
+    finish|finis|fini|fin|fi|f)
+      shift; set dummy --mode finish ${1+"$@"}; shift
+      ;;
+    install|instal|insta|inst|ins|in|i)
+      shift; set dummy --mode install ${1+"$@"}; shift
+      ;;
+    link|lin|li|l)
+      shift; set dummy --mode link ${1+"$@"}; shift
+      ;;
+    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+      shift; set dummy --mode uninstall ${1+"$@"}; shift
+      ;;
+    esac
+
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+    $debug_cmd
+
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        case $1 in
+                          # Valid mode arguments:
+                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+                          # Catch anything else as an error
+                          *) func_error "invalid argument for $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+       # An option not handled by this hook function:
+        *)             set dummy "$_G_opt" ${1+"$@"};  shift; break  ;;
+      esac
+    done
+
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
+    fi
+
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
+
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
+
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
+
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+        func_error "unrecognized option '-dlopen'"
+        $ECHO "$help" 1>&2
+        exit $EXIT_FAILURE
+      fi
+
+      # Change the help message to a mode-specific one.
+      generic_help=$help
+      help="Try '$progname --help --mode=$opt_mode' for more information."
+    }
+
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case $lalib_p_line in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    test -f "$1" &&
+      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $debug_cmd
+
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$sp$nl
+      eval cmd=\"$cmd\"
+      IFS=$save_ifs
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $debug_cmd
+
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case $lt_sysroot:$1 in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result='='$func_stripname_result
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $debug_cmd
+
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+       func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_append_quoted CC_quoted "$arg"
+           done
+           CC_expanded=`func_echo_all $CC`
+           CC_quoted_expanded=`func_echo_all $CC_quoted`
+           case "$@ " in
+           " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+           " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with '--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
+    else
+      write_lobj=none
+    fi
+
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "$write_libobj"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $debug_cmd
+
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $debug_cmd
+
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $debug_cmd
+
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  '$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result=$1
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $debug_cmd
+
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  '$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result=$3
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $debug_cmd
+
+  case $4 in
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $debug_cmd
+
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $debug_cmd
+
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $debug_cmd
+
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $debug_cmd
+
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[    ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([      ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $debug_cmd
+
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg=$arg
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj=$arg
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify '-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         func_append later " $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs=$IFS; IFS=,
+         for arg in $args; do
+           IFS=$save_ifs
+           func_append_quoted lastarg "$arg"
+         done
+         IFS=$save_ifs
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         func_append base_compile " $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg=$srcfile
+         srcfile=$arg
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with '-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj=$func_basename_result
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from '$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test yes = "$build_libtool_libs" \
+         || func_fatal_configuration "cannot build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name '$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname=$func_basename_result
+    xdir=$func_dirname_result
+    lobj=$xdir$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test yes = "$build_old_libs"; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test yes = "$need_locks"; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test warn = "$need_locks"; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test yes = "$build_libtool_libs"; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test no != "$pic_mode"; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test yes = "$suppress_opt"; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test yes = "$compiler_c_o"; then
+       func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test no != "$need_locks"; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the '--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  use a list of object files found in FILE to specify objects
+  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode '$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test : = "$opt_help"; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       func_mode_help
+      done
+    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+       echo
+       func_mode_help
+      done
+    } |
+    $SED '1d
+      /^When reporting/,/^Report/{
+       H
+       d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $debug_cmd
+
+    # The first argument is the command name.
+    cmd=$nonopt
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+       || func_fatal_help "'$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "'$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "'$file' was not linked with '-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir=$func_dirname_result
+
+       if test -f "$dir/$objdir/$dlname"; then
+         func_append dir "/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir=$func_dirname_result
+       ;;
+
+      *)
+       func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir=$absdir
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic=$magic
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file=$progdir/$program
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file=$progdir/$program
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if $opt_dry_run; then
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    else
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd=\$cmd$args
+    fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $debug_cmd
+
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+       func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+       if func_lalib_unsafe_p "$opt"; then
+         func_append libs " $opt"
+       else
+         func_warning "'$opt' is not a valid libtool archive"
+       fi
+
+      else
+       func_fatal_error "invalid argument '$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+         $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+           > $tmpdir/tmp-la
+         mv -f $tmpdir/tmp-la $lib
+       done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_quiet && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+       $ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+       echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
+       echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+       echo "   - add LIBDIR to the '$runpath_var' environment variable"
+       echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+       libdir=LIBDIR
+       eval flag=\"$hardcode_libdir_flag_spec\"
+
+       $ECHO "   - use the '$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+       $ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+       echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+       solaris2.[6789]|solaris2.1[0-9])
+         echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+         echo "pages."
+         ;;
+       *)
+         echo "more information, such as the ld(1) and ld.so(8) manual pages."
+         ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $debug_cmd
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=false
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+       func_append files " $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=: ;;
+      -f)
+       if $install_cp; then :; else
+         prev=$arg
+       fi
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         if test X-m = "X$prev" && test -n "$install_override_mode"; then
+           arg2=$install_override_mode
+           no_mode=false
+         fi
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+       func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+       func_quote_for_eval "$install_override_mode"
+       func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir=$func_dirname_result
+      destname=$func_basename_result
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "'$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "'$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       func_append staticlibs " $file"
+       ;;
+
+      *.la)
+       func_resolve_sysroot "$file"
+       file=$func_resolve_sysroot_result
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "'$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) func_append current_libdirs " $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) func_append future_libdirs " $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir=$func_dirname_result
+       func_append dir "$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking '$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname=$1
+         shift
+
+         srcname=$realname
+         test -n "$relink_command" && srcname=${realname}T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme=$stripme
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=
+             ;;
+           esac
+           ;;
+         os2*)
+           case $realname in
+           *_dll.a)
+             tstripme=
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try 'ln -sf' first, because the 'ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib=$destdir/$realname
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name=$func_basename_result
+       instname=$dir/${name}i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile=$destdir/$destname
+       else
+         func_basename "$file"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest=$destfile
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to '$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test yes = "$build_old_libs"; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile=$destdir/$destname
+       else
+         func_basename "$file"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=.exe
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+         finalize=:
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "'$lib' has not been installed in '$libdir'"
+             finalize=false
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test no = "$fast_install" && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if $finalize; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file=$func_basename_result
+               outputname=$tmpdir/$file
+               # Replace the output file specification.
+               relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_quiet || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink '$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file=$outputname
+             else
+               func_warning "cannot relink '$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name=$func_basename_result
+
+      # Set up the ranlib parameters.
+      oldlib=$destdir/$name
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run '$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
+    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms=${my_outputname}S.c
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist=$output_objdir/$my_outputname.nm
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test yes = "$dlself"; then
+         func_verbose "generating symbol list for '$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+           func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+           $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols=$output_objdir/$outputname.exp
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin* | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from '$dlprefile'"
+         func_basename "$dlprefile"
+         name=$func_basename_result
+          case $host in
+           *cygwin* | *mingw* | *cegcc* )
+             # if an import library, we need to obtain dlname
+             if func_win32_import_lib_p "$dlprefile"; then
+               func_tr_sh "$dlprefile"
+               eval "curr_lafile=\$libfile_$func_tr_sh_result"
+               dlprefile_dlbasename=
+               if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+                 # Use subshell, to avoid clobbering current variable values
+                 dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+                 if test -n "$dlprefile_dlname"; then
+                   func_basename "$dlprefile_dlname"
+                   dlprefile_dlbasename=$func_basename_result
+                 else
+                   # no lafile. user explicitly requested -dlpreopen <import library>.
+                   $sharedlib_from_linklib_cmd "$dlprefile"
+                   dlprefile_dlbasename=$sharedlib_from_linklib_result
+                 fi
+               fi
+               $opt_dry_run || {
+                 if test -n "$dlprefile_dlbasename"; then
+                   eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+                 else
+                   func_warning "Could not compute DLL name from $name"
+                   eval '$ECHO ": $name " >> "$nlist"'
+                 fi
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+                   $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+               }
+             else # not an import lib
+               $opt_dry_run || {
+                 eval '$ECHO ": $name " >> "$nlist"'
+                 func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+                 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+               }
+             fi
+           ;;
+           *)
+             $opt_dry_run || {
+               eval '$ECHO ": $name " >> "$nlist"'
+               func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+               eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+             }
+           ;;
+          esac
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         func_show_eval '$RM "${nlist}I"'
+         if test -n "$global_symbol_to_import"; then
+           eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+         fi
+
+         echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+           $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+           echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+         fi
+         echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+         fi
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) func_append symtab_cflags " $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj=$output_objdir/${my_outputname}S.$objext
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for '$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $debug_cmd
+
+  win32_libid_type=unknown
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      case $nm_interface in
+      "MS dumpbin")
+       if func_cygming_ms_implib_p "$1" ||
+          func_cygming_gnu_implib_p "$1"
+       then
+         win32_nmres=import
+       else
+         win32_nmres=
+       fi
+       ;;
+      *)
+       func_to_tool_file "$1" func_convert_file_msys_to_w32
+       win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+         $SED -n -e '
+           1,100{
+               / I /{
+                   s|.*|import|
+                   p
+                   q
+               }
+           }'`
+       ;;
+      esac
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $debug_cmd
+
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $debug_cmd
+
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[         ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1"; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+                  'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test yes = "$lock_old_archive_extraction"; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $debug_cmd
+
+    my_gentop=$1; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=
+    my_xlib=
+    my_xabs=
+    my_xdir=
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib=$func_basename_result
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         func_basename "$darwin_archive"
+         darwin_base_archive=$func_basename_result
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches; do
+             func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+             $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+             cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+             func_extract_an_archive "`pwd`" "$darwin_base_archive"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=${1-no}
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs 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
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test yes = "$fast_install"; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       \$ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # fixup the dll searchpath if we need to.
+       #
+       # Fix the DLL searchpath if we need to.  Do this before prepending
+       # to shlibpath, because on Windows, both are PATH and uninstalled
+       # libraries must come first.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       # Export our shlibpath_var if we have one.
+       if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+           cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+           cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test yes = "$fast_install"; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  int rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, (size_t) argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (STREQ (argv[i], dumpscript_opt))
+       {
+EOF
+           case $host in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         lt_dump_script (stdout);
+         return 0;
+       }
+      if (STREQ (argv[i], debug_opt))
+       {
+          lt_debug = 1;
+          continue;
+       }
+      if (STREQ (argv[i], ltwrapper_option_prefix))
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+                   "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+           cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+           cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+                 tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+                 actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(main) libtool target name: %s\n",
+                 target_name);
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+                 nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+                     i, nonnull (newargz[i]));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+                     "(main) failed to launch target \"%s\": %s\n",
+                     lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  size_t tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = (size_t) (q - p);
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+                     "checking path component for symlinks: %s\n",
+                     tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         lt_fatal (__FILE__, __LINE__,
+                   "error accessing file \"%s\": %s",
+                   tmp_pathspec, nonnull (strerror (errno)));
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+               "could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (STREQ (str, pat))
+       *str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+              int line, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[--len] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+                 "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+       new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+       {
+         int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+         size_t length;
+         unsigned int backslashes;
+         const char *s;
+         char *quoted_string;
+         char *p;
+
+         length = 0;
+         backslashes = 0;
+         if (quote_around)
+           length++;
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               length += backslashes + 1;
+             length++;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           length += backslashes + 1;
+
+         quoted_string = XMALLOC (char, length + 1);
+
+         p = quoted_string;
+         backslashes = 0;
+         if (quote_around)
+           *p++ = '"';
+         for (s = string; *s != '\0'; s++)
+           {
+             char c = *s;
+             if (c == '"')
+               {
+                 unsigned int j;
+                 for (j = backslashes + 1; j > 0; j--)
+                   *p++ = '\\';
+               }
+             *p++ = c;
+             if (c == '\\')
+               backslashes++;
+             else
+               backslashes = 0;
+           }
+         if (quote_around)
+           {
+             unsigned int j;
+             for (j = backslashes; j > 0; j--)
+               *p++ = '\\';
+             *p++ = '"';
+           }
+         *p = '\0';
+
+         new_argv[i] = quoted_string;
+       }
+      else
+       new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+               ;;
+           esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+           func_emit_wrapper yes |
+             $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $debug_cmd
+
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+    $debug_cmd
+
+    case " $compile_command " in
+    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+      suncc_use_cstd_abi=no
+      ;;
+    *)
+      suncc_use_cstd_abi=yes
+      ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $debug_cmd
+
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # what system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll that has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    os2dllname=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=false
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module=$wl-single_module
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test yes != "$build_libtool_libs" \
+         && func_fatal_configuration "cannot build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg=$1
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       bindir)
+         bindir=$arg
+         prev=
+         continue
+         ;;
+       dlfiles|dlprefiles)
+         $preload || {
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=:
+         }
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test no = "$dlself"; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test dlprefiles = "$prev"; then
+             dlself=yes
+           elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test dlfiles = "$prev"; then
+             func_append dlfiles " $arg"
+           else
+             func_append dlprefiles " $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols=$arg
+         test -f "$arg" \
+           || func_fatal_error "symbol file '$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex=$arg
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) func_append deplibs " $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir=$arg
+         prev=
+         continue
+         ;;
+       mllvm)
+         # Clang does not use LLVM to link, so we can simply discard any
+         # '-mllvm $arg' options when doing the link step.
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            func_append moreargs " $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test none = "$pic_object" &&
+                  test none = "$non_pic_object"; then
+                 func_fatal_error "cannot find name of object for '$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir=$func_dirname_result
+
+               if test none != "$pic_object"; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object=$xdir$pic_object
+
+                 if test dlfiles = "$prev"; then
+                   if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+                     func_append dlfiles " $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test dlprefiles = "$prev"; then
+                   # Preload the old-style object.
+                   func_append dlprefiles " $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg=$pic_object
+               fi
+
+               # Non-PIC object.
+               if test none != "$non_pic_object"; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object=$xdir$non_pic_object
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test none = "$pic_object"; then
+                   arg=$non_pic_object
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object=$pic_object
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir=$func_dirname_result
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "'$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file '$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       os2dllname)
+         os2dllname=$arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex=$arg
+         prev=
+         continue
+         ;;
+       release)
+         release=-$arg
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test rpath = "$prev"; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) func_append rpath " $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) func_append xrpath " $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds=$arg
+         prev=
+         continue
+         ;;
+       weak)
+         func_append weak_libs " $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         func_append compiler_flags " $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         func_append linker_flags " $qarg"
+         func_append compiler_flags " $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg=$arg
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "'-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -bindir)
+       prev=bindir
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test X-export-symbols = "X$arg"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname "-L" '' "$arg"
+       if test -z "$func_stripname_result"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between '-L' and '$1'"
+         else
+           func_fatal_error "need path for '-L' option"
+         fi
+       fi
+       func_resolve_sysroot "$func_stripname_result"
+       dir=$func_resolve_sysroot_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of '$dir'"
+         dir=$absdir
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "* | *" $arg "*)
+         # Will only happen for absolute or sysroot arguments
+         ;;
+       *)
+         # Preserve sysroot, but never include relative directories
+         case $dir in
+           [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+           *) func_append deplibs " -L$dir" ;;
+         esac
+         func_append lib_search_path " $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) func_append dllsearchpath ":$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) func_append dllsearchpath ":$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+           # Do not include libc due to us having libc/libc_r.
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           func_append deplibs " System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test X-lc = "X$arg" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test X-lc = "X$arg" && continue
+           ;;
+         esac
+       elif test X-lc_r = "X$arg"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       func_append deplibs " $arg"
+       continue
+       ;;
+
+      -mllvm)
+       prev=mllvm
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+       func_append compiler_flags " $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+       func_append compiler_flags " $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) func_append new_inherited_linker_flags " $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module=$wl-multi_module
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "'-no-install' is ignored for $host"
+         func_warning "assuming '-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -os2dllname)
+       prev=os2dllname
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       =*)
+         func_stripname '=' '' "$dir"
+         dir=$lt_sysroot$func_stripname_result
+         ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) func_append xrpath " $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs=$IFS; IFS=,
+       for flag in $args; do
+         IFS=$save_ifs
+          func_quote_for_eval "$flag"
+         func_append arg " $func_quote_for_eval_result"
+         func_append compiler_flags " $func_quote_for_eval_result"
+       done
+       IFS=$save_ifs
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs=$IFS; IFS=,
+       for flag in $args; do
+         IFS=$save_ifs
+          func_quote_for_eval "$flag"
+         func_append arg " $wl$func_quote_for_eval_result"
+         func_append compiler_flags " $wl$func_quote_for_eval_result"
+         func_append linker_flags " $func_quote_for_eval_result"
+       done
+       IFS=$save_ifs
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # -fstack-protector*   stack protector flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -specs=*             GCC specs files
+      # -stdlib=*            select c++ std lib with clang
+      # -fsanitize=*         Clang/GCC memory and address sanitizer
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+      -specs=*|-fsanitize=*)
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      -Z*)
+        if test os2 = "`expr $host : '.*\(os2\)'`"; then
+          # OS/2 uses -Zxxx to specify OS/2-specific options
+         compiler_flags="$compiler_flags $arg"
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         case $arg in
+         -Zlinker | -Zstack)
+           prev=xcompiler
+           ;;
+         esac
+         continue
+        else
+         # Otherwise treat like 'Some other compiler flag' below
+         func_quote_for_eval "$arg"
+         arg=$func_quote_for_eval_result
+        fi
+       ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+
+      *.$objext)
+       # A standard object.
+       func_append objs " $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test none = "$pic_object" &&
+            test none = "$non_pic_object"; then
+           func_fatal_error "cannot find name of object for '$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir=$func_dirname_result
+
+         test none = "$pic_object" || {
+           # Prepend the subdirectory the object is found in.
+           pic_object=$xdir$pic_object
+
+           if test dlfiles = "$prev"; then
+             if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+               func_append dlfiles " $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test dlprefiles = "$prev"; then
+             # Preload the old-style object.
+             func_append dlprefiles " $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg=$pic_object
+         }
+
+         # Non-PIC object.
+         if test none != "$non_pic_object"; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object=$xdir$non_pic_object
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test none = "$pic_object"; then
+             arg=$non_pic_object
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object=$pic_object
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir=$func_dirname_result
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "'$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       func_append deplibs " $arg"
+       func_append old_deplibs " $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       func_resolve_sysroot "$arg"
+       if test dlfiles = "$prev"; then
+         # This library was specified with -dlopen.
+         func_append dlfiles " $func_resolve_sysroot_result"
+         prev=
+       elif test dlprefiles = "$prev"; then
+         # The library was specified with -dlpreopen.
+         func_append dlprefiles " $func_resolve_sysroot_result"
+         prev=
+       else
+         func_append deplibs " $func_resolve_sysroot_result"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prevarg' option requires an argument"
+
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname=$func_basename_result
+    libobjs_save=$libobjs
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    # Definition is injected by LT_CONFIG during libtool generation.
+    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+    func_dirname "$output" "/" ""
+    output_objdir=$func_dirname_result$objdir
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps; then
+       case "$libs " in
+       *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+       esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test lib = "$linkmode"; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+         esac
+         func_append pre_post_deps " $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=false
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test lib,link = "$linkmode,$pass"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs=$tmp_deplibs
+      fi
+
+      if test lib,link = "$linkmode,$pass" ||
+        test prog,scan = "$linkmode,$pass"; then
+       libs=$deplibs
+       deplibs=
+      fi
+      if test prog = "$linkmode"; then
+       case $pass in
+       dlopen) libs=$dlfiles ;;
+       dlpreopen) libs=$dlprefiles ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+         ;;
+       esac
+      fi
+      if test lib,dlpreopen = "$linkmode,$pass"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         func_resolve_sysroot "$lib"
+         case $lib in
+         *.la) func_source "$func_resolve_sysroot_result" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+           func_basename "$deplib"
+            deplib_base=$func_basename_result
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) func_append deplibs " $deplib" ;;
+           esac
+         done
+       done
+       libs=$dlprefiles
+      fi
+      if test dlopen = "$pass"; then
+       # Collect dlpreopened libraries
+       save_deplibs=$deplibs
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=false
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+         if test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           func_append compiler_flags " $deplib"
+           if test lib = "$linkmode"; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test lib != "$linkmode" && test prog != "$linkmode"; then
+           func_warning "'-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test lib = "$linkmode"; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib=$searchdir/lib$name$search_ext
+             if test -f "$lib"; then
+               if test .la = "$search_ext"; then
+                 found=:
+               else
+                 found=false
+               fi
+               break 2
+             fi
+           done
+         done
+         if $found; then
+           # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll=$l
+                 done
+                 if test "X$ll" = "X$old_library"; then # only static version available
+                   found=false
+                   func_dirname "$lib" "" "."
+                   ladir=$func_dirname_result
+                   lib=$ladir/$old_library
+                   if test prog,link = "$linkmode,$pass"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         else
+           # deplib doesn't seem to be a libtool library
+           if test prog,link = "$linkmode,$pass"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         fi
+         ;; # -l
+       *.ltframework)
+         if test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test lib = "$linkmode"; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) func_append new_inherited_linker_flags " $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test conv = "$pass" && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
+           ;;
+         prog)
+           if test conv = "$pass"; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test scan = "$pass"; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           func_append newlib_search_path " $func_resolve_sysroot_result"
+           ;;
+         *)
+           func_warning "'-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test link = "$pass"; then
+           func_stripname '-R' '' "$deplib"
+           func_resolve_sysroot "$func_stripname_result"
+           dir=$func_resolve_sysroot_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) func_append xrpath " $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la)
+         func_resolve_sysroot "$deplib"
+         lib=$func_resolve_sysroot_result
+         ;;
+       *.$libext)
+         if test conv = "$pass"; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=false
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=:
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=:
+               ;;
+             esac
+             if $valid_a_lib; then
+               echo
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             else
+               echo
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because the file extensions .$libext of this argument makes me believe"
+               echo "*** that it is just a static archive that I should not use here."
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test link != "$pass"; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test conv = "$pass"; then
+           deplibs="$deplib $deplibs"
+         elif test prog = "$linkmode"; then
+           if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             func_append newdlprefiles " $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             func_append newdlfiles " $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=:
+         continue
+         ;;
+       esac # case $deplib
+
+       $found || test -f "$lib" \
+         || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "'$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir=$func_dirname_result
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test lib,link = "$linkmode,$pass" ||
+          test prog,scan = "$linkmode,$pass" ||
+          { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+         test -n "$dlopen" && func_append dlfiles " $dlopen"
+         test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+       fi
+
+       if test conv = "$pass"; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for '$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           func_append convenience " $ladir/$objdir/$old_library"
+           func_append old_convenience " $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+             if $opt_preserve_dup_deps; then
+               case "$tmp_libs " in
+               *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+               esac
+             fi
+             func_append tmp_libs " $deplib"
+           done
+         elif test prog != "$linkmode" && test lib != "$linkmode"; then
+           func_fatal_error "'$lib' is not a convenience library"
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       if test -n "$old_library" &&
+          { test yes = "$prefer_static_libs" ||
+            test built,no = "$prefer_static_libs,$installed"; }; then
+         linklib=$old_library
+       else
+         for l in $old_library $library_names; do
+           linklib=$l
+         done
+       fi
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for '$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test dlopen = "$pass"; then
+         test -z "$libdir" \
+           && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+         if test -z "$dlname" ||
+            test yes != "$dlopen_support" ||
+            test no = "$build_libtool_libs"
+         then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           func_append dlprefiles " $lib $dependency_libs"
+         else
+           func_append newdlfiles " $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of '$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir=$ladir
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname=$func_basename_result
+
+       # Find the relevant object directory and library name.
+       if test yes = "$installed"; then
+         if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library '$lib' was moved."
+           dir=$ladir
+           absdir=$abs_ladir
+           libdir=$abs_ladir
+         else
+           dir=$lt_sysroot$libdir
+           absdir=$lt_sysroot$libdir
+         fi
+         test yes = "$hardcode_automatic" && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir=$ladir
+           absdir=$abs_ladir
+           # Remove this search path later
+           func_append notinst_path " $abs_ladir"
+         else
+           dir=$ladir/$objdir
+           absdir=$abs_ladir/$objdir
+           # Remove this search path later
+           func_append notinst_path " $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test dlpreopen = "$pass"; then
+         if test -z "$libdir" && test prog = "$linkmode"; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+         fi
+         case $host in
+           # special handling for platforms with PE-DLLs.
+           *cygwin* | *mingw* | *cegcc* )
+             # Linker will automatically link against shared library if both
+             # static and shared are present.  Therefore, ensure we extract
+             # symbols from the import library if a shared library is present
+             # (otherwise, the dlopen module name will be incorrect).  We do
+             # this by putting the import library name into $newdlprefiles.
+             # We recover the dlopen module name by 'saving' the la file
+             # name in a special purpose variable, and (later) extracting the
+             # dlname from the la file.
+             if test -n "$dlname"; then
+               func_tr_sh "$dir/$linklib"
+               eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+               func_append newdlprefiles " $dir/$linklib"
+             else
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             fi
+           ;;
+           * )
+             # Prefer using a static library (so that no silly _DYNAMIC symbols
+             # are required to link).
+             if test -n "$old_library"; then
+               func_append newdlprefiles " $dir/$old_library"
+               # Keep a list of preopened convenience libraries to check
+               # that they are being used correctly in the link pass.
+               test -z "$libdir" && \
+                 func_append dlpreconveniencelibs " $dir/$old_library"
+             # Otherwise, use the dlname, so that lt_dlopen finds it.
+             elif test -n "$dlname"; then
+               func_append newdlprefiles " $dir/$dlname"
+             else
+               func_append newdlprefiles " $dir/$linklib"
+             fi
+           ;;
+         esac
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test lib = "$linkmode"; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test prog,link = "$linkmode,$pass"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test prog = "$linkmode" && test link != "$pass"; then
+         func_append newlib_search_path " $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=false
+         if test no != "$link_all_deplibs" || test -z "$library_names" ||
+            test no = "$build_libtool_libs"; then
+           linkalldeplibs=:
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                func_resolve_sysroot "$func_stripname_result"
+                func_append newlib_search_path " $func_resolve_sysroot_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if $linkalldeplibs; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_preserve_dup_deps; then
+             case "$tmp_libs " in
+             *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+             esac
+           fi
+           func_append tmp_libs " $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test prog,link = "$linkmode,$pass"; then
+         if test -n "$library_names" &&
+            { { test no = "$prefer_static_libs" ||
+                test built,yes = "$prefer_static_libs,$installed"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+             # Make sure the rpath contains only unique directories.
+             case $temp_rpath: in
+             *"$absdir:"*) ;;
+             *) func_append temp_rpath "$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) func_append compile_rpath " $absdir" ;;
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) func_append finalize_rpath " $libdir" ;;
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if $alldeplibs &&
+            { test pass_all = "$deplibs_check_method" ||
+              { test yes = "$build_libtool_libs" &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test built = "$use_static_libs" && test yes = "$installed"; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test no = "$use_static_libs" || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc* | *os2*)
+             # No point in relinking DLLs because paths are not encoded
+             func_append notinst_deplibs " $lib"
+             need_relink=no
+           ;;
+         *)
+           if test no = "$installed"; then
+             func_append notinst_deplibs " $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule=$dlpremoduletest
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+           echo
+           if test prog = "$linkmode"; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test lib = "$linkmode" &&
+            test yes = "$hardcode_into_libs"; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) func_append compile_rpath " $absdir" ;;
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) func_append finalize_rpath " $libdir" ;;
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname=$1
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname=$dlname
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc* | *os2*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix=-$major
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname=$realname
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot=$soname
+           func_basename "$soroot"
+           soname=$func_basename_result
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from '$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for '$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test prog = "$linkmode" || test relink != "$opt_mode"; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test no = "$hardcode_direct"; then
+               add=$dir/$linklib
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+                 *-*-sysv4*uw2*) add_dir=-L$dir ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir=-L$dir ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we cannot
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library"; then
+                         echo
+                         echo "*** And there doesn't seem to be a static archive available"
+                         echo "*** The link will probably fail, sorry"
+                       else
+                         add=$dir/$old_library
+                       fi
+                     elif test -n "$old_library"; then
+                       add=$dir/$old_library
+                     fi
+                   fi
+               esac
+             elif test no = "$hardcode_minus_L"; then
+               case $host in
+               *-*-sunos*) add_shlibpath=$dir ;;
+               esac
+               add_dir=-L$dir
+               add=-l$name
+             elif test no = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test yes = "$hardcode_direct" &&
+                test no = "$hardcode_direct_absolute"; then
+               add=$dir/$linklib
+             elif test yes = "$hardcode_minus_L"; then
+               add_dir=-L$absdir
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     func_append add_dir " -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add=-l$name
+             elif test yes = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test yes != "$lib_linked"; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) func_append compile_shlibpath "$add_shlibpath:" ;;
+             esac
+           fi
+           if test prog = "$linkmode"; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test yes != "$hardcode_direct" &&
+                test yes != "$hardcode_minus_L" &&
+                test yes = "$hardcode_shlibpath_var"; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) func_append finalize_shlibpath "$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test prog = "$linkmode" || test relink = "$opt_mode"; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test yes = "$hardcode_direct" &&
+              test no = "$hardcode_direct_absolute"; then
+             add=$libdir/$linklib
+           elif test yes = "$hardcode_minus_L"; then
+             add_dir=-L$libdir
+             add=-l$name
+           elif test yes = "$hardcode_shlibpath_var"; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) func_append finalize_shlibpath "$libdir:" ;;
+             esac
+             add=-l$name
+           elif test yes = "$hardcode_automatic"; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib"; then
+               add=$inst_prefix_dir$libdir/$linklib
+             else
+               add=$libdir/$linklib
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir=-L$libdir
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   func_append add_dir " -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add=-l$name
+           fi
+
+           if test prog = "$linkmode"; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test prog = "$linkmode"; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test unsupported != "$hardcode_direct"; then
+           test -n "$old_library" && linklib=$old_library
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test yes = "$build_libtool_libs"; then
+         # Not a shared library
+         if test pass_all != "$deplibs_check_method"; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           echo
+           $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+           echo "*** I have the capability to make that library automatically link in when"
+           echo "*** you link to this library.  But I can only do this if you have a"
+           echo "*** shared version of the library, which you do not appear to have."
+           if test yes = "$module"; then
+             echo "*** But as you try to build a module library, libtool will still create "
+             echo "*** a static module, that should work as long as the dlopening application"
+             echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               echo
+               echo "*** However, this would only work if libtool was able to extract symbol"
+               echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+               echo "*** not find such a program.  So, this module is probably useless."
+               echo "*** 'nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test no = "$build_old_libs"; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test lib = "$linkmode"; then
+         if test -n "$dependency_libs" &&
+            { test yes != "$hardcode_into_libs" ||
+              test yes = "$build_old_libs" ||
+              test yes = "$link_static"; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) func_append xrpath " $temp_xrpath";;
+                  esac;;
+             *) func_append temp_deplibs " $libdir";;
+             esac
+           done
+           dependency_libs=$temp_deplibs
+         fi
+
+         func_append newlib_search_path " $absdir"
+         # Link against this library
+         test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+           if $opt_preserve_dup_deps; then
+             case "$tmp_libs " in
+             *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+             esac
+           fi
+           func_append tmp_libs " $func_resolve_sysroot_result"
+         done
+
+         if test no != "$link_all_deplibs"; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             path=
+             case $deplib in
+             -L*) path=$deplib ;;
+             *.la)
+               func_resolve_sysroot "$deplib"
+               deplib=$func_resolve_sysroot_result
+               func_dirname "$deplib" "" "."
+               dir=$func_dirname_result
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of '$dir'"
+                   absdir=$dir
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names"; then
+                   for tmp in $deplibrary_names; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl"; then
+                     depdepl=$absdir/$objdir/$depdepl
+                     darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+                     func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path=-L$absdir/$objdir
+                 ;;
+               esac
+               else
+                 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "'$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "'$deplib' seems to be moved"
+
+                 path=-L$absdir
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test link = "$pass"; then
+       if test prog = "$linkmode"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test dlopen != "$pass"; then
+       test conv = "$pass" || {
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) func_append lib_search_path " $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       }
+
+       if test prog,link = "$linkmode,$pass"; then
+         vars="compile_deplibs finalize_deplibs"
+       else
+         vars=deplibs
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) func_append tmp_libs " $deplib" ;;
+             esac
+             ;;
+           *) func_append tmp_libs " $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+
+      # Add Sun CC postdeps if required:
+      test CXX = "$tagname" && {
+        case $host_os in
+        linux*)
+          case `$CC -V 2>&1 | sed 5q` in
+          *Sun\ C*) # Sun C++ 5.9
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+
+        solaris*)
+          func_cc_basename "$CC"
+          case $func_cc_basename_result in
+          CC* | sunCC*)
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+        esac
+      }
+
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=
+         ;;
+       esac
+       if test -n "$i"; then
+         func_append tmp_libs " $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
+    fi
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "'-l' and '-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "'-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "'-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "'-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "'-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs=$output
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form 'libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test no = "$module" \
+         && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+       if test no != "$need_lib_prefix"; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test pass_all != "$deplibs_check_method"; then
+         func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+       else
+         echo
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         func_append libobjs " $objs"
+       fi
+      fi
+
+      test no = "$dlself" \
+       || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test 1 -lt "$#" \
+       && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+      install_libdir=$1
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test yes = "$build_libtool_libs"; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a '.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "'-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs=$IFS; IFS=:
+       set dummy $vinfo 0 0 0
+       shift
+       IFS=$save_ifs
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to '-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major=$1
+         number_minor=$2
+         number_revision=$3
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # that has an extra 1 added just for fun
+         #
+         case $version_type in
+         # correct linux to gnu/linux during the next big refactor
+         darwin|freebsd-elf|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age=$number_minor
+           revision=$number_revision
+           ;;
+         freebsd-aout|qnx|sunos)
+           current=$number_major
+           revision=$number_minor
+           age=0
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age=$number_minor
+           revision=$number_minor
+           lt_irix_increment=no
+           ;;
+         *)
+           func_fatal_configuration "$modename: unknown library version type '$version_type'"
+           ;;
+         esac
+         ;;
+       no)
+         current=$1
+         revision=$2
+         age=$3
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT '$current' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION '$revision' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE '$age' must be a nonnegative integer"
+         func_fatal_error "'$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE '$age' is greater than the current interface number '$current'"
+         func_fatal_error "'$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
+         ;;
+
+       freebsd-aout)
+         major=.$current
+         versuffix=.$current.$revision
+         ;;
+
+       freebsd-elf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         ;;
+
+       irix | nonstopux)
+         if test no = "$lt_irix_increment"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring=$verstring_prefix$major.$revision
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test 0 -ne "$loop"; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring=$verstring_prefix$major.$iface:$verstring
+         done
+
+         # Before this point, $major must not contain '.'.
+         major=.$major
+         versuffix=$major.$revision
+         ;;
+
+       linux) # correct to gnu/linux during the next big refactor
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=.$current.$age.$revision
+         verstring=$current.$age.$revision
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test 0 -ne "$loop"; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring=$verstring:$iface.0
+         done
+
+         # Make executables depend on our current version.
+         func_append verstring ":$current.0"
+         ;;
+
+       qnx)
+         major=.$current
+         versuffix=.$current
+         ;;
+
+       sco)
+         major=.$current
+         versuffix=.$current
+         ;;
+
+       sunos)
+         major=.$current
+         versuffix=.$current.$revision
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 file systems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix=-$major
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type '$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring=0.0
+           ;;
+         esac
+         if test no = "$need_version"; then
+           versuffix=
+         else
+           versuffix=.0.0
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test yes,no = "$avoid_version,$need_version"; then
+         major=
+         versuffix=
+         verstring=
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test yes = "$allow_undefined"; then
+         if test unsupported = "$allow_undefined_flag"; then
+           if test yes = "$build_old_libs"; then
+             func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+             build_libtool_libs=no
+           else
+             func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+           fi
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag=$no_undefined_flag
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" :
+      func_append libobjs " $symfileobj"
+      test " " = "$libobjs" && libobjs=
+
+      if test relink != "$opt_mode"; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+              if test -n "$precious_files_regex"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              func_append removelist " $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+       func_append oldlibs " $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #        deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         func_replace_sysroot "$libdir"
+         func_append temp_xrpath " -R$func_replace_sysroot_result"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_rpath " $libdir" ;;
+         esac
+       done
+       if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles=$dlfiles
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) func_append dlfiles " $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles=$dlprefiles
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) func_append dlprefiles " $lib" ;;
+       esac
+      done
+
+      if test yes = "$build_libtool_libs"; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           func_append deplibs " System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test yes = "$build_libtool_need_lc"; then
+             func_append deplibs " -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=
+       versuffix=
+       major=
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   func_append newdeplibs " $i"
+                   i=
+                   ;;
+                 esac
+               fi
+               if test -n "$i"; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+                   func_append newdeplibs " $i"
+                 else
+                   droppeddeps=yes
+                   echo
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   echo "*** I have the capability to make that library automatically link in when"
+                   echo "*** you link to this library.  But I can only do this if you have a"
+                   echo "*** shared version of the library, which I believe you do not have"
+                   echo "*** because a test_compile did reveal that the linker did not use it for"
+                   echo "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               func_append newdeplibs " $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     func_append newdeplibs " $i"
+                     i=
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i"; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+                     func_append newdeplibs " $i"
+                   else
+                     droppeddeps=yes
+                     echo
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     echo "*** I have the capability to make that library automatically link in when"
+                     echo "*** you link to this library.  But I can only do this if you have a"
+                     echo "*** shared version of the library, which you do not appear to have"
+                     echo "*** because a test_compile did reveal that the linker did not use this one"
+                     echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 echo
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 echo "*** make it link in!  You will probably need to install it or some"
+                 echo "*** library that it depends on before this library will be fully"
+                 echo "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               func_append newdeplibs " $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 func_append newdeplibs " $a_deplib"
+                 a_deplib=
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib"; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               if test -n "$file_magic_glob"; then
+                 libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+               else
+                 libnameglob=$libname
+               fi
+               test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 if test yes = "$want_nocaseglob"; then
+                   shopt -s nocaseglob
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                   $nocaseglob
+                 else
+                   potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+                 fi
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib=$potent_lib
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+                       *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       func_append newdeplibs " $a_deplib"
+                       a_deplib=
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib"; then
+               droppeddeps=yes
+               echo
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib"; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             func_append newdeplibs " $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 func_append newdeplibs " $a_deplib"
+                 a_deplib=
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib"; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib=$potent_lib # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     func_append newdeplibs " $a_deplib"
+                     a_deplib=
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib"; then
+               droppeddeps=yes
+               echo
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               echo "*** I have the capability to make that library automatically link in when"
+               echo "*** you link to this library.  But I can only do this if you have a"
+               echo "*** shared version of the library, which you do not appear to have"
+               echo "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib"; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             func_append newdeplibs " $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=
+         tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+         if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+           for i in $predeps $postdeps; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+           done
+         fi
+         case $tmp_deplibs in
+         *[!\  \ ]*)
+           echo
+           if test none = "$deplibs_check_method"; then
+             echo "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             echo "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           echo "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+           ;;
+         esac
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test yes = "$droppeddeps"; then
+         if test yes = "$module"; then
+           echo
+           echo "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           echo "*** a static module, that should work as long as the dlopening"
+           echo "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             echo
+             echo "*** However, this would only work if libtool was able to extract symbol"
+             echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+             echo "*** not find such a program.  So, this module is probably useless."
+             echo "*** 'nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test no = "$build_old_libs"; then
+             oldlibs=$output_objdir/$libname.$libext
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           echo "*** The inter-library dependencies that have been dropped here will be"
+           echo "*** automatically added whenever a program is linked with this library"
+           echo "*** or is declared to -dlopen it."
+
+           if test no = "$allow_undefined"; then
+             echo
+             echo "*** Since this library must not contain undefined symbols,"
+             echo "*** because either the platform does not support them or"
+             echo "*** it was explicitly requested with -no-undefined,"
+             echo "*** libtool will only create a static version of it."
+             if test no = "$build_old_libs"; then
+               oldlibs=$output_objdir/$libname.$libext
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           func_append new_libs " -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) func_append new_libs " $deplib" ;;
+         esac
+         ;;
+       *) func_append new_libs " $deplib" ;;
+       esac
+      done
+      deplibs=$new_libs
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test yes = "$build_libtool_libs"; then
+       # Remove $wl instances when linking with ld.
+       # FIXME: should test the right _cmds variable.
+       case $archive_cmds in
+         *\$LD\ *) wl= ;;
+        esac
+       if test yes = "$hardcode_into_libs"; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath=$finalize_rpath
+         test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               func_replace_sysroot "$libdir"
+               libdir=$func_replace_sysroot_result
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs=$libdir
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               func_append dep_rpath " $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) func_append perm_rpath " $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir=$hardcode_libdirs
+           eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             func_append rpath "$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath=$finalize_shlibpath
+       test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname=$1
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname=$realname
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib=$output_objdir/$realname
+       linknames=
+       for link
+       do
+         func_append linknames " $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols=$output_objdir/$libname.uexp
+         func_append delfiles " $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           func_dll_def_p "$export_symbols" || {
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols=$export_symbols
+             export_symbols=
+             always_export_symbols=yes
+           }
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for '$libname.la'"
+           export_symbols=$output_objdir/$libname.exp
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs=$IFS; IFS='~'
+           for cmd1 in $cmds; do
+             IFS=$save_ifs
+             # Take the normal branch if the nm_file_list_spec branch
+             # doesn't work or if tool conversion is not needed.
+             case $nm_file_list_spec~$to_tool_file_cmd in
+               *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+                 try_normal_branch=yes
+                 eval cmd=\"$cmd1\"
+                 func_len " $cmd"
+                 len=$func_len_result
+                 ;;
+               *)
+                 try_normal_branch=no
+                 ;;
+             esac
+             if test yes = "$try_normal_branch" \
+                && { test "$len" -lt "$max_cmd_len" \
+                     || test "$max_cmd_len" -le -1; }
+             then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             elif test -n "$nm_file_list_spec"; then
+               func_basename "$output"
+               output_la=$func_basename_result
+               save_libobjs=$libobjs
+               save_output=$output
+               output=$output_objdir/$output_la.nm
+               func_to_tool_file "$output"
+               libobjs=$nm_file_list_spec$func_to_tool_file_result
+               func_append delfiles " $output"
+               func_verbose "creating $NM input file list: $output"
+               for obj in $save_libobjs; do
+                 func_to_tool_file "$obj"
+                 $ECHO "$func_to_tool_file_result"
+               done > "$output"
+               eval cmd=\"$cmd1\"
+               func_show_eval "$cmd" 'exit $?'
+               output=$save_output
+               libobjs=$save_libobjs
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS=$save_ifs
+           if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols=$export_symbols
+         test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+         $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands, which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           func_append tmp_deplibs " $test_deplib"
+           ;;
+         esac
+       done
+       deplibs=$tmp_deplibs
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test yes = "$compiler_needs_object" &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop=$output_objdir/${outputname}x
+           func_append generated " $gentop"
+
+           func_extract_archives $gentop $convenience
+           func_append libobjs " $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         func_append linker_flags " $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test relink = "$opt_mode"; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test yes = "$module" && test -n "$module_cmds"; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test : != "$skipped_export" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         func_basename "$output"
+         output_la=$func_basename_result
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+           output=$output_objdir/$output_la.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           echo 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
+           done
+           echo ')' >> $output
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$func_to_tool_file_result
+         elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+           output=$output_objdir/$output_la.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test yes = "$compiler_needs_object"; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
+           done
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-$k.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test -z "$objlist" ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test 1 -eq "$k"; then
+                   # The first file doesn't have a previous command to add.
+                   reload_objs=$objlist
+                   eval concat_cmds=\"$reload_cmds\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   reload_objs="$objlist $last_robj"
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-$k.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-$k.$objext
+                 objlist=" $obj"
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             reload_objs="$objlist $last_robj"
+             eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+             func_append delfiles " $output"
+
+           else
+             output=
+           fi
+
+           ${skipped_export-false} && {
+             func_verbose "generating symbol list for '$libname.la'"
+             export_symbols=$output_objdir/$libname.exp
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           }
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs=$IFS; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS=$save_ifs
+             $opt_quiet || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test relink = "$opt_mode"; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS=$save_ifs
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          ${skipped_export-false} && {
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols=$export_symbols
+             test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+             $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands, which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         }
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test yes = "$module" && test -n "$module_cmds"; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         func_append libobjs " $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs=$IFS; IFS='~'
+       for cmd in $cmds; do
+         IFS=$sp$nl
+         eval cmd=\"$cmd\"
+         IFS=$save_ifs
+         $opt_quiet || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test relink = "$opt_mode"; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS=$save_ifs
+
+       # Restore the uninstalled library and exit
+       if test relink = "$opt_mode"; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test yes = "$module" || test yes = "$export_dynamic"; then
+         # On all known operating systems, these are identical.
+         dlname=$soname
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "'-l' and '-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "'-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "'-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "'-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj=$output
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # if reload_cmds runs $LD directly, get rid of -Wl from
+      # whole_archive_flag_spec and hope we can get by with turning comma
+      # into space.
+      case $reload_cmds in
+        *\$LD[\ \$]*) wl= ;;
+      esac
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+         reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+       else
+         gentop=$output_objdir/${obj}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+      # Create the old-style object.
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+      output=$obj
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      test yes = "$build_libtool_libs" || {
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      }
+
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output=$libobj
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "'-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "'-release' is ignored for programs"
+
+      $preload \
+       && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+       && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test CXX = "$tagname"; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             func_append compile_command " $wl-bind_at_load"
+             func_append finalize_command " $wl-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           func_append new_libs " -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) func_append new_libs " $deplib" ;;
+         esac
+         ;;
+       *) func_append new_libs " $deplib" ;;
+       esac
+      done
+      compile_deplibs=$new_libs
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_rpath " $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs=$libdir
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           func_append rpath " $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) func_append perm_rpath " $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) func_append dllsearchpath ":$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) func_append dllsearchpath ":$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir=$hardcode_libdirs
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath=$rpath
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs=$libdir
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           func_append rpath " $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) func_append finalize_perm_rpath " $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir=$hardcode_libdirs
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath=$rpath
+
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=:
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=false
+        ;;
+      *cygwin* | *mingw* )
+        test yes = "$build_libtool_libs" || wrappers_required=false
+        ;;
+      *)
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
+        fi
+        ;;
+      esac
+      $wrappers_required || {
+       # Replace the output file specification.
+       compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+       link_command=$compile_command$compile_rpath
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.$objext"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+       fi
+
+       exit $exit_status
+      }
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           func_append rpath "$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           func_append rpath "$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test yes = "$no_install"; then
+       # We don't need to create a wrapper script.
+       link_command=$compile_var$compile_command$compile_rpath
+       # Replace the output file specification.
+       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+
+       if test -n "$postlink_cmds"; then
+         func_to_tool_file "$output"
+         postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+         func_execute_cmds "$postlink_cmds" 'exit $?'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      case $hardcode_action,$fast_install in
+        relink,*)
+         # Fast installation is not supported
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+
+         func_warning "this platform does not like uninstalled shared libraries"
+         func_warning "'$output' will be relinked during installation"
+         ;;
+        *,yes)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+       *,no)
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+       *,needless)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=
+          ;;
+      esac
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+       func_to_tool_file "$output_objdir/$outputname"
+       postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+       func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource=$output_path/$objdir/lt-$output_name.c
+           cwrapper=$output_path/$output_name.exe
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host"; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      case $build_libtool_libs in
+        convenience)
+         oldobjs="$libobjs_save $symfileobj"
+         addlibs=$convenience
+         build_libtool_libs=no
+         ;;
+       module)
+         oldobjs=$libobjs_save
+         addlibs=$old_convenience
+         build_libtool_libs=no
+          ;;
+       *)
+         oldobjs="$old_deplibs $non_pic_objects"
+         $preload && test -f "$symfileobj" \
+           && func_append oldobjs " $symfileobj"
+         addlibs=$old_convenience
+         ;;
+      esac
+
+      if test -n "$addlibs"; then
+       gentop=$output_objdir/${outputname}x
+       func_append generated " $gentop"
+
+       func_extract_archives $gentop $addlibs
+       func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         func_append oldobjs " $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         echo "copying selected object files to avoid basename conflicts..."
+         gentop=$output_objdir/${outputname}x
+         func_append generated " $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase=$func_basename_result
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             func_append oldobjs " $gentop/$newobj"
+             ;;
+           *) func_append oldobjs " $obj" ;;
+           esac
+         done
+       fi
+       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+       tool_oldlib=$func_to_tool_file_result
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       elif test -n "$archiver_list_spec"; then
+         func_verbose "using command file archive linking..."
+         for obj in $oldobjs
+         do
+           func_to_tool_file "$obj"
+           $ECHO "$func_to_tool_file_result"
+         done > $output_objdir/$libname.libcmd
+         func_to_tool_file "$output_objdir/$libname.libcmd"
+         oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj"; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test -z "$oldobjs"; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test yes = "$build_old_libs" && old_library=$libname.$libext
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test yes = "$hardcode_automatic"; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test yes = "$installed"; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output=$output_objdir/${outputname}i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name=$func_basename_result
+               func_resolve_sysroot "$deplib"
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+               test -z "$libdir" && \
+                 func_fatal_error "'$deplib' is not a valid libtool archive"
+               func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             -L*)
+               func_stripname -L '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -L$func_replace_sysroot_result"
+               ;;
+             -R*)
+               func_stripname -R '' "$deplib"
+               func_replace_sysroot "$func_stripname_result"
+               func_append newdependency_libs " -R$func_replace_sysroot_result"
+               ;;
+             *) func_append newdependency_libs " $deplib" ;;
+             esac
+           done
+           dependency_libs=$newdependency_libs
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "'$lib' is not a valid libtool archive"
+               func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             *) func_append newdlfiles " $lib" ;;
+             esac
+           done
+           dlfiles=$newdlfiles
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name=$func_basename_result
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "'$lib' is not a valid libtool archive"
+               func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles=$newdlprefiles
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             func_append newdlfiles " $abs"
+           done
+           dlfiles=$newdlfiles
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             func_append newdlprefiles " $abs"
+           done
+           dlprefiles=$newdlprefiles
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         # In fact, it would be nice if we could use this code for all target
+         # systems that can't hard-code library paths into their executables
+         # and that have no shared library path variable independent of PATH,
+         # but it turns out we can't easily determine that from inspecting
+         # libtool variables, so we have to hard-code the OSs to which it
+         # applies here; at the moment, that means platforms that use the PE
+         # object format with DLL files.  See the long comment at the top of
+         # tests/bindir.at for full details.
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+             # If a -bindir argument was supplied, place the dll there.
+             if test -n "$bindir"; then
+               func_relative_path "$install_libdir" "$bindir"
+               tdlname=$func_relative_path_result/$dlname
+             else
+               # Otherwise fall back on heuristic.
+               tdlname=../bin/$dlname
+             fi
+             ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test no,yes = "$installed,$need_relink"; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $debug_cmd
+
+    RM=$nonopt
+    files=
+    rmforce=false
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=: ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+       odir=$objdir
+      else
+       odir=$dir/$objdir
+      fi
+      func_basename "$file"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test clean = "$opt_mode"; then
+       case " $rmdirs " in
+         *" $odir "*) ;;
+         *) func_append rmdirs " $odir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif $rmforce; then
+       continue
+      fi
+
+      rmfiles=$file
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           func_append rmfiles " $odir/$n"
+         done
+         test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+         case $opt_mode in
+         clean)
+           case " $library_names " in
+           *" $dlname "*) ;;
+           *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+           esac
+           test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" && test none != "$pic_object"; then
+           func_append rmfiles " $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+           func_append rmfiles " $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test clean = "$opt_mode"; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           func_append rmfiles " $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             func_append rmfiles " $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+           if test yes = "$fast_install" && test -n "$relink_command"; then
+             func_append rmfiles " $odir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name"; then
+             func_append rmfiles " $odir/lt-$noexename.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the $objdir's in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+  help=$generic_help
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/config/missing b/config/missing
new file mode 100644 (file)
index 0000000..f62bbae
--- /dev/null
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written 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
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+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
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# 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/config/test-driver b/config/test-driver
new file mode 100644 (file)
index 0000000..8e575b0
--- /dev/null
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 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.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='\e[0;31m' # Red.
+  grn='\e[0;32m' # Green.
+  lgn='\e[1;32m' # Light green.
+  blu='\e[1;34m' # Blue.
+  mgn='\e[0;35m' # Magenta.
+  std='\e[m'     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# 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/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..b0e5ffd
--- /dev/null
@@ -0,0 +1,310 @@
+AC_INIT([asn1c],[0.9.29],[vlm@lionet.info])
+
+AC_CONFIG_AUX_DIR(config)
+AC_CONFIG_HEADER([config.h])
+AM_INIT_AUTOMAKE([foreign])
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_YACC
+AM_PROG_LEX
+dnl locate ar using standard macro (old automake 1.11 does not know about AM_PROG_AR)
+m4_ifdef([AM_PROG_AR],
+         [AM_PROG_AR],
+         [AC_PATH_PROG(AR, ar, ar, $PATH:/usr/ucb:/usr/ccs/bin)])
+
+AC_PROG_CXX
+CXXFLAGS="-std=c++11"
+
+LT_INIT
+
+dnl If you need to see the details, just run make V=1.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+case "$host_os" in
+cygwin)
+       case "$target" in
+       *mingw*)
+               CC="$CC -mno-cygwin"
+       esac
+       ;;
+esac
+
+AC_ARG_ENABLE([ASN_DEBUG],
+  [AS_HELP_STRING([--enable-ASN_DEBUG],
+                  [produce debug log during `make check` testing])],
+  [enable_asn_debug=$enableval], [enable_asn_debug=no])
+  AS_IF([test x$enable_asn_debug != xno], [
+      TESTSUITE_CFLAGS="-DASN_EMIT_DEBUG"
+      SKELETONS_CFLAGS="-DASN_EMIT_DEBUG"
+  ])
+
+AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"])
+AX_CHECK_COMPILE_FLAG([-Wcast-qual], [CFLAGS="$CFLAGS -Wcast-qual"])
+AX_CHECK_COMPILE_FLAG([-Wchar-subscripts],
+      [CFLAGS="$CFLAGS -Wchar-subscripts"])
+AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes],
+      [CFLAGS="$CFLAGS -Wmissing-prototypes"])
+AX_CHECK_COMPILE_FLAG([-Wmissing-declarations],
+      [CFLAGS="$CFLAGS -Wmissing-declarations"])
+
+dnl There are legitimate uses for these features, disable warnings/errors.
+AX_CHECK_COMPILE_FLAG([-Wno-error=attributes],
+      [CFLAGS="$CFLAGS -Wno-error=attributes"])
+AX_CHECK_COMPILE_FLAG([-Wno-error=cast-align],
+      [CFLAGS="$CFLAGS -Wno-error=cast-align"])
+AX_CHECK_COMPILE_FLAG([-Wno-error=visibility],
+      [CFLAGS="$CFLAGS -Wno-error=visibility"])
+AX_CHECK_COMPILE_FLAG([-Wno-error=parentheses-equality],
+      [CFLAGS="$CFLAGS -Wno-error=parentheses-equality"])
+AX_CHECK_COMPILE_FLAG([-std=gnu99],
+      [CFLAGS="$CFLAGS -std=gnu99"
+       TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -std=gnu99"])
+AX_CHECK_COMPILE_FLAG([-Wno-error=unused-variable],
+      [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Wno-error=unused-variable"])
+
+dnl Lower the optimization level in tests to aid debugging.
+dnl AX_CHECK_COMPILE_FLAG([-O1],
+dnl    [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -O1"])
+dnl AX_CHECK_COMPILE_FLAG([-fno-inline],
+dnl     [TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -fno-inline"])
+
+AX_CODE_COVERAGE
+AS_IF([test x$enable_code_coverage != xno], [
+       CFLAGS="$CFLAGS $CODE_COVERAGE_CFLAGS"
+       # The CODE_COVERAGE_CPPFLAGS contains -DNDEBUG flag
+       # which removes assert(...) macros from code coverage and improves the
+       # branches score. But when it is defined it results in few
+       # unsed-but-set-variable warnings that are treated as errors in the travis-ci
+       # build because these variables are only used inside assert macros.
+       # error: variable ‘ret’ set but not used [-Werror=unused-but-set-variable]
+       #CPPFLAGS="$CPPFLAGS $CODE_COVERAGE_CPPFLAGS"
+       CXXFLAGS="$CXXFLAGS $CODE_COVERAGE_CXXFLAGS"
+       AC_SEARCH_LIBS(gcov_open, gcov, [LDFLAGS="$LDFLAGS $CODE_COVERAGE_LDFLAGS"])
+])
+
+dnl Skeletons should be very compatible with most of the compilers, hence
+dnl very strict backward compatibility flags.
+SKELETONS_CFLAGS="${ADD_CFLAGS} ${SKELETONS_CFLAGS}"
+AX_CHECK_COMPILE_FLAG([-std=c89],
+    [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -std=c89"])
+AX_CHECK_COMPILE_FLAG([-Wpedantic],
+    [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -Wpedantic"],
+    [
+        dnl When -Wpedantic is not supported try the -pedantic instead. (gcc-4.7)
+        dnl See https://gcc.gnu.org/gcc-4.8/changes.html
+        AX_CHECK_COMPILE_FLAG([-pedantic],
+            [SKELETONS_CFLAGS="$SKELETONS_CFLAGS -pedantic"], [], [-Werror])
+    ],
+    [-Werror]) #clang 3.0 prints warning when the flag is not supported
+
+AC_ARG_ENABLE(Werror,
+  [AS_HELP_STRING([--enable-Werror],
+                  [abort compilation after any C compiler warning])],
+  [enable_werror=$enableval], [enable_werror=no])
+  AS_IF([test x$enable_werror != xno], [
+      ADD_CFLAGS="${ADD_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Werror -W -Wall -Wpointer-arith"
+      AX_CHECK_COMPILE_FLAG([-Wgnu],
+        [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wgnu"])
+  ])
+
+AX_CHECK_COMPILE_FLAG([-Wno-long-long],
+        [SKELETONS_CFLAGS="${SKELETONS_CFLAGS} -Wno-long-long"])
+
+AC_ARG_ENABLE(test-Werror,
+  [AS_HELP_STRING([--enable-test-Werror],
+                  [abort compiling tests after any C compiler warning])],
+  [enable_test_werror=$enableval], [enable_test_werror=no])
+  AS_IF([test x$enable_test_werror != xno], [
+      TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} -Werror -W -Wpointer-arith"
+  ])
+
+dnl If requested and -m32 is available to create 32-bit code,
+dnl treat it like a special case to be checked.
+AC_ARG_ENABLE([test-32bit],
+    [AS_HELP_STRING([--enable-test-32bit],
+    [enable tests for 32-bit compatibility])],
+    [enable_test_32bit=$enableval], [enable_test_32bit=no])
+AS_IF([test "x$enable_test_32bit" != xno], [
+    AX_CHECK_COMPILE_FLAG([-m32], [CFLAGS_M32="-m32 -DEXPLICIT_32BIT"],
+      [
+        CFLAGS_M32=""
+        AC_MSG_FAILURE([--enable-test-32bit=$enable_test_32bit is requested but not supported by the _AC_LANG compiler])
+      ])
+])
+AC_SUBST(CFLAGS_M32)
+AM_CONDITIONAL([EXPLICIT_M32], [test "x${CFLAGS_M32}" != "x"])
+
+SANITIZER_CFLAGS=""
+
+dnl Enable Undefined Behavior Sanitizer, if supported.
+AC_ARG_ENABLE([test-ubsan],
+    [AS_HELP_STRING([--disable-test-ubsan],
+        [disable Undefined Behavior Sanitizer for tests])],
+    [disable_test_ubsan=$enableval], [disable_test_ubsan=maybe])
+AS_IF([test "x$disable_test_ubsan" != xno], [
+    AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=undefined],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=undefined"],
+      [
+        AS_IF([test "x$disable_test_ubsan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-ubsan=$disable_test_ubsan is not supported on a target system.
+https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html#how-to-build])])
+      ],
+      [],
+      [AC_LANG_PROGRAM([void test(int *);void test(int *n) { *n = 0; }])]
+    )
+    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=undefined],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=undefined"])
+
+    dnl Unsigned integer overflow is enabled separately.
+    AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=unsigned-integer-overflow],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=unsigned-integer-overflow"], [], [], [AC_LANG_PROGRAM([int test(unsigned); int test(unsigned n) { return n + 1; }])])
+    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=unsigned-integer-overflow],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=unsigned-integer-overflow"])
+
+    dnl Nullability is enabled separately.
+    AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=nullability],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=nullability"])
+    AX_CHECK_COMPILE_FLAG([-fno-sanitize-recover=nullability],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-sanitize-recover=nullability"])
+
+    dnl Keep error messages nice. Also consider:
+    dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
+    dnl export UBSAN_OPTIONS=print_stacktrace=1
+    AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
+          [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+])
+
+dnl Enable Address Sanitizer, if supported by gcc (4.8+) or clang.
+dnl http://clang.llvm.org/docs/AddressSanitizer.html
+ASAN_ENV_FLAGS=""
+AC_ARG_ENABLE([test-asan],
+    [AS_HELP_STRING([--disable-test-asan],
+        [disable Address Sanitizer for tests])],
+    [disable_test_asan=$enableval], [disable_test_asan=maybe])
+AS_IF([test "x$disable_test_asan" != xno], [
+    AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=address],
+      [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fsanitize=address"],
+      [
+        AS_IF([test "x$disable_test_asan" != xmaybe], [
+            AC_MSG_FAILURE(
+[--disable-test-asan=$disable_test_asan is not supported on a target system.
+Check out https://clang.llvm.org/docs/AddressSanitizer.html#how-to-build])])
+      ])
+
+    dnl Address sanitizer sometimes is equipped with the leak sanitizer.
+    dnl If address sanitizer is not equipped with a leak sanitizer,
+    dnl invoking programs with ASAN_OPTIONS=detect_leaks=1 will break them.
+    ASAN_OPTIONS="detect_leaks=1"
+    export ASAN_OPTIONS
+    save_cflags="${CFLAGS}"
+    CFLAGS="${CFLAGS} ${SANITIZER_CFLAGS}"
+    AC_RUN_IFELSE([AC_LANG_PROGRAM()], [
+        ASAN_ENV_FLAGS="${ASAN_ENV_FLAGS} ASAN_OPTIONS=detect_leaks=1"
+    ])
+    CFLAGS="${save_cflags}"
+    unset ASAN_OPTIONS
+
+    dnl Keep error messages nice. Also consider:
+    dnl export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer
+    dnl export ASAN_OPTIONS=symbolize=1
+    AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer],
+          [SANITIZER_CFLAGS="${SANITIZER_CFLAGS} -fno-omit-frame-pointer"])
+])
+
+dnl Enable LibFuzzer, if supported.
+LIBFUZZER_CFLAGS=""
+AC_ARG_ENABLE([test-fuzzer],
+    [AS_HELP_STRING([--enable-test-fuzzer],
+        [enable LLVM LibFuzzer for randomized testing])],
+    [enable_test_fuzzer=$enableval], [enable_test_fuzzer=no])
+AS_IF([test "x$enable_test_fuzzer" != xno], [
+    AX_CHECK_COMPILE_AND_LINK_FLAG([-fsanitize=fuzzer],
+    [LIBFUZZER_CFLAGS="-fsanitize=fuzzer -DENABLE_LIBFUZZER"],
+    [AC_MSG_FAILURE(
+[--enable-test-fuzzer=$enable_test_fuzzer is not supported on a target system.
+Check out http://llvm.org/docs/LibFuzzer.html])],
+    [],
+    [AC_LANG_SOURCE([[
+    #include <sys/types.h>
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size);
+    int LLVMFuzzerTestOneInput(const unsigned char *Data, size_t Size) {
+        (void)Data;
+        (void)Size;
+        return 0;
+    }
+    ]])])
+])
+
+TESTSUITE_CFLAGS="${TESTSUITE_CFLAGS} ${SANITIZER_CFLAGS}"
+SKELETONS_CFLAGS="${SKELETONS_CFLAGS} ${SANITIZER_CFLAGS}"
+
+AC_SUBST(ADD_CFLAGS)
+AC_SUBST(LIBFUZZER_CFLAGS)
+AC_SUBST(SANITIZER_CFLAGS)
+AC_SUBST(TESTSUITE_CFLAGS)
+AC_SUBST(SKELETONS_CFLAGS)
+AC_SUBST(ASAN_ENV_FLAGS)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(sys/param.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_BIGENDIAN
+AC_TYPE_OFF_T
+AC_TYPE_SIZE_T
+AC_STRUCT_TM
+AC_CHECK_TYPE([__int128],
+    [AC_DEFINE(HAVE_128_BIT_INT, 1, [Have 128-bit integer])])
+AC_CHECK_TYPE(intmax_t, int64_t)
+
+dnl Test if we should test features that depend on 64-bitness.
+AC_CHECK_SIZEOF([void *])
+AM_CONDITIONAL([TEST_64BIT], [test "$ac_cv_sizeof_void_p" -eq 8])
+
+dnl For mingw
+AC_SEARCH_LIBS(getopt, iberty)
+
+AC_CHECK_FUNCS(strtoimax strtoll)
+AC_CHECK_FUNCS(mergesort)
+AC_CHECK_FUNCS(mkstemps)
+AC_CHECK_FUNCS(timegm)
+AC_CHECK_DECLS(strcasecmp)
+AC_CHECK_DECLS(vasprintf)
+AC_TRY_LINK_FUNC([symlink],[AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the symlink function.])])
+
+dnl Use pandoc to generate manual pages.
+AC_PATH_PROG([PANDOC], pandoc)
+AM_CONDITIONAL([HAVE_PANDOC], [test -n "$PANDOC"])
+
+AC_CONFIG_FILES([\
+tests/tests-c-compiler/check-src/Makefile   \
+tests/tests-asn1c-compiler/Makefile         \
+tests/tests-asn1c-smoke/Makefile            \
+tests/tests-randomized/Makefile             \
+tests/tests-c-compiler/Makefile             \
+tests/tests-skeletons/Makefile              \
+libasn1compiler/Makefile                    \
+libasn1common/Makefile                      \
+libasn1parser/Makefile                      \
+libasn1print/Makefile                       \
+libasn1fix/Makefile                         \
+doc/docsrc/Makefile                         \
+skeletons/Makefile                          \
+examples/Makefile                           \
+doc/man/Makefile                            \
+tests/Makefile                              \
+asn1c/Makefile                              \
+doc/Makefile                                \
+Makefile                                    \
+])
+AC_OUTPUT
+
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644 (file)
index 0000000..f517a90
--- /dev/null
@@ -0,0 +1,704 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# doc/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docsdir)"
+DATA = $(docs_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/doc
+abs_srcdir = /home/nokia/mouse07410/asn1c/doc
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+SUBDIRS = docsrc man
+docsdir = $(datadir)/doc/asn1c
+docs_DATA = $(srcdir)/asn1c-*.pdf
+EXTRA_DIST = $(srcdir)/asn1c-*.pdf
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-docsDATA: $(docs_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docsdir)" || 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)$(docsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docsdir)" || exit $$?; \
+       done
+
+uninstall-docsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docsdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(docsdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-docsDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-docsDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-docsDATA install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-docsDATA
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..aa462b7
--- /dev/null
@@ -0,0 +1,9 @@
+
+SUBDIRS = docsrc man
+
+docsdir = $(datadir)/doc/asn1c
+
+docs_DATA = $(srcdir)/asn1c-*.pdf
+
+EXTRA_DIST = $(srcdir)/asn1c-*.pdf
+
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..635cd7c
--- /dev/null
@@ -0,0 +1,704 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docsdir)"
+DATA = $(docs_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+SUBDIRS = docsrc man
+docsdir = $(datadir)/doc/asn1c
+docs_DATA = $(srcdir)/asn1c-*.pdf
+EXTRA_DIST = $(srcdir)/asn1c-*.pdf
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-docsDATA: $(docs_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docsdir)" || 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)$(docsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docsdir)" || exit $$?; \
+       done
+
+uninstall-docsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(docs_DATA)'; test -n "$(docsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docsdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(docsdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-docsDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-docsDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-docsDATA install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-docsDATA
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/doc/asn1c-quick.pdf b/doc/asn1c-quick.pdf
new file mode 100644 (file)
index 0000000..5081540
Binary files /dev/null and b/doc/asn1c-quick.pdf differ
diff --git a/doc/asn1c-usage.pdf b/doc/asn1c-usage.pdf
new file mode 100644 (file)
index 0000000..144eaca
Binary files /dev/null and b/doc/asn1c-usage.pdf differ
diff --git a/doc/docsrc/Makefile b/doc/docsrc/Makefile
new file mode 100644 (file)
index 0000000..60c79ca
--- /dev/null
@@ -0,0 +1,476 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# doc/docsrc/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = doc/docsrc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/doc/docsrc
+abs_srcdir = /home/nokia/mouse07410/asn1c/doc/docsrc
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+XELATEX_FLAGS = -halt-on-error -file-line-error
+XELATEX = xelatex
+TEXSRC = '\def\asnver{0.9.29}\input{asn1c-usage}'
+EXTRA_DIST = $(srcdir)/*.tex $(srcdir)/*.inc
+CLEANFILES = *.*~ *.aux *.dvi *.log *.out *.toc
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/docsrc/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/docsrc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+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:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+regen:
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) $(TEXSRC)
+
+# 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:
diff --git a/doc/docsrc/Makefile.am b/doc/docsrc/Makefile.am
new file mode 100644 (file)
index 0000000..9c75b0c
--- /dev/null
@@ -0,0 +1,13 @@
+
+XELATEX_FLAGS = -halt-on-error -file-line-error
+XELATEX = xelatex
+TEXSRC = '\def\asnver{@VERSION@}\input{asn1c-usage}'
+
+regen:
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) $(TEXSRC)
+
+EXTRA_DIST = $(srcdir)/*.tex $(srcdir)/*.inc
+
+CLEANFILES = *.*~ *.aux *.dvi *.log *.out *.toc
diff --git a/doc/docsrc/Makefile.in b/doc/docsrc/Makefile.in
new file mode 100644 (file)
index 0000000..7572c46
--- /dev/null
@@ -0,0 +1,476 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = doc/docsrc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+XELATEX_FLAGS = -halt-on-error -file-line-error
+XELATEX = xelatex
+TEXSRC = '\def\asnver{@VERSION@}\input{asn1c-usage}'
+EXTRA_DIST = $(srcdir)/*.tex $(srcdir)/*.inc
+CLEANFILES = *.*~ *.aux *.dvi *.log *.out *.toc
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/docsrc/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/docsrc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+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:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+regen:
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) -no-pdf $(TEXSRC)
+       $(XELATEX) $(XELATEX_FLAGS) $(TEXSRC)
+
+# 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:
diff --git a/doc/docsrc/asn1c-usage.tex b/doc/docsrc/asn1c-usage.tex
new file mode 100644 (file)
index 0000000..339642f
--- /dev/null
@@ -0,0 +1,2173 @@
+\batchmode
+\documentclass[english,oneside,12pt]{book}
+\usepackage[no-math]{fontspec}
+\usepackage{MnSymbol}
+\usepackage{xunicode}
+\usepackage{xltxtra}
+
+\usepackage[hmargin={1in,1in},vmargin={1.5in,1.5in}]{geometry}
+
+\defaultfontfeatures{Mapping=tex-text}
+\setmainfont{PT Sans}
+\setsansfont{PT Sans}
+\setmonofont{Consolas}
+
+\usepackage{fancyhdr}
+\usepackage{fancyref}
+\usepackage{longtable}
+\usepackage{array}
+\usepackage{enumitem}
+\usepackage{booktabs}
+\usepackage{url}
+\usepackage{xcolor}
+\usepackage{listings}
+\usepackage{setspace}
+\usepackage{unicode-math}
+\usepackage{perpage}
+\MakePerPage{footnote}
+
+\setstretch{1.1}
+
+% Courier 10 Pitch
+\def\courierFont{Courier10 BT WGL4}
+%\def\courierFont{Consolas}
+\setmonofont[Scale=1.05]{\courierFont}
+\setmathfont[Scale=1.05]{Cambria Math}
+
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
+\lstloadlanguages{C,bash}
+\newfontfamily\listingfont[Scale=1.05]{\courierFont}
+\newfontfamily\inlinelistingfont[Scale=1.05]{\courierFont}
+\definecolor{clrlcomment}{gray}{0.3}
+\definecolor{clrlkeyword}{rgb}{0.588,0.145,0.18}
+\newcommand{\listingkeyword}[1]{\color{clrlkeyword}{#1}}
+\newcommand{\listingstring}[1]{\color{clrlcomment}{#1}}
+\newcommand{\listingcomment}[1]{\color{clrlcomment}{#1}}
+\lstset{tabsize=4,
+  showstringspaces=false, 
+  showtabs=false, 
+  showspaces=false, 
+  keywordstyle=\listingkeyword,
+  stringstyle=\listingstring,
+  commentstyle=\listingcomment,
+  xleftmargin=\parindent,
+  columns=fixed,
+  escapechar=\%,
+  texcl
+}
+\lstdefinestyle{listingStyle}{
+        basicstyle=\small\listingfont,
+        stringstyle=\listingstring,
+        breaklines=true,
+        breakatwhitespace=true,
+        flexiblecolumns=false
+        }
+\lstdefinelanguage{asn1}{
+       morekeywords={DEFINITIONS,BEGIN,END,AUTOMATIC,TAGS,SEQUENCE,SET,OF,CHOICE,OPTIONAL,INTEGER,MAX},
+       morecomment=[l]{--},
+       morecomment=[n]{/*}{*/}
+        }
+
+\lstnewenvironment{signature}[1][]{\lstset{style=listingStyle,language=C,xleftmargin=0pt,#1}}{}
+\lstnewenvironment{example}[1][]{\lstset{style=listingStyle,language=C,basicstyle=\scriptsize\listingfont,#1}}{}
+\lstnewenvironment{codesample}[1][]{\lstset{style=listingStyle,language=C,#1}}{}
+\lstnewenvironment{bash}[1][]{\lstset{style=listingStyle,language=bash,#1}}{}
+\lstnewenvironment{asn}[1][]{\lstset{style=listingStyle,language=asn1,#1}}{}
+
+\newcommand{\apisection}[2]{\clearpage\section{\label{#1}#2}}
+\newcommand{\api}[2]{\hyperref[#1]{\code{#2}}}
+\newcommand{\seealso}[2]{\api{#1}{#2} at page \pageref{#1}}
+\newcommand{\code}[1]{\texttt{\textbf{\lstinline{#1}}}}
+\newcommand{\cmd}[1]{\texttt{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
+\usepackage{extramarks}
+\lhead{\firstxmark}
+\rfoot{\lastxmark}
+\definecolor{clrlink}{rgb}{0,0.4,0}
+\definecolor{clrurl}{rgb}{0,0,.6}
+\usepackage[colorlinks=true,
+       linkcolor={clrlink},
+       citecolor={clrlink},
+       urlcolor={clrurl},
+       pdfauthor={Lev Walkin},
+       pdftitle={Using the Open Source ASN.1 Compiler},
+       pdfkeywords={ASN.1,asn1c,compiler},
+       bookmarksopen,bookmarksopenlevel=1,
+       pdffitwindow,
+       xetex
+]{hyperref}
+
+
+\makeatother
+
+\usepackage{babel}
+
+\begin{document}
+
+\title{Using the Open Source ASN.1 Compiler\\
+\vspace*{0.4cm}
+\Large Documentation for asn1c version \asnver{}}
+\author{Lev Walkin <\href{mailto:vlm@lionet.info?Subject=asn1c}{vlm@lionet.info}>}
+
+\pagestyle{fancy}
+\fancyhead[L]{\leftmark}
+\fancyhead[R]{\href{http://lionet.info/asn1c}{asn1c-\asnver}}
+\maketitle
+
+\tableofcontents{}
+
+\chapter{\label{chap:Quick-start-examples}Quick start examples}
+
+\section{A “Rectangle” converter and debugger}
+
+One of the most common need is to create some sort of analysis tool
+for the existing ASN.1 data files. Let's build a converter for existing
+Rectangle binary files between BER, OER, PER, and XER (XML).
+
+\begin{enumerate}
+\item Create a file named \textbf{rectangle.asn} with the following contents:
+\begin{asn}
+RectangleModule DEFINITIONS ::= BEGIN
+
+Rectangle ::= SEQUENCE {
+    height  INTEGER,
+    width   INTEGER
+}
+
+END
+\end{asn}
+
+\item Compile it into the set of .c and .h files using \cmd{asn1c} compiler:
+
+\begin{bash}
+asn1c -no-gen-example %\textbf{rectangle.asn}%
+\end{bash}
+
+\item Create the converter and dumper:
+
+\begin{bash}
+make -f converter-example.mk
+\end{bash}
+
+\item Done. The binary file converter is ready:
+
+\begin{bash}
+./converter-example -h
+\end{bash}
+\end{enumerate}
+
+\section{A “Rectangle” Encoder}
+
+This example will help you create a simple BER and XER encoder of
+a ``Rectangle'' type used throughout this document.
+\begin{enumerate}
+\item Create a file named \textbf{rectangle.asn} with the following contents:
+
+\begin{asn}
+RectangleModule DEFINITIONS ::= BEGIN
+
+Rectangle ::= SEQUENCE {
+    height  INTEGER,
+    width   INTEGER
+}
+
+END
+\end{asn}
+\item Compile it into the set of .c and .h files using asn1c compiler \cite{ASN1C}:
+
+\begin{bash}
+asn1c -no-gen-example %\textbf{rectangle.asn}%
+\end{bash}
+\item Alternatively, use the Online ASN.1 compiler \cite{AONL} by uploading
+the \textbf{rectangle.asn} file into the Web form and unpacking the
+produced archive on your computer.
+\item By this time, you should have gotten multiple files in the current
+directory, including the \textbf{Rectangle.c} and \textbf{Rectangle.h}.
+\item Create a main() routine which creates the Rectangle\_t structure in
+memory and encodes it using BER and XER encoding rules. Let's name
+the file \textbf{main.c}:
+
+\begin{example}
+#include <stdio.h>
+#include <sys/types.h>
+#include <Rectangle.h>   /* Rectangle ASN.1 type  */
+
+/* Write the encoded output into some FILE stream. */
+static int write_out(const void *buffer, size_t size, void *app_key) {
+    FILE *out_fp = app_key;
+    size_t wrote = fwrite(buffer, 1, size, out_fp);
+    return (wrote == size) ? 0 : -1;
+}
+int main(int ac, char **av) {
+    Rectangle_t *rectangle; /* Type to encode        */
+    asn_enc_rval_t ec;      /* Encoder return value  */
+
+    /* Allocate the Rectangle_t */
+    rectangle = calloc(1, sizeof(Rectangle_t)); /* not malloc! */
+    if(!rectangle) {
+        perror("calloc() failed");
+        exit(1);
+    }
+
+    /* Initialize the Rectangle members */
+    rectangle->height = 42;  /* any random value */
+    rectangle->width  = 23;  /* any random value */
+
+    /* BER encode the data if filename is given */
+    if(ac < 2) {
+        fprintf(stderr, "Specify filename for BER output\n");
+    } else {
+        const char *filename = av[1];
+        FILE *fp = fopen(filename, "wb");   /* for BER output */
+        if(!fp) {
+          perror(filename);
+          exit(1);
+        }
+
+        /* Encode the Rectangle type as BER (DER) */
+        ec = der_encode(&asn_DEF_Rectangle, rectangle, write_out, fp);
+        fclose(fp);
+        if(ec.encoded == -1) {
+          fprintf(stderr, "Could not encode Rectangle (at %\%%s)\n",
+              ec.failed_type ? ec.failed_type->name : "unknown");
+          exit(1);
+        } else {
+          fprintf(stderr, "Created %\%%s with BER encoded Rectangle\n", filename);
+        }
+    }
+
+    /* Also print the constructed Rectangle XER encoded (XML) */
+    xer_fprint(stdout, &asn_DEF_Rectangle, rectangle);
+
+    return 0; /* Encoding finished successfully */
+ }
+\end{example}
+\item Compile all files together using C compiler (varies by platform):
+
+\begin{bash}
+cc -I. -o %\textbf{\emph{rencode}} \emph{*.c}%
+\end{bash}
+\item Done. You have just created the BER and XER encoder of a Rectangle
+type, named \textbf{rencode}!
+\end{enumerate}
+
+\section{\label{sec:A-Rectangle-Decoder}A “Rectangle” Decoder}
+
+This example will help you to create a simple BER decoder of a simple
+``Rectangle'' type used throughout this document.
+\begin{enumerate}
+\item Create a file named \textbf{rectangle.asn} with the following contents:
+
+\begin{asn}
+RectangleModule DEFINITIONS ::= BEGIN
+
+Rectangle ::= SEQUENCE {
+    height  INTEGER,
+    width   INTEGER
+}
+
+END
+\end{asn}
+\item Compile it into the set of .c and .h files using asn1c compiler \cite{ASN1C}:
+
+\begin{bash}
+asn1c -no-gen-example %\textbf{rectangle.asn}%
+\end{bash}
+\item Alternatively, use the Online ASN.1 compiler \cite{AONL} by uploading
+the \textbf{rectangle.asn} file into the Web form and unpacking the
+produced archive on your computer.
+\item By this time, you should have gotten multiple files in the current
+directory, including the \textbf{Rectangle.c} and \textbf{Rectangle.h}.
+\item Create a main() routine which takes the binary input file, decodes
+it as it were a BER-encoded Rectangle type, and prints out the text
+(XML) representation of the Rectangle type. Let's name the file \textbf{main.c}:
+
+\begin{example}
+#include <stdio.h>
+#include <sys/types.h>
+#include <Rectangle.h>   /* Rectangle ASN.1 type  */
+
+int main(int ac, char **av) {
+    char buf[1024];      /* Temporary buffer      */
+    asn_dec_rval_t rval; /* Decoder return value  */
+    Rectangle_t *%$\underbracket{\textrm{\listingfont rectangle = 0}}$%; /* Type to decode. %\textbf{\color{red}Note this 0\footnote{Forgetting to properly initialize the pointer to a destination structure is a major source of support requests.}!}% */
+    FILE *fp;            /* Input file handler    */
+    size_t size;         /* Number of bytes read  */
+    char *filename;      /* Input file name */
+
+    /* Require a single filename argument */
+    if(ac != 2) {
+        fprintf(stderr, "Usage: %\%%s <file.ber>\n", av[0]);
+        exit(1);
+    } else {
+        filename = av[1];
+    }
+
+    /* Open input file as read-only binary */
+    fp = fopen(filename, "rb");
+    if(!fp) {
+        perror(filename);
+        exit(1);
+    }
+
+    /* Read up to the buffer size */
+    size = fread(buf, 1, sizeof(buf), fp);
+    fclose(fp);
+    if(!size) {
+        fprintf(stderr, "%\%%s: Empty or broken\n", filename);
+        exit(1);
+    }
+
+    /* Decode the input buffer as Rectangle type */
+    rval = ber_decode(0, &asn_DEF_Rectangle, (void **)&rectangle, buf, size);
+    if(rval.code != RC_OK) {
+        fprintf(stderr, "%\%%s: Broken Rectangle encoding at byte %\%%ld\n", filename, (long)rval.consumed);
+        exit(1);
+    }
+
+    /* Print the decoded Rectangle type as XML */
+    xer_fprint(stdout, &asn_DEF_Rectangle, rectangle);
+
+    return 0; /* Decoding finished successfully */
+}
+\end{example}
+\item Compile all files together using C compiler (varies by platform):
+
+\begin{bash}
+cc -I. -o %\textbf{\emph{rdecode}} \emph{*.c}%
+\end{bash}
+\item Done. You have just created the BER decoder of a Rectangle type,
+named \textbf{rdecode}!
+\end{enumerate}
+
+\section{Adding constraints to a “Rectangle”}
+
+This example shows how to add basic constraints to the ASN.1 specification
+and how to invoke the constraints validation code in your application.
+\begin{enumerate}
+
+\item Create a file named \textbf{rectangle.asn} with the following contents:
+
+\begin{asn}
+RectangleModuleWithConstraints DEFINITIONS ::= BEGIN
+
+Rectangle ::= SEQUENCE {
+    height  INTEGER (0..100), -- Value range constraint
+    width   INTEGER (0..MAX)  -- Makes width non-negative 
+}
+
+END
+\end{asn}
+
+\item Compile the file according to procedures shown in \fref{sec:A-Rectangle-Decoder}.
+\item Modify the Rectangle type processing routine (you can start with the
+main() routine shown in the \fref{sec:A-Rectangle-Decoder})
+by placing the following snippet of code \emph{before} encoding and/or
+\emph{after} decoding the Rectangle type:
+
+\begin{example}
+int ret;           /* Return value */
+char errbuf[128];  /* Buffer for error message */
+size_t errlen = sizeof(errbuf);  /* Size of the buffer */
+
+/* ... here goes the Rectangle %\emph{decoding}% code ... */
+
+ret = asn_check_constraints(&asn_DEF_Rectangle, rectangle, errbuf, &errlen);
+/* assert(errlen < sizeof(errbuf)); // you may rely on that */
+if(ret) {
+    fprintf(stderr, "Constraint validation failed: %\%%s\n", errbuf);
+    /* exit(...); // Replace with appropriate action */
+ }
+
+/* ... here goes the Rectangle %\emph{encoding}% code ... */
+\end{example}
+\item Compile the resulting C code as shown in the previous chapters.
+\item Test the constraints checking code by assigning integer value
+101 to the \textbf{.height} member of the Rectangle structure, or
+a negative value to the \textbf{.width} member.
+The program will fail with ``Constraint validation failed'' message.
+\item Done.
+\end{enumerate}
+
+\chapter{ASN.1 Compiler}
+
+\section{The asn1c compiler tool}
+
+The purpose of the ASN.1 compiler is to convert the specifications
+in ASN.1 notation into some other language, such as C.
+
+The compiler reads the specification and emits a series of target
+language structures (C structs, unions, enums) describing the corresponding
+ASN.1 types. The compiler also creates the code which allows automatic
+serialization and deserialization of these structures using several
+standardized encoding rules (BER, DER, OER, PER, XER).
+
+Let's take the following ASN.1 example%
+\footnote{\Fref{chap:Abstract-Syntax-Notation} provides a quick reference
+on the ASN.1 notation.}:
+\begin{asn}
+RectangleModule DEFINITIONS ::= BEGIN
+
+Rectangle ::= SEQUENCE {
+    height  INTEGER,        -- Height of the rectangle
+    width   INTEGER         -- Width of the rectangle
+}
+
+END
+\end{asn}
+The asn1c compiler reads this ASN.1 definition and produce the following
+C type:
+\begin{codesample}
+typedef struct Rectangle_s {
+    long height;
+    long width;
+} Rectangle_t;
+\end{codesample}
+The asn1c compiler also creates the code for converting this structure into
+platform-independent wire representation and the decoder
+of such wire representation back into local, machine-specific type.
+These encoders and decoders are also called serializers and deserializers,
+marshallers and unmarshallers, or codecs.
+
+Compiling ASN.1 modules into C codecs can be as simple as invoking \cmd{asn1c}:
+may be used to compile the ASN.1 modules:
+\begin{bash}
+asn1c %\emph{<modules.asn>}%
+\end{bash}
+
+If several ASN.1 modules contain interdependencies, all of the files
+must be specified altogether:
+\begin{bash}
+asn1c %\emph{<module1.asn> <module2.asn> ...}%
+\end{bash}
+The compiler \textbf{-E} and \textbf{-EF} options are used for testing
+the parser and the semantic fixer, respectively. These options will
+instruct the compiler to dump out the parsed (and fixed, if \textbf{-F}
+is involved) ASN.1 specification as it was understood
+by the compiler. It might be useful to check whether a particular
+syntactic construct is properly supported by the compiler.
+\begin{bash}
+asn1c %\textbf{-EF} \emph{<module-to-test.asn>}%
+\end{bash}
+The \textbf{-P} option is used to dump the compiled output on the
+screen instead of creating a bunch of .c and .h files on disk in the
+current directory. You would probably want to start with \textbf{-P}
+option instead of creating a mess in your current directory. Another
+option, \textbf{-R}, asks compiler to only generate the files which
+need to be generated, and supress linking in the numerous support
+files.
+
+Print the compiled output instead of creating multiple source files:
+\begin{bash}
+asn1c %\textbf{-P} \emph{<module-to-compile-and-print.asn>}%
+\end{bash}
+
+\clearpage{}
+\section{Compiler output}
+
+The \cmd{asn1c} compiler produces a number of files:
+\begin{itemize}
+\item A set of .c and .h files for each type defined
+in the ASN.1 specification. These files will be named similarly to
+the ASN.1 types (\textbf{Rectangle.c} and \textbf{Rectangle.h} for the
+RectangleModule ASN.1 module defined in the beginning of this document).
+\item A set of helper .c and .h files which contain the generic encoders,
+decoders and other useful routines.
+Sometimes they are referred to by the term \emph{skeletons}.
+There will be quite a few of them, some
+of them are not even always necessary, but the overall amount of code
+after compilation will be rather small anyway.
+\item A \textbf{Makefile.am.libasncodecs} file which explicitly lists all the
+generated files.
+This makefile can be used on its own to build the just the codec library.
+\item A \textbf{converter-example.c} file containing the \emph{int main()} function with a fully functioning encoder and data format converter. It can convert a given PDU between BER, XER, OER and PER. At some point you will want to replace this file with your own file containing the \emph{int main()} function.
+\item A \textbf{converter-example.mk} file which binds together
+\textbf{Makefile.am.libasncodecs} and \textbf{converter-example.c}
+to build a versatile converter and debugger for your data formats.
+\end{itemize}
+It is possible to compile everything with just a couple of instructions:
+\begin{bash}
+asn1c -pdu=%\emph{Rectangle}% *.asn
+make -f converter-example.mk                   # If you use `make`
+\end{bash}
+or
+\begin{bash}
+asn1c *.asn
+cc -I. -DPDU=%\emph{Rectangle}% -o rectangle.exe *.c   # ... or like this
+\end{bash}
+Refer to the \fref{chap:Quick-start-examples} for a sample
+\emph{int main()} function if you want some custom logic and not satisfied
+with the supplied \emph{converter-example.c}.
+
+\clearpage{}
+\section{\label{sec:Command-line-options}Command line options}
+
+The following table summarizes the \cmd{asn1c} command line options.
+
+\renewcommand{\arraystretch}{1.33}
+\begin{longtable}{lp{4in}}
+\textbf{Stage Selection Options} & \textbf{Description}\\
+\midrule
+{\ttfamily -E} & {\small Stop after the parsing stage and print the reconstructed ASN.1
+specification code to the standard output.}\\
+{\ttfamily -F} & {\small Used together with \texttt{-E}, instructs the compiler to stop after
+the ASN.1 syntax tree fixing stage and dump the reconstructed ASN.1
+specification to the standard output.}\\
+{\ttfamily -P} & {\small Dump the compiled output to the standard output instead of
+creating the target language files on disk.}\\
+{\ttfamily -R} & {\small Restrict the compiler to generate only the ASN.1 tables, omitting the usual support code.}\\
+{\ttfamily -S~\emph{<directory>}} & {\small Use the specified directory with ASN.1 skeleton files.}\\
+{\ttfamily -X} & {\small Generate the XML DTD for the specified ASN.1 modules.}\\\\
+\textbf{Warning Options} & \textbf{Description}\\
+\midrule
+{\ttfamily -Werror} & {\small Treat warnings as errors; abort if any warning is produced.}\\
+{\ttfamily -Wdebug-parser} & {\small Enable the parser debugging during the ASN.1 parsing stage.}\\
+{\ttfamily -Wdebug-lexer} & {\small Enable the lexer debugging during the ASN.1 parsing stage.}\\
+{\ttfamily -Wdebug-fixer} & {\small Enable the ASN.1 syntax tree fixer debugging during the fixing stage.}\\
+{\ttfamily -Wdebug-compiler} & {\small Enable debugging during the actual compile time.}\\  \\
+\textbf{Language Options} & \textbf{Description}\\
+\midrule
+{\ttfamily -fbless-SIZE} & {\small Allow SIZE() constraint for INTEGER, ENUMERATED, and other types for which this constraint is normally prohibited by the standard.
+This is a violation of an ASN.1 standard and compiler may fail to produce the meaningful code.}\\
+{\ttfamily -fcompound-names} & {\small Use complex names for C structures. Using complex names prevents
+name clashes in case the module reuses the same identifiers in multiple
+contexts.}\\
+{\ttfamily -findirect-choice} & {\small When generating code for a CHOICE type, compile the CHOICE
+members as indirect pointers instead of declaring them inline. Consider
+using this option together with \texttt{-fno-include-deps}
+to prevent circular references.}\\
+{\ttfamily -fincludes-quoted} & {\small Generate \#include lines in "double" instead of <angle> quotes.}\\
+{\ttfamily -fknown-extern-type=\emph{<name>}} & {\small Pretend the specified type is known. The compiler will assume
+the target language source files for the given type have been provided
+manually. }\\
+{\ttfamily -fline-refs} & {\small Include ASN.1 module's line numbers in generated code comments.}\\
+{\ttfamily -fno-constraints} & {\small Do not generate the ASN.1 subtype constraint checking code. This
+may produce a shorter executable.}\\
+{\ttfamily -fno-include-deps} & {\small Do not generate the courtesy \#include lines for non-critical dependencies.}\\
+{\ttfamily -funnamed-unions} & {\small Enable  unnamed  unions in the definitions of target language's structures.}\\
+{\ttfamily -fwide-types} & {\small Use the wide integer types (INTEGER\_t, REAL\_t) instead of machine's native data types (long, double). }\\\\
+\textbf{Codecs Generation Options} & \textbf{Description}\\
+\midrule
+{\ttfamily -no-gen-OER} & {\small Do not generate the Octet Encoding Rules (OER, X.696) support code.}\\
+{\ttfamily -no-gen-PER} & {\small Do not generate the Packed Encoding Rules (PER, X.691) support code.}\\
+{\ttfamily -no-gen-example} & {\small Do not generate the ASN.1 format converter example.}\\
+{\ttfamily -pdu=\{\textbf{all}|\textbf{auto}|\emph{Type}\}} & {\small Create a PDU table for specified types, or discover the Protocol Data Units automatically.
+In case of \texttt{-pdu=\textbf{all}}, all ASN.1 types defined in all modules wil form a PDU table. In case of \texttt{-pdu=\textbf{auto}}, all types not referenced by any other type will form a PDU table. If \texttt{\emph{Type}} is an ASN.1 type identifier, it is added to a PDU table. The last form may be specified multiple times.}\\ \\
+\textbf{Output Options} & \textbf{Description}\\
+\midrule
+{\ttfamily -print-class-matrix} & {\small When \texttt{-EF} options are given, this option instructs the compiler to print out the collected Information Object Class matrix.}\\
+{\ttfamily -print-constraints} & {\small With \texttt{-EF}, this option instructs the compiler
+to explain its internal understanding of subtype constraints.}\\
+{\ttfamily -print-lines} & {\small Generate \texttt{``-{}- \#line''} comments
+in \texttt{-E} output.}\\
+\end{longtable}
+\renewcommand{\arraystretch}{1}
+
+
+\chapter{API reference}
+
+The functions desribed in this chapter are to be used by the application
+programmer. These functions won't likely change change or get removed until
+the next major release.
+
+The API calls not listed here are not public and should not be used by the
+application level code.
+
+\apisection{sec:ASN_STRUCT_FREE}{ASN\_STRUCT\_FREE() macro}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+#define ASN_STRUCT_FREE(type_descriptor, struct_ptr)
+\end{signature}
+
+\subsection*{Description}
+
+Recursively releases memory occupied by the structure
+described by the \code{type\_descriptor} and referred to
+by the \code{struct\_ptr} pointer.
+
+Does nothing when \code{struct\_ptr} is NULL.
+
+\subsection*{Return values}
+Does not return a value.
+
+\subsection*{Example}
+
+\begin{example}
+Rectangle_t *rect = ...;
+ASN_STRUCT_FREE(asn_DEF_Rectangle, rect);
+\end{example}
+
+\apisection{sec:ASN_STRUCT_RESET}{ASN\_STRUCT\_RESET() macro}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+#define ASN_STRUCT_RESET(type_descriptor, struct_ptr)
+\end{signature}
+
+\subsection*{Description}
+
+Recursively releases memory occupied by the members of the structure
+described by the \code{type\_descriptor} and referred to
+by the \code{struct\_ptr} pointer.
+
+Does not release the memory pointed to by \code{struct\_ptr} itself.
+Instead it clears the memory block by filling it out with 0 bytes.
+
+Does nothing when \code{struct\_ptr} is NULL.
+
+\subsection*{Return values}
+Does not return a value.
+
+\subsection*{Example}
+
+\begin{example}
+struct my_figure {       /* The custom structure */
+    int flags;           /* <some custom member> */
+    /* The type is generated by the ASN.1 compiler */
+    Rectangle_t rect;
+    /* other members of the structure */
+};
+
+struct my_figure *fig = ...;
+ASN_STRUCT_RESET(asn_DEF_Rectangle, &fig->rect);
+\end{example}
+
+\apisection{sec:asn_check_constraints}{asn\_check\_constraints()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+int asn_check_constraints(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *struct_ptr, /* Target language's structure */
+    char *errbuf,           /* Returned error description */
+    size_t *errlen          /* Length of the error description */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Validate a given structure according to the ASN.1 constraints.
+If \code{errbuf} and \code{errlen} are given, they shall point to the
+appropriate buffer space and its length before calling this function.
+Alternatively, they could be passed as \code{NULL}s.
+If constraints validation fails, \code{errlen} will contain the actual
+number of bytes used in \code{errbuf} to encode an error message.
+The message is going to be properly 0-terminated.
+
+\subsection*{Return values}
+
+This function returns 0 in case all ASN.1 constraints are met
+and -1 if one or more ASN.1 constraints were violated.
+
+\subsection*{Example}
+
+\begin{codesample}[basicstyle=\scriptsize\listingfont]
+Rectangle_t *rect = ...;
+
+char errbuf[128];  /* Buffer for error message */
+size_t errlen = sizeof(errbuf);  /* Size of the buffer */
+
+int ret = asn_check_constraints(&asn_DEF_Rectangle, rectangle, errbuf, &errlen);
+/* assert(errlen < sizeof(errbuf)); // Guaranteed: you may rely on that */
+if(ret) {
+    fprintf(stderr, "Constraint validation failed: %\%%s\n", errbuf);
+}
+\end{codesample}
+
+\apisection{sec:asn_decode}{asn\_decode()}
+
+\subsection*{Synopsis}
+\begin{signature}
+asn_dec_rval_t asn_decode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    enum asn_transfer_syntax syntax,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of that buffer */
+);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{asn\_decode()} function parses the data given by the \code{buffer}
+and \code{size} arguments. The encoding rules are specified in the \code{syntax}
+argument and the type to be decoded is specified by the \code{type_descriptor}.
+
+The \code{struct_ptr_ptr} must point to the memory location which contains the
+pointer to the structure being decoded. Initially the \code{*struct_ptr_ptr}
+pointer is typically set to 0. In that case, \code{asn\_decode()} will
+dynamically allocate memory for the structure and its members as needed
+during the parsing.
+If \code{*struct\_ptr\_ptr} already points to some memory, the \code{asn\_decode()}
+will allocate the subsequent members as needed during the parsing.
+
+\subsection*{Return values}
+
+\input{asn_dec_rval.inc}
+
+The \code{.consumed} value is in bytes, even for PER decoding.
+For PER, use \code{uper\_decode()} in case you need to get
+the number of consumed bits.
+
+\subsection*{Restartability}
+
+Some transfer syntax parsers (such as ATS\_BER) support restartability.
+
+That means that in case the buffer has less data than expected,
+the \code{asn_decode()} will process whatever is available and ask for more
+data to be provided using the RC\_WMORE return \code{.code}.
+
+Note that in the RC\_WMORE case the decoder may have processed less data than
+it is available in the buffer, which means that you must be able to arrange
+the next buffer to contain the unprocessed part of the previous buffer.
+
+The \code{RC_WMORE} code may still be returned by parser not supporting
+restartabilty. In such cases, the partially decoded structure shall be
+discarded and the next invocation should use the extended buffer to parse
+from the very beginning.
+
+\subsection*{Example}
+
+\begin{example}
+Rectangle_t *%$\underbracket{\textrm{\listingfont rect = 0}}$%;    /* %\textbf{\color{red}Note this 0\footnote{Forgetting to properly initialize the pointer to a destination structure is a major source of support requests.}!}% */
+asn_dec_rval_t rval;
+rval = asn_decode(0, ATS_BER, &asn_DEF_Rectangle, (void **)&rect, buffer, buf_size);
+switch(rval.code) {
+case RC_OK:
+    asn_fprint(stdout, &asn_DEF_Rectangle, rect);
+    ASN_STRUCT_FREE(&asn_DEF_Rectangle, rect);
+    break;
+case RC_WMORE:
+case RC_FAIL:
+default:
+    ASN_STRUCT_FREE(&asn_DEF_Rectangle, rect);
+    break;
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:asn_fprint}{asn_fprint()}.
+
+\apisection{sec:asn_encode}{asn\_encode()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+#include <asn_application.h>
+
+asn_enc_rval_t asn_encode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    enum asn_transfer_syntax syntax,
+    const asn_TYPE_descriptor_t *type_to_encode,
+    const void *structure_to_encode,
+    asn_app_consume_bytes_f *callback, void *callback_key);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{asn_encode()} function serializes the given \code{structure_to_encode} using the chosen ASN.1 transfer \code{syntax}.
+
+During serialization, a user-specified \code{callback} is invoked zero
+or more times with bytes of data to add to the output stream (if any), and
+the \code{callback_key}. The signature for the callback is as follows:
+
+\begin{signature}
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, void *callback_key);
+\end{signature}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes} irrespectively of the
+ASN.1 transfer \code{syntax} chosen.\footnote{This is different from some
+lower level encoding functions, such as \api{sec:uper_encode}{uper_encode()},
+which returns the number of encoded \emph{bits} instead of bytes.}
+
+On error (when \code{.encoded} is set to -1),
+the \code{errno} is set to one of the following values:
+
+\begin{tabular}[h!]{ll}
+\texttt{EINVAL} & Incorrect parameters to the function, such as NULLs \\
+\texttt{ENOENT} & Encoding transfer syntax is not defined (for this type) \\
+\texttt{EBADF} & The structure has invalid form or content constraint failed \\
+\texttt{EIO} & The callback has returned negative value during encoding
+\end{tabular}
+
+\subsection*{Example}
+\begin{example}
+static int
+save_to_file(const void *data, size_t size, void *key) {
+    FILE *fp = key;
+    return (fwrite(data, 1, size, fp) == size) ? 0 : -1;
+}
+
+Rectangle_t *rect = ...;
+FILE *fp = ...;
+asn_enc_rval_t er;
+er = asn_encode(0, ATS_DER, &asn_DEF_Rectangle, rect, save_to_file, fp);
+if(er.encoded == -1) {
+   fprintf(stderr, "Failed to encode %\%%s\n", asn_DEF_Rectangle.name);
+} else {
+   fprintf(stderr, "%\%%s encoded in %\%%zd bytes\n", asn_DEF_Rectangle.name, er.encoded);
+}
+\end{example}
+
+\apisection{sec:asn_encode_to_buffer}{asn\_encode\_to\_buffer()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+#include <asn_application.h>
+
+asn_enc_rval_t asn_encode_to_buffer(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    enum asn_transfer_syntax syntax,
+    const asn_TYPE_descriptor_t *type_to_encode,
+    const void *structure_to_encode,
+    void *buffer, size_t buffer_size);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{asn_encode_to_buffer()} function serializes the given \code{structure_to_encode} using the chosen ASN.1 transfer \code{syntax}.
+
+The function places the serialized data into the given
+\code{buffer} of size \code{buffer_size}.
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes} irrespectively of the
+ASN.1 transfer \code{syntax} chosen.\footnote{This is different from some
+lower level encoding functions, such as \api{sec:uper_encode}{uper_encode()},
+which returns the number of encoded \emph{bits} instead of bytes.}
+
+If \code{.encoded} size exceeds the specified \code{buffer_size},
+the serialization effectively failed due to insufficient space. The function
+will succeed if subsequently called with buffer size no less than the returned
+\code{.encoded} size. This behavior modeled after \code{snprintf()}.
+
+On error (when \code{.encoded} is set to -1),
+the \code{errno} is set to one of the following values:
+
+\begin{tabular}[h!]{ll}
+\texttt{EINVAL} & Incorrect parameters to the function, such as NULLs \\
+\texttt{ENOENT} & Encoding transfer syntax is not defined (for this type) \\
+\texttt{EBADF} & The structure has invalid form or content constraint failed
+\end{tabular}
+
+\subsection*{Example}
+\begin{example}
+Rectangle_t *rect = ...;
+uint8_t buffer[128];
+asn_enc_rval_t er;
+er = asn_encode_to_buffer(0, ATS_DER, &asn_DEF_Rectangle, rect, buffer, sizeof(buffer));
+if(er.encoded == -1) {
+   fprintf(stderr, "Serialization of %\%%s failed.\n", asn_DEF_Rectangle.name);
+} else if(er.encoded > sizeof(buffer)) {
+   fprintf(stderr, "Buffer of size %\%%zu is too small for %\%%s, need %\%%zu\n",
+       buf_size, asn_DEF_Rectangle.name, er.encoded);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:asn_encode_to_new_buffer}{asn_encode_to_new_buffer()}.
+
+\apisection{sec:asn_encode_to_new_buffer}{asn\_encode\_to\_new\_buffer()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+#include <asn_application.h>
+
+typedef struct {
+    void *buffer;   /* NULL if failed to encode. */
+    asn_enc_rval_t result;
+} asn_encode_to_new_buffer_result_t;
+asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    enum asn_transfer_syntax syntax,
+    const asn_TYPE_descriptor_t *type_to_encode,
+    const void *structure_to_encode);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{asn_encode_to_new_buffer()} function serializes the given \code{structure_to_encode} using the chosen ASN.1 transfer \code{syntax}.
+
+The function places the serialized data into the newly allocated buffer
+which it returns in a compound structure.
+
+\subsection*{Return values}
+
+On failure, the \code{.buffer} is set to \code{NULL}
+and \code{.result.encoded} is set to -1. The global \code{errno} is set
+to one of the following values:
+
+\begin{tabular}[h!]{ll}
+\texttt{EINVAL} & Incorrect parameters to the function, such as NULLs \\
+\texttt{ENOENT} & Encoding transfer syntax is not defined (for this type) \\
+\texttt{EBADF} & The structure has invalid form or content constraint failed \\
+\texttt{ENOMEM} & Memory allocation failed due to system or internal limits
+\end{tabular}
+
+\noindent{}On success, the \code{.result.encoded} is set to the number of
+\textbf{bytes} that it took to serialize the structure.
+The \code{.buffer} contains the serialized content.
+The user is responsible for freeing the \code{.buffer}.
+
+\subsection*{Example}
+\begin{example}
+asn_encode_to_new_buffer_result_t res;
+res = asn_encode_to_new_buffer(0, ATS_DER, &asn_DEF_Rectangle, rect);
+if(res.buffer) {
+    /* Encoded successfully. */
+    free(res.buffer);
+} else {
+    fprintf(stderr, "Failed to encode %\%%s, estimated %\%%zd bytes\n",
+        asn_DEF_Rectangle.name, res.result.encoded);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:asn_encode_to_buffer}{asn_encode_to_buffer()}.
+
+\apisection{sec:asn_fprint}{asn\_fprint()}
+
+\subsection*{Synopsis}
+\begin{signature}
+int asn_fprint(FILE *stream,    /* Destination file */
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *struct_ptr      /* Structure to be printed */
+);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{asn_fprint()} function prints human readable description
+of the target language's structure into the file stream specified by
+\code{stream} pointer.
+
+The output format does not conform to any standard.
+
+The \code{asn_fprint()} function attempts to
+produce a valid output even for incomplete and broken structures, which
+makes it more suitable for debugging complex cases than
+\api{sec:xer_fprint}{xer_fprint()}.
+
+\subsection*{Return values}
+
+\begin{tabular}[h!]{rl}
+0 & Output was successfully made \\
+-1 & Error printing out the structure
+\end{tabular}
+
+\subsection*{Example}
+\begin{example}
+Rectangle_t *rect = ...;
+asn_fprint(stdout, &asn_DEF_Rectangle, rect);
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:xer_fprint}{xer_fprint()}.
+
+\apisection{sec:asn_random_fill}{asn\_random\_fill()}
+
+\subsection*{Synopsis}
+\begin{signature}
+int asn_random_fill(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    size_t approx_max_length_limit
+);
+\end{signature}
+
+\subsection*{Description}
+
+Create or initialize a structure with random contents, according to the type
+specification and optional member constraints.
+
+For best results the code should be generated without \cmd{-no-gen-PER}
+option to \cmd{asn1c}. Making PER constraints code available in runtime
+will make \code{asn_random_fill} explore the edges of PER-visible constraints
+and sometimes break out of extensible contstraints' ranges.
+
+The \code{asn_random_fill()} function has a bias to generate edge case
+values. This property makes it useful for debugging the application level
+code and for security testing, as random data can be a good seed to fuzzing.
+
+The \code{approx_max_length_limit} specifies the approximate limit of the
+resulting structure in units closely resembling bytes. The actual result
+might be several times larger or smaller than the given length limit.
+A rule of thumb way to select the initial value for this parameter
+is to take a typical structure and use twice its DER output size.
+
+\subsection*{Return values}
+
+\begin{tabular}[h!]{rl}
+0 & Structure was properly initialized with random data \\
+-1 & Failure to initialize the structure with random data
+\end{tabular}
+
+\apisection{sec:ber_decode}{ber\_decode()}
+
+\subsection*{Synopsis}
+\begin{signature}
+asn_dec_rval_t ber_decode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of that buffer */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Decode BER, DER and CER data
+(Basic Encoding Rules, Distinguished Encoding Rules, Canonical Encoding Rules),
+as defined by ITU-T~X.690.
+
+DER and CER are different subsets of BER.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_decode}{asn_decode(ATS_BER)}.}
+
+\subsection*{Return values}
+\input{asn_dec_rval.inc}
+
+The \code{.consumed} value is in bytes.
+
+\subsection*{Restartability}
+
+The \code{ber_decode()} function is restartable (stream-oriented).
+That means that in case the buffer has less data than expected,
+the decoder will process whatever is available and ask for more data
+to be provided using the RC\_WMORE return \code{.code}.
+
+Note that in the RC\_WMORE case the decoder may have processed less data than
+it is available in the buffer, which means that you must be able to arrange
+the next buffer to contain the unprocessed part of the previous buffer.
+
+\subsection*{See also}
+\seealso{sec:der_encode}{der_encode()}.
+
+\apisection{sec:der_encode}{der\_encode}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_enc_rval_t der_encode(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *structure_to_encode,
+    asn_app_consume_bytes_f *callback,
+    void *callback_key
+\end{signature}
+
+\subsection*{Description}
+
+The \code{der_encode()} function serializes the given \code{structure_to_encode} using the DER transfer syntax (a variant of BER, Basic Encoding Rules).
+
+During serialization, a user-specified \code{callback} is invoked zero
+or more times with bytes of data to add to the output stream (if any), and
+the \code{callback_key}. The signature for the callback is as follows:
+
+\begin{signature}
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, void *callback_key);
+\end{signature}
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_encode}{asn_encode(ATS_DER)}.}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes}.
+
+\subsection*{Example}
+\begin{example}
+static int
+save_to_file(const void *data, size_t size, void *key) {
+    FILE *fp = key;
+    return (fwrite(data, 1, size, fp) == size) ? 0 : -1;
+}
+
+Rectangle_t *rect = ...;
+FILE *fp = ...;
+asn_enc_rval_t er;
+er = der_encode(&asn_DEF_Rectangle, rect, save_to_file, fp);
+if(er.encoded == -1) {
+   fprintf(stderr, "Failed to encode %\%%s\n", asn_DEF_Rectangle.name);
+} else {
+   fprintf(stderr, "%\%%s encoded in %\%%zd bytes\n", asn_DEF_Rectangle.name, er.encoded);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:ber_decode}{ber_decode()},
+\seealso{sec:asn_decode}{asn_decode(ATS_BER)}.
+
+\apisection{sec:der_encode_to_buffer}{der\_encode\_to\_buffer()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_enc_rval_t der_encode_to_buffer(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *structure_to_encode,
+    void *buffer, size_t buffer_size);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{der_encode_to_buffer()} function serializes the given \code{structure_to_encode} using the DER transfer syntax (a variant of BER, Basic Encoding Rules).
+
+The function places the serialized data into the given
+\code{buffer} of size \code{buffer_size}.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_encode_to_buffer}{asn_encode_to_buffer(ATS_DER)}.}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes}.
+
+The \code{.encoded} never exceeds the available buffer size.\footnote{This
+behavior is different from \api{sec:asn_encode_to_buffer}{asn_encode_to_buffer()}.}
+If the \code{buffer_size} is not sufficient, the \code{.encoded}
+will be set to -1 and encoding would fail.
+
+\subsection*{Example}
+\begin{example}
+Rectangle_t *rect = ...;
+uint8_t buffer[128];
+asn_enc_rval_t er;
+er = der_encode_to_buffer(&asn_DEF_Rectangle, rect, buffer, sizeof(buffer));
+if(er.encoded == -1) {
+   fprintf(stderr, "Serialization of %\%%s failed.\n", asn_DEF_Rectangle.name);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:ber_decode}{ber_decode()},
+\seealso{sec:asn_decode}{asn_decode(ATS_BER)},
+\seealso{sec:asn_encode_to_buffer}{asn_encode_to_buffer(ATS_DER)}.
+
+\apisection{sec:oer_decode}{oer\_decode()}
+
+\subsection*{Synopsis}
+\begin{signature}
+asn_dec_rval_t oer_decode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of that buffer */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Decode the BASIC-OER and CANONICAL-OER (Octet Encoding Rules),
+as defined by ITU-T~X.696.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_decode}{asn_decode(ATS_BASIC_OER)}.}
+
+\subsection*{Return values}
+\input{asn_dec_rval.inc}
+
+The \code{.consumed} value is in bytes.
+
+\subsection*{Restartability}
+
+The \code{oer_decode()} function is restartable (stream-oriented).
+That means that in case the buffer has less data than expected,
+the decoder will process whatever is available and ask for more data
+to be provided using the RC\_WMORE return \code{.code}.
+
+Note that in the RC\_WMORE case the decoder may have processed less data than
+it is available in the buffer, which means that you must be able to arrange
+the next buffer to contain the unprocessed part of the previous buffer.
+
+\apisection{sec:oer_encode}{oer\_encode()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_enc_rval_t oer_encode(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *structure_to_encode,
+    asn_app_consume_bytes_f *callback,
+    void *callback_key);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{oer_encode()} function serializes the given \code{structure_to_encode} using the CANONICAL-OER transfer syntax (Octet Encoding Rules, ITU-T~X.691).
+
+During serialization, a user-specified \code{callback} is invoked zero
+or more times with bytes of data to add to the output stream (if any), and
+the \code{callback_key}. The signature for the callback is as follows:
+
+\begin{signature}
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, void *callback_key);
+\end{signature}
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_encode}{asn_encode(ATS_CANONICAL_OER)}.}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes}.
+
+\subsection*{Example}
+\begin{example}
+static int
+save_to_file(const void *data, size_t size, void *key) {
+    FILE *fp = key;
+    return (fwrite(data, 1, size, fp) == size) ? 0 : -1;
+}
+
+Rectangle_t *rect = ...;
+FILE *fp = ...;
+asn_enc_rval_t er;
+er = oer_encode(&asn_DEF_Rectangle, rect, save_to_file, fp);
+if(er.encoded == -1) {
+   fprintf(stderr, "Failed to encode %\%%s\n", asn_DEF_Rectangle.name);
+} else {
+   fprintf(stderr, "%\%%s encoded in %\%%zd bytes\n", asn_DEF_Rectangle.name, er.encoded);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:asn_encode}{asn_encode(ATS_CANONICAL_OER)}.
+
+\apisection{sec:oer_encode_to_buffer}{oer\_encode\_to\_buffer()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_enc_rval_t oer_encode_to_buffer(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const asn_oer_constraints_t *constraints,
+    const void *structure_to_encode,
+    void *buffer, size_t buffer_size);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{oer_encode_to_buffer()} function serializes the given \code{structure_to_encode} using the CANONICAL-OER transfer syntax (Octet Encoding Rules, ITU-T~X.691).
+
+The function places the serialized data into the given
+\code{buffer} of size \code{buffer_size}.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_encode_to_buffer}{asn_encode_to_buffer(ATS_CANONICAL_OER)}.}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes}.
+
+The \code{.encoded} never exceeds the available buffer size.\footnote{This
+behavior is different from \api{sec:asn_encode_to_buffer}{asn_encode_to_buffer()}.}
+If the \code{buffer_size} is not sufficient, the \code{.encoded}
+will be set to -1 and encoding would fail.
+
+\subsection*{Example}
+\begin{example}
+Rectangle_t *rect = ...;
+uint8_t buffer[128];
+asn_enc_rval_t er;
+er = oer_encode_to_buffer(&asn_DEF_Rectangle, 0, rect, buffer, sizeof(buffer));
+if(er.encoded == -1) {
+   fprintf(stderr, "Serialization of %\%%s failed.\n", asn_DEF_Rectangle.name);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:ber_decode}{ber_decode()},
+\seealso{sec:asn_decode}{asn_decode(ATS_BER)},
+\seealso{sec:asn_encode_to_buffer}{asn_encode_to_buffer(ATS_DER)}.
+
+\apisection{sec:uper_decode}{uper\_decode()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_dec_rval_t uper_decode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size,          /* Size of the input data buffer, bytes */
+    int skip_bits,        /* Number of unused leading bits, 0..7 */
+    int unused_bits       /* Number of unused tailing bits, 0..7 */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Decode the Unaligned BASIC or CANONICAL PER (Packed Encoding Rules),
+as defined by ITU-T~X.691.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_decode}{asn_decode(ATS_UNALIGNED_BASIC_PER)}.}
+
+\subsection*{Return values}
+\input{asn_dec_rval.inc}
+Note that the \code{.consumed} value is in bits.
+Use \code{(.consumed+7)/8} to convert to bytes.
+
+\subsection*{Restartability}
+The \code{uper_decode()} function is not restartable.
+Failures are final.
+
+\apisection{sec:uper_decode_complete}{uper\_decode\_complete()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_dec_rval_t uper_decode_complete(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of data buffer */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Decode a ``Production of a complete encoding'',
+according to ITU-T~X.691 (08/2015) \#11.1.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_decode}{asn_decode(ATS_UNALIGNED_BASIC_PER)}.}
+
+\subsection*{Return values}
+\input{asn_dec_rval.inc}
+
+The the \code{.consumed} value is returned in whole \emph{bytes} (NB).
+
+\subsection*{Restartability}
+The \code{uper_decode_complete()} function is not restartable.
+Failures are final.
+
+The complete encoding contains at least one byte, so on success
+\code{.consumed} will be greater or equal to 1.
+
+\apisection{sec:uper_encode}{uper\_encode()}
+\apisection{sec:uper_encode_to_buffer}{uper\_encode\_to\_buffer()}
+\apisection{sec:uper_encode_to_new_buffer}{uper\_encode\_to\_new\_buffer()}
+\apisection{sec:xer_decode}{xer\_decode()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+asn_dec_rval_t xer_decode(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor,
+    void **struct_ptr_ptr,/* Pointer to a target structure's ptr */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of data buffer */
+);
+\end{signature}
+
+\subsection*{Description}
+
+Decode the BASIC-XER and CANONICAL-XER (XML Encoding Rules) encoding,
+as defined by ITU-T~X.693.\newline
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_decode}{asn_decode(ATS_BASIC_XER)}.}
+
+\subsection*{Return values}
+\input{asn_dec_rval.inc}
+
+The \code{.consumed} value is in bytes.
+
+\subsection*{Restartability}
+
+The \code{xer_decode()} function is restartable (stream-oriented).
+That means that in case the buffer has less data than expected,
+the decoder will process whatever is available and ask for more data
+to be provided using the RC\_WMORE return \code{.code}.
+
+Note that in the RC\_WMORE case the decoder may have processed less data than
+it is available in the buffer, which means that you must be able to arrange
+the next buffer to contain the unprocessed part of the previous buffer.
+
+\apisection{sec:xer_encode}{xer\_encode()}
+
+\subsection*{Synopsis}
+
+\begin{signature}
+enum xer_encoder_flags_e {
+    /* Mode of encoding */
+    XER_F_BASIC     = 0x01, /* BASIC-XER (pretty-printing) */
+    XER_F_CANONICAL = 0x02  /* Canonical XER (strict rules) */
+};
+asn_enc_rval_t xer_encode(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *structure_to_encode,
+    enum xer_encoder_flags_e xer_flags,
+    asn_app_consume_bytes_f *callback,
+    void *callback_key);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{xer_encode()} function serializes the given \code{structure_to_encode} using the BASIC-XER or CANONICAL-XER transfer syntax (XML Encoding Rules, ITU-T~X.693).
+
+During serialization, a user-specified \code{callback} is invoked zero
+or more times with bytes of data to add to the output stream (if any), and
+the \code{callback_key}. The signature for the callback is as follows:
+
+\begin{signature}
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size, void *callback_key);
+\end{signature}
+
+\noindent\emph{Consider using a more generic function \api{sec:asn_encode}{asn_encode()} with \texttt{ATS\_BASIC\_XER} or \texttt{ATS\_CANONICAL\_XER} transfer syntax option.}
+
+\subsection*{Return values}
+\input{asn_enc_rval.inc}
+
+The serialized output size is returned in \textbf{bytes}.
+
+\subsection*{Example}
+\begin{example}
+static int
+save_to_file(const void *data, size_t size, void *key) {
+    FILE *fp = key;
+    return (fwrite(data, 1, size, fp) == size) ? 0 : -1;
+}
+
+Rectangle_t *rect = ...;
+FILE *fp = ...;
+asn_enc_rval_t er;
+er = xer_encode(&asn_DEF_Rectangle, rect, XER_F_CANONICAL, save_to_file, fp);
+if(er.encoded == -1) {
+   fprintf(stderr, "Failed to encode %\%%s\n", asn_DEF_Rectangle.name);
+} else {
+   fprintf(stderr, "%\%%s encoded in %\%%zd bytes\n", asn_DEF_Rectangle.name, er.encoded);
+}
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:xer_fprint}{xer_fprint()}.
+
+\apisection{sec:xer_fprint}{xer\_fprint()}
+
+\subsection*{Synopsis}
+\begin{signature}
+int xer_fprint(FILE *stream,    /* Destination file */
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const void *struct_ptr      /* Structure to be printed */
+);
+\end{signature}
+
+\subsection*{Description}
+
+The \code{xer_fprint()} function outputs XML-based serialization
+of the given structure into the file stream specified by
+\code{stream} pointer.
+
+The output conforms to a BASIC-XER transfer syntax, as defined by ITU-T~X.693.
+
+\subsection*{Return values}
+
+\begin{tabular}[h!]{rl}
+0 & XML output was successfully made \\
+-1 & Error printing out the structure
+\end{tabular}
+
+\noindent{}Since the \code{xer_fprint()} function attempts to produce a conforming output,
+it will likely break on partial structures by writing incomplete data
+to the output stream and returning -1. This makes it less suitable for
+debugging complex cases than \api{sec:asn_fprint}{asn_fprint()}.
+
+\subsection*{Example}
+\begin{example}
+Rectangle_t *rect = ...;
+xer_fprint(stdout, &asn_DEF_Rectangle, rect);
+\end{example}
+
+\subsection*{See also}
+\seealso{sec:asn_fprint}{asn_fprint()}.
+
+\chapter{API usage examples}
+
+Let's start with including the necessary header files into your
+application. Normally it is enough to include the header file of
+the main PDU type. For our \emph{Rectangle} module, including the \emph{Rectangle.h} file is sufficient:
+\begin{codesample}
+#include <Rectangle.h>
+\end{codesample}
+The header files defines a C structure corresponding to the ASN.1
+definition of a rectangle and the declaration of the ASN.1
+\emph{type descriptor}. A type descriptor is a special globally accessible
+object which is used as an argument to most of the API functions provided by
+the ASN.1 codec. A type descriptor starts with \emph{asn\_DEF\_\ldots{}}. For example, here is the code which frees the Rectangle\_t structure:
+\begin{codesample}
+Rectangle_t *rect = ...;
+
+ASN_STRUCT_FREE(%\textbf{asn\_DEF\_}%Rectangle, rect);
+\end{codesample}
+This code defines a \emph{rect} pointer which points to the Rectangle\_t
+structure which needs to be freed. The second line uses a generic
+\api{sec:ASN_STRUCT_FREE}{ASN\_STRUCT\_FREE()} macro which invokes the memory deallocation routine
+created specifically for this Rectangle\_t structure.
+The \emph{asn\_DEF\_Rectangle} is the type descriptor which holds
+a collection of routines and operations defined for the Rectangle\_t structure.
+
+\section{\label{sec:Generic-Encoding}Generic encoders and decoders}
+
+Before we start describing specific encoders and decoders, let's step back
+a little and check out a simple high level way.
+
+The asn1c runtime supplies (see \emph{asn\_application.h}) two sets of high level functions, \api{sec:asn_encode}{asn_encode*} and \api{sec:asn_decode}{asn_decode*}, which take a transfer syntax selector as an argument. The transfer syntax selector is defined as this:
+
+\begin{codesample}[basicstyle=\scriptsize\listingfont]
+/*
+ * A selection of ASN.1 Transfer Syntaxes to use with generalized encoders and decoders.
+ */
+enum asn_transfer_syntax {
+    ATS_INVALID,
+    ATS_NONSTANDARD_PLAINTEXT,
+    ATS_BER,
+    ATS_DER,
+    ATS_CER,
+    ATS_BASIC_OER,
+    ATS_CANONICAL_OER,
+    ATS_UNALIGNED_BASIC_PER,
+    ATS_UNALIGNED_CANONICAL_PER,
+    ATS_BASIC_XER,
+    ATS_CANONICAL_XER,
+};
+\end{codesample}
+
+Using this encoding selector, encoding and decoding becomes very generic:
+
+\noindent{}Encoding:
+
+\begin{codesample}[basicstyle=\scriptsize\listingfont]
+uint8_t buffer[128];
+size_t buf_size = sizeof(buffer);
+asn_enc_rval_t er;
+
+er = %\textbf{asn\_encode\emph{\_to\_buffer}}%(0, %\textbf{ATS\_DER}%, &asn_DEF_Rectangle, buffer, buf_size);
+
+if(er.encoded > buf_size) {
+    fprintf(stderr, "Buffer of size %\%%zu is too small for %\%%s, need %\%%zu\n",
+        buf_size, asn_DEF_Rectangle.name, er.encoded);
+}
+\end{codesample}
+
+\noindent{}Decoding:
+
+\begin{codesample}[basicstyle=\scriptsize\listingfont]
+Rectangle_t *%$\underbracket{\textrm{\listingfont rect = 0}}$%;    /* %\textbf{\color{red}Note this 0\footnote{Forgetting to properly initialize the pointer to a destination structure is a major source of support requests.}!}% */
+
+... = %\textbf{asn\_decode}%(0, %\textbf{ATS\_BER}%, &asn_DEF_Rectangle, (void **)%$\underbracket{\textrm{\listingfont \&rect}}$%, buffer, buf_size);
+\end{codesample}
+
+\section{\label{sec:Decoding-BER}Decoding BER}
+
+The Basic Encoding Rules describe the most widely used (by the ASN.1
+community) way to encode and decode a given structure in a machine-independent
+way. Several other encoding rules (CER, DER) define a more restrictive
+versions of BER, so the generic BER parser is also capable of decoding
+the data encoded by the CER and DER encoders. The opposite is not true.
+
+\emph{The ASN.1 compiler provides the generic BER decoder which is
+capable of decoding BER, CER and DER encoded data.}
+
+The decoder is restartable (stream-oriented).
+That means that in case the buffer has less data than expected,
+the decoder will process whatever is available and ask for more data
+to be provided using the RC\_WMORE return \code{.code}.
+
+Note that in the RC\_WMORE case the decoder may have processed less data than
+it is available in the buffer, which means that you must be able to arrange
+the next buffer to contain the unprocessed part of the previous buffer.
+
+Suppose, you have two buffers of encoded data: 100 bytes and 200 bytes.
+\begin{itemize}
+\item You can concatenate these buffers and feed the BER decoder with 300
+bytes of data, or
+\item You can feed it the first buffer of 100 bytes of data, realize that
+the ber\_decoder consumed only 95 bytes from it and later feed the
+decoder with 205 bytes buffer which consists of 5 unprocessed bytes
+from the first buffer and the additional 200 bytes from the second
+buffer.
+\end{itemize}
+This is not as convenient as it could be (the BER encoder could
+consume the whole 100 bytes and keep these 5 bytes in some temporary
+storage), but in case of existing stream based processing it might
+actually fit well into existing algorithm. Suggestions are welcome.
+
+Here is the example of BER decoding of a simple structure:
+
+\begin{codesample}
+Rectangle_t *
+simple_deserializer(const void *buffer, size_t buf_size) {
+    asn_dec_rval_t rval;
+    Rectangle_t *%$\underbracket{\textrm{\listingfont rect = 0}}$%;    /* %\textbf{\color{red}Note this 0\footnote{Forgetting to properly initialize the pointer to a destination structure is a major source of support requests.}!}% */
+
+    rval = %\textbf{asn\_DEF\_Rectangle.op->ber\_decoder}%(0,
+          &asn_DEF_Rectangle,
+          (void **)%$\underbracket{\textrm{\listingfont \&rect}}$%,    /* Decoder %\emph{changes}% the pointer */
+          buffer, buf_size, 0);
+
+    if(rval%\textbf{.code}% == RC_OK) {
+        return rect;          /* Decoding succeeded */
+    } else {
+        /* Free the partially decoded rectangle */
+        ASN_STRUCT_FREE(asn_DEF_Rectangle, rect);
+        return 0;
+    }
+}
+\end{codesample}
+
+The code above defines a function, \emph{simple\_deserializer}, which
+takes a buffer and its length and is expected to return a pointer
+to the Rectangle\_t structure. Inside, it tries to convert the bytes
+passed into the target structure (rect) using the BER decoder and
+returns the rect pointer afterwards. If the structure cannot be deserialized,
+it frees the memory which might be left allocated by the unfinished
+\emph{ber\_decoder} routine and returns 0 (no data). (This \textbf{freeing
+is necessary} because the ber\_decoder is a restartable procedure,
+and may fail just because there is more data needs to be provided
+before decoding could be finalized). The code above obviously does
+not take into account the way the \emph{ber\_decoder()} failed, so
+the freeing is necessary because the part of the buffer may already
+be decoded into the structure by the time something goes wrong.
+
+A little less wordy would be to invoke a globally available \emph{ber\_decode()}
+function instead of dereferencing the asn\_DEF\_Rectangle type descriptor:
+\begin{codesample}
+rval = ber_decode(0, &asn_DEF_Rectangle, (void **)&rect, buffer, buf_size);
+\end{codesample}
+Note that the initial (asn\_DEF\_Rectangle.op->ber\_decoder) reference
+is gone, and also the last argument (0) is no longer necessary.
+
+These two ways of BER decoder invocations are fully equivalent.
+
+The BER de\emph{coder} may fail because of (\emph{the following RC\_\ldots{}
+codes are defined in ber\_decoder.h}):
+\begin{itemize}
+\item RC\_WMORE: There is more data expected than it is provided (stream
+mode continuation feature);
+\item RC\_FAIL: General failure to decode the buffer;
+\item \ldots{} other codes may be defined as well.
+\end{itemize}
+Together with the return code (.code) the asn\_dec\_rval\_t type contains
+the number of bytes which is consumed from the buffer. In the previous
+hypothetical example of two buffers (of 100 and 200 bytes), the first
+call to ber\_decode() would return with .code = RC\_WMORE and .consumed
+= 95. The .consumed field of the BER decoder return value is \textbf{always}
+valid, even if the decoder succeeds or fails with any other return
+code.
+
+Look into ber\_decoder.h for the precise definition of ber\_decode()
+and related types.
+
+
+\section{\label{sec:Encoding-DER}Encoding DER}
+
+The Distinguished Encoding Rules is the \emph{canonical} variant of
+BER encoding rules. The DER is best suited to encode the structures
+where all the lengths are known beforehand. This is probably exactly
+how you want to encode: either after a BER decoding or after a manual
+fill-up, the target structure contains the data which size is implicitly
+known before encoding. Among other uses, the DER encoding is used
+to encode X.509 certificates.
+
+As with BER decoder, the DER encoder may be invoked either directly
+from the ASN.1 type descriptor (asn\_DEF\_Rectangle) or from the stand-alone
+function, which is somewhat simpler:
+\begin{codesample}
+/*
+ * This is the serializer itself.
+ * It supplies the DER encoder with the
+ * pointer to the custom output function.
+ */
+ssize_t
+simple_serializer(FILE *ostream, Rectangle_t *rect) {
+    asn_enc_rval_t er;  /* Encoder return value */
+
+    er = der_encode(&asn_DEF_Rect, rect, write_stream, ostream);
+    if(er%\textbf{.encoded}% == -1) {
+        fprintf(stderr, "Cannot encode %\%%s: %\%%s\n",
+            er%\textbf{.failed\_type}%->name, strerror(errno));
+        return -1;
+    } else {
+        /* Return the number of bytes */
+        return er.encoded;
+    }
+}
+\end{codesample}
+As you see, the DER encoder does not write into some sort of buffer.
+It just invokes the custom function (possible, multiple
+times) which would save the data into appropriate storage. The optional
+argument \emph{app\_key} is opaque for the DER encoder code and just
+used by \emph{write\_stream()} as the pointer to the appropriate
+output stream to be used.
+
+If the custom write function is not given (passed as 0), then the
+DER encoder will essentially do the same thing (i.~e., encode the data)
+but no callbacks will be invoked (so the data goes nowhere). It may
+prove useful to determine the size of the structure's encoding before
+actually doing the encoding%
+\footnote{It is actually faster too: the encoder might skip over some computations
+which aren't important for the size determination.%
+}.
+
+Look into der\_encoder.h for the precise definition of der\_encode()
+and related types.
+
+
+\section{\label{sec:Encoding-XER}Encoding XER}
+
+The XER stands for XML Encoding Rules, where XML, in turn, is eXtensible
+Markup Language, a text-based format for information exchange. The
+encoder routine API comes in two flavors: stdio-based and callback-based.
+With the callback-based encoder, the encoding process is very similar
+to the DER one, described in \fref{sec:Encoding-DER}. The
+following example uses the definition of write\_stream() from up there.
+\begin{codesample}
+/*
+ * This procedure generates an XML document
+ * by invoking the XER encoder.
+ * NOTE: Do not copy this code verbatim!
+ *       If the stdio output is necessary,
+ *       use the xer_fprint() procedure instead.
+ *       See %\fref{sec:Printing-the-target}%.
+ */
+int
+print_as_XML(FILE *ostream, Rectangle_t *rect) {
+    asn_enc_rval_t er;  /* Encoder return value */
+
+    er = xer_encode(&asn_DEF_Rectangle, rect,
+        XER_F_BASIC, /* BASIC-XER or CANONICAL-XER */
+        write_stream, ostream);
+
+    return (er.encoded == -1) ? -1 : 0;
+}
+\end{codesample}
+Look into xer\_encoder.h for the precise definition of xer\_encode()
+and related types.
+
+See \fref{sec:Printing-the-target} for the example of stdio-based
+XML encoder and other pretty-printing suggestions.
+
+
+\section{\label{sec:Decoding-XER}Decoding XER}
+
+The data encoded using the XER rules can be subsequently decoded using
+the xer\_decode() API call:
+\begin{codesample}
+Rectangle_t *
+XML_to_Rectangle(const void *buffer, size_t buf_size) {
+    asn_dec_rval_t rval;
+    Rectangle_t *%$\underbracket{\textrm{\listingfont rect = 0}}$%;    /* %\textbf{\color{red}Note this 0\footnote{Forgetting to properly initialize the pointer to a destination structure is a major source of support requests.}!}% */
+
+    rval = xer_decode(0, &asn_DEF_Rectangle, (void **)&rect, buffer, buf_size);
+
+    if(rval%\textbf{.code}% == RC_OK) {
+        return rect;          /* Decoding succeeded */
+    } else {
+        /* Free partially decoded rect */
+        ASN_STRUCT_FREE(asn_DEF_Rectangle, rect);
+        return 0;
+    }
+}
+\end{codesample}
+The decoder takes both BASIC-XER and CANONICAL-XER encodings.
+
+The decoder shares its data consumption properties with BER decoder;
+please read the \fref{sec:Decoding-BER} to know more.
+
+Look into xer\_decoder.h for the precise definition of xer\_decode()
+and related types.
+
+
+\section{\label{sec:Validating-the-target}Validating the target structure}
+
+Sometimes the target structure needs to be validated. For example,
+if the structure was created by the application (as opposed to being
+decoded from some external source), some important information required
+by the ASN.1 specification might be missing. On the other hand, the
+successful decoding of the data from some external source does not
+necessarily mean that the data is fully valid either. It might well
+be the case that the specification describes some subtype constraints
+that were not taken into account during decoding, and it would actually
+be useful to perform the last check when the data is ready to be encoded
+or when the data has just been decoded to ensure its validity according
+to some stricter rules.
+
+The \api{sec:asn_check_constraints}{asn_check_constraints()}
+function checks the type for various
+implicit and explicit constraints. It is recommended to use the
+\code{asn_check_constraints()}
+function after each decoding and before each encoding.
+
+\section{\label{sec:Printing-the-target}Printing the target structure}
+
+To print out the structure for debugging purposes, use the
+\api{sec:asn_fprint}{asn_fprint()} function:
+\begin{codesample}
+asn_fprint(stdout, &asn_DEF_Rectangle, rect);
+\end{codesample}
+
+A practical alternative to this custom format printing is to serialize
+the structure into XML. The default BASIC-XER encoder performs reasonable
+formatting for the output to be both useful and human readable.
+Use the \api{sec:xer_fprint}{xer_fprint()} function:
+\begin{codesample}
+xer_fprint(stdout, &asn_DEF_Rectangle, rect);
+\end{codesample}
+See \fref{sec:Encoding-XER} for XML-related details.
+
+\section{\label{sec:Freeing-the-target}Freeing the target structure}
+
+Freeing the structure is slightly more complex than it may seem.
+When the ASN.1 structure is freed, all the members of the structure
+and their submembers are recursively freed as well.
+The ASN\_STRUCT\_FREE() macro helps with that.
+
+But it might not always be feasible to free the whole structure.
+In the following example, the application programmer defines a custom
+structure with one ASN.1-derived member (rect).
+\begin{codesample}
+struct my_figure {       /* The custom structure */
+    int flags;           /* <some custom member> */
+    /* The type is generated by the ASN.1 compiler */
+    Rectangle_t rect;
+    /* other members of the structure */
+};
+\end{codesample}
+This member is not a reference to the Rectangle\_t, but an in-place inclusion
+of the Rectangle\_t structure.
+If there's a need to free the \code{rect} member, the usual procedure of
+freeing everything must not be applied to the \code{\&rect} pointer itself,
+because it does not point to the beginning of memory block allocated by
+the memory allocation routine, but instead lies within a block allocated for
+the my\_figure structure.
+
+To solve this problem, in addition to ASN\_STRUCT\_FREE() macro, the asn1c
+skeletons define the ASN\_STRUCT\_RESET() macro which doesn't free the passed
+pointer and instead resets the structure into the clean and safe state.
+\begin{codesample}
+/* %\textbf{1. Rectangle\_t is defined within my\_figure}% */
+struct my_figure {
+    Rectangle_t rect;
+} *mf = ...;
+/*
+ * Freeing the Rectangle_t
+ * without freeing the mf->rect area.
+ */
+ASN_STRUCT_RESET(asn_DEF_Rectangle, &mf->rect);
+  
+/* %\textbf{2. Rectangle\_t is a stand-alone pointer}% */
+Rectangle_t *rect = ...;
+/*
+ * Freeing the Rectangle_t
+ * and freeing the rect pointer.
+ */
+ASN_STRUCT_FREE(asn_DEF_Rectangle, rect);
+\end{codesample}
+It is safe to invoke both macros with the target structure pointer
+set to 0 (NULL). In this case, the function will do nothing.
+
+\chapter{\label{chap:Abstract-Syntax-Notation}Abstract Syntax Notation: ASN.1}
+
+\emph{This chapter defines some basic ASN.1 concepts and describes
+several most widely used types. It is by no means an authoritative
+or complete reference. For more complete ASN.1 description, please
+refer to Olivier Dubuisson's book \cite{Dub00} or the ASN.1 body
+of standards itself \cite{ITU-T/ASN.1}.}
+
+The Abstract Syntax Notation One is used to formally describe the
+data transmitted across the network. Two communicating parties may employ
+different formats of their native data types (e.~g., different number
+of bits for the native integer type), thus it is important to have
+a way to describe the data in a manner which is independent from the
+particular machine's representation.
+The ASN.1 specifications are used to achieve the following:
+\begin{itemize}
+\item The specification expressed in the ASN.1 notation is a formal and
+precise way to communicate the structure of data to human readers;
+\item The ASN.1 specifications may be used as input for automatic compilers
+which produce the code for some target language (C, C++, Java, etc)
+to encode and decode the data according to some encoding formats.
+Several such encoding formats (called Transfer Encoding Rules)
+have been defined by the ASN.1 standard.
+\end{itemize}
+Consider the following example:
+\begin{asn}
+Rectangle ::= SEQUENCE {
+    height  INTEGER,
+    width   INTEGER
+}
+\end{asn}
+This ASN.1 specification describes a constructed type, \emph{Rectangle},
+containing two integer fields. This specification may tell the reader
+that there exists this kind of data structure and that some entity
+may be prepared to send or receive it. The question on \emph{how}
+that entity is going to send or receive the \emph{encoded data} is
+outside the scope of ASN.1. For example, this data structure may be
+encoded according to some encoding rules and sent to the destination
+using the TCP protocol. The ASN.1 specifies several ways of encoding
+(or ``serializing'', or ``marshaling'') the data: BER, PER, XER
+and others, including CER and DER derivatives from BER.
+
+The complete specification must be wrapped in a module, which looks
+like this:
+\begin{asn}
+RectangleModule1
+    { iso org(3) dod(6) internet(1) private(4)
+      enterprise(1) spelio(9363) software(1)
+      asn1c(5) docs(2) rectangle(1) 1 }
+    DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+-- This is a comment which describes nothing.
+Rectangle ::= SEQUENCE {
+    height  INTEGER,        -- Height of the rectangle
+    width   INTEGER         -- Width of the rectangle
+}
+
+END
+\end{asn}
+The module header consists of module name (RectangleModule1), the
+module object identifier (\{...\}), a keyword ``DEFINITIONS'', a
+set of module flags (AUTOMATIC TAGS) and ``::= BEGIN''. The module
+ends with an ``END'' statement.
+
+
+\section{Some of the ASN.1 Basic Types}
+
+
+\subsection{The BOOLEAN type}
+
+The BOOLEAN type models the simple binary TRUE/FALSE, YES/NO, ON/OFF
+or a similar kind of two-way choice.
+
+
+\subsection{The INTEGER type}
+
+The INTEGER type is a signed natural number type without any restrictions
+on its size. If the automatic checking on INTEGER value bounds are
+necessary, the subtype constraints must be used.
+\begin{asn}
+SimpleInteger ::= INTEGER
+
+-- An integer with a very limited range
+SmallPositiveInt ::= INTEGER (0..127)
+
+-- Integer, negative
+NegativeInt ::= INTEGER (MIN..0)
+\end{asn}
+
+\subsection{The ENUMERATED type}
+
+The ENUMERATED type is semantically equivalent to the INTEGER type
+with some integer values explicitly named.
+\begin{asn}
+FruitId ::= ENUMERATED { apple(1), orange(2) }
+
+-- The numbers in braces are optional,
+-- the enumeration can be performed
+-- automatically by the compiler
+ComputerOSType ::= ENUMERATED {
+    FreeBSD,          -- acquires value 0
+    Windows,          -- acquires value 1
+    Solaris(5),       -- remains 5
+    Linux,            -- becomes 6
+    MacOS             -- becomes 7
+}
+\end{asn}
+
+\subsection{The OCTET STRING type}
+
+This type models the sequence of 8-bit bytes. This may be used to
+transmit some opaque data or data serialized by other types of encoders
+(e.~g., video file, photo picture, etc).
+
+\subsection{The OBJECT IDENTIFIER type}
+
+The OBJECT IDENTIFIER is used to represent the unique identifier of
+any object, starting from the very root of the registration tree.
+If your organization needs to uniquely identify something (a router,
+a room, a person, a standard, or whatever), you are encouraged to
+get your own identification subtree at \url{http://www.iana.org/protocols/forms.htm}.
+
+For example, the very first ASN.1 module in this Chapter (RectangleModule1)
+has the following OBJECT IDENTIFIER: 1 3 6 1 4 1 9363 1 5 2 1 1.
+\begin{asn}
+ExampleOID ::= OBJECT IDENTIFIER
+
+rectangleModule1-oid ExampleOID
+  ::= { 1 3 6 1 4 1 9363 1 5 2 1 1 }
+
+-- An identifier of the Internet.
+internet-id OBJECT IDENTIFIER
+  ::= { iso(1) identified-organization(3)
+        dod(6) internet(1) }
+\end{asn}
+As you see, names are optional.
+
+
+\subsection{The RELATIVE-OID type}
+
+The RELATIVE-OID type has the semantics of a subtree of an OBJECT
+IDENTIFIER. There may be no need to repeat the whole sequence of numbers
+from the root of the registration tree where the only thing of interest
+is some of the tree's subsequence.
+\begin{asn}
+this-document RELATIVE-OID ::= { docs(2) usage(1) }
+
+this-example RELATIVE-OID ::= {
+    this-document assorted-examples(0) this-example(1) }
+\end{asn}
+
+\section{Some of the ASN.1 String Types}
+
+
+\subsection{The IA5String type}
+
+This is essentially the ASCII, with 128 character codes available
+(7 lower bits of an 8-bit byte).
+
+
+\subsection{The UTF8String type}
+
+This is the character string which encodes the full Unicode range
+(4 bytes) using multibyte character sequences.
+
+
+\subsection{The NumericString type}
+
+This type represents the character string with the alphabet consisting
+of numbers (``0'' to ``9'') and a space.
+
+
+\subsection{The PrintableString type}
+
+The character string with the following alphabet: space, ``\textbf{'}''
+(single quote), ``\textbf{(}'', ``\textbf{)}'', ``\textbf{+}'',
+``\textbf{,}'' (comma), ``\textbf{-}'', ``\textbf{.}'', ``\textbf{/}'',
+digits (``0'' to ``9''), ``\textbf{:}'', ``\textbf{=}'', ``\textbf{?}'',
+upper-case and lower-case letters (``A'' to ``Z'' and ``a''
+to ``z'').
+
+
+\subsection{The VisibleString type}
+
+The character string with the alphabet which is more or less a subset
+of ASCII between the space and the ``\textbf{\textasciitilde{}}''
+symbol (tilde).
+
+Alternatively, the alphabet may be described as the PrintableString
+alphabet presented earlier, plus the following characters: ``\textbf{!}'',
+``\textbf{``}'', ``\textbf{\#}'', ``\textbf{\$}'', ``\textbf{\%}'',
+``\textbf{\&}'', ``\textbf{*}'', ``\textbf{;}'', ``\textbf{<}'',
+``\textbf{>}'', ``\textbf{{[}}'', ``\textbf{\textbackslash{}}'',
+``\textbf{{]}}'', ``\textbf{\textasciicircum{}}'', ``\textbf{\_}'',
+``\textbf{`}`` (single left quote), ``\textbf{\{}'', ``\textbf{|}'',
+``\textbf{\}}'', ``\textbf{\textasciitilde{}}''.
+
+
+\section{ASN.1 Constructed Types}
+
+
+\subsection{The SEQUENCE type}
+
+This is an ordered collection of other simple or constructed types.
+The SEQUENCE constructed type resembles the C ``struct'' statement.
+\begin{asn}
+Address ::= SEQUENCE {
+    -- The apartment number may be omitted
+    apartmentNumber      NumericString OPTIONAL,
+    streetName           PrintableString,
+    cityName             PrintableString,
+    stateName            PrintableString,
+    -- This one may be omitted too
+    zipNo                NumericString OPTIONAL
+}
+\end{asn}
+
+\subsection{The SET type}
+
+This is a collection of other simple or constructed types. Ordering
+is not important. The data may arrive in the order which is different
+from the order of specification. Data is encoded in the order not
+necessarily corresponding to the order of specification.
+
+
+\subsection{The CHOICE type}
+
+This type is just a choice between the subtypes specified in it. The
+CHOICE type contains at most one of the subtypes specified, and it
+is always implicitly known which choice is being decoded or encoded.
+This one resembles the C ``union'' statement.
+
+The following type defines a response code, which may be either an
+integer code or a boolean ``true''/``false'' code.
+\begin{asn}
+ResponseCode ::= CHOICE {
+    intCode    INTEGER,
+    boolCode   BOOLEAN
+}
+\end{asn}
+
+\subsection{The SEQUENCE OF type}
+
+This one is the list (array) of simple or constructed types:
+\begin{asn}
+-- Example 1
+ManyIntegers ::= SEQUENCE OF INTEGER
+
+-- Example 2
+ManyRectangles ::= SEQUENCE OF Rectangle
+
+-- More complex example:
+-- an array of structures defined in place.
+ManyCircles ::= SEQUENCE OF SEQUENCE {
+                            radius INTEGER
+                            }
+\end{asn}
+
+\subsection{The SET OF type}
+
+The SET OF type models the bag of structures. It resembles the SEQUENCE
+OF type, but the order is not important. The elements may arrive
+in the order which is not necessarily the same as the in-memory order
+on the remote machines.
+\begin{asn}
+-- A set of structures defined elsewhere
+SetOfApples :: SET OF Apple
+
+-- Set of integers encoding the kind of a fruit
+FruitBag ::= SET OF ENUMERATED { apple, orange }
+\end{asn}
+\begin{thebibliography}{ITU-T/ASN.1}
+\bibitem[ASN1C]{ASN1C}The Open Source ASN.1 Compiler. \url{http://lionet.info/asn1c}
+
+\bibitem[AONL]{AONL}Online ASN.1 Compiler. \url{http://lionet.info/asn1c/asn1c.cgi}
+
+\bibitem[Dub00]{Dub00}Olivier Dubuisson --- \emph{ASN.1 Communication
+between heterogeneous systems} --- Morgan Kaufmann Publishers, 2000.
+\url{http://asn1.elibel.tm.fr/en/book/}. ISBN:0-12-6333361-0.
+
+\bibitem[ITU-T/ASN.1]{ITU-T/ASN.1}ITU-T Study Group 17 --- Languages
+for Telecommunication Systems \url{http://www.itu.int/ITU-T/studygroups/com17/languages/}
+\end{thebibliography}
+
+\end{document}
diff --git a/doc/docsrc/asn_dec_rval.inc b/doc/docsrc/asn_dec_rval.inc
new file mode 100644 (file)
index 0000000..c574965
--- /dev/null
@@ -0,0 +1,30 @@
+
+Upon unsuccessful termination, the \code{*struct_ptr_ptr}
+may contain partially decoded data. This data may be useful for debugging
+(such as by using \code{asn_fprint()}).
+Don't forget to discard the unused partially decoded data by calling
+\code{ASN_STRUCT_FREE()} or \code{ASN_STRUCT_RESET()}.
+
+The function returns a compound structure:
+\begin{codesample}
+typedef struct {
+    enum {
+        RC_OK,          /* Decoded successfully */
+        RC_WMORE,       /* More data expected, call again */
+        RC_FAIL         /* Failure to decode data */
+    } code;             /* Result code */
+    size_t consumed;    /* Number of bytes consumed */
+} asn_dec_rval_t;
+\end{codesample}
+
+\noindent{}The \code{.code} member specifies the decoding outcome.
+
+\begin{tabular}[h!]{ll}
+\texttt{RC\_OK} & Decoded successfully and completely \\
+\texttt{RC\_WMORE} & More data expected, call again \\
+\texttt{RC\_FAIL} & Failed for good
+\end{tabular}
+
+\noindent{}The \code{.consumed} member specifies the amount of \code{buffer} data
+that was used during parsing, irrespectively of the \code{.code}.
+
diff --git a/doc/docsrc/asn_enc_rval.inc b/doc/docsrc/asn_enc_rval.inc
new file mode 100644 (file)
index 0000000..654e45a
--- /dev/null
@@ -0,0 +1,17 @@
+
+The function returns a compound structure:
+
+\begin{codesample}
+typedef struct {
+    ssize_t encoded;
+    const asn_TYPE_descriptor_t *failed_type;
+    const void *structure_ptr;
+} asn_enc_rval_t;
+\end{codesample}
+
+\noindent{}In case of unsuccessful encoding, the \code{.encoded} member is set to -1 and
+the other members of the compound structure point to where the encoding has
+failed to proceed further.
+
+In case encoding is successful, the \code{.encoded} member specifies the
+size of the serialized output.
diff --git a/doc/man/Makefile b/doc/man/Makefile
new file mode 100644 (file)
index 0000000..3fd212b
--- /dev/null
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# doc/man/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = doc/man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_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
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(dist_man1_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/doc/man
+abs_srcdir = /home/nokia/mouse07410/asn1c/doc/man
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+dist_man1_MANS = asn1c.1 unber.1 enber.1
+#PANDOC_OPTIONS = --from markdown --to man        \
+#              --variable header="Version ${VERSION}"  \
+#              --variable adjusting:l                  \
+#              --variable hyphenate:""                 \
+#              --standalone
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/man/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/man/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(dist_man1_MANS)
+       @$(NORMAL_INSTALL)
+       @list1='$(dist_man1_MANS)'; \
+       list2=''; \
+       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='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       } | 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)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; 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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+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:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am 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 \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags-am uninstall uninstall-am uninstall-man \
+       uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+#%.1: %.man.md
+#      ${PANDOC} ${PANDOC_OPTIONS} -o $@ $<
+
+# 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:
diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
new file mode 100644 (file)
index 0000000..1035ff9
--- /dev/null
@@ -0,0 +1,16 @@
+
+dist_man1_MANS = asn1c.1 unber.1 enber.1
+
+if HAVE_PANDOC
+
+PANDOC_OPTIONS= --from markdown --to man        \
+               --variable header="Version ${VERSION}"  \
+               --variable adjusting:l                  \
+               --variable hyphenate:""                 \
+               --standalone
+
+%.1: %.man.md
+       ${PANDOC} ${PANDOC_OPTIONS} -o $@ $<
+
+endif
+
diff --git a/doc/man/Makefile.in b/doc/man/Makefile.in
new file mode 100644 (file)
index 0000000..e8e74cd
--- /dev/null
@@ -0,0 +1,553 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = doc/man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_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
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(dist_man1_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_man1_MANS = asn1c.1 unber.1 enber.1
+@HAVE_PANDOC_TRUE@PANDOC_OPTIONS = --from markdown --to man        \
+@HAVE_PANDOC_TRUE@             --variable header="Version ${VERSION}"  \
+@HAVE_PANDOC_TRUE@             --variable adjusting:l                  \
+@HAVE_PANDOC_TRUE@             --variable hyphenate:""                 \
+@HAVE_PANDOC_TRUE@             --standalone
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/man/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign doc/man/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(dist_man1_MANS)
+       @$(NORMAL_INSTALL)
+       @list1='$(dist_man1_MANS)'; \
+       list2=''; \
+       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='$(dist_man1_MANS)'; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       } | 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)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+       for dir in "$(DESTDIR)$(man1dir)"; 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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+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:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am 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 \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags-am uninstall uninstall-am uninstall-man \
+       uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+@HAVE_PANDOC_TRUE@%.1: %.man.md
+@HAVE_PANDOC_TRUE@     ${PANDOC} ${PANDOC_OPTIONS} -o $@ $<
+
+# 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:
diff --git a/doc/man/asn1c.1 b/doc/man/asn1c.1
new file mode 100644 (file)
index 0000000..93d47c9
--- /dev/null
@@ -0,0 +1,332 @@
+.\"t
+.\" Automatically generated by Pandoc 1.19.2.1
+.\"
+.ad l
+.TH "asn1c" "1" "2017\-09\-01" "ASN.1 Compiler" "Version 0.9.29"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+asn1c \-\- the ASN.1 Compiler
+.SH SYNOPSIS
+.PP
+asn1c [\f[B]\-E\f[] [\f[B]\-F\f[]] | \f[B]\-P\f[] | \f[B]\-R\f[]]
+.PD 0
+.P
+.PD
+[\f[B]\-S\f[]\f[I]dir\f[]] [\f[B]\-X\f[]]
+.PD 0
+.P
+.PD
+[\f[B]\-W\f[]\f[I]debug\-\f[]...] [\f[B]\-f\f[]\f[I]option\f[]]
+[\f[B]\-gen\-\f[]\f[I]option\f[]]
+[\f[B]\-pdu\f[]={\f[B]all\f[]|\f[B]auto\f[]|\f[I]Type\f[]}]
+.PD 0
+.P
+.PD
+[\f[B]\-print\-\f[]\f[I]option\f[]]
+.PD 0
+.P
+.PD
+\f[I]input\-filenames\f[]...
+.SH DESCRIPTION
+.PP
+asn1c compiles ASN.1 specifications into a set of target language
+(C/C++) encoders and decoders for BER, DER, PER, XER, OER and other
+encoding rules.
+.SH OPTIONS
+.SS Stage Selection Options
+.TP
+.B \-E
+Run the parsing stage only.
+Print the reconstructed ASN.1 text.
+.RS
+.RE
+.TP
+.B \-F
+Used together with \f[B]\-E\f[], instructs the compiler to stop after
+the ASN.1 syntax tree fixing stage and dump the reconstructed ASN.1
+specification to the standard output.
+.RS
+.RE
+.TP
+.B \-P
+Dump the compiled output to the standard output instead of creating the
+target language files on disk.
+.RS
+.RE
+.TP
+.B \-R
+Restrict the compiler to generate only the ASN.1 tables, omitting the
+usual support code.
+.RS
+.RE
+.TP
+.B \-S \f[I]directory\f[]
+Use the specified directory with ASN.1 skeleton files.
+.RS
+.RE
+.TP
+.B \-X
+Generate an XML DTD schema for the specified ASN.1 files.
+.RS
+.RE
+.SS Warning Options
+.TP
+.B \-Werror
+Treat warnings as errors; abort if any warning is produced.
+.RS
+.RE
+.TP
+.B \-Wdebug\-lexer
+Enable lexer debugging during the ASN.1 lexing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-parser
+Enable lexer debugging during the ASN.1 parsing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-fixer
+Enable ASN.1 syntax tree fixer debugging during the fixing stage.
+.RS
+.RE
+.TP
+.B \-Wdebug\-compiler
+Enable debugging during the actual compile time.
+.RS
+.RE
+.SS Language Options
+.TP
+.B \-fbless\-SIZE
+Allow \f[C]SIZE()\f[] constraint for \f[C]INTEGER\f[],
+\f[C]ENUMERATED\f[], and other types for which this constraint is
+normally prohibited by the standard.
+This is a violation of ASN.1 standard, and the compiler may fail to
+produce a meaningful code.
+.RS
+.RE
+.TP
+.B \-fcompound\-names
+Using this option prevents name collisions in the target source code by
+using complex names for target language structures.
+(Name collisions may occur if the ASN.1 module reuses the same
+identifiers in multiple contexts).
+.RS
+.RE
+.TP
+.B \-findirect\-choice
+When generating code for a \f[C]CHOICE\f[] type, compile the
+\f[C]CHOICE\f[] members as indirect pointers instead of declaring them
+inline.
+Consider using this option together with \f[B]\-fno\-include\-deps\f[]
+to prevent circular references.
+.RS
+.RE
+.TP
+.B \-fincludes\-quoted
+Refer to header files in \f[C]#include\f[]s using
+\f[B]"\f[]double\f[B]"\f[] instead of \f[B]<\f[]angle\f[B]>\f[] quotes.
+.RS
+.RE
+.TP
+.B \-fknown\-extern\-type=\f[I]name\f[]
+Pretend the specified type is known.
+The compiler will assume the target language source files for the given
+type have been provided manually.
+.RS
+.RE
+.TP
+.B \-fline\-refs
+Include ASN.1 module\[aq]s line numbers in generated code comments.
+.RS
+.RE
+.TP
+.B \-fno\-constraints
+Do not generate ASN.1 subtype constraint checking code.
+This may make a shorter executable.
+.RS
+.RE
+.TP
+.B \-fno\-include\-deps
+Do not generate courtesy #include lines for non\-critical type
+dependencies.
+Helps prevent namespace collisions.
+.RS
+.RE
+.TP
+.B \-funnamed\-unions
+Enable unnamed unions in the definitions of target language\[aq]s
+structures.
+.RS
+.RE
+.TP
+.B \-fwide\-types
+Use the unbounded size data types (\f[C]INTEGER_t\f[],
+\f[C]ENUMERATED_t\f[], \f[C]REAL_t\f[]) by default, instead of using the
+native machine\[aq]s data types (long, double).
+.RS
+.RE
+.SS Codecs Generation Options
+.TP
+.B \-gen\-OER
+Generate the Octet Encoding Rules (OER) support code.
+.RS
+.RE
+.TP
+.B \-gen\-PER
+Generate the Packed Encoding Rules (PER) support code.
+.RS
+.RE
+.TP
+.B \-pdu={all|auto|\f[I]Type\f[]}
+Create a PDU table for specified types, or discover Protocol Data Units
+automatically.
+In case of \f[B]\-pdu=all\f[], all ASN.1 types defined in all modules
+will form a PDU table.
+In case of \f[B]\-pdu=auto\f[], all types not referenced by any other
+type will form a PDU table.
+If \f[I]Type\f[] is an ASN.1 type identifier, the identifier is added to
+the generated PDU table.
+The last form may be specified multiple times to add any number of PDUs.
+.RS
+.RE
+.SS Output Options
+.TP
+.B \-print\-constraints
+When \f[B]\-EF\f[] options are also specified, this option forces the
+compiler to explain its internal understanding of subtype constraints.
+.RS
+.RE
+.TP
+.B \-print\-lines
+Generate "\f[C]\-\-\ #line\f[]" comments in \f[B]\-E\f[] output.
+.RS
+.RE
+.SH TRANSFER SYNTAXES
+.PP
+The ASN.1 family of standards define a number of ways to encode data,
+including byte\-oriented (e.g., BER), bit\-oriented (e.g., PER), and
+textual (e.g., XER).
+Some encoding variants (e.g., DER) are just stricter variants of the
+more general encodings (e.g., BER).
+.PP
+The interoperability table below specifies which API functions can be
+used to exchange data in a compatible manner.
+If you need to \f[I]produce\f[] data conforming to the standard
+specified in the column 1, use the API function in the column 2.
+If you need to \f[I]process\f[] data conforming to the standard(s)
+specified in the column 3, use the API function specified in column 4.
+See the \f[C]asn1c\-usage.pdf\f[] for details.
+.PP
+.TS
+tab(@);
+lw(14.6n) lw(18.5n) lw(13.6n) lw(13.6n).
+T{
+Encoding
+T}@T{
+API function
+T}@T{
+Understood by
+T}@T{
+API function
+T}
+_
+T{
+BER
+T}@T{
+der_encode()
+T}@T{
+BER
+T}@T{
+ber_decode()
+T}
+T{
+DER
+T}@T{
+der_encode()
+T}@T{
+DER, BER
+T}@T{
+ber_decode()
+T}
+T{
+CER
+T}@T{
+\f[I]not supported\f[]
+T}@T{
+CER, BER
+T}@T{
+ber_decode()
+T}
+T{
+BASIC\-OER
+T}@T{
+oer_encode()
+T}@T{
+*\-OER
+T}@T{
+oer_decode()
+T}
+T{
+CANONICAL\-OER
+T}@T{
+oer_encode()
+T}@T{
+*\-OER
+T}@T{
+oer_decode()
+T}
+T{
+BASIC\-UPER
+T}@T{
+uper_encode()
+T}@T{
+*\-UPER
+T}@T{
+uper_decode()
+T}
+T{
+CANONICAL\-UPER
+T}@T{
+uper_encode()
+T}@T{
+*\-UPER
+T}@T{
+uper_decode()
+T}
+T{
+*\-APER
+T}@T{
+\f[I]not supported\f[]
+T}@T{
+*\-APER
+T}@T{
+\f[I]not supported\f[]
+T}
+T{
+BASIC\-XER
+T}@T{
+xer_encode(...)
+T}@T{
+*\-XER
+T}@T{
+xer_decode()
+T}
+T{
+CANONICAL\-XER
+T}@T{
+xer_encode (XER_F_CANONICAL)
+T}@T{
+*\-XER
+T}@T{
+xer_decode()
+T}
+.TE
+.PP
+*) Asterisk means both BASIC and CANONICAL variants.
+.SH SEE ALSO
+.PP
+\f[C]unber\f[](1), \f[C]enber\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/asn1c.man.md b/doc/man/asn1c.man.md
new file mode 100644 (file)
index 0000000..5b553bc
--- /dev/null
@@ -0,0 +1,189 @@
+% asn1c(1) ASN.1 Compiler
+% Lev Walkin <vlm@lionet.info>
+% 2017-09-01
+
+# NAME
+
+asn1c -- the ASN.1 Compiler
+
+# SYNOPSIS
+
+asn1c [**-E** [**-F**] | **-P** | **-R**] \
+      [**-S***dir*] [**-X**] \
+      [**-W***debug-*...] [**-f***option*] [**-gen-***option*] 
+      [**-pdu**={**all**|**auto**|*Type*}] \
+      [**-print-***option*] \
+      *input-filenames*...
+
+# DESCRIPTION
+
+asn1c compiles ASN.1 specifications into a set of
+target language (C/C++) encoders and decoders for BER, DER, PER, XER, OER
+and other encoding rules.
+
+# OPTIONS
+
+## Stage Selection Options
+
+-E
+:   Run the parsing stage only. Print the reconstructed ASN.1 text.
+
+-F
+:   Used together with **-E**,
+    instructs the compiler to stop after the ASN.1 syntax
+    tree fixing stage and dump the reconstructed ASN.1 specification
+    to the standard output.
+
+-P
+:   Dump the compiled output to the standard output instead of creating the
+    target language files on disk.
+
+-R
+:   Restrict the compiler to generate only the ASN.1 tables,
+    omitting the usual support code.
+
+-S *directory*
+:   Use the specified directory with ASN.1 skeleton files.
+
+-X
+:   Generate an XML DTD schema for the specified ASN.1 files.
+
+## Warning Options
+
+-Werror
+:   Treat warnings as errors; abort if any warning is produced.
+
+-Wdebug-lexer
+:   Enable lexer debugging during the ASN.1 lexing stage.
+
+-Wdebug-parser
+:   Enable lexer debugging during the ASN.1 parsing stage.
+
+-Wdebug-fixer
+:   Enable ASN.1 syntax tree fixer debugging during the fixing stage.
+
+-Wdebug-compiler
+:   Enable debugging during the actual compile time.
+
+## Language Options
+
+-fbless-SIZE
+:   Allow `SIZE()` constraint for `INTEGER`, `ENUMERATED`,
+    and other types for which this constraint is normally prohibited
+    by the standard.
+    This is a violation of ASN.1 standard, and the compiler may
+    fail to produce a meaningful code.
+
+-fcompound-names
+:   Using this option prevents name collisions in the target source code
+    by using complex names for target language structures.
+    (Name collisions may occur if the ASN.1 module reuses the same identifiers
+    in multiple contexts).
+
+-findirect-choice
+:   When generating code for a `CHOICE` type, compile the `CHOICE` members
+    as indirect pointers instead of declaring them inline.
+    Consider using this option together with **-fno-include-deps**
+    to prevent circular references.
+
+-fincludes-quoted
+:   Refer to header files in `#include`s using **"**double**"** instead of **\<**angle**>** quotes.
+
+-fknown-extern-type=*name*
+:   Pretend the specified type is known.
+    The compiler will assume the target language source files
+    for the given type have been provided manually.
+
+-fline-refs
+:   Include ASN.1 module's line numbers in generated code comments.
+
+-fno-constraints
+:   Do not generate ASN.1 subtype constraint checking code.
+    This may make a shorter executable.
+
+-fno-include-deps
+:   Do not generate courtesy #include lines for non-critical type dependencies.
+    Helps prevent namespace collisions.
+
+-funnamed-unions
+:   Enable unnamed unions in the definitions of target language's structures.
+
+-fwide-types
+:   Use the unbounded size data types (`INTEGER_t`, `ENUMERATED_t`, `REAL_t`)
+    by default, instead of using the native machine's data types (long, double).
+
+## Codecs Generation Options
+
+-gen-OER
+:   Generate the Octet Encoding Rules (OER) support code.
+
+-gen-PER
+:   Generate the Packed Encoding Rules (PER) support code.
+
+-pdu={all|auto|*Type*}
+:   Create a PDU table for specified types, or discover Protocol Data Units
+    automatically. In case of **-pdu=all**,
+    all ASN.1 types defined in all modules will form a PDU table.
+    In case of **-pdu=auto**, all types not referenced by any other type will
+    form a PDU table.
+    If *Type* is an ASN.1 type identifier, the identifier is added to
+    the generated PDU table.
+    The last form may be specified multiple times to add any number of PDUs.
+
+## Output Options
+
+-print-constraints
+:   When **-EF** options are also specified,
+    this option forces the compiler to explain its internal understanding
+    of subtype constraints.
+
+-print-lines
+:   Generate "`-- #line`" comments in **-E** output.
+
+# TRANSFER SYNTAXES
+
+The ASN.1 family of standards define a number of ways to encode data,
+including byte-oriented (e.g., BER), bit-oriented (e.g., PER),
+and textual (e.g., XER). Some encoding variants (e.g., DER) are just stricter
+variants of the more general encodings (e.g., BER).
+
+The interoperability table below specifies which API functions can be used
+to exchange data in a compatible manner. If you need to _produce_ data
+conforming to the standard specified in the column 1,
+use the API function in the column 2.
+If you need to _process_ data conforming to the standard(s) specified in the
+column 3, use the API function specified in column 4.
+See the `asn1c-usage.pdf` for details.
+
+-------------------------------------------------------------
+Encoding       API function       Understood by API function
+-------------- ------------------ ------------- -------------
+BER            der_encode()       BER           ber_decode()
+
+DER            der_encode()       DER, BER      ber_decode()
+
+CER            _not supported_    CER, BER      ber_decode()
+
+BASIC-OER      oer_encode()       *-OER         oer_decode()
+
+CANONICAL-OER  oer_encode()       *-OER         oer_decode()
+
+BASIC-UPER     uper_encode()      *-UPER        uper_decode()
+
+CANONICAL-UPER uper_encode()      *-UPER        uper_decode()
+
+*-APER         _not supported_    *-APER        _not supported_
+
+BASIC-XER      xer_encode(...)    *-XER         xer_decode()
+
+CANONICAL-XER  xer_encode         *-XER         xer_decode()
+               (XER_F_CANONICAL)
+-------------------------------------------------------------
+
+*) Asterisk means both BASIC and CANONICAL variants.
+
+
+# SEE ALSO
+
+`unber`(1), `enber`(1).
+
diff --git a/doc/man/enber.1 b/doc/man/enber.1
new file mode 100644 (file)
index 0000000..6566398
--- /dev/null
@@ -0,0 +1,71 @@
+.\" Automatically generated by Pandoc 1.16.0.2
+.\"
+.ad l
+.TH "enber" "1" "2016\-01\-23" "unber(1) counterpart" "Version 0.9.28"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+enber \-\- Convert the unber XML output back into BER
+.SH SYNOPSIS
+.PP
+enber [\f[B]\-n\f[]] [\f[B]\-\f[]] [\f[I]input\-filenames\f[]...]
+.SH DESCRIPTION
+.PP
+enber converts the XML\-formatted files produced by \f[C]unber\f[](1)
+back into the BER format.
+A single dash denotes the standard input.
+.SH OPTIONS
+.TP
+.B \-n
+Disable input validation.
+By default, enber performs some basic validity checks against XML input.
+.RS
+.RE
+.SH EXAMPLES
+.PP
+Decode a BER sequence and immediately encode it back
+.RS
+.PP
+unber \f[B]\-p\f[] \f[I]filename.ber\f[] | enber \f[B]\-\f[] >
+\f[I]reconstructed.ber\f[]
+.RE
+.SH FOOTNOTES
+.PP
+This program does not attempt to perform full\-fledged XML parsing.
+It is merely compatible with \f[C]unber\f[](1)\[aq]s output.
+In particular, the XML style comments are not supported.
+A hash "\f[B]#\f[]" or two dashes "\f[B]\-\-\f[]" following a whitespace
+is treated as a beginning of a comment line, which is ignored
+completely.
+Empty lines are ignored as well.
+.PP
+The following example \f[C]enber\f[](1) input demonstrates the use of
+comments:
+.PP
+<C O="0" T="[1]" TL="2" V="2">
+.PD 0
+.P
+.PD
+\ \ \ \ <I O="2" T="[1]" TL="2" V="Indefinite">
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]\-\-\f[] </I O="4" T="[UNIVERSAL 0]" L="4">
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]#\f[] Do not terminate:
+.PD 0
+.P
+.PD
+\ \ \ \ \f[B]#\f[] the absence of end\-of\-content octets is
+intentional!
+.PD 0
+.P
+.PD
+</C O="6" T="[1]" L="6">
+.SH SEE ALSO
+.PP
+\f[C]unber\f[](1), \f[C]asn1c\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/enber.man.md b/doc/man/enber.man.md
new file mode 100644 (file)
index 0000000..a6084ea
--- /dev/null
@@ -0,0 +1,50 @@
+% enber(1) unber(1) counterpart
+% Lev Walkin <vlm@lionet.info>
+% 2016-01-23
+
+# NAME
+
+enber -- Convert the unber XML output back into BER
+
+# SYNOPSIS
+
+enber [**-n**] [**-**] [*input-filenames*...]
+
+# DESCRIPTION
+
+enber converts the XML-formatted files produced by `unber`(1) back into the BER format.
+A single dash denotes the standard input.
+
+# OPTIONS
+
+-n
+:   Disable input validation.
+By default, enber performs some basic validity checks
+against XML input.
+
+# EXAMPLES
+
+Decode a BER sequence and immediately encode it back
+
+> unber **-p** *filename.ber* | enber **-** > *reconstructed.ber*
+
+# FOOTNOTES
+
+This program does not attempt to perform full-fledged XML parsing.
+It is merely compatible with `unber`(1)'s output.
+In particular, the XML style comments are not supported.
+A hash "**#**" or two dashes "**--**" following a whitespace is treated as a beginning of a comment line, which is ignored completely.
+Empty lines are ignored as well.
+
+The following example `enber`(1) input demonstrates the use of comments:
+
+| \<C O="0" T="[1]" TL="2" V="2">
+|     \<I O="2" T="[1]" TL="2" V="Indefinite">
+|     **--** \</I O="4" T="[UNIVERSAL 0]" L="4">
+|     **#** Do not terminate:
+|     **#** the absence of end-of-content octets is intentional!
+| \</C O="6" T="[1]" L="6">
+
+# SEE ALSO
+
+`unber`(1), `asn1c`(1).
diff --git a/doc/man/unber.1 b/doc/man/unber.1
new file mode 100644 (file)
index 0000000..8f787b4
--- /dev/null
@@ -0,0 +1,181 @@
+.\" Automatically generated by Pandoc 1.16.0.2
+.\"
+.ad l
+.TH "unber" "1" "2016\-01\-23" "ASN.1 BER Decoder" "Version 0.9.28"
+.nh \" Turn off hyphenation by default.
+.SH NAME
+.PP
+unber \-\- the ASN.1 BER Decoder
+.SH SYNOPSIS
+.PP
+unber [\f[B]\-1\f[]] [\f[B]\-i\f[]\f[I]indent\f[]] [\f[B]\-m\f[]]
+[\f[B]\-p\f[]] [\f[B]\-s\f[]\f[I]skip\f[]]
+[\f[B]\-t\f[]\f[I]hex\-string\f[]] [\f[B]\-\f[]]
+[\f[I]input\-filenames\f[]...]
+.SH DESCRIPTION
+.PP
+unber presents the internal structure of BER\-encoded files as a human
+readable text.
+A single dash denotes the standard input.
+.PP
+(The DER and CER formats are subsets of the BER and are also supported.)
+.SH OPTIONS
+.TP
+.B \-1
+Do \f[I]not\f[] attempt to read the next BER structure after the first
+one.
+This may be useful if the input contains garbage past the single BER
+sequence.
+By default, unber continues decoding until the end of file (input
+stream).
+.RS
+.RE
+.TP
+.B \-i \f[I]indent\f[]
+Use the specified number of spaces for output indentation.
+Default is 4 spaces.
+.RS
+.RE
+.TP
+.B \-m
+Generate shorter output while still preserving BER encoding information.
+.RS
+.RE
+.TP
+.B \-p
+Do \f[I]not\f[] attempt to pretty\-print known ASN.1 types
+(\f[C]BOOLEAN\f[], \f[C]INTEGER\f[], \f[C]OBJECT\ IDENTIFIER\f[], etc).
+By default, some ASN.1 types are converted into the text representation.
+.RS
+.PP
+This option is required if the \f[C]unber\f[](1) output is used as an
+input to \f[C]enber\f[](1).
+.RE
+.TP
+.B \-s \f[I]skip\f[]
+Ignore the first \f[I]skip\f[] bytes in the input stream; useful for
+stripping off lower level protocol framing data.
+.RS
+.RE
+.TP
+.B \-t \f[I]hex\-string\f[]
+Interpret the hex\-string as a sequence of hexadecimal values
+representing the start of BER TLV encoding.
+Print the human readable explanation.
+.RS
+.RE
+.SH XML FORMAT
+.PP
+unber dumps the output in the regular XML format which preserves most of
+the information from the underlying binary encoding.
+.PP
+The XML opening tag format is as follows:
+.PP
+<\f[B]tform\f[] O="\f[B]off\f[]" T="\f[B]tag\f[]" TL="\f[B]t_len\f[]"
+V="{Indefinite|\f[B]v_len\f[]}" [A="\f[B]type\f[]"] [\f[B]F\f[]]>
+.PP
+Where:
+.TP
+.B \f[B]tform\f[]
+Encoding form the value is in: primitive ("P") or constructed ("C") or
+constructed with indefinite length ("I")
+.RS
+.RE
+.TP
+.B \f[B]off\f[]
+Offset of the encoded element in the unber input stream.
+.RS
+.RE
+.TP
+.B \f[B]tag\f[]
+The tag class and value in human readable form.
+.RS
+.RE
+.TP
+.B \f[B]t_len\f[]
+The length of the TL (BER Tag and Length) encoding.
+.RS
+.RE
+.TP
+.B \f[B]v_len\f[]
+The length of the value (V, encoded by the L), may be "Indefinite".
+.RS
+.RE
+.TP
+.B \f[B]type\f[]
+Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
+.RS
+.RE
+.TP
+.B [\f[B]F\f[]]
+Indicates that the value was reformatted (pretty\-printed).
+This will never appear in the output produced using the \f[B]\-p\f[]
+command line option.
+.RS
+.RE
+.SS Example XML output:
+.PP
+<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+.PD 0
+.P
+.PD
+\ <P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US</P>
+.PD 0
+.P
+.PD
+\ \ <C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+.PD 0
+.P
+.PD
+\ \ \ \ <P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER"
+F>832970823</P>
+.PD 0
+.P
+.PD
+\ \ </C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+.PD 0
+.P
+.PD
+</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
+.SH EXAMPLES
+.PP
+Decode the given Tag/Length sequence specified in hexadecimal form:
+.RS
+.PP
+unber\  \f[B]\-t\f[] "\f[I]bf 20\f[]"
+.RE
+.PP
+Decode the DER file using two\-spaces indentation:
+.RS
+.PP
+unber\  \f[B]\-i\f[] \f[I]2\f[]\  \f[I]filename.der\f[]
+.RE
+.PP
+Decode the binary stream taken from the standard input:
+.RS
+.PP
+cat \f[I]filename.der\f[] | unber \f[B]\-\f[]
+.RE
+.PP
+Decode the binary stream and encode it back into an identical stream
+(see \f[C]enber\f[](1)):
+.RS
+.PP
+cat \f[I]filename.der\f[] | unber \f[B]\-p\f[] \f[B]\-\f[] | enber
+\f[B]\-\f[] > \f[I]filename.ber\f[]
+.RE
+.SH FOOTNOTES
+.PP
+The constructed XML output is not necessarily well\-formed.
+.PP
+When indefinite length encoding is being used, the BER sequence which is
+not terminated with the end\-of\-content octets will cause the
+terminating \f[B]</I>\f[] XML tag to disappear.
+Thus, invalid BER framing directly causes invalid XML output.
+.PP
+The \f[C]enber\f[](1) utility understands such XML correctly.
+.SH SEE ALSO
+.PP
+\f[C]enber\f[](1), \f[C]asn1c\f[](1).
+.SH AUTHORS
+Lev Walkin <vlm@lionet.info>.
diff --git a/doc/man/unber.man.md b/doc/man/unber.man.md
new file mode 100644 (file)
index 0000000..b110eb8
--- /dev/null
@@ -0,0 +1,121 @@
+% unber(1) ASN.1 BER Decoder
+% Lev Walkin <vlm@lionet.info>
+% 2016-01-23
+
+# NAME
+
+unber -- the ASN.1 BER Decoder
+
+# SYNOPSIS
+
+unber [**-1**] [**-i***indent*] [**-m**] [**-p**] [**-s***skip*] [**-t***hex-string*] [**-**] [*input-filenames*...]
+
+# DESCRIPTION
+
+unber presents the internal structure of BER-encoded files as a human readable text.
+A single dash denotes the standard input.
+
+(The DER and CER formats are subsets of the BER and are also supported.)
+
+# OPTIONS
+
+-1
+:   Do *not* attempt to read the next BER structure after the first one.
+    This may be useful if the input contains garbage past the single BER sequence.
+    By default, unber continues decoding until the end of file (input stream).
+
+-i *indent*
+:   Use the specified number of spaces for output indentation.
+    Default is 4 spaces.
+
+-m
+:   Generate shorter output while still preserving BER encoding information.
+
+-p
+:   Do *not* attempt to pretty-print known ASN.1 types (`BOOLEAN`, `INTEGER`, `OBJECT IDENTIFIER`, etc).
+    By default, some ASN.1 types are converted into the text representation.
+
+    This option is required if the `unber`(1) output is used as an input to `enber`(1).
+
+-s *skip*
+:   Ignore the first *skip* bytes in the input stream;
+    useful for stripping off lower level protocol framing data.
+
+-t *hex-string*
+:   Interpret the hex-string as a sequence of hexadecimal values representing
+    the start of BER TLV encoding.
+    Print the human readable explanation.
+
+# XML FORMAT
+unber dumps the output in the regular XML format which preserves most of the
+information from the underlying binary encoding.
+
+The XML opening tag format is as follows:
+
+<**tform** O="**off**" T="**tag**" TL="**t_len**" V="{Indefinite|**v_len**}" [A="**type**"] [**F**]>
+
+Where:
+
+**tform**
+:   Encoding form the value is in: primitive ("P") or constructed ("C") or constructed with indefinite length ("I")
+
+**off**
+:   Offset of the encoded element in the unber input stream.
+
+**tag**
+:   The tag class and value in human readable form.
+
+**t_len**
+:   The length of the TL (BER Tag and Length) encoding.
+
+**v_len**
+:   The length of the value (V, encoded by the L), may be "Indefinite".
+
+**type**
+:   Likely name of the underlying ASN.1 type (for UNIVERSAL tags).
+
+[**F**]
+:   Indicates that the value was reformatted (pretty-printed).
+This will never appear in the output produced using the **-p**
+command line option.
+
+## Example XML output:
+
+| \<I O="0" T="[UNIVERSAL 16]" TL="2" V="Indefinite" A="SEQUENCE">
+|  \<P O="2" T="[UNIVERSAL 19]" TL="2" V="2" A="PrintableString">US\</P>
+|   \<C O="6" T="[UNIVERSAL 16]" TL="2" V="6" A="SEQUENCE">
+|     \<P O="8" T="[UNIVERSAL 2]" TL="2" V="4" A="INTEGER" F>832970823\</P>
+|   \</C O="14" T="[UNIVERSAL 16]" A="SEQUENCE" L="8">
+| \</I O="14" T="[UNIVERSAL 0]" TL="2" L="16">
+
+# EXAMPLES
+
+Decode the given Tag/Length sequence specified in hexadecimal form:
+
+> unber\  **-t** "*bf 20*"
+
+Decode the DER file using two-spaces indentation:
+
+> unber\  **-i** *2*\   *filename.der*
+
+Decode the binary stream taken from the standard input:
+
+> cat *filename.der* | unber **-**
+
+Decode the binary stream and encode it back into an identical stream (see `enber`(1)):
+
+> cat *filename.der* | unber **-p** **-** | enber **-** > *filename.ber*
+
+# FOOTNOTES
+The constructed XML output is not necessarily well-formed.
+
+When indefinite length encoding is being used, the BER sequence which is not
+terminated with the end-of-content octets will cause the terminating **\</I>**
+XML tag to disappear.
+Thus, invalid BER framing directly causes invalid XML output.
+
+The `enber`(1) utility understands such XML correctly.
+
+# SEE ALSO
+
+`enber`(1), `asn1c`(1).
diff --git a/examples/Makefile b/examples/Makefile
new file mode 100644 (file)
index 0000000..57a3d79
--- /dev/null
@@ -0,0 +1,590 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# examples/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_bin_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(bindir)"
+SCRIPTS = $(dist_bin_SCRIPTS)
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/examples
+abs_srcdir = /home/nokia/mouse07410/asn1c/examples
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+dist_bin_SCRIPTS = crfc2asn1.pl
+ASN1_SOURCE_1 = rfc3280.txt
+ASN1_FILES_1 = \
+       rfc3280-PKIX1Explicit88.asn1    \
+       rfc3280-PKIX1Implicit88.asn1
+
+ASN1_SOURCE_2 = rfc3525.txt
+ASN1_FILES_2 = \
+       rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+ASN1_SOURCE_3 = rfc4511.txt
+ASN1_FILES_3 = \
+       rfc4511-Lightweight-Directory-Access-Protocol-V3.asn1
+
+BUILT_SOURCES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+EXTRA_DIST = \
+    rfc3280.txt rfc3525.txt rfc4511.txt \
+    sample.source.1609.2    \
+    sample.source.J2735     \
+    sample.source.LDAP3     \
+    sample.source.LTE-RRC   \
+    sample.source.MEGACO    \
+    sample.source.MHEG5     \
+    sample.source.PKIX1     \
+    sample.source.RRC       \
+    sample.source.S1AP      \
+    sample.source.TAP3      \
+    sample.source.ULP       \
+    sample.makefile.regen
+
+CLEANFILES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign examples/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_bin_SCRIPTS)'; 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 \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | 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; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-dist_binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+
+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)
+
+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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-dist_binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_binSCRIPTS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       clean-local cscopelist-am ctags-am dist-hook distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dist_binSCRIPTS install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am uninstall-dist_binSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+$(ASN1_FILES_1): crfc2asn1.pl $(ASN1_SOURCE_1)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_1)
+
+$(ASN1_FILES_2): crfc2asn1.pl $(ASN1_SOURCE_2)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_2)
+
+$(ASN1_FILES_3): crfc2asn1.pl $(ASN1_SOURCE_3)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_3)
+
+clean-local:
+       for dir in ${srcdir}/sample.source.*; do (cd $$dir && make distclean || :); done
+
+dist-hook: clean-local
+       rm -f `find $(distdir) -name "*.core" -or -name ".tmp.*"`
+       rm -f `find $(distdir) -name "*.[ch].??????"`
+
+# 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:
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644 (file)
index 0000000..db831a4
--- /dev/null
@@ -0,0 +1,50 @@
+
+dist_bin_SCRIPTS = crfc2asn1.pl
+
+ASN1_SOURCE_1 = rfc3280.txt
+ASN1_FILES_1 =                         \
+       rfc3280-PKIX1Explicit88.asn1    \
+       rfc3280-PKIX1Implicit88.asn1
+
+ASN1_SOURCE_2 = rfc3525.txt
+ASN1_FILES_2 =                         \
+       rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+ASN1_SOURCE_3 = rfc4511.txt
+ASN1_FILES_3 =                         \
+       rfc4511-Lightweight-Directory-Access-Protocol-V3.asn1
+
+BUILT_SOURCES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+
+$(ASN1_FILES_1): crfc2asn1.pl $(ASN1_SOURCE_1)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_1)
+
+$(ASN1_FILES_2): crfc2asn1.pl $(ASN1_SOURCE_2)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_2)
+
+$(ASN1_FILES_3): crfc2asn1.pl $(ASN1_SOURCE_3)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_3)
+
+EXTRA_DIST = \
+    rfc3280.txt rfc3525.txt rfc4511.txt \
+    sample.source.1609.2    \
+    sample.source.J2735     \
+    sample.source.LDAP3     \
+    sample.source.LTE-RRC   \
+    sample.source.MEGACO    \
+    sample.source.MHEG5     \
+    sample.source.PKIX1     \
+    sample.source.RRC       \
+    sample.source.S1AP      \
+    sample.source.TAP3      \
+    sample.source.ULP       \
+    sample.makefile.regen
+
+CLEANFILES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+
+clean-local:
+       for dir in ${srcdir}/sample.source.*; do (cd $$dir && make distclean || :); done
+
+dist-hook: clean-local
+       rm -f `find $(distdir) -name "*.core" -or -name ".tmp.*"`
+       rm -f `find $(distdir) -name "*.[ch].??????"`
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644 (file)
index 0000000..0d60bff
--- /dev/null
@@ -0,0 +1,590 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_bin_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(bindir)"
+SCRIPTS = $(dist_bin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_bin_SCRIPTS = crfc2asn1.pl
+ASN1_SOURCE_1 = rfc3280.txt
+ASN1_FILES_1 = \
+       rfc3280-PKIX1Explicit88.asn1    \
+       rfc3280-PKIX1Implicit88.asn1
+
+ASN1_SOURCE_2 = rfc3525.txt
+ASN1_FILES_2 = \
+       rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+ASN1_SOURCE_3 = rfc4511.txt
+ASN1_FILES_3 = \
+       rfc4511-Lightweight-Directory-Access-Protocol-V3.asn1
+
+BUILT_SOURCES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+EXTRA_DIST = \
+    rfc3280.txt rfc3525.txt rfc4511.txt \
+    sample.source.1609.2    \
+    sample.source.J2735     \
+    sample.source.LDAP3     \
+    sample.source.LTE-RRC   \
+    sample.source.MEGACO    \
+    sample.source.MHEG5     \
+    sample.source.PKIX1     \
+    sample.source.RRC       \
+    sample.source.S1AP      \
+    sample.source.TAP3      \
+    sample.source.ULP       \
+    sample.makefile.regen
+
+CLEANFILES = $(ASN1_FILES_1) $(ASN1_FILES_2) $(ASN1_FILES_3)
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign examples/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_bin_SCRIPTS)'; 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 \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | 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; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-dist_binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+
+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)
+
+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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-dist_binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_binSCRIPTS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       clean-local cscopelist-am ctags-am dist-hook distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dist_binSCRIPTS install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am uninstall-dist_binSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+$(ASN1_FILES_1): crfc2asn1.pl $(ASN1_SOURCE_1)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_1)
+
+$(ASN1_FILES_2): crfc2asn1.pl $(ASN1_SOURCE_2)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_2)
+
+$(ASN1_FILES_3): crfc2asn1.pl $(ASN1_SOURCE_3)
+       ${srcdir}/crfc2asn1.pl ${srcdir}/$(ASN1_SOURCE_3)
+
+clean-local:
+       for dir in ${srcdir}/sample.source.*; do (cd $$dir && make distclean || :); done
+
+dist-hook: clean-local
+       rm -f `find $(distdir) -name "*.core" -or -name ".tmp.*"`
+       rm -f `find $(distdir) -name "*.[ch].??????"`
+
+# 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:
diff --git a/examples/README b/examples/README
new file mode 100644 (file)
index 0000000..c86a8c9
--- /dev/null
@@ -0,0 +1,48 @@
+
+This directory contains a few examples.
+
+1.  The ./sample.source.PKIX1 directory contains the X.509 Certificate decoder,
+    as specified in rfc3280.txt. Just type `make` in there to compile.
+
+2.  The ./sample.source.MHEG5 directory contains the decoder for
+    ISO 13522 MHEG-5/ITU-T T.172 (Multimedia Hypermedia Experts Group,
+    Multimedia Presentations). Read the README file in that directory.
+
+3.  The ./sample.source.MEGACO directory contains the decoder for
+    Media Gateway Control Protocol data units as specified in rfc3525.txt.
+
+4.  The ./sample.source.LDAP3 directory contains the decoder for
+    Lightweight Directory Access Protocol version 3 PDU as specified in
+    rfc4211.txt.
+
+5.  The ./sample.source.RRC directory contains the 3GPP Radio Resource Control
+    decoder for RRC version 7.1.0. Just type `make` in there to compile.
+
+6.  The ./sample.source.LTE-RRC directory contains the 3GPP RRC
+    decoder for LTE RRC version 14.2.1. Read the README file in that directory.
+
+7.  The ./sample.source.TAP3 directory contains the GSM TAP3 decoder.
+    Before trying to compile, read the README file in that directory.
+
+8.  The ./sample.source.ULP directory contains the Open Mobile Alliance
+    UserPlane Location Protocol decoder.
+    Before trying to compile, read the README file in that directory.
+
+9.  The ./sample.source.J2735 directory contains the SAE J2735-201603 decoder.
+    Before trying to compile, read the README file in that directory.
+    WARNING WARNING WARNING: WORK IN PROGRESS. Not supposed to work yet.
+
+10. The ./sample.source.1609.2 directory contains the IEEE 1609.2-2016 decoder.
+    Before trying to compile, read the README file in that directory.
+    WARNING WARNING WARNING: WORK IN PROGRESS. Not supposed to work yet.
+
+11. The ./sample.source.S1AP directory contain the 3GPP S1AP decoder for
+    S1AP version 14.4.0. Read the README file in that directory.
+
+The crfc2asn1.pl script can be used to extract ASN.1 data from RFC texts.
+For instance, it is used to extract X.509, MEGACO, and LDAPv3 ASN.1 modules
+from the corresponding RFC texts (rfc3280.txt, rfc3525.txt, rfc4211.txt).
+
+To regenerate the .asn1 files from the original RFC texts, execute
+`make clean; make` in the current directory.
+
diff --git a/examples/crfc2asn1.pl b/examples/crfc2asn1.pl
new file mode 100755 (executable)
index 0000000..5a57f2d
--- /dev/null
@@ -0,0 +1,128 @@
+#!/usr/bin/env perl
+#
+# Extract the ASN.1 module text from the given set of RFC files.
+#
+
+
+my $inasn = 0; # Are we inside ASN.1 grammar?
+my $found = 0;
+my $currentFname = '';
+
+if(-t STDIN && $#ARGV == -1) {
+       print STDERR "Extract the ASN.1 specification from the RFC file(s).\n";
+       print STDERR "Usage 1: $0 <rfc-file.txt> ...\n";
+       print STDERR "Usage 2: <someprog> | $0\n";
+       exit(1);
+}
+
+while(<>) {
+       #
+       # Strip RFC page delimiters.
+       #
+       next if /^[A-Z].*\[Page [0-9]+\]$/;
+       next if /^\f$/;
+       next if /^RFC [0-9].*[0-9]+$/;
+
+       if($inasn == 0) {
+               #
+               # The least correct way to find the start of ASN
+               # definition. That is, to ask a user.
+               #
+               if(/^[ \t]*END[ \t]*(--.*)?$/) {
+                       print STDERR
+                       "Missed an ASN.1 grammar before line ". $. ."?\n";
+                       exit(1);
+               }
+
+               my $modName = '';       # ASN.1 module name
+               my $rfcid = '';
+               $rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)\.[^.]+$/i);
+
+               if(/^[ \t]*([A-Z][A-Za-z0-9-]*).*DEFINITIONS.*::=/) {
+                       $modName = $1;
+                       $currentFname = $rfcid . $modName . ".asn1";
+                       $inasn = 1;
+               } elsif(/^[ \t]*([A-Z][A-Za-z0-9-]*).*{[ \t]*(?:joint-)?iso/
+               || /^[ \t]*{[ \t]*(?:joint-)?iso/) {
+                       my @a = ($_);
+                       $modName = $1;
+                       unless(length($modName)) {
+                               next unless $prevLine =~
+                                       /^[ \t]*([A-Z][A-Za-z0-9-]*)[ \t]*$/;
+                               $modName = $1;
+                               unshift(@a, $prevLine);
+                       }
+                       $currentFname = $rfcid . $modName . ".asn1";
+                       my $i;
+                       for($i = 0; $i < 8; $i++) {
+                               $_ = <>;
+                               push(@a, $_);
+                               if(/DEFINITIONS/) {
+                                       $_ = join('', @a);
+                                       $inasn = 1;
+                                       last;
+                               }
+                       }
+                       next unless $inasn;
+               } elsif(/^\s*DEFINITIONS\s*$/
+               && $prevLine =~ /^\s*([A-Z][A-Za-z0-9-]*)\s*{[0-9a-z)( -]+}\s*$/) {
+                       $_ = $prevLine . $prevComments . $_;
+                       $modName = $1;
+                       $currentFname = $rfcid . $modName. ".asn1";
+                       $inasn = 1;
+               } else {
+                       if(/^[ \t]*--/) {
+                               $prevComments .= $_;
+                       } else {
+                               $prevComments = '';
+                               $prevLine = $_;
+                       }
+                       next;
+               }
+
+               print STDERR "Found $modName at line $.\n=> Saving as $currentFname\n";
+               open(O, "> $currentFname") or die "Can't open $currentFname";
+               select(O);
+
+               $found++;
+               print "\n";
+               print "-- \n";
+               print "-- ASN.1 module found by $0 in $ARGV at line " . $. . "\n";
+               print "-- \n";
+               print "\n";
+       }
+
+       if(/^[ \t]*END[ \t]*(--.*)?$/) {
+               print;
+               select(STDOUT);
+               close(O);
+               $inasn = 0;
+               next;
+       }
+
+       #
+       # The following clauses are primarily designed to simplify
+       # asn1c tool behavior.
+       # You may want to get rid of them if you're doing generic
+       # ASN.1 extraction and do not want to alter the ASN.1 specs at all.
+       #
+       if(
+/^([ \t]*)((UniversalString|BMPString|UTF8String)\s+::=\s+\[[A-Z]+\s\d+\]\sIMPLICIT\sOCTET\sSTRING)(.*)$/ms
+       ) {
+               print "\n-- Legacy redefinition of $3 removed by $0:\n";
+               print "$1-- $2 -- $4";
+               next;
+       } elsif(/delete following line if \"new\" types are supported/) {
+               print;
+               print "/* Legacy constructs deleted by $0:\n";
+               $_ = <>;
+               print;
+               print " */\n";
+               next;
+       }
+
+       print;  # Dump the ASN.1 module line out.
+}
+
+die "No ASN.1 modules found\n" unless $found;
diff --git a/examples/rfc3280.txt b/examples/rfc3280.txt
new file mode 100644 (file)
index 0000000..433908b
--- /dev/null
@@ -0,0 +1,7227 @@
+
+
+
+
+
+
+Network Working Group                                         R. Housley
+Request for Comments: 3280                              RSA Laboratories
+Obsoletes: 2459                                                  W. Polk
+Category: Standards Track                                           NIST
+                                                                 W. Ford
+                                                                VeriSign
+                                                                 D. Solo
+                                                               Citigroup
+                                                              April 2002
+
+                Internet X.509 Public Key Infrastructure
+       Certificate and Certificate Revocation List (CRL) Profile
+
+Status of this Memo
+
+   This document specifies an Internet standards track protocol for the
+   Internet community, and requests discussion and suggestions for
+   improvements.  Please refer to the current edition of the "Internet
+   Official Protocol Standards" (STD 1) for the standardization state
+   and status of this protocol.  Distribution of this memo is unlimited.
+
+Copyright Notice
+
+   Copyright (C) The Internet Society (2002).  All Rights Reserved.
+
+Abstract
+
+   This memo profiles the X.509 v3 certificate and X.509 v2 Certificate
+   Revocation List (CRL) for use in the Internet.  An overview of this
+   approach and model are provided as an introduction.  The X.509 v3
+   certificate format is described in detail, with additional
+   information regarding the format and semantics of Internet name
+   forms.  Standard certificate extensions are described and two
+   Internet-specific extensions are defined.  A set of required
+   certificate extensions is specified.  The X.509 v2 CRL format is
+   described in detail, and required extensions are defined.  An
+   algorithm for X.509 certification path validation is described.  An
+   ASN.1 module and examples are provided in the appendices.
+
+Table of Contents
+
+   1  Introduction  . . . . . . . . . . . . . . . . . . . . . .   4
+   2  Requirements and Assumptions  . . . . . . . . . . . . . .   5
+   2.1  Communication and Topology  . . . . . . . . . . . . . .   6
+   2.2  Acceptability Criteria  . . . . . . . . . . . . . . . .   6
+   2.3  User Expectations . . . . . . . . . . . . . . . . . . .   7
+   2.4  Administrator Expectations  . . . . . . . . . . . . . .   7
+   3  Overview of Approach  . . . . . . . . . . . . . . . . . .   7
+
+
+
+Housley, et. al.            Standards Track                     [Page 1]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   3.1  X.509 Version 3 Certificate . . . . . . . . . . . . . .   8
+   3.2  Certification Paths and Trust . . . . . . . . . . . . .   9
+   3.3  Revocation  . . . . . . . . . . . . . . . . . . . . . .  11
+   3.4  Operational Protocols . . . . . . . . . . . . . . . . .  13
+   3.5  Management Protocols  . . . . . . . . . . . . . . . . .  13
+   4  Certificate and Certificate Extensions Profile  . . . . .  14
+   4.1  Basic Certificate Fields  . . . . . . . . . . . . . . .  15
+   4.1.1  Certificate Fields  . . . . . . . . . . . . . . . . .  16
+   4.1.1.1  tbsCertificate  . . . . . . . . . . . . . . . . . .  16
+   4.1.1.2  signatureAlgorithm  . . . . . . . . . . . . . . . .  16
+   4.1.1.3  signatureValue  . . . . . . . . . . . . . . . . . .  16
+   4.1.2  TBSCertificate  . . . . . . . . . . . . . . . . . . .  17
+   4.1.2.1  Version . . . . . . . . . . . . . . . . . . . . . .  17
+   4.1.2.2  Serial number . . . . . . . . . . . . . . . . . . .  17
+   4.1.2.3  Signature . . . . . . . . . . . . . . . . . . . . .  18
+   4.1.2.4  Issuer  . . . . . . . . . . . . . . . . . . . . . .  18
+   4.1.2.5  Validity  . . . . . . . . . . . . . . . . . . . . .  22
+   4.1.2.5.1  UTCTime . . . . . . . . . . . . . . . . . . . . .  22
+   4.1.2.5.2  GeneralizedTime . . . . . . . . . . . . . . . . .  22
+   4.1.2.6  Subject . . . . . . . . . . . . . . . . . . . . . .  23
+   4.1.2.7  Subject Public Key Info . . . . . . . . . . . . . .  24
+   4.1.2.8  Unique Identifiers  . . . . . . . . . . . . . . . .  24
+   4.1.2.9 Extensions . . . . . . . . . . . . . . . . . . . . .  24
+   4.2  Certificate Extensions  . . . . . . . . . . . . . . . .  24
+   4.2.1  Standard Extensions . . . . . . . . . . . . . . . . .  25
+   4.2.1.1  Authority Key Identifier  . . . . . . . . . . . . .  26
+   4.2.1.2  Subject Key Identifier  . . . . . . . . . . . . . .  27
+   4.2.1.3  Key Usage . . . . . . . . . . . . . . . . . . . . .  28
+   4.2.1.4  Private Key Usage Period  . . . . . . . . . . . . .  29
+   4.2.1.5  Certificate Policies  . . . . . . . . . . . . . . .  30
+   4.2.1.6  Policy Mappings . . . . . . . . . . . . . . . . . .  33
+   4.2.1.7  Subject Alternative Name  . . . . . . . . . . . . .  33
+   4.2.1.8  Issuer Alternative Name . . . . . . . . . . . . . .  36
+   4.2.1.9  Subject Directory Attributes  . . . . . . . . . . .  36
+   4.2.1.10  Basic Constraints  . . . . . . . . . . . . . . . .  36
+   4.2.1.11  Name Constraints . . . . . . . . . . . . . . . . .  37
+   4.2.1.12  Policy Constraints . . . . . . . . . . . . . . . .  40
+   4.2.1.13  Extended Key Usage . . . . . . . . . . . . . . . .  40
+   4.2.1.14  CRL Distribution Points  . . . . . . . . . . . . .  42
+   4.2.1.15  Inhibit Any-Policy . . . . . . . . . . . . . . . .  44
+   4.2.1.16  Freshest CRL . . . . . . . . . . . . . . . . . . .  44
+   4.2.2  Internet Certificate Extensions . . . . . . . . . . .  45
+   4.2.2.1  Authority Information Access  . . . . . . . . . . .  45
+   4.2.2.2  Subject Information Access  . . . . . . . . . . . .  46
+   5  CRL and CRL Extensions Profile  . . . . . . . . . . . . .  48
+   5.1  CRL Fields  . . . . . . . . . . . . . . . . . . . . . .  49
+   5.1.1  CertificateList Fields  . . . . . . . . . . . . . . .  50
+   5.1.1.1  tbsCertList . . . . . . . . . . . . . . . . . . . .  50
+
+
+
+Housley, et. al.            Standards Track                     [Page 2]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   5.1.1.2  signatureAlgorithm  . . . . . . . . . . . . . . . .  50
+   5.1.1.3  signatureValue  . . . . . . . . . . . . . . . . . .  51
+   5.1.2  Certificate List "To Be Signed" . . . . . . . . . . .  51
+   5.1.2.1  Version . . . . . . . . . . . . . . . . . . . . . .  52
+   5.1.2.2  Signature . . . . . . . . . . . . . . . . . . . . .  52
+   5.1.2.3  Issuer Name . . . . . . . . . . . . . . . . . . . .  52
+   5.1.2.4  This Update . . . . . . . . . . . . . . . . . . . .  52
+   5.1.2.5  Next Update . . . . . . . . . . . . . . . . . . . .  53
+   5.1.2.6  Revoked Certificates  . . . . . . . . . . . . . . .  53
+   5.1.2.7  Extensions  . . . . . . . . . . . . . . . . . . . .  53
+   5.2  CRL Extensions  . . . . . . . . . . . . . . . . . . . .  53
+   5.2.1  Authority Key Identifier  . . . . . . . . . . . . . .  54
+   5.2.2  Issuer Alternative Name . . . . . . . . . . . . . . .  54
+   5.2.3  CRL Number  . . . . . . . . . . . . . . . . . . . . .  55
+   5.2.4  Delta CRL Indicator . . . . . . . . . . . . . . . . .  55
+   5.2.5  Issuing Distribution Point  . . . . . . . . . . . . .  58
+   5.2.6  Freshest CRL  . . . . . . . . . . . . . . . . . . . .  59
+   5.3  CRL Entry Extensions  . . . . . . . . . . . . . . . . .  60
+   5.3.1  Reason Code . . . . . . . . . . . . . . . . . . . . .  60
+   5.3.2  Hold Instruction Code . . . . . . . . . . . . . . . .  61
+   5.3.3  Invalidity Date . . . . . . . . . . . . . . . . . . .  62
+   5.3.4  Certificate Issuer  . . . . . . . . . . . . . . . . .  62
+   6  Certificate Path Validation . . . . . . . . . . . . . . .  62
+   6.1  Basic Path Validation . . . . . . . . . . . . . . . . .  63
+   6.1.1  Inputs  . . . . . . . . . . . . . . . . . . . . . . .  66
+   6.1.2  Initialization  . . . . . . . . . . . . . . . . . . .  67
+   6.1.3  Basic Certificate Processing  . . . . . . . . . . . .  70
+   6.1.4  Preparation for Certificate i+1 . . . . . . . . . . .  75
+   6.1.5  Wrap-up procedure . . . . . . . . . . . . . . . . . .  78
+   6.1.6  Outputs . . . . . . . . . . . . . . . . . . . . . . .  80
+   6.2  Extending Path Validation . . . . . . . . . . . . . . .  80
+   6.3  CRL Validation  . . . . . . . . . . . . . . . . . . . .  81
+   6.3.1  Revocation Inputs . . . . . . . . . . . . . . . . . .  82
+   6.3.2  Initialization and Revocation State Variables . . . .  82
+   6.3.3  CRL Processing  . . . . . . . . . . . . . . . . . . .  83
+   7  References  . . . . . . . . . . . . . . . . . . . . . . .  86
+   8  Intellectual Property Rights  . . . . . . . . . . . . . .  88
+   9  Security Considerations . . . . . . . . . . . . . . . . .  89
+   Appendix A.  ASN.1 Structures and OIDs . . . . . . . . . . .  92
+   A.1 Explicitly Tagged Module, 1988 Syntax  . . . . . . . . .  92
+   A.2 Implicitly Tagged Module, 1988 Syntax  . . . . . . . . . 105
+   Appendix B.  ASN.1 Notes . . . . . . . . . . . . . . . . . . 112
+   Appendix C.  Examples  . . . . . . . . . . . . . . . . . . . 115
+   C.1  DSA Self-Signed Certificate . . . . . . . . . . . . . . 115
+   C.2  End Entity Certificate Using DSA  . . . . . . . . . . . 119
+   C.3  End Entity Certificate Using RSA  . . . . . . . . . . . 122
+   C.4  Certificate Revocation List . . . . . . . . . . . . . . 126
+   Author Addresses . . . . . . . . . . . . . . . . . . . . . . 128
+
+
+
+Housley, et. al.            Standards Track                     [Page 3]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Full Copyright Statement . . . . . . . . . . . . . . . . . . 129
+
+1  Introduction
+
+   This specification is one part of a family of standards for the X.509
+   Public Key Infrastructure (PKI) for the Internet.
+
+   This specification profiles the format and semantics of certificates
+   and certificate revocation lists (CRLs) for the Internet PKI.
+   Procedures are described for processing of certification paths in the
+   Internet environment.  Finally, ASN.1 modules are provided in the
+   appendices for all data structures defined or referenced.
+
+   Section 2 describes Internet PKI requirements, and the assumptions
+   which affect the scope of this document.  Section 3 presents an
+   architectural model and describes its relationship to previous IETF
+   and ISO/IEC/ITU-T standards.  In particular, this document's
+   relationship with the IETF PEM specifications and the ISO/IEC/ITU-T
+   X.509 documents are described.
+
+   Section 4 profiles the X.509 version 3 certificate, and section 5
+   profiles the X.509 version 2 CRL.  The profiles include the
+   identification of ISO/IEC/ITU-T and ANSI extensions which may be
+   useful in the Internet PKI.  The profiles are presented in the 1988
+   Abstract Syntax Notation One (ASN.1) rather than the 1997 ASN.1
+   syntax used in the most recent ISO/IEC/ITU-T standards.
+
+   Section 6 includes certification path validation procedures.  These
+   procedures are based upon the ISO/IEC/ITU-T definition.
+   Implementations are REQUIRED to derive the same results but are not
+   required to use the specified procedures.
+
+   Procedures for identification and encoding of public key materials
+   and digital signatures are defined in [PKIXALGS].  Implementations of
+   this specification are not required to use any particular
+   cryptographic algorithms.  However, conforming implementations which
+   use the algorithms identified in [PKIXALGS] MUST identify and encode
+   the public key materials and digital signatures as described in that
+   specification.
+
+   Finally, three appendices are provided to aid implementers.  Appendix
+   A contains all ASN.1 structures defined or referenced within this
+   specification.  As above, the material is presented in the 1988
+   ASN.1.  Appendix B contains notes on less familiar features of the
+   ASN.1 notation used within this specification.  Appendix C contains
+   examples of a conforming certificate and a conforming CRL.
+
+
+
+
+
+Housley, et. al.            Standards Track                     [Page 4]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   This specification obsoletes RFC 2459.  This specification differs
+   from RFC 2459 in five basic areas:
+
+      * To promote interoperable implementations, a detailed algorithm
+      for certification path validation is included in section 6.1 of
+      this specification; RFC 2459 provided only a high-level
+      description of path validation.
+
+      * An algorithm for determining the status of a certificate using
+      CRLs is provided in section 6.3 of this specification.  This
+      material was not present in RFC 2459.
+
+      * To accommodate new usage models, detailed information describing
+      the use of delta CRLs is provided in Section 5 of this
+      specification.
+
+      * Identification and encoding of public key materials and digital
+      signatures are not included in this specification, but are now
+      described in a companion specification [PKIXALGS].
+
+      * Four additional extensions are specified: three certificate
+      extensions and one CRL extension.  The certificate extensions are
+      subject info access, inhibit any-policy, and freshest CRL.  The
+      freshest CRL extension is also defined as a CRL extension.
+
+      * Throughout the specification, clarifications have been
+      introduced to enhance consistency with the ITU-T X.509
+      specification.  X.509 defines the certificate and CRL format as
+      well as many of the extensions that appear in this specification.
+      These changes were introduced to improve the likelihood of
+      interoperability between implementations based on this
+      specification with implementations based on the ITU-T
+      specification.
+
+   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+   document are to be interpreted as described in RFC 2119.
+
+2  Requirements and Assumptions
+
+   The goal of this specification is to develop a profile to facilitate
+   the use of X.509 certificates within Internet applications for those
+   communities wishing to make use of X.509 technology.  Such
+   applications may include WWW, electronic mail, user authentication,
+   and IPsec.  In order to relieve some of the obstacles to using X.509
+
+
+
+
+
+
+Housley, et. al.            Standards Track                     [Page 5]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   certificates, this document defines a profile to promote the
+   development of certificate management systems; development of
+   application tools; and interoperability determined by policy.
+
+   Some communities will need to supplement, or possibly replace, this
+   profile in order to meet the requirements of specialized application
+   domains or environments with additional authorization, assurance, or
+   operational requirements.  However, for basic applications, common
+   representations of frequently used attributes are defined so that
+   application developers can obtain necessary information without
+   regard to the issuer of a particular certificate or certificate
+   revocation list (CRL).
+
+   A certificate user should review the certificate policy generated by
+   the certification authority (CA) before relying on the authentication
+   or non-repudiation services associated with the public key in a
+   particular certificate.  To this end, this standard does not
+   prescribe legally binding rules or duties.
+
+   As supplemental authorization and attribute management tools emerge,
+   such as attribute certificates, it may be appropriate to limit the
+   authenticated attributes that are included in a certificate.  These
+   other management tools may provide more appropriate methods of
+   conveying many authenticated attributes.
+
+2.1  Communication and Topology
+
+   The users of certificates will operate in a wide range of
+   environments with respect to their communication topology, especially
+   users of secure electronic mail.  This profile supports users without
+   high bandwidth, real-time IP connectivity, or high connection
+   availability.  In addition, the profile allows for the presence of
+   firewall or other filtered communication.
+
+   This profile does not assume the deployment of an X.500 Directory
+   system or a LDAP directory system.  The profile does not prohibit the
+   use of an X.500 Directory or a LDAP directory; however, any means of
+   distributing certificates and certificate revocation lists (CRLs) may
+   be used.
+
+2.2  Acceptability Criteria
+
+   The goal of the Internet Public Key Infrastructure (PKI) is to meet
+   the needs of deterministic, automated identification, authentication,
+   access control, and authorization functions.  Support for these
+   services determines the attributes contained in the certificate as
+   well as the ancillary control information in the certificate such as
+   policy data and certification path constraints.
+
+
+
+Housley, et. al.            Standards Track                     [Page 6]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+2.3  User Expectations
+
+   Users of the Internet PKI are people and processes who use client
+   software and are the subjects named in certificates.  These uses
+   include readers and writers of electronic mail, the clients for WWW
+   browsers, WWW servers, and the key manager for IPsec within a router.
+   This profile recognizes the limitations of the platforms these users
+   employ and the limitations in sophistication and attentiveness of the
+   users themselves.  This manifests itself in minimal user
+   configuration responsibility (e.g., trusted CA keys, rules), explicit
+   platform usage constraints within the certificate, certification path
+   constraints which shield the user from many malicious actions, and
+   applications which sensibly automate validation functions.
+
+2.4  Administrator Expectations
+
+   As with user expectations, the Internet PKI profile is structured to
+   support the individuals who generally operate CAs.  Providing
+   administrators with unbounded choices increases the chances that a
+   subtle CA administrator mistake will result in broad compromise.
+   Also, unbounded choices greatly complicate the software that process
+   and validate the certificates created by the CA.
+
+3  Overview of Approach
+
+   Following is a simplified view of the architectural model assumed by
+   the PKIX specifications.
+
+   The components in this model are:
+
+   end entity: user of PKI certificates and/or end user system that is
+               the subject of a certificate;
+   CA:         certification authority;
+   RA:         registration authority, i.e., an optional system to which
+               a CA delegates certain management functions;
+   CRL issuer: an optional system to which a CA delegates the
+               publication of certificate revocation lists;
+   repository: a system or collection of distributed systems that stores
+               certificates and CRLs and serves as a means of
+               distributing these certificates and CRLs to end entities.
+
+   Note that an Attribute Authority (AA) might also choose to delegate
+   the publication of CRLs to a CRL issuer.
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                     [Page 7]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   +---+
+   | C |                       +------------+
+   | e | <-------------------->| End entity |
+   | r |       Operational     +------------+
+   | t |       transactions          ^
+   | i |      and management         |  Management
+   | f |       transactions          |  transactions        PKI
+   | i |                             |                     users
+   | c |                             v
+   | a | =======================  +--+------------+  ==============
+   | t |                          ^               ^
+   | e |                          |               |         PKI
+   |   |                          v               |      management
+   | & |                       +------+           |       entities
+   |   | <---------------------|  RA  |<----+     |
+   | C |  Publish certificate  +------+     |     |
+   | R |                                    |     |
+   | L |                                    |     |
+   |   |                                    v     v
+   | R |                                +------------+
+   | e | <------------------------------|     CA     |
+   | p |   Publish certificate          +------------+
+   | o |   Publish CRL                     ^      ^
+   | s |                                   |      |  Management
+   | i |                +------------+     |      |  transactions
+   | t | <--------------| CRL Issuer |<----+      |
+   | o |   Publish CRL  +------------+            v
+   | r |                                      +------+
+   | y |                                      |  CA  |
+   +---+                                      +------+
+
+                      Figure 1 - PKI Entities
+
+3.1  X.509 Version 3 Certificate
+
+   Users of a public key require confidence that the associated private
+   key is owned by the correct remote subject (person or system) with
+   which an encryption or digital signature mechanism will be used.
+   This confidence is obtained through the use of public key
+   certificates, which are data structures that bind public key values
+   to subjects.  The binding is asserted by having a trusted CA
+   digitally sign each certificate.  The CA may base this assertion upon
+   technical means (a.k.a., proof of possession through a challenge-
+   response protocol), presentation of the private key, or on an
+   assertion by the subject.  A certificate has a limited valid lifetime
+   which is indicated in its signed contents.  Because a certificate's
+   signature and timeliness can be independently checked by a
+   certificate-using client, certificates can be distributed via
+
+
+
+Housley, et. al.            Standards Track                     [Page 8]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   untrusted communications and server systems, and can be cached in
+   unsecured storage in certificate-using systems.
+
+   ITU-T X.509 (formerly CCITT X.509) or ISO/IEC 9594-8, which was first
+   published in 1988 as part of the X.500 Directory recommendations,
+   defines a standard certificate format [X.509].  The certificate
+   format in the 1988 standard is called the version 1 (v1) format.
+   When X.500 was revised in 1993, two more fields were added, resulting
+   in the version 2 (v2) format.
+
+   The Internet Privacy Enhanced Mail (PEM) RFCs, published in 1993,
+   include specifications for a public key infrastructure based on X.509
+   v1 certificates [RFC 1422].  The experience gained in attempts to
+   deploy RFC 1422 made it clear that the v1 and v2 certificate formats
+   are deficient in several respects.  Most importantly, more fields
+   were needed to carry information which PEM design and implementation
+   experience had proven necessary.  In response to these new
+   requirements, ISO/IEC, ITU-T and ANSI X9 developed the X.509 version
+   3 (v3) certificate format.  The v3 format extends the v2 format by
+   adding provision for additional extension fields.  Particular
+   extension field types may be specified in standards or may be defined
+   and registered by any organization or community.  In June 1996,
+   standardization of the basic v3 format was completed [X.509].
+
+   ISO/IEC, ITU-T, and ANSI X9 have also developed standard extensions
+   for use in the v3 extensions field [X.509][X9.55].  These extensions
+   can convey such data as additional subject identification
+   information, key attribute information, policy information, and
+   certification path constraints.
+
+   However, the ISO/IEC, ITU-T, and ANSI X9 standard extensions are very
+   broad in their applicability.  In order to develop interoperable
+   implementations of X.509 v3 systems for Internet use, it is necessary
+   to specify a profile for use of the X.509 v3 extensions tailored for
+   the Internet.  It is one goal of this document to specify a profile
+   for Internet WWW, electronic mail, and IPsec applications.
+   Environments with additional requirements may build on this profile
+   or may replace it.
+
+3.2  Certification Paths and Trust
+
+   A user of a security service requiring knowledge of a public key
+   generally needs to obtain and validate a certificate containing the
+   required public key.  If the public key user does not already hold an
+   assured copy of the public key of the CA that signed the certificate,
+   the CA's name, and related information (such as the validity period
+   or name constraints), then it might need an additional certificate to
+   obtain that public key.  In general, a chain of multiple certificates
+
+
+
+Housley, et. al.            Standards Track                     [Page 9]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   may be needed, comprising a certificate of the public key owner (the
+   end entity) signed by one CA, and zero or more additional
+   certificates of CAs signed by other CAs.  Such chains, called
+   certification paths, are required because a public key user is only
+   initialized with a limited number of assured CA public keys.
+
+   There are different ways in which CAs might be configured in order
+   for public key users to be able to find certification paths.  For
+   PEM, RFC 1422 defined a rigid hierarchical structure of CAs.  There
+   are three types of PEM certification authority:
+
+      (a)  Internet Policy Registration Authority (IPRA):  This
+      authority, operated under the auspices of the Internet Society,
+      acts as the root of the PEM certification hierarchy at level 1.
+      It issues certificates only for the next level of authorities,
+      PCAs.  All certification paths start with the IPRA.
+
+      (b)  Policy Certification Authorities (PCAs):  PCAs are at level 2
+      of the hierarchy, each PCA being certified by the IPRA.  A PCA
+      shall establish and publish a statement of its policy with respect
+      to certifying users or subordinate certification authorities.
+      Distinct PCAs aim to satisfy different user needs.  For example,
+      one PCA (an organizational PCA) might support the general
+      electronic mail needs of commercial organizations, and another PCA
+      (a high-assurance PCA) might have a more stringent policy designed
+      for satisfying legally binding digital signature requirements.
+
+      (c)  Certification Authorities (CAs):  CAs are at level 3 of the
+      hierarchy and can also be at lower levels.  Those at level 3 are
+      certified by PCAs.  CAs represent, for example, particular
+      organizations, particular organizational units (e.g., departments,
+      groups, sections), or particular geographical areas.
+
+   RFC 1422 furthermore has a name subordination rule which requires
+   that a CA can only issue certificates for entities whose names are
+   subordinate (in the X.500 naming tree) to the name of the CA itself.
+   The trust associated with a PEM certification path is implied by the
+   PCA name.  The name subordination rule ensures that CAs below the PCA
+   are sensibly constrained as to the set of subordinate entities they
+   can certify (e.g., a CA for an organization can only certify entities
+   in that organization's name tree).  Certificate user systems are able
+   to mechanically check that the name subordination rule has been
+   followed.
+
+   The RFC 1422 uses the X.509 v1 certificate formats.  The limitations
+   of X.509 v1 required imposition of several structural restrictions to
+   clearly associate policy information or restrict the utility of
+   certificates.  These restrictions included:
+
+
+
+Housley, et. al.            Standards Track                    [Page 10]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (a)  a pure top-down hierarchy, with all certification paths
+      starting from IPRA;
+
+      (b)  a naming subordination rule restricting the names of a CA's
+      subjects; and
+
+      (c)  use of the PCA concept, which requires knowledge of
+      individual PCAs to be built into certificate chain verification
+      logic.  Knowledge of individual PCAs was required to determine if
+      a chain could be accepted.
+
+   With X.509 v3, most of the requirements addressed by RFC 1422 can be
+   addressed using certificate extensions, without a need to restrict
+   the CA structures used.  In particular, the certificate extensions
+   relating to certificate policies obviate the need for PCAs and the
+   constraint extensions obviate the need for the name subordination
+   rule.  As a result, this document supports a more flexible
+   architecture, including:
+
+      (a)  Certification paths start with a public key of a CA in a
+      user's own domain, or with the public key of the top of a
+      hierarchy.  Starting with the public key of a CA in a user's own
+      domain has certain advantages.  In some environments, the local
+      domain is the most trusted.
+
+      (b)  Name constraints may be imposed through explicit inclusion of
+      a name constraints extension in a certificate, but are not
+      required.
+
+      (c)  Policy extensions and policy mappings replace the PCA
+      concept, which permits a greater degree of automation.  The
+      application can determine if the certification path is acceptable
+      based on the contents of the certificates instead of a priori
+      knowledge of PCAs.  This permits automation of certification path
+      processing.
+
+3.3  Revocation
+
+   When a certificate is issued, it is expected to be in use for its
+   entire validity period.  However, various circumstances may cause a
+   certificate to become invalid prior to the expiration of the validity
+   period.  Such circumstances include change of name, change of
+   association between subject and CA (e.g., an employee terminates
+   employment with an organization), and compromise or suspected
+   compromise of the corresponding private key.  Under such
+   circumstances, the CA needs to revoke the certificate.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 11]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   X.509 defines one method of certificate revocation.  This method
+   involves each CA periodically issuing a signed data structure called
+   a certificate revocation list (CRL).  A CRL is a time stamped list
+   identifying revoked certificates which is signed by a CA or CRL
+   issuer and made freely available in a public repository.  Each
+   revoked certificate is identified in a CRL by its certificate serial
+   number.  When a certificate-using system uses a certificate (e.g.,
+   for verifying a remote user's digital signature), that system not
+   only checks the certificate signature and validity but also acquires
+   a suitably-recent CRL and checks that the certificate serial number
+   is not on that CRL.  The meaning of "suitably-recent" may vary with
+   local policy, but it usually means the most recently-issued CRL.  A
+   new CRL is issued on a regular periodic basis (e.g., hourly, daily,
+   or weekly).  An entry is added to the CRL as part of the next update
+   following notification of revocation.  An entry MUST NOT be removed
+   from the CRL until it appears on one regularly scheduled CRL issued
+   beyond the revoked certificate's validity period.
+
+   An advantage of this revocation method is that CRLs may be
+   distributed by exactly the same means as certificates themselves,
+   namely, via untrusted servers and untrusted communications.
+
+   One limitation of the CRL revocation method, using untrusted
+   communications and servers, is that the time granularity of
+   revocation is limited to the CRL issue period.  For example, if a
+   revocation is reported now, that revocation will not be reliably
+   notified to certificate-using systems until all currently issued CRLs
+   are updated -- this may be up to one hour, one day, or one week
+   depending on the frequency that CRLs are issued.
+
+   As with the X.509 v3 certificate format, in order to facilitate
+   interoperable implementations from multiple vendors, the X.509 v2 CRL
+   format needs to be profiled for Internet use.  It is one goal of this
+   document to specify that profile.  However, this profile does not
+   require the issuance of CRLs.  Message formats and protocols
+   supporting on-line revocation notification are defined in other PKIX
+   specifications.  On-line methods of revocation notification may be
+   applicable in some environments as an alternative to the X.509 CRL.
+   On-line revocation checking may significantly reduce the latency
+   between a revocation report and the distribution of the information
+   to relying parties.  Once the CA accepts a revocation report as
+   authentic and valid, any query to the on-line service will correctly
+   reflect the certificate validation impacts of the revocation.
+   However, these methods impose new security requirements: the
+   certificate validator needs to trust the on-line validation service
+   while the repository does not need to be trusted.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 12]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+3.4  Operational Protocols
+
+   Operational protocols are required to deliver certificates and CRLs
+   (or status information) to certificate using client systems.
+   Provisions are needed for a variety of different means of certificate
+   and CRL delivery, including distribution procedures based on LDAP,
+   HTTP, FTP, and X.500.  Operational protocols supporting these
+   functions are defined in other PKIX specifications.  These
+   specifications may include definitions of message formats and
+   procedures for supporting all of the above operational environments,
+   including definitions of or references to appropriate MIME content
+   types.
+
+3.5  Management Protocols
+
+   Management protocols are required to support on-line interactions
+   between PKI user and management entities.  For example, a management
+   protocol might be used between a CA and a client system with which a
+   key pair is associated, or between two CAs which cross-certify each
+   other.  The set of functions which potentially need to be supported
+   by management protocols include:
+
+      (a)  registration:  This is the process whereby a user first makes
+      itself known to a CA (directly, or through an RA), prior to that
+      CA issuing  a certificate or certificates for that user.
+
+      (b)  initialization:  Before a client system can operate securely
+      it is necessary to install key materials which have the
+      appropriate relationship with keys stored elsewhere in the
+      infrastructure.  For example, the client needs to be securely
+      initialized with the public key and other assured information of
+      the trusted CA(s), to be used in validating certificate paths.
+
+      Furthermore, a client typically needs to be initialized with its
+      own key pair(s).
+
+      (c)  certification:  This is the process in which a CA issues a
+      certificate for a user's public key, and returns that certificate
+      to the user's client system and/or posts that certificate in a
+      repository.
+
+      (d)  key pair recovery:  As an option, user client key materials
+      (e.g., a user's private key used for encryption purposes) may be
+      backed up by a CA or a key backup system.  If a user needs to
+      recover these backed up key materials (e.g., as a result of a
+      forgotten password or a lost key chain file), an on-line protocol
+      exchange may be needed to support such recovery.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 13]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (e)  key pair update:  All key pairs need to be updated regularly,
+      i.e., replaced with a new key pair, and new certificates issued.
+
+      (f)  revocation request:  An authorized person advises a CA of an
+      abnormal situation requiring certificate revocation.
+
+      (g)  cross-certification:  Two CAs exchange information used in
+      establishing a cross-certificate.  A cross-certificate is a
+      certificate issued by one CA to another CA which contains a CA
+      signature key used for issuing certificates.
+
+   Note that on-line protocols are not the only way of implementing the
+   above functions.  For all functions there are off-line methods of
+   achieving the same result, and this specification does not mandate
+   use of on-line protocols.  For example, when hardware tokens are
+   used, many of the functions may be achieved as part of the physical
+   token delivery.  Furthermore, some of the above functions may be
+   combined into one protocol exchange.  In particular, two or more of
+   the registration, initialization, and certification functions can be
+   combined into one protocol exchange.
+
+   The PKIX series of specifications defines a set of standard message
+   formats supporting the above functions.  The protocols for conveying
+   these messages in different environments (e.g., e-mail, file
+   transfer, and WWW) are described in those specifications.
+
+4  Certificate and Certificate Extensions Profile
+
+   This section presents a profile for public key certificates that will
+   foster interoperability and a reusable PKI.  This section is based
+   upon the X.509 v3 certificate format and the standard certificate
+   extensions defined in [X.509].  The ISO/IEC and ITU-T documents use
+   the 1997 version of ASN.1; while this document uses the 1988 ASN.1
+   syntax, the encoded certificate and standard extensions are
+   equivalent.  This section also defines private extensions required to
+   support a PKI for the Internet community.
+
+   Certificates may be used in a wide range of applications and
+   environments covering a broad spectrum of interoperability goals and
+   a broader spectrum of operational and assurance requirements.  The
+   goal of this document is to establish a common baseline for generic
+   applications requiring broad interoperability and limited special
+   purpose requirements.  In particular, the emphasis will be on
+   supporting the use of X.509 v3 certificates for informal Internet
+   electronic mail, IPsec, and WWW applications.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 14]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.1  Basic Certificate Fields
+
+   The X.509 v3 certificate basic syntax is as follows.  For signature
+   calculation, the data that is to be signed is encoded using the ASN.1
+   distinguished encoding rules (DER) [X.690].  ASN.1 DER encoding is a
+   tag, length, value encoding system for each element.
+
+   Certificate  ::=  SEQUENCE  {
+        tbsCertificate       TBSCertificate,
+        signatureAlgorithm   AlgorithmIdentifier,
+        signatureValue       BIT STRING  }
+
+   TBSCertificate  ::=  SEQUENCE  {
+        version         [0]  EXPLICIT Version DEFAULT v1,
+        serialNumber         CertificateSerialNumber,
+        signature            AlgorithmIdentifier,
+        issuer               Name,
+        validity             Validity,
+        subject              Name,
+        subjectPublicKeyInfo SubjectPublicKeyInfo,
+        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+                             -- If present, version MUST be v2 or v3
+        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+                             -- If present, version MUST be v2 or v3
+        extensions      [3]  EXPLICIT Extensions OPTIONAL
+                             -- If present, version MUST be v3
+        }
+
+   Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+
+   CertificateSerialNumber  ::=  INTEGER
+
+   Validity ::= SEQUENCE {
+        notBefore      Time,
+        notAfter       Time }
+
+   Time ::= CHOICE {
+        utcTime        UTCTime,
+        generalTime    GeneralizedTime }
+
+   UniqueIdentifier  ::=  BIT STRING
+
+   SubjectPublicKeyInfo  ::=  SEQUENCE  {
+        algorithm            AlgorithmIdentifier,
+        subjectPublicKey     BIT STRING  }
+
+   Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 15]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Extension  ::=  SEQUENCE  {
+        extnID      OBJECT IDENTIFIER,
+        critical    BOOLEAN DEFAULT FALSE,
+        extnValue   OCTET STRING  }
+
+   The following items describe the X.509 v3 certificate for use in the
+   Internet.
+
+4.1.1  Certificate Fields
+
+   The Certificate is a SEQUENCE of three required fields.  The fields
+   are described in detail in the following subsections.
+
+4.1.1.1  tbsCertificate
+
+   The field contains the names of the subject and issuer, a public key
+   associated with the subject, a validity period, and other associated
+   information.  The fields are described in detail in section 4.1.2;
+   the tbsCertificate usually includes extensions which are described in
+   section 4.2.
+
+4.1.1.2  signatureAlgorithm
+
+   The signatureAlgorithm field contains the identifier for the
+   cryptographic algorithm used by the CA to sign this certificate.
+   [PKIXALGS] lists supported signature algorithms, but other signature
+   algorithms MAY also be supported.
+
+   An algorithm identifier is defined by the following ASN.1 structure:
+
+   AlgorithmIdentifier  ::=  SEQUENCE  {
+        algorithm               OBJECT IDENTIFIER,
+        parameters              ANY DEFINED BY algorithm OPTIONAL  }
+
+   The algorithm identifier is used to identify a cryptographic
+   algorithm.  The OBJECT IDENTIFIER component identifies the algorithm
+   (such as DSA with SHA-1).  The contents of the optional parameters
+   field will vary according to the algorithm identified.
+
+   This field MUST contain the same algorithm identifier as the
+   signature field in the sequence tbsCertificate (section 4.1.2.3).
+
+4.1.1.3  signatureValue
+
+   The signatureValue field contains a digital signature computed upon
+   the ASN.1 DER encoded tbsCertificate.  The ASN.1 DER encoded
+   tbsCertificate is used as the input to the signature function.  This
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 16]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   signature value is encoded as a BIT STRING and included in the
+   signature field.  The details of this process are specified for each
+   of algorithms listed in [PKIXALGS].
+
+   By generating this signature, a CA certifies the validity of the
+   information in the tbsCertificate field.  In particular, the CA
+   certifies the binding between the public key material and the subject
+   of the certificate.
+
+4.1.2  TBSCertificate
+
+   The sequence TBSCertificate contains information associated with the
+   subject of the certificate and the CA who issued it.  Every
+   TBSCertificate contains the names of the subject and issuer, a public
+   key associated with the subject, a validity period, a version number,
+   and a serial number; some MAY contain optional unique identifier
+   fields.  The remainder of this section describes the syntax and
+   semantics of these fields.  A TBSCertificate usually includes
+   extensions.  Extensions for the Internet PKI are described in Section
+   4.2.
+
+4.1.2.1  Version
+
+   This field describes the version of the encoded certificate.  When
+   extensions are used, as expected in this profile, version MUST be 3
+   (value is 2).  If no extensions are present, but a UniqueIdentifier
+   is present, the version SHOULD be 2 (value is 1); however version MAY
+   be 3.  If only basic fields are present, the version SHOULD be 1 (the
+   value is omitted from the certificate as the default value); however
+   the version MAY be 2 or 3.
+
+   Implementations SHOULD be prepared to accept any version certificate.
+   At a minimum, conforming implementations MUST recognize version 3
+   certificates.
+
+   Generation of version 2 certificates is not expected by
+   implementations based on this profile.
+
+4.1.2.2  Serial number
+
+   The serial number MUST be a positive integer assigned by the CA to
+   each certificate.  It MUST be unique for each certificate issued by a
+   given CA (i.e., the issuer name and serial number identify a unique
+   certificate).  CAs MUST force the serialNumber to be a non-negative
+   integer.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 17]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Given the uniqueness requirements above, serial numbers can be
+   expected to contain long integers.  Certificate users MUST be able to
+   handle serialNumber values up to 20 octets.  Conformant CAs MUST NOT
+   use serialNumber values longer than 20 octets.
+
+   Note: Non-conforming CAs may issue certificates with serial numbers
+   that are negative, or zero.  Certificate users SHOULD be prepared to
+   gracefully handle such certificates.
+
+4.1.2.3  Signature
+
+   This field contains the algorithm identifier for the algorithm used
+   by the CA to sign the certificate.
+
+   This field MUST contain the same algorithm identifier as the
+   signatureAlgorithm field in the sequence Certificate (section
+   4.1.1.2).  The contents of the optional parameters field will vary
+   according to the algorithm identified.  [PKIXALGS] lists the
+   supported signature algorithms, but other signature algorithms MAY
+   also be supported.
+
+4.1.2.4  Issuer
+
+   The issuer field identifies the entity who has signed and issued the
+   certificate.  The issuer field MUST contain a non-empty distinguished
+   name (DN).  The issuer field is defined as the X.501 type Name
+   [X.501].  Name is defined by the following ASN.1 structures:
+
+   Name ::= CHOICE {
+     RDNSequence }
+
+   RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+
+   RelativeDistinguishedName ::=
+     SET OF AttributeTypeAndValue
+
+   AttributeTypeAndValue ::= SEQUENCE {
+     type     AttributeType,
+     value    AttributeValue }
+
+   AttributeType ::= OBJECT IDENTIFIER
+
+   AttributeValue ::= ANY DEFINED BY AttributeType
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 18]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   DirectoryString ::= CHOICE {
+         teletexString           TeletexString (SIZE (1..MAX)),
+         printableString         PrintableString (SIZE (1..MAX)),
+         universalString         UniversalString (SIZE (1..MAX)),
+         utf8String              UTF8String (SIZE (1..MAX)),
+         bmpString               BMPString (SIZE (1..MAX)) }
+
+   The Name describes a hierarchical name composed of attributes, such
+   as country name, and corresponding values, such as US.  The type of
+   the component AttributeValue is determined by the AttributeType; in
+   general it will be a DirectoryString.
+
+   The DirectoryString type is defined as a choice of PrintableString,
+   TeletexString, BMPString, UTF8String, and UniversalString.  The
+   UTF8String encoding [RFC 2279] is the preferred encoding, and all
+   certificates issued after December 31, 2003 MUST use the UTF8String
+   encoding of DirectoryString (except as noted below).  Until that
+   date, conforming CAs MUST choose from the following options when
+   creating a distinguished name, including their own:
+
+      (a)  if the character set is sufficient, the string MAY be
+      represented as a PrintableString;
+
+      (b)  failing (a), if the BMPString character set is sufficient the
+      string MAY be represented as a BMPString; and
+
+      (c)  failing (a) and (b), the string MUST be represented as a
+      UTF8String.  If (a) or (b) is satisfied, the CA MAY still choose
+      to represent the string as a UTF8String.
+
+   Exceptions to the December 31, 2003 UTF8 encoding requirements are as
+   follows:
+
+      (a)  CAs MAY issue "name rollover" certificates to support an
+      orderly migration to UTF8String encoding.  Such certificates would
+      include the CA's UTF8String encoded name as issuer and and the old
+      name encoding as subject, or vice-versa.
+
+      (b)  As stated in section 4.1.2.6, the subject field MUST be
+      populated with a non-empty distinguished name matching the
+      contents of the issuer field in all certificates issued by the
+      subject CA regardless of encoding.
+
+   The TeletexString and UniversalString are included for backward
+   compatibility, and SHOULD NOT be used for certificates for new
+   subjects.  However, these types MAY be used in certificates where the
+   name was previously established.  Certificate users SHOULD be
+   prepared to receive certificates with these types.
+
+
+
+Housley, et. al.            Standards Track                    [Page 19]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   In addition, many legacy implementations support names encoded in the
+   ISO 8859-1 character set (Latin1String) [ISO 8859-1] but tag them as
+   TeletexString.  TeletexString encodes a larger character set than ISO
+   8859-1, but it encodes some characters differently.  Implementations
+   SHOULD be prepared to handle both encodings.
+
+   As noted above, distinguished names are composed of attributes.  This
+   specification does not restrict the set of attribute types that may
+   appear in names.  However, conforming implementations MUST be
+   prepared to receive certificates with issuer names containing the set
+   of attribute types defined below.  This specification RECOMMENDS
+   support for additional attribute types.
+
+   Standard sets of attributes have been defined in the X.500 series of
+   specifications [X.520].  Implementations of this specification MUST
+   be prepared to receive the following standard attribute types in
+   issuer and subject (section 4.1.2.6) names:
+
+      * country,
+      * organization,
+      * organizational-unit,
+      * distinguished name qualifier,
+      * state or province name,
+      * common name (e.g., "Susan Housley"), and
+      * serial number.
+
+   In addition, implementations of this specification SHOULD be prepared
+   to receive the following standard attribute types in issuer and
+   subject names:
+
+      * locality,
+      * title,
+      * surname,
+      * given name,
+      * initials,
+      * pseudonym, and
+      * generation qualifier (e.g., "Jr.", "3rd", or "IV").
+
+   The syntax and associated object identifiers (OIDs) for these
+   attribute types are provided in the ASN.1 modules in Appendix A.
+
+   In addition, implementations of this specification MUST be prepared
+   to receive the domainComponent attribute, as defined in [RFC 2247].
+   The Domain Name System (DNS) provides a hierarchical resource
+   labeling system.  This attribute provides a convenient mechanism for
+   organizations that wish to use DNs that parallel their DNS names.
+   This is not a replacement for the dNSName component of the
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 20]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   alternative name field.  Implementations are not required to convert
+   such names into DNS names.  The syntax and associated OID for this
+   attribute type is provided in the ASN.1 modules in Appendix A.
+
+   Certificate users MUST be prepared to process the issuer
+   distinguished name and subject distinguished name (section 4.1.2.6)
+   fields to perform name chaining for certification path validation
+   (section 6).  Name chaining is performed by matching the issuer
+   distinguished name in one certificate with the subject name in a CA
+   certificate.
+
+   This specification requires only a subset of the name comparison
+   functionality specified in the X.500 series of specifications.
+   Conforming implementations are REQUIRED to implement the following
+   name comparison rules:
+
+      (a)  attribute values encoded in different types (e.g.,
+      PrintableString and BMPString) MAY be assumed to represent
+      different strings;
+
+      (b) attribute values in types other than PrintableString are case
+      sensitive (this permits matching of attribute values as binary
+      objects);
+
+      (c)  attribute values in PrintableString are not case sensitive
+      (e.g., "Marianne Swanson" is the same as "MARIANNE SWANSON"); and
+
+      (d)  attribute values in PrintableString are compared after
+      removing leading and trailing white space and converting internal
+      substrings of one or more consecutive white space characters to a
+      single space.
+
+   These name comparison rules permit a certificate user to validate
+   certificates issued using languages or encodings unfamiliar to the
+   certificate user.
+
+   In addition, implementations of this specification MAY use these
+   comparison rules to process unfamiliar attribute types for name
+   chaining.  This allows implementations to process certificates with
+   unfamiliar attributes in the issuer name.
+
+   Note that the comparison rules defined in the X.500 series of
+   specifications indicate that the character sets used to encode data
+   in distinguished names are irrelevant.  The characters themselves are
+   compared without regard to encoding.  Implementations of this profile
+   are permitted to use the comparison algorithm defined in the X.500
+   series.  Such an implementation will recognize a superset of name
+   matches recognized by the algorithm specified above.
+
+
+
+Housley, et. al.            Standards Track                    [Page 21]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.1.2.5  Validity
+
+   The certificate validity period is the time interval during which the
+   CA warrants that it will maintain information about the status of the
+   certificate.  The field is represented as a SEQUENCE of two dates:
+   the date on which the certificate validity period begins (notBefore)
+   and the date on which the certificate validity period ends
+   (notAfter).  Both notBefore and notAfter may be encoded as UTCTime or
+   GeneralizedTime.
+
+   CAs conforming to this profile MUST always encode certificate
+   validity dates through the year 2049 as UTCTime; certificate validity
+   dates in 2050 or later MUST be encoded as GeneralizedTime.
+
+   The validity period for a certificate is the period of time from
+   notBefore through notAfter, inclusive.
+
+4.1.2.5.1  UTCTime
+
+   The universal time type, UTCTime, is a standard ASN.1 type intended
+   for representation of dates and time.  UTCTime specifies the year
+   through the two low order digits and time is specified to the
+   precision of one minute or one second.  UTCTime includes either Z
+   (for Zulu, or Greenwich Mean Time) or a time differential.
+
+   For the purposes of this profile, UTCTime values MUST be expressed
+   Greenwich Mean Time (Zulu) and MUST include seconds (i.e., times are
+   YYMMDDHHMMSSZ), even where the number of seconds is zero.  Conforming
+   systems MUST interpret the year field (YY) as follows:
+
+      Where YY is greater than or equal to 50, the year SHALL be
+      interpreted as 19YY; and
+
+      Where YY is less than 50, the year SHALL be interpreted as 20YY.
+
+4.1.2.5.2  GeneralizedTime
+
+   The generalized time type, GeneralizedTime, is a standard ASN.1 type
+   for variable precision representation of time.  Optionally, the
+   GeneralizedTime field can include a representation of the time
+   differential between local and Greenwich Mean Time.
+
+   For the purposes of this profile, GeneralizedTime values MUST be
+   expressed Greenwich Mean Time (Zulu) and MUST include seconds (i.e.,
+   times are YYYYMMDDHHMMSSZ), even where the number of seconds is zero.
+   GeneralizedTime values MUST NOT include fractional seconds.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 22]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.1.2.6  Subject
+
+   The subject field identifies the entity associated with the public
+   key stored in the subject public key field.  The subject name MAY be
+   carried in the subject field and/or the subjectAltName extension.  If
+   the subject is a CA (e.g., the basic constraints extension, as
+   discussed in 4.2.1.10, is present and the value of cA is TRUE), then
+   the subject field MUST be populated with a non-empty distinguished
+   name matching the contents of the issuer field (section 4.1.2.4) in
+   all certificates issued by the subject CA.  If the subject is a CRL
+   issuer (e.g., the key usage extension, as discussed in 4.2.1.3, is
+   present and the value of cRLSign is TRUE) then the subject field MUST
+   be populated with a non-empty distinguished name matching the
+   contents of the issuer field (section 4.1.2.4) in all CRLs issued by
+   the subject CRL issuer.  If subject naming information is present
+   only in the subjectAltName extension (e.g., a key bound only to an
+   email address or URI), then the subject name MUST be an empty
+   sequence and the subjectAltName extension MUST be critical.
+
+   Where it is non-empty, the subject field MUST contain an X.500
+   distinguished name (DN).  The DN MUST be unique for each subject
+   entity certified by the one CA as defined by the issuer name field.
+   A CA MAY issue more than one certificate with the same DN to the same
+   subject entity.
+
+   The subject name field is defined as the X.501 type Name.
+   Implementation requirements for this field are those defined for the
+   issuer field (section 4.1.2.4).  When encoding attribute values of
+   type DirectoryString, the encoding rules for the issuer field MUST be
+   implemented.  Implementations of this specification MUST be prepared
+   to receive subject names containing the attribute types required for
+   the issuer field.  Implementations of this specification SHOULD be
+   prepared to receive subject names containing the recommended
+   attribute types for the issuer field.  The syntax and associated
+   object identifiers (OIDs) for these attribute types are provided in
+   the ASN.1 modules in Appendix A.  Implementations of this
+   specification MAY use these comparison rules to process unfamiliar
+   attribute types (i.e., for name chaining).  This allows
+   implementations to process certificates with unfamiliar attributes in
+   the subject name.
+
+   In addition, legacy implementations exist where an RFC 822 name is
+   embedded in the subject distinguished name as an EmailAddress
+   attribute.  The attribute value for EmailAddress is of type IA5String
+   to permit inclusion of the character '@', which is not part of the
+   PrintableString character set.  EmailAddress attribute values are not
+   case sensitive (e.g., "fanfeedback@redsox.com" is the same as
+   "FANFEEDBACK@REDSOX.COM").
+
+
+
+Housley, et. al.            Standards Track                    [Page 23]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Conforming implementations generating new certificates with
+   electronic mail addresses MUST use the rfc822Name in the subject
+   alternative name field (section 4.2.1.7) to describe such identities.
+   Simultaneous inclusion of the EmailAddress attribute in the subject
+   distinguished name to support legacy implementations is deprecated
+   but permitted.
+
+4.1.2.7  Subject Public Key Info
+
+   This field is used to carry the public key and identify the algorithm
+   with which the key is used (e.g., RSA, DSA, or Diffie-Hellman).  The
+   algorithm is identified using the AlgorithmIdentifier structure
+   specified in section 4.1.1.2.  The object identifiers for the
+   supported algorithms and the methods for encoding the public key
+   materials (public key and parameters) are specified in [PKIXALGS].
+
+4.1.2.8  Unique Identifiers
+
+   These fields MUST only appear if the version is 2 or 3 (section
+   4.1.2.1).  These fields MUST NOT appear if the version is 1.  The
+   subject and issuer unique identifiers are present in the certificate
+   to handle the possibility of reuse of subject and/or issuer names
+   over time.  This profile RECOMMENDS that names not be reused for
+   different entities and that Internet certificates not make use of
+   unique identifiers.  CAs conforming to this profile SHOULD NOT
+   generate certificates with unique identifiers.  Applications
+   conforming to this profile SHOULD be capable of parsing unique
+   identifiers.
+
+4.1.2.9  Extensions
+
+   This field MUST only appear if the version is 3 (section 4.1.2.1).
+   If present, this field is a SEQUENCE of one or more certificate
+   extensions.  The format and content of certificate extensions in the
+   Internet PKI is defined in section 4.2.
+
+4.2  Certificate Extensions
+
+   The extensions defined for X.509 v3 certificates provide methods for
+   associating additional attributes with users or public keys and for
+   managing a certification hierarchy.  The X.509 v3 certificate format
+   also allows communities to define private extensions to carry
+   information unique to those communities.  Each extension in a
+   certificate is designated as either critical or non-critical.  A
+   certificate using system MUST reject the certificate if it encounters
+   a critical extension it does not recognize; however, a non-critical
+   extension MAY be ignored if it is not recognized.  The following
+   sections present recommended extensions used within Internet
+
+
+
+Housley, et. al.            Standards Track                    [Page 24]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   certificates and standard locations for information.  Communities may
+   elect to use additional extensions; however, caution ought to be
+   exercised in adopting any critical extensions in certificates which
+   might prevent use in a general context.
+
+   Each extension includes an OID and an ASN.1 structure.  When an
+   extension appears in a certificate, the OID appears as the field
+   extnID and the corresponding ASN.1 encoded structure is the value of
+   the octet string extnValue.  A certificate MUST NOT include more than
+   one instance of a particular extension.  For example, a certificate
+   may contain only one authority key identifier extension (section
+   4.2.1.1).  An extension includes the boolean critical, with a default
+   value of FALSE.  The text for each extension specifies the acceptable
+   values for the critical field.
+
+   Conforming CAs MUST support key identifiers (sections 4.2.1.1 and
+   4.2.1.2), basic constraints (section 4.2.1.10), key usage (section
+   4.2.1.3), and certificate policies (section 4.2.1.5) extensions.  If
+   the CA issues certificates with an empty sequence for the subject
+   field, the CA MUST support the subject alternative name extension
+   (section 4.2.1.7).  Support for the remaining extensions is OPTIONAL.
+   Conforming CAs MAY support extensions that are not identified within
+   this specification; certificate issuers are cautioned that marking
+   such extensions as critical may inhibit interoperability.
+
+   At a minimum, applications conforming to this profile MUST recognize
+   the following extensions: key usage (section 4.2.1.3), certificate
+   policies (section 4.2.1.5), the subject alternative name (section
+   4.2.1.7), basic constraints (section 4.2.1.10), name constraints
+   (section 4.2.1.11), policy constraints (section 4.2.1.12), extended
+   key usage (section 4.2.1.13), and inhibit any-policy (section
+   4.2.1.15).
+
+   In addition, applications conforming to this profile SHOULD recognize
+   the authority and subject key identifier (sections 4.2.1.1 and
+   4.2.1.2), and policy mapping (section 4.2.1.6) extensions.
+
+4.2.1  Standard Extensions
+
+   This section identifies standard certificate extensions defined in
+   [X.509] for use in the Internet PKI.  Each extension is associated
+   with an OID defined in [X.509].  These OIDs are members of the id-ce
+   arc, which is defined by the following:
+
+   id-ce   OBJECT IDENTIFIER ::=  { joint-iso-ccitt(2) ds(5) 29 }
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 25]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.2.1.1  Authority Key Identifier
+
+   The authority key identifier extension provides a means of
+   identifying the public key corresponding to the private key used to
+   sign a certificate.  This extension is used where an issuer has
+   multiple signing keys (either due to multiple concurrent key pairs or
+   due to changeover).  The identification MAY be based on either the
+   key identifier (the subject key identifier in the issuer's
+   certificate) or on the issuer name and serial number.
+
+   The keyIdentifier field of the authorityKeyIdentifier extension MUST
+   be included in all certificates generated by conforming CAs to
+   facilitate certification path construction.  There is one exception;
+   where a CA distributes its public key in the form of a "self-signed"
+   certificate, the authority key identifier MAY be omitted.  The
+   signature on a self-signed certificate is generated with the private
+   key associated with the certificate's subject public key.  (This
+   proves that the issuer possesses both the public and private keys.)
+   In this case, the subject and authority key identifiers would be
+   identical, but only the subject key identifier is needed for
+   certification path building.
+
+   The value of the keyIdentifier field SHOULD be derived from the
+   public key used to verify the certificate's signature or a method
+   that generates unique values.  Two common methods for generating key
+   identifiers from the public key, and one common method for generating
+   unique values, are described in section 4.2.1.2.  Where a key
+   identifier has not been previously established, this specification
+   RECOMMENDS use of one of these methods for generating keyIdentifiers.
+   Where a key identifier has been previously established, the CA SHOULD
+   use the previously established identifier.
+
+   This profile RECOMMENDS support for the key identifier method by all
+   certificate users.
+
+   This extension MUST NOT be marked critical.
+
+   id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
+
+   AuthorityKeyIdentifier ::= SEQUENCE {
+      keyIdentifier             [0] KeyIdentifier           OPTIONAL,
+      authorityCertIssuer       [1] GeneralNames            OPTIONAL,
+      authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL  }
+
+   KeyIdentifier ::= OCTET STRING
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 26]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.2.1.2  Subject Key Identifier
+
+   The subject key identifier extension provides a means of identifying
+   certificates that contain a particular public key.
+
+   To facilitate certification path construction, this extension MUST
+   appear in all conforming CA certificates, that is, all certificates
+   including the basic constraints extension (section 4.2.1.10) where
+   the value of cA is TRUE.  The value of the subject key identifier
+   MUST be the value placed in the key identifier field of the Authority
+   Key Identifier extension (section 4.2.1.1) of certificates issued by
+   the subject of this certificate.
+
+   For CA certificates, subject key identifiers SHOULD be derived from
+   the public key or a method that generates unique values.  Two common
+   methods for generating key identifiers from the public key are:
+
+      (1) The keyIdentifier is composed of the 160-bit SHA-1 hash of the
+      value of the BIT STRING subjectPublicKey (excluding the tag,
+      length, and number of unused bits).
+
+      (2) The keyIdentifier is composed of a four bit type field with
+      the value 0100 followed by the least significant 60 bits of the
+      SHA-1 hash of the value of the BIT STRING subjectPublicKey
+      (excluding the tag, length, and number of unused bit string bits).
+
+   One common method for generating unique values is a monotonically
+   increasing sequence of integers.
+
+   For end entity certificates, the subject key identifier extension
+   provides a means for identifying certificates containing the
+   particular public key used in an application.  Where an end entity
+   has obtained multiple certificates, especially from multiple CAs, the
+   subject key identifier provides a means to quickly identify the set
+   of certificates containing a particular public key.  To assist
+   applications in identifying the appropriate end entity certificate,
+   this extension SHOULD be included in all end entity certificates.
+
+   For end entity certificates, subject key identifiers SHOULD be
+   derived from the public key.  Two common methods for generating key
+   identifiers from the public key are identified above.
+
+   Where a key identifier has not been previously established, this
+   specification RECOMMENDS use of one of these methods for generating
+   keyIdentifiers.  Where a key identifier has been previously
+   established, the CA SHOULD use the previously established identifier.
+
+   This extension MUST NOT be marked critical.
+
+
+
+Housley, et. al.            Standards Track                    [Page 27]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }
+
+   SubjectKeyIdentifier ::= KeyIdentifier
+
+4.2.1.3  Key Usage
+
+   The key usage extension defines the purpose (e.g., encipherment,
+   signature, certificate signing) of the key contained in the
+   certificate.  The usage restriction might be employed when a key that
+   could be used for more than one operation is to be restricted.  For
+   example, when an RSA key should be used only to verify signatures on
+   objects other than public key certificates and CRLs, the
+   digitalSignature and/or nonRepudiation bits would be asserted.
+   Likewise, when an RSA key should be used only for key management, the
+   keyEncipherment bit would be asserted.
+
+   This extension MUST appear in certificates that contain public keys
+   that are used to validate digital signatures on other public key
+   certificates or CRLs.  When this extension appears, it SHOULD be
+   marked critical.
+
+      id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+
+      KeyUsage ::= BIT STRING {
+           digitalSignature        (0),
+           nonRepudiation          (1),
+           keyEncipherment         (2),
+           dataEncipherment        (3),
+           keyAgreement            (4),
+           keyCertSign             (5),
+           cRLSign                 (6),
+           encipherOnly            (7),
+           decipherOnly            (8) }
+
+   Bits in the KeyUsage type are used as follows:
+
+      The digitalSignature bit is asserted when the subject public key
+      is used with a digital signature mechanism to support security
+      services other than certificate signing (bit 5), or CRL signing
+      (bit 6).  Digital signature mechanisms are often used for entity
+      authentication and data origin authentication with integrity.
+
+      The nonRepudiation bit is asserted when the subject public key is
+      used to verify digital signatures used to provide a non-
+      repudiation service which protects against the signing entity
+      falsely denying some action, excluding certificate or CRL signing.
+      In the case of later conflict, a reliable third party may
+      determine the authenticity of the signed data.
+
+
+
+Housley, et. al.            Standards Track                    [Page 28]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      Further distinctions between the digitalSignature and
+      nonRepudiation bits may be provided in specific certificate
+      policies.
+
+      The keyEncipherment bit is asserted when the subject public key is
+      used for key transport.  For example, when an RSA key is to be
+      used for key management, then this bit is set.
+
+      The dataEncipherment bit is asserted when the subject public key
+      is used for enciphering user data, other than cryptographic keys.
+
+      The keyAgreement bit is asserted when the subject public key is
+      used for key agreement.  For example, when a Diffie-Hellman key is
+      to be used for key management, then this bit is set.
+
+      The keyCertSign bit is asserted when the subject public key is
+      used for verifying a signature on public key certificates.  If the
+      keyCertSign bit is asserted, then the cA bit in the basic
+      constraints extension (section 4.2.1.10) MUST also be asserted.
+
+      The cRLSign bit is asserted when the subject public key is used
+      for verifying a signature on certificate revocation list (e.g., a
+      CRL, delta CRL, or an ARL).  This bit MUST be asserted in
+      certificates that are used to verify signatures on CRLs.
+
+      The meaning of the encipherOnly bit is undefined in the absence of
+      the keyAgreement bit.  When the encipherOnly bit is asserted and
+      the keyAgreement bit is also set, the subject public key may be
+      used only for enciphering data while performing key agreement.
+
+      The meaning of the decipherOnly bit is undefined in the absence of
+      the keyAgreement bit.  When the decipherOnly bit is asserted and
+      the keyAgreement bit is also set, the subject public key may be
+      used only for deciphering data while performing key agreement.
+
+   This profile does not restrict the combinations of bits that may be
+   set in an instantiation of the keyUsage extension.  However,
+   appropriate values for keyUsage extensions for particular algorithms
+   are specified in [PKIXALGS].
+
+4.2.1.4  Private Key Usage Period
+
+   This extension SHOULD NOT be used within the Internet PKI.  CAs
+   conforming to this profile MUST NOT generate certificates that
+   include a critical private key usage period extension.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 29]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The private key usage period extension allows the certificate issuer
+   to specify a different validity period for the private key than the
+   certificate.  This extension is intended for use with digital
+   signature keys.  This extension consists of two optional components,
+   notBefore and notAfter.  The private key associated with the
+   certificate SHOULD NOT be used to sign objects before or after the
+   times specified by the two components, respectively.  CAs conforming
+   to this profile MUST NOT generate certificates with private key usage
+   period extensions unless at least one of the two components is
+   present and the extension is non-critical.
+
+   Where used, notBefore and notAfter are represented as GeneralizedTime
+   and MUST be specified and interpreted as defined in section
+   4.1.2.5.2.
+
+   id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }
+
+   PrivateKeyUsagePeriod ::= SEQUENCE {
+        notBefore       [0]     GeneralizedTime OPTIONAL,
+        notAfter        [1]     GeneralizedTime OPTIONAL }
+
+4.2.1.5  Certificate Policies
+
+   The certificate policies extension contains a sequence of one or more
+   policy information terms, each of which consists of an object
+   identifier (OID) and optional qualifiers.  Optional qualifiers, which
+   MAY be present, are not expected to change the definition of the
+   policy.
+
+   In an end entity certificate, these policy information terms indicate
+   the policy under which the certificate has been issued and the
+   purposes for which the certificate may be used.  In a CA certificate,
+   these policy information terms limit the set of policies for
+   certification paths which include this certificate.  When a CA does
+   not wish to limit the set of policies for certification paths which
+   include this certificate, it MAY assert the special policy anyPolicy,
+   with a value of { 2 5 29 32 0 }.
+
+   Applications with specific policy requirements are expected to have a
+   list of those policies which they will accept and to compare the
+   policy OIDs in the certificate to that list.  If this extension is
+   critical, the path validation software MUST be able to interpret this
+   extension (including the optional qualifier), or MUST reject the
+   certificate.
+
+   To promote interoperability, this profile RECOMMENDS that policy
+   information terms consist of only an OID.  Where an OID alone is
+   insufficient, this profile strongly recommends that use of qualifiers
+
+
+
+Housley, et. al.            Standards Track                    [Page 30]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   be limited to those identified in this section.  When qualifiers are
+   used with the special policy anyPolicy, they MUST be limited to the
+   qualifiers identified in this section.
+
+   This specification defines two policy qualifier types for use by
+   certificate policy writers and certificate issuers.  The qualifier
+   types are the CPS Pointer and User Notice qualifiers.
+
+   The CPS Pointer qualifier contains a pointer to a Certification
+   Practice Statement (CPS) published by the CA.  The pointer is in the
+   form of a URI.  Processing requirements for this qualifier are a
+   local matter.  No action is mandated by this specification regardless
+   of the criticality value asserted for the extension.
+
+   User notice is intended for display to a relying party when a
+   certificate is used.  The application software SHOULD display all
+   user notices in all certificates of the certification path used,
+   except that if a notice is duplicated only one copy need be
+   displayed.  To prevent such duplication, this qualifier SHOULD only
+   be present in end entity certificates and CA certificates issued to
+   other organizations.
+
+   The user notice has two optional fields: the noticeRef field and the
+   explicitText field.
+
+      The noticeRef field, if used, names an organization and
+      identifies, by number, a particular textual statement prepared by
+      that organization.  For example, it might identify the
+      organization "CertsRUs" and notice number 1.  In a typical
+      implementation, the application software will have a notice file
+      containing the current set of notices for CertsRUs; the
+      application will extract the notice text from the file and display
+      it.  Messages MAY be multilingual, allowing the software to select
+      the particular language message for its own environment.
+
+      An explicitText field includes the textual statement directly in
+      the certificate.  The explicitText field is a string with a
+      maximum size of 200 characters.
+
+   If both the noticeRef and explicitText options are included in the
+   one qualifier and if the application software can locate the notice
+   text indicated by the noticeRef option, then that text SHOULD be
+   displayed; otherwise, the explicitText string SHOULD be displayed.
+
+   Note: While the explicitText has a maximum size of 200 characters,
+   some non-conforming CAs exceed this limit.  Therefore, certificate
+   users SHOULD gracefully handle explicitText with more than 200
+   characters.
+
+
+
+Housley, et. al.            Standards Track                    [Page 31]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }
+
+   anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificate-policies 0 }
+
+   certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
+
+   PolicyInformation ::= SEQUENCE {
+        policyIdentifier   CertPolicyId,
+        policyQualifiers   SEQUENCE SIZE (1..MAX) OF
+                                PolicyQualifierInfo OPTIONAL }
+
+   CertPolicyId ::= OBJECT IDENTIFIER
+
+   PolicyQualifierInfo ::= SEQUENCE {
+        policyQualifierId  PolicyQualifierId,
+        qualifier          ANY DEFINED BY policyQualifierId }
+
+   -- policyQualifierIds for Internet policy qualifiers
+
+   id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
+   id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
+   id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
+
+   PolicyQualifierId ::=
+        OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
+
+   Qualifier ::= CHOICE {
+        cPSuri           CPSuri,
+        userNotice       UserNotice }
+
+   CPSuri ::= IA5String
+
+   UserNotice ::= SEQUENCE {
+        noticeRef        NoticeReference OPTIONAL,
+        explicitText     DisplayText OPTIONAL}
+
+   NoticeReference ::= SEQUENCE {
+        organization     DisplayText,
+        noticeNumbers    SEQUENCE OF INTEGER }
+
+   DisplayText ::= CHOICE {
+        ia5String        IA5String      (SIZE (1..200)),
+        visibleString    VisibleString  (SIZE (1..200)),
+        bmpString        BMPString      (SIZE (1..200)),
+        utf8String       UTF8String     (SIZE (1..200)) }
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 32]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.2.1.6  Policy Mappings
+
+   This extension is used in CA certificates.  It lists one or more
+   pairs of OIDs; each pair includes an issuerDomainPolicy and a
+   subjectDomainPolicy.  The pairing indicates the issuing CA considers
+   its issuerDomainPolicy equivalent to the subject CA's
+   subjectDomainPolicy.
+
+   The issuing CA's users might accept an issuerDomainPolicy for certain
+   applications.  The policy mapping defines the list of policies
+   associated with the subject CA that may be accepted as comparable to
+   the issuerDomainPolicy.
+
+   Each issuerDomainPolicy named in the policy mapping extension SHOULD
+   also be asserted in a certificate policies extension in the same
+   certificate.  Policies SHOULD NOT be mapped either to or from the
+   special value anyPolicy (section 4.2.1.5).
+
+   This extension MAY be supported by CAs and/or applications, and it
+   MUST be non-critical.
+
+   id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }
+
+   PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
+        issuerDomainPolicy      CertPolicyId,
+        subjectDomainPolicy     CertPolicyId }
+
+4.2.1.7  Subject Alternative Name
+
+   The subject alternative names extension allows additional identities
+   to be bound to the subject of the certificate.  Defined options
+   include an Internet electronic mail address, a DNS name, an IP
+   address, and a uniform resource identifier (URI).  Other options
+   exist, including completely local definitions.  Multiple name forms,
+   and multiple instances of each name form, MAY be included.  Whenever
+   such identities are to be bound into a certificate, the subject
+   alternative name (or issuer alternative name) extension MUST be used;
+   however, a DNS name MAY be represented in the subject field using the
+   domainComponent attribute as described in section 4.1.2.4.
+
+   Because the subject alternative name is considered to be definitively
+   bound to the public key, all parts of the subject alternative name
+   MUST be verified by the CA.
+
+   Further, if the only subject identity included in the certificate is
+   an alternative name form (e.g., an electronic mail address), then the
+   subject distinguished name MUST be empty (an empty sequence), and the
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 33]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   subjectAltName extension MUST be present.  If the subject field
+   contains an empty sequence, the subjectAltName extension MUST be
+   marked critical.
+
+   When the subjectAltName extension contains an Internet mail address,
+   the address MUST be included as an rfc822Name.  The format of an
+   rfc822Name is an "addr-spec" as defined in RFC 822 [RFC 822].  An
+   addr-spec has the form "local-part@domain".  Note that an addr-spec
+   has no phrase (such as a common name) before it, has no comment (text
+   surrounded in parentheses) after it, and is not surrounded by "<" and
+   ">".  Note that while upper and lower case letters are allowed in an
+   RFC 822 addr-spec, no significance is attached to the case.
+
+   When the subjectAltName extension contains a iPAddress, the address
+   MUST be stored in the octet string in "network byte order," as
+   specified in RFC 791 [RFC 791].  The least significant bit (LSB) of
+   each octet is the LSB of the corresponding byte in the network
+   address.  For IP Version 4, as specified in RFC 791, the octet string
+   MUST contain exactly four octets.  For IP Version 6, as specified in
+   RFC 1883, the octet string MUST contain exactly sixteen octets [RFC
+   1883].
+
+   When the subjectAltName extension contains a domain name system
+   label, the domain name MUST be stored in the dNSName (an IA5String).
+   The name MUST be in the "preferred name syntax," as specified by RFC
+   1034 [RFC 1034].  Note that while upper and lower case letters are
+   allowed in domain names, no signifigance is attached to the case.  In
+   addition, while the string " " is a legal domain name, subjectAltName
+   extensions with a dNSName of " " MUST NOT be used.  Finally, the use
+   of the DNS representation for Internet mail addresses (wpolk.nist.gov
+   instead of wpolk@nist.gov) MUST NOT be used; such identities are to
+   be encoded as rfc822Name.
+
+   Note: work is currently underway to specify domain names in
+   international character sets.  Such names will likely not be
+   accommodated by IA5String.  Once this work is complete, this profile
+   will be revisited and the appropriate functionality will be added.
+
+   When the subjectAltName extension contains a URI, the name MUST be
+   stored in the uniformResourceIdentifier (an IA5String).  The name
+   MUST NOT be a relative URL, and it MUST follow the URL syntax and
+   encoding rules specified in [RFC 1738].  The name MUST include both a
+   scheme (e.g., "http" or "ftp") and a scheme-specific-part.  The
+   scheme-specific-part MUST include a fully qualified domain name or IP
+   address as the host.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 34]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   As specified in [RFC 1738], the scheme name is not case-sensitive
+   (e.g., "http" is equivalent to "HTTP").  The host part is also not
+   case-sensitive, but other components of the scheme-specific-part may
+   be case-sensitive.  When comparing URIs, conforming implementations
+   MUST compare the scheme and host without regard to case, but assume
+   the remainder of the scheme-specific-part is case sensitive.
+
+   When the subjectAltName extension contains a DN in the directoryName,
+   the DN MUST be unique for each subject entity certified by the one CA
+   as defined by the issuer name field.  A CA MAY issue more than one
+   certificate with the same DN to the same subject entity.
+
+   The subjectAltName MAY carry additional name types through the use of
+   the otherName field.  The format and semantics of the name are
+   indicated through the OBJECT IDENTIFIER in the type-id field.  The
+   name itself is conveyed as value field in otherName.  For example,
+   Kerberos [RFC 1510] format names can be encoded into the otherName,
+   using using a Kerberos 5 principal name OID and a SEQUENCE of the
+   Realm and the PrincipalName.
+
+   Subject alternative names MAY be constrained in the same manner as
+   subject distinguished names using the name constraints extension as
+   described in section 4.2.1.11.
+
+   If the subjectAltName extension is present, the sequence MUST contain
+   at least one entry.  Unlike the subject field, conforming CAs MUST
+   NOT issue certificates with subjectAltNames containing empty
+   GeneralName fields.  For example, an rfc822Name is represented as an
+   IA5String.  While an empty string is a valid IA5String, such an
+   rfc822Name is not permitted by this profile.  The behavior of clients
+   that encounter such a certificate when processing a certificication
+   path is not defined by this profile.
+
+   Finally, the semantics of subject alternative names that include
+   wildcard characters (e.g., as a placeholder for a set of names) are
+   not addressed by this specification.  Applications with specific
+   requirements MAY use such names, but they must define the semantics.
+
+   id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }
+
+   SubjectAltName ::= GeneralNames
+
+   GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 35]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   GeneralName ::= CHOICE {
+        otherName                       [0]     OtherName,
+        rfc822Name                      [1]     IA5String,
+        dNSName                         [2]     IA5String,
+        x400Address                     [3]     ORAddress,
+        directoryName                   [4]     Name,
+        ediPartyName                    [5]     EDIPartyName,
+        uniformResourceIdentifier       [6]     IA5String,
+        iPAddress                       [7]     OCTET STRING,
+        registeredID                    [8]     OBJECT IDENTIFIER }
+
+   OtherName ::= SEQUENCE {
+        type-id    OBJECT IDENTIFIER,
+        value      [0] EXPLICIT ANY DEFINED BY type-id }
+
+   EDIPartyName ::= SEQUENCE {
+        nameAssigner            [0]     DirectoryString OPTIONAL,
+        partyName               [1]     DirectoryString }
+
+4.2.1.8  Issuer Alternative Names
+
+   As with 4.2.1.7, this extension is used to associate Internet style
+   identities with the certificate issuer.  Issuer alternative names
+   MUST be encoded as in 4.2.1.7.
+
+   Where present, this extension SHOULD NOT be marked critical.
+
+   id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }
+
+   IssuerAltName ::= GeneralNames
+
+4.2.1.9  Subject Directory Attributes
+
+   The subject directory attributes extension is used to convey
+   identification attributes (e.g., nationality) of the subject.  The
+   extension is defined as a sequence of one or more attributes.  This
+   extension MUST be non-critical.
+
+   id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }
+
+   SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+
+4.2.1.10  Basic Constraints
+
+   The basic constraints extension identifies whether the subject of the
+   certificate is a CA and the maximum depth of valid certification
+   paths that include this certificate.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 36]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The cA boolean indicates whether the certified public key belongs to
+   a CA.  If the cA boolean is not asserted, then the keyCertSign bit in
+   the key usage extension MUST NOT be asserted.
+
+   The pathLenConstraint field is meaningful only if the cA boolean is
+   asserted and the key usage extension asserts the keyCertSign bit
+   (section 4.2.1.3).  In this case, it gives the maximum number of non-
+   self-issued intermediate certificates that may follow this
+   certificate in a valid certification path.  A certificate is self-
+   issued if the DNs that appear in the subject and issuer fields are
+   identical and are not empty.  (Note: The last certificate in the
+   certification path is not an intermediate certificate, and is not
+   included in this limit.  Usually, the last certificate is an end
+   entity certificate, but it can be a CA certificate.)  A
+   pathLenConstraint of zero indicates that only one more certificate
+   may follow in a valid certification path.  Where it appears, the
+   pathLenConstraint field MUST be greater than or equal to zero.  Where
+   pathLenConstraint does not appear, no limit is imposed.
+
+   This extension MUST appear as a critical extension in all CA
+   certificates that contain public keys used to validate digital
+   signatures on certificates.  This extension MAY appear as a critical
+   or non-critical extension in CA certificates that contain public keys
+   used exclusively for purposes other than validating digital
+   signatures on certificates.  Such CA certificates include ones that
+   contain public keys used exclusively for validating digital
+   signatures on CRLs and ones that contain key management public keys
+   used with certificate enrollment protocols.  This extension MAY
+   appear as a critical or non-critical extension in end entity
+   certificates.
+
+   CAs MUST NOT include the pathLenConstraint field unless the cA
+   boolean is asserted and the key usage extension asserts the
+   keyCertSign bit.
+
+   id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }
+
+   BasicConstraints ::= SEQUENCE {
+        cA                      BOOLEAN DEFAULT FALSE,
+        pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
+
+4.2.1.11  Name Constraints
+
+   The name constraints extension, which MUST be used only in a CA
+   certificate, indicates a name space within which all subject names in
+   subsequent certificates in a certification path MUST be located.
+   Restrictions apply to the subject distinguished name and apply to
+   subject alternative names.  Restrictions apply only when the
+
+
+
+Housley, et. al.            Standards Track                    [Page 37]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   specified name form is present.  If no name of the type is in the
+   certificate, the certificate is acceptable.
+
+   Name constraints are not applied to certificates whose issuer and
+   subject are identical (unless the certificate is the final
+   certificate in the path).  (This could prevent CAs that use name
+   constraints from employing self-issued certificates to implement key
+   rollover.)
+
+   Restrictions are defined in terms of permitted or excluded name
+   subtrees.  Any name matching a restriction in the excludedSubtrees
+   field is invalid regardless of information appearing in the
+   permittedSubtrees.  This extension MUST be critical.
+
+   Within this profile, the minimum and maximum fields are not used with
+   any name forms, thus minimum MUST be zero, and maximum MUST be
+   absent.
+
+   For URIs, the constraint applies to the host part of the name.  The
+   constraint MAY specify a host or a domain.  Examples would be
+   "foo.bar.com";  and ".xyz.com".  When the the constraint begins with
+   a period, it MAY be expanded with one or more subdomains.  That is,
+   the constraint ".xyz.com" is satisfied by both abc.xyz.com and
+   abc.def.xyz.com.  However, the constraint ".xyz.com" is not satisfied
+   by "xyz.com".  When the constraint does not begin with a period, it
+   specifies a host.
+
+   A name constraint for Internet mail addresses MAY specify a
+   particular mailbox, all addresses at a particular host, or all
+   mailboxes in a domain.  To indicate a particular mailbox, the
+   constraint is the complete mail address.  For example, "root@xyz.com"
+   indicates the root mailbox on the host "xyz.com".  To indicate all
+   Internet mail addresses on a particular host, the constraint is
+   specified as the host name.  For example, the constraint "xyz.com" is
+   satisfied by any mail address at the host "xyz.com".  To specify any
+   address within a domain, the constraint is specified with a leading
+   period (as with URIs).  For example, ".xyz.com" indicates all the
+   Internet mail addresses in the domain "xyz.com", but not Internet
+   mail addresses on the host "xyz.com".
+
+   DNS name restrictions are expressed as foo.bar.com.  Any DNS name
+   that can be constructed by simply adding to the left hand side of the
+   name satisfies the name constraint.  For example, www.foo.bar.com
+   would satisfy the constraint but foo1.bar.com would not.
+
+   Legacy implementations exist where an RFC 822 name is embedded in the
+   subject distinguished name in an attribute of type EmailAddress
+   (section 4.1.2.6).  When rfc822 names are constrained, but the
+
+
+
+Housley, et. al.            Standards Track                    [Page 38]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   certificate does not include a subject alternative name, the rfc822
+   name constraint MUST be applied to the attribute of type EmailAddress
+   in the subject distinguished name.  The ASN.1 syntax for EmailAddress
+   and the corresponding OID are supplied in Appendix A.
+
+   Restrictions of the form directoryName MUST be applied to the subject
+   field in the certificate and to the subjectAltName extensions of type
+   directoryName.  Restrictions of the form x400Address MUST be applied
+   to subjectAltName extensions of type x400Address.
+
+   When applying restrictions of the form directoryName, an
+   implementation MUST compare DN attributes.  At a minimum,
+   implementations MUST perform the DN comparison rules specified in
+   Section 4.1.2.4.  CAs issuing certificates with a restriction of the
+   form directoryName SHOULD NOT rely on implementation of the full ISO
+   DN name comparison algorithm.  This implies name restrictions MUST be
+   stated identically to the encoding used in the subject field or
+   subjectAltName extension.
+
+   The syntax of iPAddress MUST be as described in section 4.2.1.7 with
+   the following additions specifically for Name Constraints.  For IPv4
+   addresses, the ipAddress field of generalName MUST contain eight (8)
+   octets, encoded in the style of RFC 1519 (CIDR) to represent an
+   address range [RFC 1519].  For IPv6 addresses, the ipAddress field
+   MUST contain 32 octets similarly encoded.  For example, a name
+   constraint for "class C" subnet 10.9.8.0 is represented as the octets
+   0A 09 08 00 FF FF FF 00, representing the CIDR notation
+   10.9.8.0/255.255.255.0.
+
+   The syntax and semantics for name constraints for otherName,
+   ediPartyName, and registeredID are not defined by this specification.
+
+      id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }
+
+      NameConstraints ::= SEQUENCE {
+           permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
+           excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
+
+      GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
+
+      GeneralSubtree ::= SEQUENCE {
+           base                    GeneralName,
+           minimum         [0]     BaseDistance DEFAULT 0,
+           maximum         [1]     BaseDistance OPTIONAL }
+
+      BaseDistance ::= INTEGER (0..MAX)
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 39]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.2.1.12  Policy Constraints
+
+   The policy constraints extension can be used in certificates issued
+   to CAs.  The policy constraints extension constrains path validation
+   in two ways.  It can be used to prohibit policy mapping or require
+   that each certificate in a path contain an acceptable policy
+   identifier.
+
+   If the inhibitPolicyMapping field is present, the value indicates the
+   number of additional certificates that may appear in the path before
+   policy mapping is no longer permitted.  For example, a value of one
+   indicates that policy mapping may be processed in certificates issued
+   by the subject of this certificate, but not in additional
+   certificates in the path.
+
+   If the requireExplicitPolicy field is present, the value of
+   requireExplicitPolicy indicates the number of additional certificates
+   that may appear in the path before an explicit policy is required for
+   the entire path.  When an explicit policy is required, it is
+   necessary for all certificates in the path to contain an acceptable
+   policy identifier in the certificate policies extension.  An
+   acceptable policy identifier is the identifier of a policy required
+   by the user of the certification path or the identifier of a policy
+   which has been declared equivalent through policy mapping.
+
+   Conforming CAs MUST NOT issue certificates where policy constraints
+   is a empty sequence.  That is, at least one of the
+   inhibitPolicyMapping field or the requireExplicitPolicy field MUST be
+   present.  The behavior of clients that encounter a empty policy
+   constraints field is not addressed in this profile.
+
+   This extension MAY be critical or non-critical.
+
+   id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
+
+   PolicyConstraints ::= SEQUENCE {
+        requireExplicitPolicy           [0] SkipCerts OPTIONAL,
+        inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
+
+   SkipCerts ::= INTEGER (0..MAX)
+
+4.2.1.13  Extended Key Usage
+
+   This extension indicates one or more purposes for which the certified
+   public key may be used, in addition to or in place of the basic
+   purposes indicated in the key usage extension.  In general, this
+   extension will appear only in end entity certificates.  This
+   extension is defined as follows:
+
+
+
+Housley, et. al.            Standards Track                    [Page 40]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
+
+   ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
+
+   KeyPurposeId ::= OBJECT IDENTIFIER
+
+   Key purposes may be defined by any organization with a need.  Object
+   identifiers used to identify key purposes MUST be assigned in
+   accordance with IANA or ITU-T Recommendation X.660 [X.660].
+
+   This extension MAY, at the option of the certificate issuer, be
+   either critical or non-critical.
+
+   If the extension is present, then the certificate MUST only be used
+   for one of the purposes indicated.  If multiple purposes are
+   indicated the application need not recognize all purposes indicated,
+   as long as the intended purpose is present.  Certificate using
+   applications MAY require that a particular purpose be indicated in
+   order for the certificate to be acceptable to that application.
+
+   If a CA includes extended key usages to satisfy such applications,
+   but does not wish to restrict usages of the key, the CA can include
+   the special keyPurposeID anyExtendedKeyUsage.  If the
+   anyExtendedKeyUsage keyPurposeID is present, the extension SHOULD NOT
+   be critical.
+
+   If a certificate contains both a key usage extension and an extended
+   key usage extension, then both extensions MUST be processed
+   independently and the certificate MUST only be used for a purpose
+   consistent with both extensions.  If there is no purpose consistent
+   with both extensions, then the certificate MUST NOT be used for any
+   purpose.
+
+   The following key usage purposes are defined:
+
+   anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
+
+   id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
+
+   id-kp-serverAuth             OBJECT IDENTIFIER ::= { id-kp 1 }
+   -- TLS WWW server authentication
+   -- Key usage bits that may be consistent: digitalSignature,
+   -- keyEncipherment or keyAgreement
+
+   id-kp-clientAuth             OBJECT IDENTIFIER ::= { id-kp 2 }
+   -- TLS WWW client authentication
+   -- Key usage bits that may be consistent: digitalSignature
+   -- and/or keyAgreement
+
+
+
+Housley, et. al.            Standards Track                    [Page 41]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   id-kp-codeSigning             OBJECT IDENTIFIER ::= { id-kp 3 }
+   -- Signing of downloadable executable code
+   -- Key usage bits that may be consistent: digitalSignature
+
+   id-kp-emailProtection         OBJECT IDENTIFIER ::= { id-kp 4 }
+   -- E-mail protection
+   -- Key usage bits that may be consistent: digitalSignature,
+   -- nonRepudiation, and/or (keyEncipherment or keyAgreement)
+
+   id-kp-timeStamping            OBJECT IDENTIFIER ::= { id-kp 8 }
+   -- Binding the hash of an object to a time
+   -- Key usage bits that may be consistent: digitalSignature
+   -- and/or nonRepudiation
+
+   id-kp-OCSPSigning            OBJECT IDENTIFIER ::= { id-kp 9 }
+   -- Signing OCSP responses
+   -- Key usage bits that may be consistent: digitalSignature
+   -- and/or nonRepudiation
+
+4.2.1.14  CRL Distribution Points
+
+   The CRL distribution points extension identifies how CRL information
+   is obtained.  The extension SHOULD be non-critical, but this profile
+   RECOMMENDS support for this extension by CAs and applications.
+   Further discussion of CRL management is contained in section 5.
+
+   The cRLDistributionPoints extension is a SEQUENCE of
+   DistributionPoint.  A DistributionPoint consists of three fields,
+   each of which is optional: distributionPoint, reasons, and cRLIssuer.
+   While each of these fields is optional, a DistributionPoint MUST NOT
+   consist of only the reasons field; either distributionPoint or
+   cRLIssuer MUST be present.  If the certificate issuer is not the CRL
+   issuer, then the cRLIssuer field MUST be present and contain the Name
+   of the CRL issuer.  If the certificate issuer is also the CRL issuer,
+   then the cRLIssuer field MUST be omitted and the distributionPoint
+   field MUST be present.  If the distributionPoint field is omitted,
+   cRLIssuer MUST be present and include a Name corresponding to an
+   X.500 or LDAP directory entry where the CRL is located.
+
+   When the distributionPoint field is present, it contains either a
+   SEQUENCE of general names or a single value, nameRelativeToCRLIssuer.
+   If the cRLDistributionPoints extension contains a general name of
+   type URI, the following semantics MUST be assumed: the URI is a
+   pointer to the current CRL for the associated reasons and will be
+   issued by the associated cRLIssuer.  The expected values for the URI
+   are those defined in 4.2.1.7.  Processing rules for other values are
+   not defined by this specification.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 42]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   If the DistributionPointName contains multiple values, each name
+   describes a different mechanism to obtain the same CRL.  For example,
+   the same CRL could be available for retrieval through both LDAP and
+   HTTP.
+
+   If the DistributionPointName contains the single value
+   nameRelativeToCRLIssuer, the value provides a distinguished name
+   fragment.  The fragment is appended to the X.500 distinguished name
+   of the CRL issuer to obtain the distribution point name.  If the
+   cRLIssuer field in the DistributionPoint is present, then the name
+   fragment is appended to the distinguished name that it contains;
+   otherwise, the name fragment is appended to the certificate issuer
+   distinguished name.  The DistributionPointName MUST NOT use the
+   nameRealtiveToCRLIssuer alternative when cRLIssuer contains more than
+   one distinguished name.
+
+   If the DistributionPoint omits the reasons field, the CRL MUST
+   include revocation information for all reasons.
+
+   The cRLIssuer identifies the entity who signs and issues the CRL.  If
+   present, the cRLIssuer MUST contain at least one an X.500
+   distinguished name (DN), and MAY also contain other name forms.
+   Since the cRLIssuer is compared to the CRL issuer name, the X.501
+   type Name MUST follow the encoding rules for the issuer name field in
+   the certificate (section 4.1.2.4).
+
+   id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::=  { id-ce 31 }
+
+   CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
+
+   DistributionPoint ::= SEQUENCE {
+        distributionPoint       [0]     DistributionPointName OPTIONAL,
+        reasons                 [1]     ReasonFlags OPTIONAL,
+        cRLIssuer               [2]     GeneralNames OPTIONAL }
+
+   DistributionPointName ::= CHOICE {
+        fullName                [0]     GeneralNames,
+        nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 43]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   ReasonFlags ::= BIT STRING {
+        unused                  (0),
+        keyCompromise           (1),
+        cACompromise            (2),
+        affiliationChanged      (3),
+        superseded              (4),
+        cessationOfOperation    (5),
+        certificateHold         (6),
+        privilegeWithdrawn      (7),
+        aACompromise            (8) }
+
+4.2.1.15  Inhibit Any-Policy
+
+   The inhibit any-policy extension can be used in certificates issued
+   to CAs.  The inhibit any-policy indicates that the special anyPolicy
+   OID, with the value { 2 5 29 32 0 }, is not considered an explicit
+   match for other certificate policies.  The value indicates the number
+   of additional certificates that may appear in the path before
+   anyPolicy is no longer permitted.  For example, a value of one
+   indicates that anyPolicy may be processed in certificates issued by
+   the subject of this certificate, but not in additional certificates
+   in the path.
+
+   This extension MUST be critical.
+
+   id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::=  { id-ce 54 }
+
+   InhibitAnyPolicy ::= SkipCerts
+
+   SkipCerts ::= INTEGER (0..MAX)
+
+4.2.1.16  Freshest CRL (a.k.a. Delta CRL Distribution Point)
+
+   The freshest CRL extension identifies how delta CRL information is
+   obtained.  The extension MUST be non-critical.  Further discussion of
+   CRL management is contained in section 5.
+
+   The same syntax is used for this extension and the
+   cRLDistributionPoints extension, and is described in section
+   4.2.1.14.  The same conventions apply to both extensions.
+
+   id-ce-freshestCRL OBJECT IDENTIFIER ::=  { id-ce 46 }
+
+   FreshestCRL ::= CRLDistributionPoints
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 44]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+4.2.2  Private Internet Extensions
+
+   This section defines two extensions for use in the Internet Public
+   Key Infrastructure.  These extensions may be used to direct
+   applications to on-line information about the issuing CA or the
+   subject.  As the information may be available in multiple forms, each
+   extension is a sequence of IA5String values, each of which represents
+   a URI.  The URI implicitly specifies the location and format of the
+   information and the method for obtaining the information.
+
+   An object identifier is defined for the private extension.  The
+   object identifier associated with the private extension is defined
+   under the arc id-pe within the arc id-pkix.  Any future extensions
+   defined for the Internet PKI are also expected to be defined under
+   the arc id-pe.
+
+      id-pkix  OBJECT IDENTIFIER  ::=
+               { iso(1) identified-organization(3) dod(6) internet(1)
+                       security(5) mechanisms(5) pkix(7) }
+
+      id-pe  OBJECT IDENTIFIER  ::=  { id-pkix 1 }
+
+4.2.2.1  Authority Information Access
+
+   The authority information access extension indicates how to access CA
+   information and services for the issuer of the certificate in which
+   the extension appears.  Information and services may include on-line
+   validation services and CA policy data.  (The location of CRLs is not
+   specified in this extension; that information is provided by the
+   cRLDistributionPoints extension.)  This extension may be included in
+   end entity or CA certificates, and it MUST be non-critical.
+
+   id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+
+   AuthorityInfoAccessSyntax  ::=
+           SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+   AccessDescription  ::=  SEQUENCE {
+           accessMethod          OBJECT IDENTIFIER,
+           accessLocation        GeneralName  }
+
+   id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+
+   id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
+
+   id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 45]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Each entry in the sequence AuthorityInfoAccessSyntax describes the
+   format and location of additional information provided by the CA that
+   issued the certificate in which this extension appears.  The type and
+   format of the information is specified by the accessMethod field; the
+   accessLocation field specifies the location of the information.  The
+   retrieval mechanism may be implied by the accessMethod or specified
+   by accessLocation.
+
+   This profile defines two accessMethod OIDs: id-ad-caIssuers and
+   id-ad-ocsp.
+
+   The id-ad-caIssuers OID is used when the additional information lists
+   CAs that have issued certificates superior to the CA that issued the
+   certificate containing this extension.  The referenced CA issuers
+   description is intended to aid certificate users in the selection of
+   a certification path that terminates at a point trusted by the
+   certificate user.
+
+   When id-ad-caIssuers appears as accessMethod, the accessLocation
+   field describes the referenced description server and the access
+   protocol to obtain the referenced description.  The accessLocation
+   field is defined as a GeneralName, which can take several forms.
+   Where the information is available via http, ftp, or ldap,
+   accessLocation MUST be a uniformResourceIdentifier.  Where the
+   information is available via the Directory Access Protocol (DAP),
+   accessLocation MUST be a directoryName.  The entry for that
+   directoryName contains CA certificates in the crossCertificatePair
+   attribute.  When the information is available via electronic mail,
+   accessLocation MUST be an rfc822Name.  The semantics of other
+   id-ad-caIssuers accessLocation name forms are not defined.
+
+   The id-ad-ocsp OID is used when revocation information for the
+   certificate containing this extension is available using the Online
+   Certificate Status Protocol (OCSP) [RFC 2560].
+
+   When id-ad-ocsp appears as accessMethod, the accessLocation field is
+   the location of the OCSP responder, using the conventions defined in
+   [RFC 2560].
+
+   Additional access descriptors may be defined in other PKIX
+   specifications.
+
+4.2.2.2  Subject Information Access
+
+   The subject information access extension indicates how to access
+   information and services for the subject of the certificate in which
+   the extension appears.  When the subject is a CA, information and
+   services may include certificate validation services and CA policy
+
+
+
+Housley, et. al.            Standards Track                    [Page 46]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   data.  When the subject is an end entity, the information describes
+   the type of services offered and how to access them.  In this case,
+   the contents of this extension are defined in the protocol
+   specifications for the suported services.  This extension may be
+   included in subject or CA certificates, and it MUST be non-critical.
+
+   id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
+
+   SubjectInfoAccessSyntax  ::=
+           SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+   AccessDescription  ::=  SEQUENCE {
+           accessMethod          OBJECT IDENTIFIER,
+           accessLocation        GeneralName  }
+
+   Each entry in the sequence SubjectInfoAccessSyntax describes the
+   format and location of additional information provided by the subject
+   of the certificate in which this extension appears.  The type and
+   format of the information is specified by the accessMethod field; the
+   accessLocation field specifies the location of the information.  The
+   retrieval mechanism may be implied by the accessMethod or specified
+   by accessLocation.
+
+   This profile defines one access method to be used when the subject is
+   a CA, and one access method to be used when the subject is an end
+   entity.  Additional access methods may be defined in the future in
+   the protocol specifications for other services.
+
+   The id-ad-caRepository OID is used when the subject is a CA, and
+   publishes its certificates and CRLs (if issued) in a repository.  The
+   accessLocation field is defined as a GeneralName, which can take
+   several forms.  Where the information is available via http, ftp, or
+   ldap, accessLocation MUST be a uniformResourceIdentifier.  Where the
+   information is available via the directory access protocol (dap),
+   accessLocation MUST be a directoryName.  When the information is
+   available via electronic mail, accessLocation MUST be an rfc822Name.
+   The semantics of other name forms of of accessLocation (when
+   accessMethod is id-ad-caRepository) are not defined by this
+   specification.
+
+   The id-ad-timeStamping OID is used when the subject offers
+   timestamping services using the Time Stamp Protocol defined in
+   [PKIXTSA].  Where the timestamping services are available via http or
+   ftp, accessLocation MUST be a uniformResourceIdentifier.  Where the
+   timestamping services are available via electronic mail,
+   accessLocation MUST be an rfc822Name.  Where timestamping services
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 47]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   are available using TCP/IP, the dNSName or ipAddress name forms may
+   be used.  The semantics of other name forms of accessLocation (when
+   accessMethod is id-ad-timeStamping) are not defined by this
+   specification.
+
+   Additional access descriptors may be defined in other PKIX
+   specifications.
+
+   id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+
+   id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
+
+   id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
+
+5  CRL and CRL Extensions Profile
+
+   As discussed above, one goal of this X.509 v2 CRL profile is to
+   foster the creation of an interoperable and reusable Internet PKI.
+   To achieve this goal, guidelines for the use of extensions are
+   specified, and some assumptions are made about the nature of
+   information included in the CRL.
+
+   CRLs may be used in a wide range of applications and environments
+   covering a broad spectrum of interoperability goals and an even
+   broader spectrum of operational and assurance requirements.  This
+   profile establishes a common baseline for generic applications
+   requiring broad interoperability.  The profile defines a set of
+   information that can be expected in every CRL.  Also, the profile
+   defines common locations within the CRL for frequently used
+   attributes as well as common representations for these attributes.
+
+   CRL issuers issue CRLs.  In general, the CRL issuer is the CA.  CAs
+   publish CRLs to provide status information about the certificates
+   they issued.  However, a CA may delegate this responsibility to
+   another trusted authority.  Whenever the CRL issuer is not the CA
+   that issued the certificates, the CRL is referred to as an indirect
+   CRL.
+
+   Each CRL has a particular scope.  The CRL scope is the set of
+   certificates that could appear on a given CRL.  For example, the
+   scope could be "all certificates issued by CA X", "all CA
+   certificates issued by CA X", "all certificates issued by CA X that
+   have been revoked for reasons of key compromise and CA compromise",
+   or could be a set of certificates based on arbitrary local
+   information, such as "all certificates issued to the NIST employees
+   located in Boulder".
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 48]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   A complete CRL lists all unexpired certificates, within its scope,
+   that have been revoked for one of the revocation reasons covered by
+   the CRL scope.  The CRL issuer MAY also generate delta CRLs.  A delta
+   CRL only lists those certificates, within its scope, whose revocation
+   status has changed since the issuance of a referenced complete CRL.
+   The referenced complete CRL is referred to as a base CRL.  The scope
+   of a delta CRL MUST be the same as the base CRL that it references.
+
+   This profile does not define any private Internet CRL extensions or
+   CRL entry extensions.
+
+   Environments with additional or special purpose requirements may
+   build on this profile or may replace it.
+
+   Conforming CAs are not required to issue CRLs if other revocation or
+   certificate status mechanisms are provided.  When CRLs are issued,
+   the CRLs MUST be version 2 CRLs, include the date by which the next
+   CRL will be issued in the nextUpdate field (section 5.1.2.5), include
+   the CRL number extension (section 5.2.3), and include the authority
+   key identifier extension (section 5.2.1).  Conforming applications
+   that support CRLs are REQUIRED to process both version 1 and version
+   2 complete CRLs that provide revocation information for all
+   certificates issued by one CA.  Conforming applications are NOT
+   REQUIRED to support processing of delta CRLs, indirect CRLs, or CRLs
+   with a scope other than all certificates issued by one CA.
+
+5.1  CRL Fields
+
+   The X.509 v2 CRL syntax is as follows.  For signature calculation,
+   the data that is to be signed is ASN.1 DER encoded.  ASN.1 DER
+   encoding is a tag, length, value encoding system for each element.
+
+   CertificateList  ::=  SEQUENCE  {
+        tbsCertList          TBSCertList,
+        signatureAlgorithm   AlgorithmIdentifier,
+        signatureValue       BIT STRING  }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 49]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   TBSCertList  ::=  SEQUENCE  {
+        version                 Version OPTIONAL,
+                                     -- if present, MUST be v2
+        signature               AlgorithmIdentifier,
+        issuer                  Name,
+        thisUpdate              Time,
+        nextUpdate              Time OPTIONAL,
+        revokedCertificates     SEQUENCE OF SEQUENCE  {
+             userCertificate         CertificateSerialNumber,
+             revocationDate          Time,
+             crlEntryExtensions      Extensions OPTIONAL
+                                           -- if present, MUST be v2
+                                  }  OPTIONAL,
+        crlExtensions           [0]  EXPLICIT Extensions OPTIONAL
+                                           -- if present, MUST be v2
+                                  }
+
+   -- Version, Time, CertificateSerialNumber, and Extensions
+   -- are all defined in the ASN.1 in section 4.1
+
+   -- AlgorithmIdentifier is defined in section 4.1.1.2
+
+   The following items describe the use of the X.509 v2 CRL in the
+   Internet PKI.
+
+5.1.1  CertificateList Fields
+
+   The CertificateList is a SEQUENCE of three required fields.  The
+   fields are described in detail in the following subsections.
+
+5.1.1.1  tbsCertList
+
+   The first field in the sequence is the tbsCertList.  This field is
+   itself a sequence containing the name of the issuer, issue date,
+   issue date of the next list, the optional list of revoked
+   certificates, and optional CRL extensions.  When there are no revoked
+   certificates, the revoked certificates list is absent.  When one or
+   more certificates are revoked, each entry on the revoked certificate
+   list is defined by a sequence of user certificate serial number,
+   revocation date, and optional CRL entry extensions.
+
+5.1.1.2  signatureAlgorithm
+
+   The signatureAlgorithm field contains the algorithm identifier for
+   the algorithm used by the CRL issuer to sign the CertificateList.
+   The field is of type AlgorithmIdentifier, which is defined in section
+   4.1.1.2.  [PKIXALGS] lists the supported algorithms for this
+   specification, but other signature algorithms MAY also be supported.
+
+
+
+Housley, et. al.            Standards Track                    [Page 50]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   This field MUST contain the same algorithm identifier as the
+   signature field in the sequence tbsCertList (section 5.1.2.2).
+
+5.1.1.3  signatureValue
+
+   The signatureValue field contains a digital signature computed upon
+   the ASN.1 DER encoded tbsCertList.  The ASN.1 DER encoded tbsCertList
+   is used as the input to the signature function.  This signature value
+   is encoded as a BIT STRING and included in the CRL signatureValue
+   field.  The details of this process are specified for each of the
+   supported algorithms in [PKIXALGS].
+
+   CAs that are also CRL issuers MAY use one private key to digitally
+   sign certificates and CRLs, or MAY use separate private keys to
+   digitally sign certificates and CRLs.  When separate private keys are
+   employed, each of the public keys associated with these private keys
+   is placed in a separate certificate, one with the keyCertSign bit set
+   in the key usage extension, and one with the cRLSign bit set in the
+   key usage extension (section 4.2.1.3).  When separate private keys
+   are employed, certificates issued by the CA contain one authority key
+   identifier, and the corresponding CRLs contain a different authority
+   key identifier.  The use of separate CA certificates for validation
+   of certificate signatures and CRL signatures can offer improved
+   security characteristics; however, it imposes a burden on
+   applications, and it might limit interoperability.  Many applications
+   construct a certification path, and then validate the certification
+   path (section 6).  CRL checking in turn requires a separate
+   certification path to be constructed and validated for the CA's CRL
+   signature validation certificate.  Applications that perform CRL
+   checking MUST support certification path validation when certificates
+   and CRLs are digitally signed with the same CA private key.  These
+   applications SHOULD support certification path validation when
+   certificates and CRLs are digitally signed with different CA private
+   keys.
+
+5.1.2  Certificate List "To Be Signed"
+
+   The certificate list to be signed, or TBSCertList, is a sequence of
+   required and optional fields.  The required fields identify the CRL
+   issuer, the algorithm used to sign the CRL, the date and time the CRL
+   was issued, and the date and time by which the CRL issuer will issue
+   the next CRL.
+
+   Optional fields include lists of revoked certificates and CRL
+   extensions.  The revoked certificate list is optional to support the
+   case where a CA has not revoked any unexpired certificates that it
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 51]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   has issued.  The profile requires conforming CRL issuers to use the
+   CRL number and authority key identifier CRL extensions in all CRLs
+   issued.
+
+5.1.2.1  Version
+
+   This optional field describes the version of the encoded CRL.  When
+   extensions are used, as required by this profile, this field MUST be
+   present and MUST specify version 2 (the integer value is 1).
+
+5.1.2.2  Signature
+
+   This field contains the algorithm identifier for the algorithm used
+   to sign the CRL.  [PKIXALGS] lists OIDs for the most popular
+   signature algorithms used in the Internet PKI.
+
+   This field MUST contain the same algorithm identifier as the
+   signatureAlgorithm field in the sequence CertificateList (section
+   5.1.1.2).
+
+5.1.2.3  Issuer Name
+
+   The issuer name identifies the entity who has signed and issued the
+   CRL.  The issuer identity is carried in the issuer name field.
+   Alternative name forms may also appear in the issuerAltName extension
+   (section 5.2.2).  The issuer name field MUST contain an X.500
+   distinguished name (DN).  The issuer name field is defined as the
+   X.501 type Name, and MUST follow the encoding rules for the issuer
+   name field in the certificate (section 4.1.2.4).
+
+5.1.2.4  This Update
+
+   This field indicates the issue date of this CRL.  ThisUpdate may be
+   encoded as UTCTime or GeneralizedTime.
+
+   CRL issuers conforming to this profile MUST encode thisUpdate as
+   UTCTime for dates through the year 2049.  CRL issuers conforming to
+   this profile MUST encode thisUpdate as GeneralizedTime for dates in
+   the year 2050 or later.
+
+   Where encoded as UTCTime, thisUpdate MUST be specified and
+   interpreted as defined in section 4.1.2.5.1.  Where encoded as
+   GeneralizedTime, thisUpdate MUST be specified and interpreted as
+   defined in section 4.1.2.5.2.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 52]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+5.1.2.5  Next Update
+
+   This field indicates the date by which the next CRL will be issued.
+   The next CRL could be issued before the indicated date, but it will
+   not be issued any later than the indicated date.  CRL issuers SHOULD
+   issue CRLs with a nextUpdate time equal to or later than all previous
+   CRLs.  nextUpdate may be encoded as UTCTime or GeneralizedTime.
+
+   This profile requires inclusion of nextUpdate in all CRLs issued by
+   conforming CRL issuers.  Note that the ASN.1 syntax of TBSCertList
+   describes this field as OPTIONAL, which is consistent with the ASN.1
+   structure defined in [X.509].  The behavior of clients processing
+   CRLs which omit nextUpdate is not specified by this profile.
+
+   CRL issuers conforming to this profile MUST encode nextUpdate as
+   UTCTime for dates through the year 2049.  CRL issuers conforming to
+   this profile MUST encode nextUpdate as GeneralizedTime for dates in
+   the year 2050 or later.
+
+   Where encoded as UTCTime, nextUpdate MUST be specified and
+   interpreted as defined in section 4.1.2.5.1.  Where encoded as
+   GeneralizedTime, nextUpdate MUST be specified and interpreted as
+   defined in section 4.1.2.5.2.
+
+5.1.2.6  Revoked Certificates
+
+   When there are no revoked certificates, the revoked certificates list
+   MUST be absent.  Otherwise, revoked certificates are listed by their
+   serial numbers.  Certificates revoked by the CA are uniquely
+   identified by the certificate serial number.  The date on which the
+   revocation occurred is specified.  The time for revocationDate MUST
+   be expressed as described in section 5.1.2.4. Additional information
+   may be supplied in CRL entry extensions; CRL entry extensions are
+   discussed in section 5.3.
+
+5.1.2.7  Extensions
+
+   This field may only appear if the version is 2 (section 5.1.2.1).  If
+   present, this field is a sequence of one or more CRL extensions.  CRL
+   extensions are discussed in section 5.2.
+
+5.2  CRL Extensions
+
+   The extensions defined by ANSI X9, ISO/IEC, and ITU-T for X.509 v2
+   CRLs [X.509] [X9.55] provide methods for associating additional
+   attributes with CRLs.  The X.509 v2 CRL format also allows
+   communities to define private extensions to carry information unique
+   to those communities.  Each extension in a CRL may be designated as
+
+
+
+Housley, et. al.            Standards Track                    [Page 53]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   critical or non-critical.  A CRL validation MUST fail if it
+   encounters a critical extension which it does not know how to
+   process.  However, an unrecognized non-critical extension may be
+   ignored.  The following subsections present those extensions used
+   within Internet CRLs.  Communities may elect to include extensions in
+   CRLs which are not defined in this specification.  However, caution
+   should be exercised in adopting any critical extensions in CRLs which
+   might be used in a general context.
+
+   Conforming CRL issuers are REQUIRED to include the authority key
+   identifier (section 5.2.1) and the CRL number (section 5.2.3)
+   extensions in all CRLs issued.
+
+5.2.1  Authority Key Identifier
+
+   The authority key identifier extension provides a means of
+   identifying the public key corresponding to the private key used to
+   sign a CRL.  The identification can be based on either the key
+   identifier (the subject key identifier in the CRL signer's
+   certificate) or on the issuer name and serial number.  This extension
+   is especially useful where an issuer has more than one signing key,
+   either due to multiple concurrent key pairs or due to changeover.
+
+   Conforming CRL issuers MUST use the key identifier method, and MUST
+   include this extension in all CRLs issued.
+
+   The syntax for this CRL extension is defined in section 4.2.1.1.
+
+5.2.2  Issuer Alternative Name
+
+   The issuer alternative names extension allows additional identities
+   to be associated with the issuer of the CRL.  Defined options include
+   an rfc822 name (electronic mail address), a DNS name, an IP address,
+   and a URI.  Multiple instances of a name and multiple name forms may
+   be included.  Whenever such identities are used, the issuer
+   alternative name extension MUST be used; however, a DNS name MAY be
+   represented in the issuer field using the domainComponent attribute
+   as described in section 4.1.2.4.
+
+   The issuerAltName extension SHOULD NOT be marked critical.
+
+   The OID and syntax for this CRL extension are defined in section
+   4.2.1.8.
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 54]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+5.2.3  CRL Number
+
+   The CRL number is a non-critical CRL extension which conveys a
+   monotonically increasing sequence number for a given CRL scope and
+   CRL issuer.  This extension allows users to easily determine when a
+   particular CRL supersedes another CRL.  CRL numbers also support the
+   identification of complementary complete CRLs and delta CRLs.  CRL
+   issuers conforming to this profile MUST include this extension in all
+   CRLs.
+
+   If a CRL issuer generates delta CRLs in addition to complete CRLs for
+   a given scope, the complete CRLs and delta CRLs MUST share one
+   numbering sequence.  If a delta CRL and a complete CRL that cover the
+   same scope are issued at the same time, they MUST have the same CRL
+   number and provide the same revocation information.  That is, the
+   combination of the delta CRL and an acceptable complete CRL MUST
+   provide the same revocation information as the simultaneously issued
+   complete CRL.
+
+   If a CRL issuer generates two CRLs (two complete CRLs, two delta
+   CRLs, or a complete CRL and a delta CRL) for the same scope at
+   different times, the two CRLs MUST NOT have the same CRL number.
+   That is, if the this update field (section 5.1.2.4) in the two CRLs
+   are not identical, the CRL numbers MUST be different.
+
+   Given the requirements above, CRL numbers can be expected to contain
+   long integers.  CRL verifiers MUST be able to handle CRLNumber values
+   up to 20 octets.  Conformant CRL issuers MUST NOT use CRLNumber
+   values longer than 20 octets.
+
+   id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
+
+   CRLNumber ::= INTEGER (0..MAX)
+
+5.2.4  Delta CRL Indicator
+
+   The delta CRL indicator is a critical CRL extension that identifies a
+   CRL as being a delta CRL.  Delta CRLs contain updates to revocation
+   information previously distributed, rather than all the information
+   that would appear in a complete CRL.  The use of delta CRLs can
+   significantly reduce network load and processing time in some
+   environments.  Delta CRLs are generally smaller than the CRLs they
+   update, so applications that obtain delta CRLs consume less network
+   bandwidth than applications that obtain the corresponding complete
+   CRLs.  Applications which store revocation information in a format
+   other than the CRL structure can add new revocation information to
+   the local database without reprocessing information.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 55]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The delta CRL indicator extension contains the single value of type
+   BaseCRLNumber.  The CRL number identifies the CRL, complete for a
+   given scope, that was used as the starting point in the generation of
+   this delta CRL.  A conforming CRL issuer MUST publish the referenced
+   base CRL as a complete CRL.  The delta CRL contains all updates to
+   the revocation status for that same scope.  The combination of a
+   delta CRL plus the referenced base CRL is equivalent to a complete
+   CRL, for the applicable scope, at the time of publication of the
+   delta CRL.
+
+   When a conforming CRL issuer generates a delta CRL, the delta CRL
+   MUST include a critical delta CRL indicator extension.
+
+   When a delta CRL is issued, it MUST cover the same set of reasons and
+   the same set of certificates that were covered by the base CRL it
+   references.  That is, the scope of the delta CRL MUST be the same as
+   the scope of the complete CRL referenced as the base.  The referenced
+   base CRL and the delta CRL MUST omit the issuing distribution point
+   extension or contain identical issuing distribution point extensions.
+   Further, the CRL issuer MUST use the same private key to sign the
+   delta CRL and any complete CRL that it can be used to update.
+
+   An application that supports delta CRLs can construct a CRL that is
+   complete for a given scope by combining a delta CRL for that scope
+   with either an issued CRL that is complete for that scope or a
+   locally constructed CRL that is complete for that scope.
+
+   When a delta CRL is combined with a complete CRL or a locally
+   constructed CRL, the resulting locally constructed CRL has the CRL
+   number specified in the CRL number extension found in the delta CRL
+   used in its construction.  In addition, the resulting locally
+   constructed CRL has the thisUpdate and nextUpdate times specified in
+   the corresponding fields of the delta CRL used in its construction.
+   In addition, the locally constructed CRL inherits the issuing
+   distribution point from the delta CRL.
+
+   A complete CRL and a delta CRL MAY be combined if the following four
+   conditions are satisfied:
+
+      (a)  The complete CRL and delta CRL have the same issuer.
+
+      (b)  The complete CRL and delta CRL have the same scope.  The two
+      CRLs have the same scope if either of the following conditions are
+      met:
+
+         (1)  The issuingDistributionPoint extension is omitted from
+         both the complete CRL and the delta CRL.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 56]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+         (2)  The issuingDistributionPoint extension is present in both
+         the complete CRL and the delta CRL, and the values for each of
+         the fields in the extensions are the same in both CRLs.
+
+      (c)  The CRL number of the complete CRL is equal to or greater
+      than the BaseCRLNumber specified in the delta CRL.  That is, the
+      complete CRL contains (at a minimum) all the revocation
+      information held by the referenced base CRL.
+
+      (d)  The CRL number of the complete CRL is less than the CRL
+      number of the delta CRL.  That is, the delta CRL follows the
+      complete CRL in the numbering sequence.
+
+   CRL issuers MUST ensure that the combination of a delta CRL and any
+   appropriate complete CRL accurately reflects the current revocation
+   status.  The CRL issuer MUST include an entry in the delta CRL for
+   each certificate within the scope of the delta CRL whose status has
+   changed since the generation of the referenced base CRL:
+
+      (a)  If the certificate is revoked for a reason included in the
+      scope of the CRL, list the certificate as revoked.
+
+      (b)  If the certificate is valid and was listed on the referenced
+      base CRL or any subsequent CRL with reason code certificateHold,
+      and the reason code certificateHold is included in the scope of
+      the CRL, list the certificate with the reason code removeFromCRL.
+
+      (c)  If the certificate is revoked for a reason outside the scope
+      of the CRL, but the certificate was listed on the referenced base
+      CRL or any subsequent CRL with a reason code included in the scope
+      of this CRL, list the certificate as revoked but omit the reason
+      code.
+
+      (d)  If the certificate is revoked for a reason outside the scope
+      of the CRL and the certificate was neither listed on the
+      referenced base CRL nor any subsequent CRL with a reason code
+      included in the scope of this CRL, do not list the certificate on
+      this CRL.
+
+   The status of a certificate is considered to have changed if it is
+   revoked, placed on hold, released from hold, or if its revocation
+   reason changes.
+
+   It is appropriate to list a certificate with reason code
+   removeFromCRL on a delta CRL even if the certificate was not on hold
+   in the referenced base CRL.  If the certificate was placed on hold in
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 57]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   any CRL issued after the base but before this delta CRL and then
+   released from hold, it MUST be listed on the delta CRL with
+   revocation reason removeFromCRL.
+
+   A CRL issuer MAY optionally list a certificate on a delta CRL with
+   reason code removeFromCRL if the notAfter time specified in the
+   certificate precedes the thisUpdate time specified in the delta CRL
+   and the certificate was listed on the referenced base CRL or in any
+   CRL issued after the base but before this delta CRL.
+
+   If a certificate revocation notice first appears on a delta CRL, then
+   it is possible for the certificate validity period to expire before
+   the next complete CRL for the same scope is issued.  In this case,
+   the revocation notice MUST be included in all subsequent delta CRLs
+   until the revocation notice is included on at least one explicitly
+   issued complete CRL for this scope.
+
+   An application that supports delta CRLs MUST be able to construct a
+   current complete CRL by combining a previously issued complete CRL
+   and the most current delta CRL.  An application that supports delta
+   CRLs MAY also be able to construct a current complete CRL by
+   combining a previously locally constructed complete CRL and the
+   current delta CRL.  A delta CRL is considered to be the current one
+   if the current time is between the times contained in the thisUpdate
+   and nextUpdate fields.  Under some circumstances, the CRL issuer may
+   publish one or more delta CRLs before indicated by the nextUpdate
+   field.  If more than one current delta CRL for a given scope is
+   encountered, the application SHOULD consider the one with the latest
+   value in thisUpdate to be the most current one.
+
+   id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
+
+   BaseCRLNumber ::= CRLNumber
+
+5.2.5  Issuing Distribution Point
+
+   The issuing distribution point is a critical CRL extension that
+   identifies the CRL distribution point and scope for a particular CRL,
+   and it indicates whether the CRL covers revocation for end entity
+   certificates only, CA certificates only, attribute certificates only,
+
+   or a limited set of reason codes.  Although the extension is
+   critical, conforming implementations are not required to support this
+   extension.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 58]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The CRL is signed using the CRL issuer's private key.  CRL
+   Distribution Points do not have their own key pairs.  If the CRL is
+   stored in the X.500 Directory, it is stored in the Directory entry
+   corresponding to the CRL distribution point, which may be different
+   than the Directory entry of the CRL issuer.
+
+   The reason codes associated with a distribution point MUST be
+   specified in onlySomeReasons.  If onlySomeReasons does not appear,
+   the distribution point MUST contain revocations for all reason codes.
+   CAs may use CRL distribution points to partition the CRL on the basis
+   of compromise and routine revocation.  In this case, the revocations
+   with reason code keyCompromise (1), cACompromise (2), and
+   aACompromise (8) appear in one distribution point, and the
+   revocations with other reason codes appear in another distribution
+   point.
+
+   If the distributionPoint field is present and contains a URI, the
+   following semantics MUST be assumed: the object is a pointer to the
+   most current CRL issued by this CRL issuer.  The URI schemes ftp,
+   http, mailto [RFC1738] and ldap [RFC1778] are defined for this
+   purpose.  The URI MUST be an absolute pathname, not a relative
+   pathname, and MUST specify the host.
+
+   If the distributionPoint field is absent, the CRL MUST contain
+   entries for all revoked unexpired certificates issued by the CRL
+   issuer, if any, within the scope of the CRL.
+
+   The CRL issuer MUST assert the indirectCRL boolean, if the scope of
+   the CRL includes certificates issued by authorities other than the
+   CRL issuer.  The authority responsible for each entry is indicated by
+   the certificate issuer CRL entry extension (section 5.3.4).
+
+   id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
+
+   issuingDistributionPoint ::= SEQUENCE {
+        distributionPoint          [0] DistributionPointName OPTIONAL,
+        onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE,
+        onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE,
+        onlySomeReasons            [3] ReasonFlags OPTIONAL,
+        indirectCRL                [4] BOOLEAN DEFAULT FALSE,
+        onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
+
+5.2.6  Freshest CRL (a.k.a. Delta CRL Distribution Point)
+
+   The freshest CRL extension identifies how delta CRL information for
+   this complete CRL is obtained.  The extension MUST be non-critical.
+   This extension MUST NOT appear in delta CRLs.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 59]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The same syntax is used for this extension as the
+   cRLDistributionPoints certificate extension, and is described in
+   section 4.2.1.14.  However, only the distribution point field is
+   meaningful in this context.  The reasons and CRLIssuer fields MUST be
+   omitted from this CRL extension.
+
+   Each distribution point name provides the location at which a delta
+   CRL for this complete CRL can be found.  The scope of these delta
+   CRLs MUST be the same as the scope of this complete CRL.  The
+   contents of this CRL extension are only used to locate delta CRLs;
+   the contents are not used to validate the CRL or the referenced delta
+   CRLs.  The encoding conventions defined for distribution points in
+   section 4.2.1.14 apply to this extension.
+
+   id-ce-freshestCRL OBJECT IDENTIFIER ::=  { id-ce 46 }
+
+   FreshestCRL ::= CRLDistributionPoints
+
+5.3  CRL Entry Extensions
+
+   The CRL entry extensions defined by ISO/IEC, ITU-T, and ANSI X9 for
+   X.509 v2 CRLs provide methods for associating additional attributes
+   with CRL entries [X.509] [X9.55].  The X.509 v2 CRL format also
+   allows communities to define private CRL entry extensions to carry
+   information unique to those communities.  Each extension in a CRL
+   entry may be designated as critical or non-critical.  A CRL
+   validation MUST fail if it encounters a critical CRL entry extension
+   which it does not know how to process.  However, an unrecognized non-
+   critical CRL entry extension may be ignored.  The following
+   subsections present recommended extensions used within Internet CRL
+   entries and standard locations for information.  Communities may
+   elect to use additional CRL entry extensions; however, caution should
+   be exercised in adopting any critical extensions in CRL entries which
+   might be used in a general context.
+
+   All CRL entry extensions used in this specification are non-critical.
+   Support for these extensions is optional for conforming CRL issuers
+   and applications.  However, CRL issuers SHOULD include reason codes
+   (section 5.3.1) and invalidity dates (section 5.3.3) whenever this
+   information is available.
+
+5.3.1  Reason Code
+
+   The reasonCode is a non-critical CRL entry extension that identifies
+   the reason for the certificate revocation.  CRL issuers are strongly
+   encouraged to include meaningful reason codes in CRL entries;
+   however, the reason code CRL entry extension SHOULD be absent instead
+   of using the unspecified (0) reasonCode value.
+
+
+
+Housley, et. al.            Standards Track                    [Page 60]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 }
+
+   -- reasonCode ::= { CRLReason }
+
+   CRLReason ::= ENUMERATED {
+        unspecified             (0),
+        keyCompromise           (1),
+        cACompromise            (2),
+        affiliationChanged      (3),
+        superseded              (4),
+        cessationOfOperation    (5),
+        certificateHold         (6),
+        removeFromCRL           (8),
+        privilegeWithdrawn      (9),
+        aACompromise           (10) }
+
+5.3.2  Hold Instruction Code
+
+   The hold instruction code is a non-critical CRL entry extension that
+   provides a registered instruction identifier which indicates the
+   action to be taken after encountering a certificate that has been
+   placed on hold.
+
+   id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
+
+   holdInstructionCode ::= OBJECT IDENTIFIER
+
+   The following instruction codes have been defined.  Conforming
+   applications that process this extension MUST recognize the following
+   instruction codes.
+
+   holdInstruction    OBJECT IDENTIFIER ::=
+                    { iso(1) member-body(2) us(840) x9-57(10040) 2 }
+
+   id-holdinstruction-none   OBJECT IDENTIFIER ::= {holdInstruction 1}
+   id-holdinstruction-callissuer
+                             OBJECT IDENTIFIER ::= {holdInstruction 2}
+   id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3}
+
+   Conforming applications which encounter an id-holdinstruction-
+   callissuer MUST call the certificate issuer or reject the
+   certificate.  Conforming applications which encounter an id-
+   holdinstruction-reject MUST reject the certificate.  The hold
+   instruction id-holdinstruction-none is semantically equivalent to the
+   absence of a holdInstructionCode, and its use is strongly deprecated
+   for the Internet PKI.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 61]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+5.3.3  Invalidity Date
+
+   The invalidity date is a non-critical CRL entry extension that
+   provides the date on which it is known or suspected that the private
+   key was compromised or that the certificate otherwise became invalid.
+   This date may be earlier than the revocation date in the CRL entry,
+   which is the date at which the CA processed the revocation.  When a
+   revocation is first posted by a CRL issuer in a CRL, the invalidity
+   date may precede the date of issue of earlier CRLs, but the
+   revocation date SHOULD NOT precede the date of issue of earlier CRLs.
+   Whenever this information is available, CRL issuers are strongly
+   encouraged to share it with CRL users.
+
+   The GeneralizedTime values included in this field MUST be expressed
+   in Greenwich Mean Time (Zulu), and MUST be specified and interpreted
+   as defined in section 4.1.2.5.2.
+
+   id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
+
+   invalidityDate ::=  GeneralizedTime
+
+5.3.4  Certificate Issuer
+
+   This CRL entry extension identifies the certificate issuer associated
+   with an entry in an indirect CRL, that is, a CRL that has the
+   indirectCRL indicator set in its issuing distribution point
+   extension.  If this extension is not present on the first entry in an
+   indirect CRL, the certificate issuer defaults to the CRL issuer.  On
+   subsequent entries in an indirect CRL, if this extension is not
+   present, the certificate issuer for the entry is the same as that for
+   the preceding entry.  This field is defined as follows:
+
+   id-ce-certificateIssuer   OBJECT IDENTIFIER ::= { id-ce 29 }
+
+   certificateIssuer ::=     GeneralNames
+
+   If used by conforming CRL issuers, this extension MUST always be
+   critical.  If an implementation ignored this extension it could not
+   correctly attribute CRL entries to certificates.  This specification
+   RECOMMENDS that implementations recognize this extension.
+
+6  Certification Path Validation
+
+   Certification path validation procedures for the Internet PKI are
+   based on the algorithm supplied in [X.509].  Certification path
+   processing verifies the binding between the subject distinguished
+   name and/or subject alternative name and subject public key.  The
+   binding is limited by constraints which are specified in the
+
+
+
+Housley, et. al.            Standards Track                    [Page 62]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   certificates which comprise the path and inputs which are specified
+   by the relying party.  The basic constraints and policy constraints
+   extensions allow the certification path processing logic to automate
+   the decision making process.
+
+   This section describes an algorithm for validating certification
+   paths.  Conforming implementations of this specification are not
+   required to implement this algorithm, but MUST provide functionality
+   equivalent to the external behavior resulting from this procedure.
+   Any algorithm may be used by a particular implementation so long as
+   it derives the correct result.
+
+   In section 6.1, the text describes basic path validation.  Valid
+   paths begin with certificates issued by a trust anchor.  The
+   algorithm requires the public key of the CA, the CA's name, and any
+   constraints upon the set of paths which may be validated using this
+   key.
+
+   The selection of a trust anchor is a matter of policy: it could be
+   the top CA in a hierarchical PKI; the CA that issued the verifier's
+   own certificate(s); or any other CA in a network PKI.  The path
+   validation procedure is the same regardless of the choice of trust
+   anchor.  In addition, different applications may rely on different
+   trust anchor, or may accept paths that begin with any of a set of
+   trust anchor.
+
+   Section 6.2 describes methods for using the path validation algorithm
+   in specific implementations.  Two specific cases are discussed: the
+   case where paths may begin with one of several trusted CAs; and where
+   compatibility with the PEM architecture is required.
+
+   Section 6.3 describes the steps necessary to determine if a
+   certificate is revoked or on hold status when CRLs are the revocation
+   mechanism used by the certificate issuer.
+
+6.1  Basic Path Validation
+
+   This text describes an algorithm for X.509 path processing.  A
+   conformant implementation MUST include an X.509 path processing
+   procedure that is functionally equivalent to the external behavior of
+   this algorithm.  However, support for some of the certificate
+   extensions processed in this algorithm are OPTIONAL for compliant
+   implementations.  Clients that do not support these extensions MAY
+   omit the corresponding steps in the path validation algorithm.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 63]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   For example, clients are NOT REQUIRED to support the policy mapping
+   extension.  Clients that do not support this extension MAY omit the
+   path validation steps where policy mappings are processed.  Note that
+   clients MUST reject the certificate if it contains an unsupported
+   critical extension.
+
+   The algorithm presented in this section validates the certificate
+   with respect to the current date and time.  A conformant
+   implementation MAY also support validation with respect to some point
+   in the past.  Note that mechanisms are not available for validating a
+   certificate with respect to a time outside the certificate validity
+   period.
+
+   The trust anchor is an input to the algorithm.  There is no
+   requirement that the same trust anchor be used to validate all
+   certification paths.  Different trust anchors MAY be used to validate
+   different paths, as discussed further in Section 6.2.
+
+   The primary goal of path validation is to verify the binding between
+   a subject distinguished name or a subject alternative name and
+   subject public key, as represented in the end entity certificate,
+   based on the public key of the trust anchor.  This requires obtaining
+   a sequence of certificates that support that binding.  The procedure
+   performed to obtain this sequence of certificates is outside the
+   scope of this specification.
+
+   To meet this goal, the path validation process verifies, among other
+   things, that a prospective certification path (a sequence of n
+   certificates) satisfies the following conditions:
+
+      (a)  for all x in {1, ..., n-1}, the subject of certificate x is
+      the issuer of certificate x+1;
+
+      (b)  certificate 1 is issued by the trust anchor;
+
+      (c)  certificate n is the certificate to be validated; and
+
+      (d)  for all x in {1, ..., n}, the certificate was valid at the
+      time in question.
+
+   When the trust anchor is provided in the form of a self-signed
+   certificate, this self-signed certificate is not included as part of
+   the prospective certification path.  Information about trust anchors
+   are provided as inputs to the certification path validation algorithm
+   (section 6.1.1).
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 64]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   A particular certification path may not, however, be appropriate for
+   all applications.  Therefore, an application MAY augment this
+   algorithm to further limit the set of valid paths.  The path
+   validation process also determines the set of certificate policies
+   that are valid for this path, based on the certificate policies
+   extension, policy mapping extension, policy constraints extension,
+   and inhibit any-policy extension.  To achieve this, the path
+   validation algorithm constructs a valid policy tree.  If the set of
+   certificate policies that are valid for this path is not empty, then
+   the result will be a valid policy tree of depth n, otherwise the
+   result will be a null valid policy tree.
+
+   A certificate is self-issued if the DNs that appear in the subject
+   and issuer fields are identical and are not empty.  In general, the
+   issuer and subject of the certificates that make up a path are
+   different for each certificate.  However, a CA may issue a
+   certificate to itself to support key rollover or changes in
+   certificate policies.  These self-issued certificates are not counted
+   when evaluating path length or name constraints.
+
+   This section presents the algorithm in four basic steps: (1)
+   initialization, (2) basic certificate processing, (3) preparation for
+   the next certificate, and (4) wrap-up.  Steps (1) and (4) are
+   performed exactly once.  Step (2) is performed for all certificates
+   in the path.  Step (3) is performed for all certificates in the path
+   except the final certificate.  Figure 2 provides a high-level
+   flowchart of this algorithm.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 65]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+                           +-------+
+                           | START |
+                           +-------+
+                               |
+                               V
+                       +----------------+
+                       | Initialization |
+                       +----------------+
+                               |
+                               +<--------------------+
+                               |                     |
+                               V                     |
+                       +----------------+            |
+                       |  Process Cert  |            |
+                       +----------------+            |
+                               |                     |
+                               V                     |
+                       +================+            |
+                       |  IF Last Cert  |            |
+                       |    in Path     |            |
+                       +================+            |
+                         |            |              |
+                    THEN |            | ELSE         |
+                         V            V              |
+              +----------------+ +----------------+  |
+              |    Wrap up     | |  Prepare for   |  |
+              +----------------+ |   Next Cert    |  |
+                      |          +----------------+  |
+                      V               |              |
+                  +-------+           +--------------+
+                  | STOP  |
+                  +-------+
+
+
+         Figure 2.  Certification Path Processing Flowchart
+
+6.1.1  Inputs
+
+   This algorithm assumes the following seven inputs are provided to the
+   path processing logic:
+
+      (a)  a prospective certification path of length n.
+
+      (b)  the current date/time.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 66]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (c)  user-initial-policy-set:  A set of certificate policy
+      identifiers naming the policies that are acceptable to the
+      certificate user.  The user-initial-policy-set contains the
+      special value any-policy if the user is not concerned about
+      certificate policy.
+
+      (d)  trust anchor information, describing a CA that serves as a
+      trust anchor for the certification path.  The trust anchor
+      information includes:
+
+         (1)  the trusted issuer name,
+
+         (2)  the trusted public key algorithm,
+
+         (3)  the trusted public key, and
+
+         (4)  optionally, the trusted public key parameters associated
+         with the public key.
+
+      The trust anchor information may be provided to the path
+      processing procedure in the form of a self-signed certificate.
+      The trusted anchor information is trusted because it was delivered
+      to the path processing procedure by some trustworthy out-of-band
+      procedure.  If the trusted public key algorithm requires
+      parameters, then the parameters are provided along with the
+      trusted public key.
+
+      (e) initial-policy-mapping-inhibit, which indicates if policy
+      mapping is allowed in the certification path.
+
+      (f) initial-explicit-policy, which indicates if the path must be
+      valid for at least one of the certificate policies in the user-
+      initial-policy-set.
+
+      (g) initial-any-policy-inhibit, which indicates whether the
+      anyPolicy OID should be processed if it is included in a
+      certificate.
+
+6.1.2  Initialization
+
+   This initialization phase establishes eleven state variables based
+   upon the seven inputs:
+
+      (a)  valid_policy_tree:  A tree of certificate policies with their
+      optional qualifiers; each of the leaves of the tree represents a
+      valid policy at this stage in the certification path validation.
+      If valid policies exist at this stage in the certification path
+      validation, the depth of the tree is equal to the number of
+
+
+
+Housley, et. al.            Standards Track                    [Page 67]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      certificates in the chain that have been processed.  If valid
+      policies do not exist at this stage in the certification path
+      validation, the tree is set to NULL.  Once the tree is set to
+      NULL, policy processing ceases.
+
+      Each node in the valid_policy_tree includes four data objects: the
+      valid policy, a set of associated policy qualifiers, a set of one
+      or more expected policy values, and a criticality indicator.  If
+      the node is at depth x, the components of the node have the
+      following semantics:
+
+         (1)  The valid_policy is a single policy OID representing a
+         valid policy for the path of length x.
+
+         (2)  The qualifier_set is a set of policy qualifiers associated
+         with the valid policy in certificate x.
+
+         (3)  The criticality_indicator indicates whether the
+         certificate policy extension in certificate x was marked as
+         critical.
+
+         (4)  The expected_policy_set contains one or more policy OIDs
+         that would satisfy this policy in the certificate x+1.
+
+      The initial value of the valid_policy_tree is a single node with
+      valid_policy anyPolicy, an empty qualifier_set, an
+      expected_policy_set with the single value anyPolicy, and a
+      criticality_indicator of FALSE.  This node is considered to be at
+      depth zero.
+
+      Figure 3 is a graphic representation of the initial state of the
+      valid_policy_tree.  Additional figures will use this format to
+      describe changes in the valid_policy_tree during path processing.
+
+              +----------------+
+              |   anyPolicy    |   <---- valid_policy
+              +----------------+
+              |       {}       |   <---- qualifier_set
+              +----------------+
+              |     FALSE      |   <---- criticality_indicator
+              +----------------+
+              |  {anyPolicy}   |   <---- expected_policy_set
+              +----------------+
+
+      Figure 3.  Initial value of the valid_policy_tree state variable
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 68]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (b) permitted_subtrees:  A set of root names for each name type
+      (e.g., X.500 distinguished names, email addresses, or ip
+      addresses) defining a set of subtrees within which all subject
+      names in subsequent certificates in the certification path MUST
+      fall.  This variable includes a set for each name type: the
+      initial value for the set for Distinguished Names is the set of
+      all Distinguished names; the initial value for the set of RFC822
+      names is the set of all RFC822 names, etc.
+
+      (c) excluded_subtrees:  A set of root names for each name type
+      (e.g., X.500 distinguished names, email addresses, or ip
+      addresses) defining a set of subtrees within which no subject name
+      in subsequent certificates in the certification path may fall.
+      This variable includes a set for each name type, and the initial
+      value for each set is empty.
+
+      (d) explicit_policy: an integer which indicates if a non-NULL
+      valid_policy_tree is required. The integer indicates the number of
+      non-self-issued certificates to be processed before this
+      requirement is imposed.  Once set, this variable may be decreased,
+      but may not be increased. That is, if a certificate in the path
+      requires a non-NULL valid_policy_tree, a later certificate can not
+      remove this requirement. If initial-explicit-policy is set, then
+      the initial value is 0, otherwise the initial value is n+1.
+
+      (e) inhibit_any-policy: an integer which indicates whether the
+      anyPolicy policy identifier is considered a match. The integer
+      indicates the number of non-self-issued certificates to be
+      processed before the anyPolicy OID, if asserted in a certificate,
+      is ignored. Once set, this variable may be decreased, but may not
+      be increased. That is, if a certificate in the path inhibits
+      processing of anyPolicy, a later certificate can not permit it.
+      If initial-any-policy-inhibit is set, then the initial value is 0,
+      otherwise the initial value is n+1.
+
+      (f) policy_mapping: an integer which indicates if policy mapping
+      is permitted.  The integer indicates the number of non-self-issued
+      certificates to be processed before policy mapping is inhibited.
+      Once set, this variable may be decreased, but may not be
+      increased. That is, if a certificate in the path specifies policy
+      mapping is not permitted, it can not be overridden by a later
+      certificate. If initial-policy-mapping-inhibit is set, then the
+      initial value is 0, otherwise the initial value is n+1.
+
+      (g) working_public_key_algorithm: the digital signature algorithm
+      used to verify the signature of a certificate.  The
+      working_public_key_algorithm is initialized from the trusted
+      public key algorithm provided in the trust anchor information.
+
+
+
+Housley, et. al.            Standards Track                    [Page 69]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (h) working_public_key: the public key used to verify the
+      signature of a certificate.  The working_public_key is initialized
+      from the trusted public key provided in the trust anchor
+      information.
+
+      (i) working_public_key_parameters:  parameters associated with the
+      current public key, that may be required to verify a signature
+      (depending upon the algorithm).  The working_public_key_parameters
+      variable is initialized from the trusted public key parameters
+      provided in the trust anchor information.
+
+      (j) working_issuer_name:  the issuer distinguished name expected
+      in the next certificate in the chain.  The working_issuer_name is
+      initialized to the trusted issuer provided in the trust anchor
+      information.
+
+      (k) max_path_length:  this integer is initialized to n, is
+      decremented for each non-self-issued certificate in the path, and
+      may be reduced to the value in the path length constraint field
+      within the basic constraints extension of a CA certificate.
+
+   Upon completion of the initialization steps, perform the basic
+   certificate processing steps specified in 6.1.3.
+
+6.1.3  Basic Certificate Processing
+
+   The basic path processing actions to be performed for certificate i
+   (for all i in [1..n]) are listed below.
+
+      (a)  Verify the basic certificate information.  The certificate
+      MUST satisfy each of the following:
+
+         (1)  The certificate was signed with the
+         working_public_key_algorithm using the working_public_key and
+         the working_public_key_parameters.
+
+         (2)  The certificate validity period includes the current time.
+
+         (3)  At the current time, the certificate is not revoked and is
+         not on hold status.  This may be determined by obtaining the
+         appropriate CRL (section 6.3), status information, or by out-
+         of-band mechanisms.
+
+         (4)  The certificate issuer name is the working_issuer_name.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 70]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (b)  If certificate i is self-issued and it is not the final
+      certificate in the path, skip this step for certificate i.
+      Otherwise, verify that the subject name is within one of the
+      permitted_subtrees for X.500 distinguished names, and verify that
+      each of the alternative names in the subjectAltName extension
+      (critical or non-critical) is within one of the permitted_subtrees
+      for that name type.
+
+      (c)  If certificate i is self-issued and it is not the final
+      certificate in the path, skip this step for certificate i.
+      Otherwise, verify that the subject name is not within one of the
+      excluded_subtrees for X.500 distinguished names, and verify that
+      each of the alternative names in the subjectAltName extension
+      (critical or non-critical) is not within one of the
+      excluded_subtrees for that name type.
+
+      (d)  If the certificate policies extension is present in the
+      certificate and the valid_policy_tree is not NULL, process the
+      policy information by performing the following steps in order:
+
+         (1)  For each policy P not equal to anyPolicy in the
+         certificate policies extension, let P-OID denote the OID in
+         policy P and P-Q denote the qualifier set for policy P.
+         Perform the following steps in order:
+
+            (i)  If the valid_policy_tree includes a node of depth i-1
+            where P-OID is in the expected_policy_set, create a child
+            node as follows: set the valid_policy to OID-P; set the
+            qualifier_set to P-Q, and set the expected_policy_set to
+            {P-OID}.
+
+            For example, consider a valid_policy_tree with a node of
+            depth i-1 where the expected_policy_set is {Gold, White}.
+            Assume the certificate policies Gold and Silver appear in
+            the certificate policies extension of certificate i.  The
+            Gold policy is matched but the Silver policy is not.  This
+            rule will generate a child node of depth i for the Gold
+            policy. The result is shown as Figure 4.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 71]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+                             +-----------------+
+                             |       Red       |
+                             +-----------------+
+                             |       {}        |
+                             +-----------------+   node of depth i-1
+                             |      FALSE      |
+                             +-----------------+
+                             |  {Gold, White}  |
+                             +-----------------+
+                                      |
+                                      |
+                                      |
+                                      V
+                             +-----------------+
+                             |      Gold       |
+                             +-----------------+
+                             |       {}        |
+                             +-----------------+ node of depth i
+                             |  uninitialized  |
+                             +-----------------+
+                             |     {Gold}      |
+                             +-----------------+
+
+                    Figure 4.  Processing an exact match
+
+            (ii)  If there was no match in step (i) and the
+            valid_policy_tree includes a node of depth i-1 with the
+            valid policy anyPolicy, generate a child node with the
+            following values: set the valid_policy to P-OID; set the
+            qualifier_set to P-Q, and set the expected_policy_set to
+            {P-OID}.
+
+            For example, consider a valid_policy_tree with a node of
+            depth i-1 where the valid_policy is anyPolicy.  Assume the
+            certificate policies Gold and Silver appear in the
+            certificate policies extension of certificate i.  The Gold
+            policy does not have a qualifier, but the Silver policy has
+            the qualifier Q-Silver.  If Gold and Silver were not matched
+            in (i) above, this rule will generate two child nodes of
+            depth i, one for each policy.  The result is shown as Figure
+            5.
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 72]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+                             +-----------------+
+                             |    anyPolicy    |
+                             +-----------------+
+                             |       {}        |
+                             +-----------------+ node of depth i-1
+                             |      FALSE      |
+                             +-----------------+
+                             |   {anyPolicy}   |
+                             +-----------------+
+                                /           \
+                               /             \
+                              /               \
+                             /                 \
+               +-----------------+          +-----------------+
+               |      Gold       |          |     Silver      |
+               +-----------------+          +-----------------+
+               |       {}        |          |   {Q-Silver}    |
+               +-----------------+ nodes of +-----------------+
+               | uninitialized   | depth i  | uninitialized   |
+               +-----------------+          +-----------------+
+               |     {Gold}      |          |    {Silver}     |
+               +-----------------+          +-----------------+
+
+               Figure 5.  Processing unmatched policies when a leaf node
+               specifies anyPolicy
+
+         (2)  If the certificate policies extension includes the policy
+         anyPolicy with the qualifier set AP-Q and either (a)
+         inhibit_any-policy is greater than 0 or (b) i<n and the
+         certificate is self-issued, then:
+
+         For each node in the valid_policy_tree of depth i-1, for each
+         value in the expected_policy_set (including anyPolicy) that
+         does not appear in a child node, create a child node with the
+         following values: set the valid_policy to the value from the
+         expected_policy_set in the parent node; set the qualifier_set
+         to AP-Q, and set the expected_policy_set to the value in the
+         valid_policy from this node.
+
+         For example, consider a valid_policy_tree with a node of depth
+         i-1 where the expected_policy_set is {Gold, Silver}.  Assume
+         anyPolicy appears in the certificate policies extension of
+         certificate i, but Gold and Silver do not.  This rule will
+         generate two child nodes of depth i, one for each policy.  The
+         result is shown below as Figure 6.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 73]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+                          +-----------------+
+                          |      Red        |
+                          +-----------------+
+                          |       {}        |
+                          +-----------------+ node of depth i-1
+                          |      FALSE      |
+                          +-----------------+
+                          |  {Gold, Silver} |
+                          +-----------------+
+                             /           \
+                            /             \
+                           /               \
+                          /                 \
+            +-----------------+          +-----------------+
+            |      Gold       |          |     Silver      |
+            +-----------------+          +-----------------+
+            |       {}        |          |       {}        |
+            +-----------------+ nodes of +-----------------+
+            |  uninitialized  | depth i  |  uninitialized  |
+            +-----------------+          +-----------------+
+            |     {Gold}      |          |    {Silver}     |
+            +-----------------+          +-----------------+
+
+         Figure 6.  Processing unmatched policies when the certificate
+         policies extension specifies anyPolicy
+
+         (3)  If there is a node in the valid_policy_tree of depth i-1
+         or less without any child nodes, delete that node.  Repeat this
+         step until there are no nodes of depth i-1 or less without
+         children.
+
+         For example, consider the valid_policy_tree shown in Figure 7
+         below.  The two nodes at depth i-1 that are marked with an 'X'
+         have no children, and are deleted.  Applying this rule to the
+         resulting tree will cause the node at depth i-2 that is marked
+         with an 'Y' to be deleted.  The following application of the
+         rule does not cause any nodes to be deleted, and this step is
+         complete.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 74]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+                              +-----------+
+                              |           | node of depth i-3
+                              +-----------+
+                              /     |     \
+                             /      |      \
+                            /       |       \
+                +-----------+ +-----------+ +-----------+
+                |           | |           | |     Y     | nodes of
+                +-----------+ +-----------+ +-----------+ depth i-2
+                /   \               |             |
+               /     \              |             |
+              /       \             |             |
+   +-----------+ +-----------+ +-----------+ +-----------+ nodes of
+   |           | |     X     | |           | |    X      |  depth
+   +-----------+ +-----------+ +-----------+ +-----------+   i-1
+         |                      /    |    \
+         |                     /     |     \
+         |                    /      |      \
+   +-----------+ +-----------+ +-----------+ +-----------+ nodes of
+   |           | |           | |           | |           |  depth
+   +-----------+ +-----------+ +-----------+ +-----------+   i
+
+          Figure 7.  Pruning the valid_policy_tree
+
+         (4)  If the certificate policies extension was marked as
+         critical, set the criticality_indicator in all nodes of depth i
+         to TRUE.  If the certificate policies extension was not marked
+         critical, set the criticality_indicator in all nodes of depth i
+         to FALSE.
+
+      (e)  If the certificate policies extension is not present, set the
+      valid_policy_tree to NULL.
+
+      (f)  Verify that either explicit_policy is greater than 0 or the
+      valid_policy_tree is not equal to NULL;
+
+   If any of steps (a), (b), (c), or (f) fails, the procedure
+   terminates, returning a failure indication and an appropriate reason.
+
+   If i is not equal to n, continue by performing the preparatory steps
+   listed in 6.1.4.  If i is equal to n, perform the wrap-up steps
+   listed in 6.1.5.
+
+6.1.4  Preparation for Certificate i+1
+
+   To prepare for processing of certificate i+1, perform the following
+   steps for certificate i:
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 75]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (a)  If a policy mapping extension is present, verify that the
+      special value anyPolicy does not appear as an issuerDomainPolicy
+      or a subjectDomainPolicy.
+
+      (b)  If a policy mapping extension is present, then for each
+      issuerDomainPolicy ID-P in the policy mapping extension:
+
+         (1)  If the policy_mapping variable is greater than 0, for each
+         node in the valid_policy_tree of depth i where ID-P is the
+         valid_policy, set expected_policy_set to the set of
+         subjectDomainPolicy values that are specified as equivalent to
+         ID-P by the policy mapping extension.
+
+         If no node of depth i in the valid_policy_tree has a
+         valid_policy of ID-P but there is a node of depth i with a
+         valid_policy of anyPolicy, then generate a child node of the
+         node of depth i-1 that has a valid_policy of anyPolicy as
+         follows:
+
+            (i)  set the valid_policy to ID-P;
+
+            (ii)  set the qualifier_set to the qualifier set of the
+            policy anyPolicy in the certificate policies extension of
+            certificate i;
+
+            (iii)  set the criticality_indicator to the criticality of
+            the certificate policies extension of certificate i;
+
+            (iv)  and set the expected_policy_set to the set of
+            subjectDomainPolicy values that are specified as equivalent
+            to ID-P by the policy mappings extension.
+
+         (2)  If the policy_mapping variable is equal to 0:
+
+            (i)  delete each node of depth i in the valid_policy_tree
+            where ID-P is the valid_policy.
+
+            (ii)  If there is a node in the valid_policy_tree of depth
+            i-1 or less without any child nodes, delete that node.
+            Repeat this step until there are no nodes of depth i-1 or
+            less without children.
+
+      (c)  Assign the certificate subject name to working_issuer_name.
+
+      (d)  Assign the certificate subjectPublicKey to
+      working_public_key.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 76]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (e)  If the subjectPublicKeyInfo field of the certificate contains
+      an algorithm field with non-null parameters, assign the parameters
+      to the working_public_key_parameters variable.
+
+      If the subjectPublicKeyInfo field of the certificate contains an
+      algorithm field with null parameters or parameters are omitted,
+      compare the certificate subjectPublicKey algorithm to the
+      working_public_key_algorithm.  If the certificate subjectPublicKey
+      algorithm and the working_public_key_algorithm are different, set
+      the working_public_key_parameters to null.
+
+      (f)  Assign the certificate subjectPublicKey algorithm to the
+      working_public_key_algorithm variable.
+
+      (g)  If a name constraints extension is included in the
+      certificate, modify the permitted_subtrees and excluded_subtrees
+      state variables as follows:
+
+         (1)  If permittedSubtrees is present in the certificate, set
+         the permitted_subtrees state variable to the intersection of
+         its previous value and the value indicated in the extension
+         field.  If permittedSubtrees does not include a particular name
+         type, the permitted_subtrees state variable is unchanged for
+         that name type.  For example, the intersection of nist.gov and
+         csrc.nist.gov is csrc.nist.gov.  And, the intersection of
+         nist.gov and rsasecurity.com is the empty set.
+
+         (2)  If excludedSubtrees is present in the certificate, set the
+         excluded_subtrees state variable to the union of its previous
+         value and the value indicated in the extension field.  If
+         excludedSubtrees does not include a particular name type, the
+         excluded_subtrees state variable is unchanged for that name
+         type.  For example, the union of the name spaces nist.gov and
+         csrc.nist.gov is nist.gov.  And, the union of nist.gov and
+         rsasecurity.com is both name spaces.
+
+      (h)  If the issuer and subject names are not identical:
+
+         (1)  If explicit_policy is not 0, decrement explicit_policy by
+         1.
+
+         (2)  If policy_mapping is not 0, decrement policy_mapping by 1.
+
+         (3)  If inhibit_any-policy is not 0, decrement inhibit_any-
+         policy by 1.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 77]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (i)  If a policy constraints extension is included in the
+      certificate, modify the explicit_policy and policy_mapping state
+      variables as follows:
+
+         (1)  If requireExplicitPolicy is present and is less than
+         explicit_policy, set explicit_policy to the value of
+         requireExplicitPolicy.
+
+         (2)  If inhibitPolicyMapping is present and is less than
+         policy_mapping, set policy_mapping to the value of
+         inhibitPolicyMapping.
+
+      (j)  If the inhibitAnyPolicy extension is included in the
+      certificate and is less than inhibit_any-policy, set inhibit_any-
+      policy to the value of inhibitAnyPolicy.
+
+      (k)  Verify that the certificate is a CA certificate (as specified
+      in a basicConstraints extension or as verified out-of-band).
+
+      (l)  If the certificate was not self-issued, verify that
+      max_path_length is greater than zero and decrement max_path_length
+      by 1.
+
+      (m)  If pathLengthConstraint is present in the certificate and is
+      less than max_path_length, set max_path_length to the value of
+      pathLengthConstraint.
+
+      (n)  If a key usage extension is present, verify that the
+      keyCertSign bit is set.
+
+      (o)  Recognize and process any other critical extension present in
+      the certificate.  Process any other recognized non-critical
+      extension present in the certificate.
+
+   If check (a), (k), (l), (n) or (o) fails, the procedure terminates,
+   returning a failure indication and an appropriate reason.
+
+   If (a), (k), (l), (n) and (o) have completed successfully, increment
+   i and perform the basic certificate processing specified in 6.1.3.
+
+6.1.5  Wrap-up procedure
+
+   To complete the processing of the end entity certificate, perform the
+   following steps for certificate n:
+
+      (a)  If certificate n was not self-issued and explicit_policy is
+      not 0, decrement explicit_policy by 1.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 78]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (b)  If a policy constraints extension is included in the
+      certificate and requireExplicitPolicy is present and has a value
+      of 0, set the explicit_policy state variable to 0.
+
+      (c)  Assign the certificate subjectPublicKey to
+      working_public_key.
+
+      (d)  If the subjectPublicKeyInfo field of the certificate contains
+      an algorithm field with non-null parameters, assign the parameters
+      to the working_public_key_parameters variable.
+
+      If the subjectPublicKeyInfo field of the certificate contains an
+      algorithm field with null parameters or parameters are omitted,
+      compare the certificate subjectPublicKey algorithm to the
+      working_public_key_algorithm.  If the certificate subjectPublicKey
+      algorithm and the working_public_key_algorithm are different, set
+      the working_public_key_parameters to null.
+
+      (e)  Assign the certificate subjectPublicKey algorithm to the
+      working_public_key_algorithm variable.
+
+      (f)  Recognize and process any other critical extension present in
+      the certificate n.  Process any other recognized non-critical
+      extension present in certificate n.
+
+      (g)  Calculate the intersection of the valid_policy_tree and the
+      user-initial-policy-set, as follows:
+
+         (i)  If the valid_policy_tree is NULL, the intersection is
+         NULL.
+
+         (ii)  If the valid_policy_tree is not NULL and the user-
+         initial-policy-set is any-policy, the intersection is the
+         entire valid_policy_tree.
+
+         (iii)  If the valid_policy_tree is not NULL and the user-
+         initial-policy-set is not any-policy, calculate the
+         intersection of the valid_policy_tree and the user-initial-
+         policy-set as follows:
+
+            1.  Determine the set of policy nodes whose parent nodes
+            have a valid_policy of anyPolicy.  This is the
+            valid_policy_node_set.
+
+            2.  If the valid_policy of any node in the
+            valid_policy_node_set is not in the user-initial-policy-set
+            and is not anyPolicy, delete this node and all its children.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 79]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+            3.  If the valid_policy_tree includes a node of depth n with
+            the valid_policy anyPolicy and the user-initial-policy-set
+            is not any-policy perform the following steps:
+
+               a. Set P-Q to the qualifier_set in the node of depth n
+               with valid_policy anyPolicy.
+
+               b. For each P-OID in the user-initial-policy-set that is
+               not the valid_policy of a node in the
+               valid_policy_node_set, create a child node whose parent
+               is the node of depth n-1 with the valid_policy anyPolicy.
+               Set the values in the child node as follows: set the
+               valid_policy to P-OID; set the qualifier_set to P-Q; copy
+               the criticality_indicator from the node of depth n with
+               the valid_policy anyPolicy; and set the
+               expected_policy_set to {P-OID}.
+
+               c.  Delete the node of depth n with the valid_policy
+               anyPolicy.
+
+            4.  If there is a node in the valid_policy_tree of depth n-1
+            or less without any child nodes, delete that node.  Repeat
+            this step until there are no nodes of depth n-1 or less
+            without children.
+
+   If either (1) the value of explicit_policy variable is greater than
+   zero, or (2) the valid_policy_tree is not NULL, then path processing
+   has succeeded.
+
+6.1.6  Outputs
+
+   If path processing succeeds, the procedure terminates, returning a
+   success indication together with final value of the
+   valid_policy_tree, the working_public_key, the
+   working_public_key_algorithm, and the working_public_key_parameters.
+
+6.2  Using the Path Validation Algorithm
+
+   The path validation algorithm describes the process of validating a
+   single certification path.  While each certification path begins with
+   a specific trust anchor, there is no requirement that all
+   certification paths validated by a particular system share a single
+   trust anchor.  An implementation that supports multiple trust anchors
+   MAY augment the algorithm presented in section 6.1 to further limit
+   the set of valid certification paths which begin with a particular
+   trust anchor.  For example, an implementation MAY modify the
+   algorithm to apply name constraints to a specific trust anchor during
+   the initialization phase, or the application MAY require the presence
+
+
+
+Housley, et. al.            Standards Track                    [Page 80]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   of a particular alternative name form in the end entity certificate,
+   or the application MAY impose requirements on application-specific
+   extensions.  Thus, the path validation algorithm presented in section
+   6.1 defines the minimum conditions for a path to be considered valid.
+
+   The selection of one or more trusted CAs is a local decision.  A
+   system may provide any one of its trusted CAs as the trust anchor for
+   a particular path.  The inputs to the path validation algorithm may
+   be different for each path.  The inputs used to process a path may
+   reflect application-specific requirements or limitations in the trust
+   accorded a particular trust anchor.  For example, a trusted CA may
+   only be trusted for a particular certificate policy.  This
+   restriction can be expressed through the inputs to the path
+   validation procedure.
+
+   It is also possible to specify an extended version of the above
+   certification path processing procedure which results in default
+   behavior identical to the rules of PEM [RFC 1422].  In this extended
+   version, additional inputs to the procedure are a list of one or more
+   Policy Certification Authority (PCA) names and an indicator of the
+   position in the certification path where the PCA is expected.  At the
+   nominated PCA position, the CA name is compared against this list.
+   If a recognized PCA name is found, then a constraint of
+   SubordinateToCA is implicitly assumed for the remainder of the
+   certification path and processing continues.  If no valid PCA name is
+   found, and if the certification path cannot be validated on the basis
+   of identified policies, then the certification path is considered
+   invalid.
+
+6.3  CRL Validation
+
+   This section describes the steps necessary to determine if a
+   certificate is revoked or on hold status when CRLs are the revocation
+   mechanism used by the certificate issuer.  Conforming implementations
+   that support CRLs are not required to implement this algorithm, but
+   they MUST be functionally equivalent to the external behavior
+   resulting from this procedure.  Any algorithm may be used by a
+   particular implementation so long as it derives the correct result.
+
+   This algorithm assumes that all of the needed CRLs are available in a
+   local cache.  Further, if the next update time of a CRL has passed,
+   the algorithm assumes a mechanism to fetch a current CRL and place it
+   in the local CRL cache.
+
+   This algorithm defines a set of inputs, a set of state variables, and
+   processing steps that are performed for each certificate in the path.
+   The algorithm output is the revocation status of the certificate.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 81]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+6.3.1  Revocation Inputs
+
+   To support revocation processing, the algorithm requires two inputs:
+
+      (a)  certificate:  The algorithm requires the certificate serial
+      number and issuer name to determine whether a certificate is on a
+      particular CRL.  The basicConstraints extension is used to
+      determine whether the supplied certificate is associated with a CA
+      or an end entity.  If present, the algorithm uses the
+      cRLDistributionsPoint and freshestCRL extensions to determine
+      revocation status.
+
+      (b)  use-deltas:  This boolean input determines whether delta CRLs
+      are applied to CRLs.
+
+      Note that implementations supporting legacy PKIs, such as RFC 1422
+      and X.509 version 1, will need an additional input indicating
+      whether the supplied certificate is associated with a CA or an end
+      entity.
+
+6.3.2  Initialization and Revocation State Variables
+
+   To support CRL processing, the algorithm requires the following state
+   variables:
+
+      (a)  reasons_mask:  This variable contains the set of revocation
+      reasons supported by the CRLs and delta CRLs processed so far.
+      The legal members of the set are the possible revocation reason
+      values: unspecified, keyCompromise, caCompromise,
+      affiliationChanged, superseded, cessationOfOperation,
+      certificateHold, privilegeWithdrawn, and aACompromise.  The
+      special value all-reasons is used to denote the set of all legal
+      members.  This variable is initialized to the empty set.
+
+      (b)  cert_status:  This variable contains the status of the
+      certificate.  This variable may be assigned one of the following
+      values: unspecified, keyCompromise, caCompromise,
+      affiliationChanged, superseded, cessationOfOperation,
+      certificateHold, removeFromCRL, privilegeWithdrawn, aACompromise,
+      the special value UNREVOKED, or the special value UNDETERMINED.
+      This variable is initialized to the special value UNREVOKED.
+
+      (c)  interim_reasons_mask:  This contains the set of revocation
+      reasons supported by the CRL or delta CRL currently being
+      processed.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 82]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   Note: In some environments, it is not necessary to check all reason
+   codes.  For example, some environments are only concerned with
+   caCompromise and keyCompromise for CA certificates.  This algorithm
+   checks all reason codes.  Additional processing and state variables
+   may be necessary to limit the checking to a subset of the reason
+   codes.
+
+6.3.3  CRL Processing
+
+   This algorithm begins by assuming the certificate is not revoked.
+   The algorithm checks one or more CRLs until either the certificate
+   status is determined to be revoked or sufficient CRLs have been
+   checked to cover all reason codes.
+
+   For each distribution point (DP) in the certificate CRL distribution
+   points extension, for each corresponding CRL in the local CRL cache,
+   while ((reasons_mask is not all-reasons) and (cert_status is
+   UNREVOKED)) perform the following:
+
+      (a)  Update the local CRL cache by obtaining a complete CRL, a
+      delta CRL, or both, as required:
+
+         (1)  If the current time is after the value of the CRL next
+         update field, then do one of the following:
+
+            (i)  If use-deltas is set and either the certificate or the
+            CRL contains the freshest CRL extension, obtain a delta CRL
+            with the a next update value that is after the current time
+            and can be used to update the locally cached CRL as
+            specified in section 5.2.4.
+
+            (ii)  Update the local CRL cache with a current complete
+            CRL, verify that the current time is before the next update
+            value in the new CRL, and continue processing with the new
+            CRL.  If use-deltas is set, then obtain the current delta
+            CRL that can be used to update the new locally cached
+            complete CRL as specified in section 5.2.4.
+
+         (2)  If the current time is before the value of the next update
+         field and use-deltas is set, then obtain the current delta CRL
+         that can be used to update the locally cached complete CRL as
+         specified in section 5.2.4.
+
+      (b)  Verify the issuer and scope of the complete CRL as follows:
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 83]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+         (1)  If the DP includes cRLIssuer, then verify that the issuer
+         field in the complete CRL matches cRLIssuer in the DP and that
+         the complete CRL contains an issuing distribution point
+         extension with the indrectCRL boolean asserted.  Otherwise,
+         verify that the CRL issuer matches the certificate issuer.
+
+         (2)  If the complete CRL includes an issuing distribution point
+         (IDP) CRL extension check the following:
+
+            (i)  If the distribution point name is present in the IDP
+            CRL extension and the distribution field is present in the
+            DP, then verify that one of the names in the IDP matches one
+            of the names in the DP.  If the distribution point name is
+            present in the IDP CRL extension and the distribution field
+            is omitted from the DP, then verify that one of the names in
+            the IDP matches one of the names in the cRLIssuer field of
+            the DP.
+
+            (ii)  If the onlyContainsUserCerts boolean is asserted in
+            the IDP CRL extension, verify that the certificate does not
+            include the basic constraints extension with the cA boolean
+            asserted.
+
+            (iii)  If the onlyContainsCACerts boolean is asserted in the
+            IDP CRL extension, verify that the certificate includes the
+            basic constraints extension with the cA boolean asserted.
+
+            (iv)  Verify that the onlyContainsAttributeCerts boolean is
+            not asserted.
+
+      (c)  If use-deltas is set, verify the issuer and scope of the
+      delta CRL as follows:
+
+         (1)  Verify that the delta CRL issuer matches complete CRL
+         issuer.
+
+         (2)  If the complete CRL includes an issuing distribution point
+         (IDP) CRL extension, verify that the delta CRL contains a
+         matching IDP CRL extension.  If the complete CRL omits an IDP
+         CRL extension, verify that the delta CRL also omits an IDP CRL
+         extension.
+
+         (3)  Verify that the delta CRL authority key identifier
+         extension matches complete CRL authority key identifier
+         extension.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 84]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   (d)  Compute the interim_reasons_mask for this CRL as follows:
+
+         (1)  If the issuing distribution point (IDP) CRL extension is
+         present and includes onlySomeReasons and the DP includes
+         reasons, then set interim_reasons_mask to the intersection of
+         reasons in the DP and onlySomeReasons in IDP CRL extension.
+
+         (2)  If the IDP CRL extension includes onlySomeReasons but the
+         DP omits reasons, then set interim_reasons_mask to the value of
+         onlySomeReasons in IDP CRL extension.
+
+         (3)  If the IDP CRL extension is not present or omits
+         onlySomeReasons but the DP includes reasons, then set
+         interim_reasons_mask to the value of DP reasons.
+
+         (4)  If the IDP CRL extension is not present or omits
+         onlySomeReasons and the DP omits reasons, then set
+         interim_reasons_mask to the special value all-reasons.
+
+   (e)  Verify that interim_reasons_mask includes one or more reasons
+   that is not included in the reasons_mask.
+
+   (f)  Obtain and validate the certification path for the complete CRL
+   issuer.  If a key usage extension is present in the CRL issuer's
+   certificate, verify that the cRLSign bit is set.
+
+   (g)  Validate the signature on the complete CRL using the public key
+   validated in step (f).
+
+   (h)  If use-deltas is set, then validate the signature on the delta
+   CRL using the public key validated in step (f).
+
+   (i)  If use-deltas is set, then search for the certificate on the
+   delta CRL.  If an entry is found that matches the certificate issuer
+   and serial number as described in section 5.3.4, then set the
+   cert_status variable to the indicated reason as follows:
+
+         (1)  If the reason code CRL entry extension is present, set the
+         cert_status variable to the value of the reason code CRL entry
+         extension.
+
+         (2)  If the reason code CRL entry extension is not present, set
+         the cert_status variable to the value unspecified.
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 85]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (j)  If (cert_status is UNREVOKED), then search for the
+      certificate on the complete CRL.  If an entry is found that
+      matches the certificate issuer and serial number as described in
+      section 5.3.4, then set the cert_status variable to the indicated
+      reason as described in step (i).
+
+      (k)  If (cert_status is removeFromCRL), then set cert_status to
+      UNREVOKED.
+
+   If ((reasons_mask is all-reasons) OR (cert_status is not UNREVOKED)),
+   then the revocation status has been determined, so return
+   cert_status.
+
+   If the revocation status has not been determined, repeat the process
+   above with any available CRLs not specified in a distribution point
+   but issued by the certificate issuer.  For the processing of such a
+   CRL, assume a DP with both the reasons and the cRLIssuer fields
+   omitted and a distribution point name of the certificate issuer.
+   That is, the sequence of names in fullName is generated from the
+   certificate issuer field as well as the certificate issuerAltName
+   extension.  If the revocation status remains undetermined, then
+   return the cert_status UNDETERMINED.
+
+7  References
+
+   [ISO 10646] ISO/IEC 10646-1:1993.  International Standard --
+               Information technology -- Universal Multiple-Octet Coded
+               Character Set (UCS) -- Part 1: Architecture and Basic
+               Multilingual Plane.
+
+   [RFC 791]   Postel, J.,  "Internet Protocol", STD 5, RFC 791,
+               September 1981.
+
+   [RFC 822]   Crocker, D., "Standard for the format of ARPA Internet
+               text messages", STD 11, RFC 822, August 1982.
+
+   [RFC 1034]  Mockapetris, P., "Domain Names - Concepts and
+               Facilities", STD 13, RFC 1034, November 1987.
+
+   [RFC 1422]  Kent, S., "Privacy Enhancement for Internet Electronic
+               Mail: Part II: Certificate-Based Key Management," RFC
+               1422, February 1993.
+
+   [RFC 1423]  Balenson, D., "Privacy Enhancement for Internet
+               Electronic Mail: Part III: Algorithms, Modes, and
+               Identifiers," RFC 1423, February 1993.
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 86]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   [RFC 1510]  Kohl, J. and C. Neuman, "The Kerberos Network
+               Authentication Service (V5)," RFC 1510, September 1993.
+
+   [RFC 1519]  Fuller, V., T. Li, J. Yu and K. Varadhan, "Classless
+               Inter-Domain Routing (CIDR): An Address Assignment and
+               Aggregation Strategy", RFC 1519, September 1993.
+
+   [RFC 1738]  Berners-Lee, T., L. Masinter and M. McCahill, "Uniform
+               Resource Locators (URL)", RFC 1738, December 1994.
+
+   [RFC 1778]  Howes, T., S. Kille, W. Yeong and C. Robbins, "The String
+               Representation of Standard Attribute Syntaxes," RFC 1778,
+               March 1995.
+
+   [RFC 1883]  Deering, S. and R. Hinden.  "Internet Protocol, Version 6
+               (IPv6) Specification", RFC 1883, December 1995.
+
+   [RFC 2044]  F. Yergeau, F., "UTF-8, a transformation format of
+               Unicode and ISO 10646", RFC 2044, October 1996.
+
+   [RFC 2119]  Bradner, S., "Key words for use in RFCs to Indicate
+               Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+   [RFC 2247]  Kille, S., M. Wahl, A. Grimstad, R. Huber and S.
+               Sataluri, "Using Domains in LDAP/X.500 Distinguished
+               Names", RFC 2247, January 1998.
+
+   [RFC 2252]  Wahl, M., A. Coulbeck, T. Howes and S. Kille,
+               "Lightweight Directory Access Protocol (v3):  Attribute
+               Syntax Definitions", RFC 2252, December 1997.
+
+   [RFC 2277]  Alvestrand, H., "IETF Policy on Character Sets and
+               Languages", BCP 18, RFC 2277, January 1998.
+
+   [RFC 2279]  Yergeau, F., "UTF-8, a transformation format of ISO
+               10646", RFC 2279, January 1998.
+
+   [RFC 2459]  Housley, R., W. Ford, W. Polk and D. Solo, "Internet
+               X.509 Public Key Infrastructure: Certificate and CRL
+               Profile", RFC 2459, January 1999.
+
+   [RFC 2560]  Myers, M., R. Ankney, A. Malpani, S. Galperin and C.
+               Adams, "Online Certificate Status Protocal - OCSP", June
+               1999.
+
+   [SDN.701]   SDN.701, "Message Security Protocol 4.0", Revision A,
+               1997-02-06.
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 87]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   [X.501]     ITU-T Recommendation X.501: Information Technology - Open
+               Systems Interconnection - The Directory: Models, 1993.
+
+   [X.509]     ITU-T Recommendation X.509 (1997 E): Information
+               Technology - Open Systems Interconnection - The
+               Directory: Authentication Framework, June 1997.
+
+   [X.520]     ITU-T Recommendation X.520: Information Technology - Open
+               Systems Interconnection - The Directory: Selected
+               Attribute Types, 1993.
+
+   [X.660]     ITU-T Recommendation X.660 Information Technology - ASN.1
+               encoding rules: Specification of Basic Encoding Rules
+               (BER), Canonical Encoding Rules (CER) and Distinguished
+               Encoding Rules (DER), 1997.
+
+   [X.690]     ITU-T Recommendation X.690 Information Technology - Open
+               Systems Interconnection - Procedures for the operation of
+               OSI Registration Authorities: General procedures, 1992.
+
+   [X9.55]     ANSI X9.55-1995, Public Key Cryptography For The
+               Financial Services Industry: Extensions To Public Key
+               Certificates And Certificate Revocation Lists, 8
+               December, 1995.
+
+   [PKIXALGS]  Bassham, L., Polk, W. and R. Housley, "Algorithms and
+               Identifiers for the Internet X.509 Public Key
+               Infrastructure Certificate and Certificate Revocation
+               Lists (CRL) Profile", RFC 3279, April 2002.
+
+   [PKIXTSA]   Adams, C., Cain, P., Pinkas, D. and R. Zuccherato,
+               "Internet X.509 Public Key Infrastructure Time-Stamp
+               Protocol (TSP)", RFC 3161, August 2001.
+
+8  Intellectual Property Rights
+
+   The IETF has been notified of intellectual property rights claimed in
+   regard to some or all of the specification contained in this
+   document.  For more information consult the online list of claimed
+   rights (see http://www.ietf.org/ipr.html).
+
+   The IETF takes no position regarding the validity or scope of any
+   intellectual property or other rights that might be claimed to
+   pertain to the implementation or use of the technology described in
+   this document or the extent to which any license under such rights
+   might or might not be available; neither does it represent that it
+   has made any effort to identify any such rights.  Information on the
+   IETF's procedures with respect to rights in standards-track and
+
+
+
+Housley, et. al.            Standards Track                    [Page 88]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   standards-related documentation can be found in BCP 11.  Copies of
+   claims of rights made available for publication and any assurances of
+   licenses to be made available, or the result of an attempt made to
+   obtain a general license or permission for the use of such
+   proprietary rights by implementors or users of this specification can
+   be obtained from the IETF Secretariat.
+
+9  Security Considerations
+
+   The majority of this specification is devoted to the format and
+   content of certificates and CRLs.  Since certificates and CRLs are
+   digitally signed, no additional integrity service is necessary.
+   Neither certificates nor CRLs need be kept secret, and unrestricted
+   and anonymous access to certificates and CRLs has no security
+   implications.
+
+   However, security factors outside the scope of this specification
+   will affect the assurance provided to certificate users.  This
+   section highlights critical issues to be considered by implementers,
+   administrators, and users.
+
+   The procedures performed by CAs and RAs to validate the binding of
+   the subject's identity to their public key greatly affect the
+   assurance that ought to be placed in the certificate.  Relying
+   parties might wish to review the CA's certificate practice statement.
+   This is particularly important when issuing certificates to other
+   CAs.
+
+   The use of a single key pair for both signature and other purposes is
+   strongly discouraged.  Use of separate key pairs for signature and
+   key management provides several benefits to the users.  The
+   ramifications associated with loss or disclosure of a signature key
+   are different from loss or disclosure of a key management key.  Using
+   separate key pairs permits a balanced and flexible response.
+   Similarly, different validity periods or key lengths for each key
+   pair may be appropriate in some application environments.
+   Unfortunately, some legacy applications (e.g., SSL) use a single key
+   pair for signature and key management.
+
+   The protection afforded private keys is a critical security factor.
+   On a small scale, failure of users to protect their private keys will
+   permit an attacker to masquerade as them, or decrypt their personal
+   information.  On a larger scale, compromise of a CA's private signing
+   key may have a catastrophic effect.  If an attacker obtains the
+   private key unnoticed, the attacker may issue bogus certificates and
+   CRLs.  Existence of bogus certificates and CRLs will undermine
+   confidence in the system.  If such a compromise is detected, all
+   certificates issued to the compromised CA MUST be revoked, preventing
+
+
+
+Housley, et. al.            Standards Track                    [Page 89]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   services between its users and users of other CAs.  Rebuilding after
+   such a compromise will be problematic, so CAs are advised to
+   implement a combination of strong technical measures (e.g., tamper-
+   resistant cryptographic modules) and appropriate management
+   procedures (e.g., separation of duties) to avoid such an incident.
+
+   Loss of a CA's private signing key may also be problematic.  The CA
+   would not be able to produce CRLs or perform normal key rollover.
+   CAs SHOULD maintain secure backup for signing keys.  The security of
+   the key backup procedures is a critical factor in avoiding key
+   compromise.
+
+   The availability and freshness of revocation information affects the
+   degree of assurance that ought to be placed in a certificate.  While
+   certificates expire naturally, events may occur during its natural
+   lifetime which negate the binding between the subject and public key.
+   If revocation information is untimely or unavailable, the assurance
+   associated with the binding is clearly reduced.  Relying parties
+   might not be able to process every critical extension that can appear
+   in a CRL.  CAs SHOULD take extra care when making revocation
+   information available only through CRLs that contain critical
+   extensions, particularly if support for those extensions is not
+   mandated by this profile.  For example, if revocation information is
+   supplied using a combination of delta CRLs and full CRLs, and the
+   delta CRLs are issued more frequently than the full CRLs, then
+   relying parties that cannot handle the critical extensions related to
+   delta CRL processing will not be able to obtain the most recent
+   revocation information.  Alternatively, if a full CRL is issued
+   whenever a delta CRL is issued, then timely revocation information
+   will be available to all relying parties.  Similarly, implementations
+   of the certification path validation mechanism described in section 6
+   that omit revocation checking provide less assurance than those that
+   support it.
+
+   The certification path validation algorithm depends on the certain
+   knowledge of the public keys (and other information) about one or
+   more trusted CAs.  The decision to trust a CA is an important
+   decision as it ultimately determines the trust afforded a
+   certificate.  The authenticated distribution of trusted CA public
+   keys (usually in the form of a "self-signed" certificate) is a
+   security critical out-of-band process that is beyond the scope of
+   this specification.
+
+   In addition, where a key compromise or CA failure occurs for a
+   trusted CA, the user will need to modify the information provided to
+   the path validation routine.  Selection of too many trusted CAs makes
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 90]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   the trusted CA information difficult to maintain.  On the other hand,
+   selection of only one trusted CA could limit users to a closed
+   community of users.
+
+   The quality of implementations that process certificates also affects
+   the degree of assurance provided.  The path validation algorithm
+   described in section 6 relies upon the integrity of the trusted CA
+   information, and especially the integrity of the public keys
+   associated with the trusted CAs.  By substituting public keys for
+   which an attacker has the private key, an attacker could trick the
+   user into accepting false certificates.
+
+   The binding between a key and certificate subject cannot be stronger
+   than the cryptographic module implementation and algorithms used to
+   generate the signature.  Short key lengths or weak hash algorithms
+   will limit the utility of a certificate.  CAs are encouraged to note
+   advances in cryptology so they can employ strong cryptographic
+   techniques.  In addition, CAs SHOULD decline to issue certificates to
+   CAs or end entities that generate weak signatures.
+
+   Inconsistent application of name comparison rules can result in
+   acceptance of invalid X.509 certification paths, or rejection of
+   valid ones.  The X.500 series of specifications defines rules for
+   comparing distinguished names that require comparison of strings
+   without regard to case, character set, multi-character white space
+   substring, or leading and trailing white space.  This specification
+   relaxes these requirements, requiring support for binary comparison
+   at a minimum.
+
+   CAs MUST encode the distinguished name in the subject field of a CA
+   certificate identically to the distinguished name in the issuer field
+   in certificates issued by that CA.  If CAs use different encodings,
+   implementations might fail to recognize name chains for paths that
+   include this certificate.  As a consequence, valid paths could be
+   rejected.
+
+   In addition, name constraints for distinguished names MUST be stated
+   identically to the encoding used in the subject field or
+   subjectAltName extension.  If not, then name constraints stated as
+   excludedSubTrees will not match and invalid paths will be accepted
+   and name constraints expressed as permittedSubtrees will not match
+   and valid paths will be rejected.  To avoid acceptance of invalid
+   paths, CAs SHOULD state name constraints for distinguished names as
+   permittedSubtrees wherever possible.
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 91]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+Appendix A.  Psuedo-ASN.1 Structures and OIDs
+
+   This section describes data objects used by conforming PKI components
+   in an "ASN.1-like" syntax.  This syntax is a hybrid of the 1988 and
+   1993 ASN.1 syntaxes.  The 1988 ASN.1 syntax is augmented with 1993
+   UNIVERSAL Types UniversalString, BMPString and UTF8String.
+
+   The ASN.1 syntax does not permit the inclusion of type statements in
+   the ASN.1 module, and the 1993 ASN.1 standard does not permit use of
+   the new UNIVERSAL types in modules using the 1988 syntax.  As a
+   result, this module does not conform to either version of the ASN.1
+   standard.
+
+   This appendix may be converted into 1988 ASN.1 by replacing the
+   definitions for the UNIVERSAL Types with the 1988 catch-all "ANY".
+
+A.1 Explicitly Tagged Module, 1988 Syntax
+
+PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1)
+  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) }
+
+DEFINITIONS EXPLICIT TAGS ::=
+
+BEGIN
+
+-- EXPORTS ALL --
+
+-- IMPORTS NONE --
+
+-- UNIVERSAL Types defined in 1993 and 1998 ASN.1
+-- and required by this specification
+
+UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
+        -- UniversalString is defined in ASN.1:1993
+
+BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
+      -- BMPString is the subtype of UniversalString and models
+      -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1
+
+UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
+      -- The content of this type conforms to RFC 2279.
+
+-- PKIX specific OIDs
+
+id-pkix  OBJECT IDENTIFIER  ::=
+         { iso(1) identified-organization(3) dod(6) internet(1)
+                    security(5) mechanisms(5) pkix(7) }
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 92]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- PKIX arcs
+
+id-pe OBJECT IDENTIFIER  ::=  { id-pkix 1 }
+        -- arc for private certificate extensions
+id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
+        -- arc for policy qualifier types
+id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
+        -- arc for extended key purpose OIDS
+id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+        -- arc for access descriptors
+
+-- policyQualifierIds for Internet policy qualifiers
+
+id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
+      -- OID for CPS qualifier
+id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
+      -- OID for user notice qualifier
+
+-- access descriptor definitions
+
+id-ad-ocsp         OBJECT IDENTIFIER ::= { id-ad 1 }
+id-ad-caIssuers    OBJECT IDENTIFIER ::= { id-ad 2 }
+id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 }
+id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 }
+
+-- attribute data types
+
+Attribute       ::=     SEQUENCE {
+      type              AttributeType,
+      values    SET OF AttributeValue }
+            -- at least one value is required
+
+AttributeType           ::=  OBJECT IDENTIFIER
+
+AttributeValue          ::=  ANY
+
+AttributeTypeAndValue           ::=     SEQUENCE {
+        type    AttributeType,
+        value   AttributeValue }
+
+-- suggested naming attributes: Definition of the following
+--   information object set may be augmented to meet local
+--   requirements.  Note that deleting members of the set may
+--   prevent interoperability with conforming implementations.
+-- presented in pairs: the AttributeType followed by the
+--   type definition for the corresponding AttributeValue
+--Arc for standard naming attributes
+id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 }
+
+
+
+Housley, et. al.            Standards Track                    [Page 93]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- Naming attributes of type X520name
+
+id-at-name              AttributeType ::= { id-at 41 }
+id-at-surname           AttributeType ::= { id-at 4 }
+id-at-givenName         AttributeType ::= { id-at 42 }
+id-at-initials          AttributeType ::= { id-at 43 }
+id-at-generationQualifier AttributeType ::= { id-at 44 }
+
+X520name ::= CHOICE {
+      teletexString     TeletexString   (SIZE (1..ub-name)),
+      printableString   PrintableString (SIZE (1..ub-name)),
+      universalString   UniversalString (SIZE (1..ub-name)),
+      utf8String        UTF8String      (SIZE (1..ub-name)),
+      bmpString         BMPString       (SIZE (1..ub-name)) }
+
+-- Naming attributes of type X520CommonName
+
+id-at-commonName        AttributeType ::= { id-at 3 }
+
+X520CommonName ::= CHOICE {
+      teletexString     TeletexString   (SIZE (1..ub-common-name)),
+      printableString   PrintableString (SIZE (1..ub-common-name)),
+      universalString   UniversalString (SIZE (1..ub-common-name)),
+      utf8String        UTF8String      (SIZE (1..ub-common-name)),
+      bmpString         BMPString       (SIZE (1..ub-common-name)) }
+
+-- Naming attributes of type X520LocalityName
+
+id-at-localityName      AttributeType ::= { id-at 7 }
+
+X520LocalityName ::= CHOICE {
+      teletexString     TeletexString   (SIZE (1..ub-locality-name)),
+      printableString   PrintableString (SIZE (1..ub-locality-name)),
+      universalString   UniversalString (SIZE (1..ub-locality-name)),
+      utf8String        UTF8String      (SIZE (1..ub-locality-name)),
+      bmpString         BMPString       (SIZE (1..ub-locality-name)) }
+
+-- Naming attributes of type X520StateOrProvinceName
+
+id-at-stateOrProvinceName AttributeType ::= { id-at 8 }
+
+X520StateOrProvinceName ::= CHOICE {
+      teletexString     TeletexString   (SIZE (1..ub-state-name)),
+      printableString   PrintableString (SIZE (1..ub-state-name)),
+      universalString   UniversalString (SIZE (1..ub-state-name)),
+      utf8String        UTF8String      (SIZE (1..ub-state-name)),
+      bmpString         BMPString       (SIZE(1..ub-state-name)) }
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 94]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- Naming attributes of type X520OrganizationName
+
+id-at-organizationName  AttributeType ::= { id-at 10 }
+
+X520OrganizationName ::= CHOICE {
+      teletexString     TeletexString
+                          (SIZE (1..ub-organization-name)),
+      printableString   PrintableString
+                          (SIZE (1..ub-organization-name)),
+      universalString   UniversalString
+                          (SIZE (1..ub-organization-name)),
+      utf8String        UTF8String
+                          (SIZE (1..ub-organization-name)),
+      bmpString         BMPString
+                          (SIZE (1..ub-organization-name))  }
+
+-- Naming attributes of type X520OrganizationalUnitName
+
+id-at-organizationalUnitName AttributeType ::= { id-at 11 }
+
+X520OrganizationalUnitName ::= CHOICE {
+      teletexString     TeletexString
+                          (SIZE (1..ub-organizational-unit-name)),
+      printableString   PrintableString
+                          (SIZE (1..ub-organizational-unit-name)),
+      universalString   UniversalString
+                          (SIZE (1..ub-organizational-unit-name)),
+      utf8String        UTF8String
+                          (SIZE (1..ub-organizational-unit-name)),
+      bmpString         BMPString
+                          (SIZE (1..ub-organizational-unit-name)) }
+
+-- Naming attributes of type X520Title
+
+id-at-title             AttributeType ::= { id-at 12 }
+
+X520Title ::= CHOICE {
+      teletexString     TeletexString   (SIZE (1..ub-title)),
+      printableString   PrintableString (SIZE (1..ub-title)),
+      universalString   UniversalString (SIZE (1..ub-title)),
+      utf8String        UTF8String      (SIZE (1..ub-title)),
+      bmpString         BMPString       (SIZE (1..ub-title)) }
+
+-- Naming attributes of type X520dnQualifier
+
+id-at-dnQualifier       AttributeType ::= { id-at 46 }
+
+X520dnQualifier ::=     PrintableString
+
+
+
+Housley, et. al.            Standards Track                    [Page 95]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- Naming attributes of type X520countryName (digraph from IS 3166)
+
+id-at-countryName       AttributeType ::= { id-at 6 }
+
+X520countryName ::=     PrintableString (SIZE (2))
+
+-- Naming attributes of type X520SerialNumber
+
+id-at-serialNumber      AttributeType ::= { id-at 5 }
+
+X520SerialNumber ::=    PrintableString (SIZE (1..ub-serial-number))
+
+-- Naming attributes of type X520Pseudonym
+
+id-at-pseudonym         AttributeType ::= { id-at 65 }
+
+X520Pseudonym ::= CHOICE {
+   teletexString     TeletexString   (SIZE (1..ub-pseudonym)),
+   printableString   PrintableString (SIZE (1..ub-pseudonym)),
+   universalString   UniversalString (SIZE (1..ub-pseudonym)),
+   utf8String        UTF8String      (SIZE (1..ub-pseudonym)),
+   bmpString         BMPString       (SIZE (1..ub-pseudonym)) }
+
+-- Naming attributes of type DomainComponent (from RFC 2247)
+
+id-domainComponent      AttributeType ::=
+                          { 0 9 2342 19200300 100 1 25 }
+
+DomainComponent ::=     IA5String
+
+-- Legacy attributes
+
+pkcs-9 OBJECT IDENTIFIER ::=
+       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }
+
+id-emailAddress          AttributeType ::= { pkcs-9 1 }
+
+EmailAddress ::=         IA5String (SIZE (1..ub-emailaddress-length))
+
+-- naming data types --
+
+Name ::= CHOICE { -- only one possibility for now --
+      rdnSequence  RDNSequence }
+
+RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+
+DistinguishedName ::=   RDNSequence
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 96]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+RelativeDistinguishedName  ::=
+                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue
+
+-- Directory string type --
+
+DirectoryString ::= CHOICE {
+      teletexString             TeletexString   (SIZE (1..MAX)),
+      printableString           PrintableString (SIZE (1..MAX)),
+      universalString           UniversalString (SIZE (1..MAX)),
+      utf8String              UTF8String      (SIZE (1..MAX)),
+      bmpString               BMPString       (SIZE (1..MAX)) }
+
+-- certificate and CRL specific structures begin here
+
+Certificate  ::=  SEQUENCE  {
+     tbsCertificate       TBSCertificate,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertificate  ::=  SEQUENCE  {
+     version         [0]  Version DEFAULT v1,
+     serialNumber         CertificateSerialNumber,
+     signature            AlgorithmIdentifier,
+     issuer               Name,
+     validity             Validity,
+     subject              Name,
+     subjectPublicKeyInfo SubjectPublicKeyInfo,
+     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version MUST be v2 or v3
+     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version MUST be v2 or v3
+     extensions      [3]  Extensions OPTIONAL
+                          -- If present, version MUST be v3 --  }
+
+Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+
+CertificateSerialNumber  ::=  INTEGER
+
+Validity ::= SEQUENCE {
+     notBefore      Time,
+     notAfter       Time  }
+
+Time ::= CHOICE {
+     utcTime        UTCTime,
+     generalTime    GeneralizedTime }
+
+UniqueIdentifier  ::=  BIT STRING
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 97]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+SubjectPublicKeyInfo  ::=  SEQUENCE  {
+     algorithm            AlgorithmIdentifier,
+     subjectPublicKey     BIT STRING  }
+
+Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+
+Extension  ::=  SEQUENCE  {
+     extnID      OBJECT IDENTIFIER,
+     critical    BOOLEAN DEFAULT FALSE,
+     extnValue   OCTET STRING  }
+
+-- CRL structures
+
+CertificateList  ::=  SEQUENCE  {
+     tbsCertList          TBSCertList,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertList  ::=  SEQUENCE  {
+     version                 Version OPTIONAL,
+                                  -- if present, MUST be v2
+     signature               AlgorithmIdentifier,
+     issuer                  Name,
+     thisUpdate              Time,
+     nextUpdate              Time OPTIONAL,
+     revokedCertificates     SEQUENCE OF SEQUENCE  {
+          userCertificate         CertificateSerialNumber,
+          revocationDate          Time,
+          crlEntryExtensions      Extensions OPTIONAL
+                                         -- if present, MUST be v2
+                               }  OPTIONAL,
+     crlExtensions           [0] Extensions OPTIONAL }
+                                         -- if present, MUST be v2
+
+-- Version, Time, CertificateSerialNumber, and Extensions were
+-- defined earlier for use in the certificate structure
+
+AlgorithmIdentifier  ::=  SEQUENCE  {
+     algorithm               OBJECT IDENTIFIER,
+     parameters              ANY DEFINED BY algorithm OPTIONAL  }
+                                -- contains a value of the type
+                                -- registered for use with the
+                                -- algorithm object identifier value
+
+-- X.400 address syntax starts here
+
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 98]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+ORAddress ::= SEQUENCE {
+   built-in-standard-attributes BuiltInStandardAttributes,
+   built-in-domain-defined-attributes
+                   BuiltInDomainDefinedAttributes OPTIONAL,
+   -- see also teletex-domain-defined-attributes
+   extension-attributes ExtensionAttributes OPTIONAL }
+
+-- Built-in Standard Attributes
+
+BuiltInStandardAttributes ::= SEQUENCE {
+   country-name                  CountryName OPTIONAL,
+   administration-domain-name    AdministrationDomainName OPTIONAL,
+   network-address           [0] IMPLICIT NetworkAddress OPTIONAL,
+     -- see also extended-network-address
+   terminal-identifier       [1] IMPLICIT TerminalIdentifier OPTIONAL,
+   private-domain-name       [2] PrivateDomainName OPTIONAL,
+   organization-name         [3] IMPLICIT OrganizationName OPTIONAL,
+     -- see also teletex-organization-name
+   numeric-user-identifier   [4] IMPLICIT NumericUserIdentifier
+                                 OPTIONAL,
+   personal-name             [5] IMPLICIT PersonalName OPTIONAL,
+     -- see also teletex-personal-name
+   organizational-unit-names [6] IMPLICIT OrganizationalUnitNames
+                                 OPTIONAL }
+     -- see also teletex-organizational-unit-names
+
+CountryName ::= [APPLICATION 1] CHOICE {
+   x121-dcc-code         NumericString
+                           (SIZE (ub-country-name-numeric-length)),
+   iso-3166-alpha2-code  PrintableString
+                           (SIZE (ub-country-name-alpha-length)) }
+
+AdministrationDomainName ::= [APPLICATION 2] CHOICE {
+   numeric   NumericString   (SIZE (0..ub-domain-name-length)),
+   printable PrintableString (SIZE (0..ub-domain-name-length)) }
+
+NetworkAddress ::= X121Address  -- see also extended-network-address
+
+X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
+
+TerminalIdentifier ::= PrintableString (SIZE
+(1..ub-terminal-id-length))
+
+PrivateDomainName ::= CHOICE {
+   numeric   NumericString   (SIZE (1..ub-domain-name-length)),
+   printable PrintableString (SIZE (1..ub-domain-name-length)) }
+
+
+
+
+
+Housley, et. al.            Standards Track                    [Page 99]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+OrganizationName ::= PrintableString
+                            (SIZE (1..ub-organization-name-length))
+  -- see also teletex-organization-name
+
+NumericUserIdentifier ::= NumericString
+                            (SIZE (1..ub-numeric-user-id-length))
+
+PersonalName ::= SET {
+   surname     [0] IMPLICIT PrintableString
+                    (SIZE (1..ub-surname-length)),
+   given-name  [1] IMPLICIT PrintableString
+                    (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials    [2] IMPLICIT PrintableString
+                    (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] IMPLICIT PrintableString
+                    (SIZE (1..ub-generation-qualifier-length))
+                    OPTIONAL }
+  -- see also teletex-personal-name
+
+OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
+                             OF OrganizationalUnitName
+  -- see also teletex-organizational-unit-names
+
+OrganizationalUnitName ::= PrintableString (SIZE
+                    (1..ub-organizational-unit-name-length))
+
+-- Built-in Domain-defined Attributes
+
+BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
+                    (1..ub-domain-defined-attributes) OF
+                    BuiltInDomainDefinedAttribute
+
+BuiltInDomainDefinedAttribute ::= SEQUENCE {
+   type PrintableString (SIZE
+                   (1..ub-domain-defined-attribute-type-length)),
+   value PrintableString (SIZE
+                   (1..ub-domain-defined-attribute-value-length)) }
+
+-- Extension Attributes
+
+ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
+               ExtensionAttribute
+
+ExtensionAttribute ::=  SEQUENCE {
+   extension-attribute-type [0] IMPLICIT INTEGER
+                   (0..ub-extension-attributes),
+   extension-attribute-value [1]
+                   ANY DEFINED BY extension-attribute-type }
+
+
+
+Housley, et. al.            Standards Track                   [Page 100]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- Extension types and attribute values
+
+common-name INTEGER ::= 1
+
+CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+
+teletex-common-name INTEGER ::= 2
+
+TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
+
+teletex-organization-name INTEGER ::= 3
+
+TeletexOrganizationName ::=
+                TeletexString (SIZE (1..ub-organization-name-length))
+
+teletex-personal-name INTEGER ::= 4
+
+TeletexPersonalName ::= SET {
+   surname     [0] IMPLICIT TeletexString
+                    (SIZE (1..ub-surname-length)),
+   given-name  [1] IMPLICIT TeletexString
+                    (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials    [2] IMPLICIT TeletexString
+                    (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] IMPLICIT TeletexString
+                    (SIZE (1..ub-generation-qualifier-length))
+                    OPTIONAL }
+
+teletex-organizational-unit-names INTEGER ::= 5
+
+TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
+      (1..ub-organizational-units) OF TeletexOrganizationalUnitName
+
+TeletexOrganizationalUnitName ::= TeletexString
+                  (SIZE (1..ub-organizational-unit-name-length))
+
+pds-name INTEGER ::= 7
+
+PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
+
+physical-delivery-country-name INTEGER ::= 8
+
+PhysicalDeliveryCountryName ::= CHOICE {
+   x121-dcc-code NumericString (SIZE
+(ub-country-name-numeric-length)),
+   iso-3166-alpha2-code PrintableString
+                  (SIZE (ub-country-name-alpha-length)) }
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 101]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+postal-code INTEGER ::= 9
+
+PostalCode ::= CHOICE {
+   numeric-code NumericString (SIZE (1..ub-postal-code-length)),
+   printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
+
+physical-delivery-office-name INTEGER ::= 10
+
+PhysicalDeliveryOfficeName ::= PDSParameter
+
+physical-delivery-office-number INTEGER ::= 11
+
+PhysicalDeliveryOfficeNumber ::= PDSParameter
+
+extension-OR-address-components INTEGER ::= 12
+
+ExtensionORAddressComponents ::= PDSParameter
+
+physical-delivery-personal-name INTEGER ::= 13
+
+PhysicalDeliveryPersonalName ::= PDSParameter
+
+physical-delivery-organization-name INTEGER ::= 14
+
+PhysicalDeliveryOrganizationName ::= PDSParameter
+
+extension-physical-delivery-address-components INTEGER ::= 15
+
+ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
+
+unformatted-postal-address INTEGER ::= 16
+
+UnformattedPostalAddress ::= SET {
+   printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines)
+         OF PrintableString (SIZE (1..ub-pds-parameter-length))
+         OPTIONAL,
+   teletex-string TeletexString
+         (SIZE (1..ub-unformatted-address-length)) OPTIONAL }
+
+street-address INTEGER ::= 17
+
+StreetAddress ::= PDSParameter
+
+post-office-box-address INTEGER ::= 18
+
+PostOfficeBoxAddress ::= PDSParameter
+
+poste-restante-address INTEGER ::= 19
+
+
+
+Housley, et. al.            Standards Track                   [Page 102]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+PosteRestanteAddress ::= PDSParameter
+
+unique-postal-name INTEGER ::= 20
+
+UniquePostalName ::= PDSParameter
+
+local-postal-attributes INTEGER ::= 21
+
+LocalPostalAttributes ::= PDSParameter
+
+PDSParameter ::= SET {
+   printable-string PrintableString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
+   teletex-string TeletexString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL }
+
+extended-network-address INTEGER ::= 22
+
+ExtendedNetworkAddress ::= CHOICE {
+   e163-4-address SEQUENCE {
+      number      [0] IMPLICIT NumericString
+                       (SIZE (1..ub-e163-4-number-length)),
+      sub-address [1] IMPLICIT NumericString
+                       (SIZE (1..ub-e163-4-sub-address-length))
+                       OPTIONAL },
+   psap-address [0] IMPLICIT PresentationAddress }
+
+PresentationAddress ::= SEQUENCE {
+    pSelector     [0] EXPLICIT OCTET STRING OPTIONAL,
+    sSelector     [1] EXPLICIT OCTET STRING OPTIONAL,
+    tSelector     [2] EXPLICIT OCTET STRING OPTIONAL,
+    nAddresses    [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
+
+terminal-type  INTEGER ::= 23
+
+TerminalType ::= INTEGER {
+   telex (3),
+   teletex (4),
+   g3-facsimile (5),
+   g4-facsimile (6),
+   ia5-terminal (7),
+   videotex (8) } (0..ub-integer-options)
+
+-- Extension Domain-defined Attributes
+
+teletex-domain-defined-attributes INTEGER ::= 6
+
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 103]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
+   (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
+
+TeletexDomainDefinedAttribute ::= SEQUENCE {
+        type TeletexString
+               (SIZE (1..ub-domain-defined-attribute-type-length)),
+        value TeletexString
+               (SIZE (1..ub-domain-defined-attribute-value-length)) }
+
+--  specifications of Upper Bounds MUST be regarded as mandatory
+--  from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
+--  Upper Bounds
+
+-- Upper Bounds
+ub-name INTEGER ::= 32768
+ub-common-name INTEGER ::= 64
+ub-locality-name INTEGER ::= 128
+ub-state-name INTEGER ::= 128
+ub-organization-name INTEGER ::= 64
+ub-organizational-unit-name INTEGER ::= 64
+ub-title INTEGER ::= 64
+ub-serial-number INTEGER ::= 64
+ub-match INTEGER ::= 128
+ub-emailaddress-length INTEGER ::= 128
+ub-common-name-length INTEGER ::= 64
+ub-country-name-alpha-length INTEGER ::= 2
+ub-country-name-numeric-length INTEGER ::= 3
+ub-domain-defined-attributes INTEGER ::= 4
+ub-domain-defined-attribute-type-length INTEGER ::= 8
+ub-domain-defined-attribute-value-length INTEGER ::= 128
+ub-domain-name-length INTEGER ::= 16
+ub-extension-attributes INTEGER ::= 256
+ub-e163-4-number-length INTEGER ::= 15
+ub-e163-4-sub-address-length INTEGER ::= 40
+ub-generation-qualifier-length INTEGER ::= 3
+ub-given-name-length INTEGER ::= 16
+ub-initials-length INTEGER ::= 5
+ub-integer-options INTEGER ::= 256
+ub-numeric-user-id-length INTEGER ::= 32
+ub-organization-name-length INTEGER ::= 64
+ub-organizational-unit-name-length INTEGER ::= 32
+ub-organizational-units INTEGER ::= 4
+ub-pds-name-length INTEGER ::= 16
+ub-pds-parameter-length INTEGER ::= 30
+ub-pds-physical-address-lines INTEGER ::= 6
+ub-postal-code-length INTEGER ::= 16
+ub-pseudonym INTEGER ::= 128
+ub-surname-length INTEGER ::= 40
+
+
+
+Housley, et. al.            Standards Track                   [Page 104]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+ub-terminal-id-length INTEGER ::= 24
+ub-unformatted-address-length INTEGER ::= 180
+ub-x121-address-length INTEGER ::= 16
+
+-- Note - upper bounds on string types, such as TeletexString, are
+-- measured in characters.  Excepting PrintableString or IA5String, a
+-- significantly greater number of octets will be required to hold
+-- such a value.  As a minimum, 16 octets, or twice the specified
+-- upper bound, whichever is the larger, should be allowed for
+-- TeletexString.  For UTF8String or UniversalString at least four
+-- times the upper bound should be allowed.
+
+END
+
+A.2 Implicitly Tagged Module, 1988 Syntax
+
+PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1)
+  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) }
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+-- EXPORTS ALL --
+
+IMPORTS
+      id-pe, id-kp, id-qt-unotice, id-qt-cps,
+      -- delete following line if "new" types are supported --
+      BMPString, UTF8String,  -- end "new" types --
+      ORAddress, Name, RelativeDistinguishedName,
+      CertificateSerialNumber, Attribute, DirectoryString
+      FROM PKIX1Explicit88 { iso(1) identified-organization(3)
+            dod(6) internet(1) security(5) mechanisms(5) pkix(7)
+            id-mod(0) id-pkix1-explicit(18) };
+
+
+-- ISO arc for standard certificate and CRL extensions
+
+id-ce OBJECT IDENTIFIER  ::=  {joint-iso-ccitt(2) ds(5) 29}
+
+-- authority key identifier OID and syntax
+
+id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 105]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+AuthorityKeyIdentifier ::= SEQUENCE {
+    keyIdentifier             [0] KeyIdentifier            OPTIONAL,
+    authorityCertIssuer       [1] GeneralNames             OPTIONAL,
+    authorityCertSerialNumber [2] CertificateSerialNumber  OPTIONAL }
+    -- authorityCertIssuer and authorityCertSerialNumber MUST both
+    -- be present or both be absent
+
+KeyIdentifier ::= OCTET STRING
+
+-- subject key identifier OID and syntax
+
+id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }
+
+SubjectKeyIdentifier ::= KeyIdentifier
+
+-- key usage extension OID and syntax
+
+id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+
+KeyUsage ::= BIT STRING {
+     digitalSignature        (0),
+     nonRepudiation          (1),
+     keyEncipherment         (2),
+     dataEncipherment        (3),
+     keyAgreement            (4),
+     keyCertSign             (5),
+     cRLSign                 (6),
+     encipherOnly            (7),
+     decipherOnly            (8) }
+
+-- private key usage period extension OID and syntax
+
+id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }
+
+PrivateKeyUsagePeriod ::= SEQUENCE {
+     notBefore       [0]     GeneralizedTime OPTIONAL,
+     notAfter        [1]     GeneralizedTime OPTIONAL }
+     -- either notBefore or notAfter MUST be present
+
+-- certificate policies extension OID and syntax
+
+id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }
+
+anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 }
+
+CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
+
+PolicyInformation ::= SEQUENCE {
+
+
+
+Housley, et. al.            Standards Track                   [Page 106]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+     policyIdentifier   CertPolicyId,
+     policyQualifiers   SEQUENCE SIZE (1..MAX) OF
+             PolicyQualifierInfo OPTIONAL }
+
+CertPolicyId ::= OBJECT IDENTIFIER
+
+PolicyQualifierInfo ::= SEQUENCE {
+       policyQualifierId  PolicyQualifierId,
+       qualifier        ANY DEFINED BY policyQualifierId }
+
+-- Implementations that recognize additional policy qualifiers MUST
+-- augment the following definition for PolicyQualifierId
+
+PolicyQualifierId ::=
+    OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
+
+-- CPS pointer qualifier
+
+CPSuri ::= IA5String
+
+-- user notice qualifier
+
+UserNotice ::= SEQUENCE {
+     noticeRef        NoticeReference OPTIONAL,
+     explicitText     DisplayText OPTIONAL}
+
+NoticeReference ::= SEQUENCE {
+     organization     DisplayText,
+     noticeNumbers    SEQUENCE OF INTEGER }
+
+DisplayText ::= CHOICE {
+     ia5String        IA5String      (SIZE (1..200)),
+     visibleString    VisibleString  (SIZE (1..200)),
+     bmpString        BMPString      (SIZE (1..200)),
+     utf8String       UTF8String     (SIZE (1..200)) }
+
+-- policy mapping extension OID and syntax
+
+id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }
+
+PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
+     issuerDomainPolicy      CertPolicyId,
+     subjectDomainPolicy     CertPolicyId }
+
+-- subject alternative name extension OID and syntax
+
+id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 107]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+SubjectAltName ::= GeneralNames
+
+GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
+
+GeneralName ::= CHOICE {
+     otherName                       [0]     AnotherName,
+     rfc822Name                      [1]     IA5String,
+     dNSName                         [2]     IA5String,
+     x400Address                     [3]     ORAddress,
+     directoryName                   [4]     Name,
+     ediPartyName                    [5]     EDIPartyName,
+     uniformResourceIdentifier       [6]     IA5String,
+     iPAddress                       [7]     OCTET STRING,
+     registeredID                    [8]     OBJECT IDENTIFIER }
+
+-- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
+-- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax
+
+AnotherName ::= SEQUENCE {
+     type-id    OBJECT IDENTIFIER,
+     value      [0] EXPLICIT ANY DEFINED BY type-id }
+
+EDIPartyName ::= SEQUENCE {
+     nameAssigner            [0]     DirectoryString OPTIONAL,
+     partyName               [1]     DirectoryString }
+
+-- issuer alternative name extension OID and syntax
+
+id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }
+
+IssuerAltName ::= GeneralNames
+
+id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }
+
+SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+
+-- basic constraints extension OID and syntax
+
+id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }
+
+BasicConstraints ::= SEQUENCE {
+     cA                      BOOLEAN DEFAULT FALSE,
+     pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
+
+-- name constraints extension OID and syntax
+
+id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 108]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+NameConstraints ::= SEQUENCE {
+     permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
+     excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
+
+GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
+
+GeneralSubtree ::= SEQUENCE {
+     base                    GeneralName,
+     minimum         [0]     BaseDistance DEFAULT 0,
+     maximum         [1]     BaseDistance OPTIONAL }
+
+BaseDistance ::= INTEGER (0..MAX)
+
+-- policy constraints extension OID and syntax
+
+id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
+
+PolicyConstraints ::= SEQUENCE {
+     requireExplicitPolicy           [0] SkipCerts OPTIONAL,
+     inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
+
+SkipCerts ::= INTEGER (0..MAX)
+
+-- CRL distribution points extension OID and syntax
+
+id-ce-cRLDistributionPoints     OBJECT IDENTIFIER  ::=  {id-ce 31}
+
+CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
+
+DistributionPoint ::= SEQUENCE {
+     distributionPoint       [0]     DistributionPointName OPTIONAL,
+     reasons                 [1]     ReasonFlags OPTIONAL,
+     cRLIssuer               [2]     GeneralNames OPTIONAL }
+
+DistributionPointName ::= CHOICE {
+     fullName                [0]     GeneralNames,
+     nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }
+
+ReasonFlags ::= BIT STRING {
+     unused                  (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6),
+     privilegeWithdrawn      (7),
+     aACompromise            (8) }
+
+
+
+Housley, et. al.            Standards Track                   [Page 109]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+-- extended key usage extension OID and syntax
+
+id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
+
+ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
+
+
+KeyPurposeId ::= OBJECT IDENTIFIER
+
+-- permit unspecified key uses
+
+anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 }
+
+-- extended key purpose OIDs
+
+id-kp-serverAuth             OBJECT IDENTIFIER ::= { id-kp 1 }
+id-kp-clientAuth             OBJECT IDENTIFIER ::= { id-kp 2 }
+id-kp-codeSigning            OBJECT IDENTIFIER ::= { id-kp 3 }
+id-kp-emailProtection        OBJECT IDENTIFIER ::= { id-kp 4 }
+id-kp-timeStamping           OBJECT IDENTIFIER ::= { id-kp 8 }
+id-kp-OCSPSigning            OBJECT IDENTIFIER ::= { id-kp 9 }
+
+-- inhibit any policy OID and syntax
+
+id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::=  { id-ce 54 }
+
+InhibitAnyPolicy ::= SkipCerts
+
+-- freshest (delta)CRL extension OID and syntax
+
+id-ce-freshestCRL OBJECT IDENTIFIER ::=  { id-ce 46 }
+
+FreshestCRL ::= CRLDistributionPoints
+
+-- authority info access
+
+id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+
+AuthorityInfoAccessSyntax  ::=
+        SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+AccessDescription  ::=  SEQUENCE {
+        accessMethod          OBJECT IDENTIFIER,
+        accessLocation        GeneralName  }
+
+-- subject info access
+
+id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 }
+
+
+
+Housley, et. al.            Standards Track                   [Page 110]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+SubjectInfoAccessSyntax  ::=
+        SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+-- CRL number extension OID and syntax
+
+id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
+
+CRLNumber ::= INTEGER (0..MAX)
+
+-- issuing distribution point extension OID and syntax
+
+id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
+
+IssuingDistributionPoint ::= SEQUENCE {
+     distributionPoint          [0] DistributionPointName OPTIONAL,
+     onlyContainsUserCerts      [1] BOOLEAN DEFAULT FALSE,
+     onlyContainsCACerts        [2] BOOLEAN DEFAULT FALSE,
+     onlySomeReasons            [3] ReasonFlags OPTIONAL,
+     indirectCRL                [4] BOOLEAN DEFAULT FALSE,
+     onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE }
+
+id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
+
+BaseCRLNumber ::= CRLNumber
+
+-- CRL reasons extension OID and syntax
+
+id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
+
+CRLReason ::= ENUMERATED {
+     unspecified             (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6),
+     removeFromCRL           (8),
+     privilegeWithdrawn      (9),
+     aACompromise           (10) }
+
+-- certificate issuer CRL entry extension OID and syntax
+
+id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
+
+CertificateIssuer ::= GeneralNames
+
+-- hold instruction extension OID and syntax
+
+
+
+Housley, et. al.            Standards Track                   [Page 111]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
+
+HoldInstructionCode ::= OBJECT IDENTIFIER
+
+-- ANSI x9 holdinstructions
+
+-- ANSI x9 arc holdinstruction arc
+
+holdInstruction OBJECT IDENTIFIER ::=
+          {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}
+
+-- ANSI X9 holdinstructions referenced by this standard
+
+id-holdinstruction-none OBJECT IDENTIFIER  ::=
+                {holdInstruction 1} -- deprecated
+
+id-holdinstruction-callissuer OBJECT IDENTIFIER ::=
+                {holdInstruction 2}
+
+id-holdinstruction-reject OBJECT IDENTIFIER ::=
+                {holdInstruction 3}
+
+-- invalidity date CRL entry extension OID and syntax
+
+id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
+
+InvalidityDate ::=  GeneralizedTime
+
+END
+
+Appendix B.  ASN.1 Notes
+
+   CAs MUST force the serialNumber to be a non-negative integer, that
+   is, the sign bit in the DER encoding of the INTEGER value MUST be
+   zero - this can be done by adding a leading (leftmost) `00'H octet if
+   necessary.  This removes a potential ambiguity in mapping between a
+   string of octets and an integer value.
+
+   As noted in section 4.1.2.2, serial numbers can be expected to
+   contain long integers.  Certificate users MUST be able to handle
+   serialNumber values up to 20 octets in length.  Conformant CAs MUST
+   NOT use serialNumber values longer than 20 octets.
+
+   As noted in section 5.2.3, CRL numbers can be expected to contain
+   long integers.  CRL validators MUST be able to handle cRLNumber
+   values up to 20 octets in length.  Conformant CRL issuers MUST NOT
+   use cRLNumber values longer than 20 octets.
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 112]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1
+   constructs.  A valid ASN.1 sequence will have zero or more entries.
+   The SIZE (1..MAX) construct constrains the sequence to have at least
+   one entry.  MAX indicates the upper bound is unspecified.
+   Implementations are free to choose an upper bound that suits their
+   environment.
+
+   The construct "positiveInt ::= INTEGER (0..MAX)" defines positiveInt
+   as a subtype of INTEGER containing integers greater than or equal to
+   zero.  The upper bound is unspecified.  Implementations are free to
+   select an upper bound that suits their environment.
+
+   The character string type PrintableString supports a very basic Latin
+   character set: the lower case letters 'a' through 'z', upper case
+   letters 'A' through 'Z', the digits '0' through '9', eleven special
+   characters ' = ( ) + , - . / : ? and space.
+
+   Implementers should note that the at sign ('@') and underscore ('_')
+   characters are not supported by the ASN.1 type PrintableString.
+   These characters often appear in internet addresses.  Such addresses
+   MUST be encoded using an ASN.1 type that supports them.  They are
+   usually encoded as IA5String in either the emailAddress attribute
+   within a distinguished name or the rfc822Name field of GeneralName.
+   Conforming implementations MUST NOT encode strings which include
+   either the at sign or underscore character as PrintableString.
+
+   The character string type TeletexString is a superset of
+   PrintableString.  TeletexString supports a fairly standard (ASCII-
+   like) Latin character set, Latin characters with non-spacing accents
+   and Japanese characters.
+
+   Named bit lists are BIT STRINGs where the values have been assigned
+   names.  This specification makes use of named bit lists in the
+   definitions for the key usage, CRL distribution points and freshest
+   CRL certificate extensions, as well as the freshest CRL and issuing
+   distribution point CRL extensions.  When DER encoding a named bit
+   list, trailing zeroes MUST be omitted.  That is, the encoded value
+   ends with the last named bit that is set to one.
+
+   The character string type UniversalString supports any of the
+   characters allowed by ISO 10646-1 [ISO 10646].  ISO 10646-1 is the
+   Universal multiple-octet coded Character Set (UCS).  ISO 10646-1
+   specifies the architecture and the "basic multilingual plane" -- a
+   large standard character set which includes all major world character
+   standards.
+
+
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 113]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   The character string type UTF8String was introduced in the 1997
+   version of ASN.1, and UTF8String was added to the list of choices for
+   DirectoryString in the 2001 version of X.520 [X.520].  UTF8String is
+   a universal type and has been assigned tag number 12.  The content of
+   UTF8String was defined by RFC 2044 [RFC 2044] and updated in RFC 2279
+   [RFC 2279].
+
+   In anticipation of these changes, and in conformance with IETF Best
+   Practices codified in RFC 2277 [RFC 2277], IETF Policy on Character
+   Sets and Languages, this document includes UTF8String as a choice in
+   DirectoryString and the CPS qualifier extensions.
+
+   Implementers should note that the DER encoding of the SET OF values
+   requires ordering of the encodings of the values.  In particular,
+   this issue arises with respect to distinguished names.
+
+   Implementers should note that the DER encoding of SET or SEQUENCE
+   components whose value is the DEFAULT omit the component from the
+   encoded certificate or CRL.  For example, a BasicConstraints
+   extension whose cA value is FALSE would omit the cA boolean from the
+   encoded certificate.
+
+   Object Identifiers (OIDs) are used throughout this specification to
+   identify certificate policies, public key and signature algorithms,
+   certificate extensions, etc.  There is no maximum size for OIDs.
+   This specification mandates support for OIDs which have arc elements
+   with values that are less than 2^28, that is, they MUST be between 0
+   and 268,435,455, inclusive.  This allows each arc element to be
+   represented within a single 32 bit word.  Implementations MUST also
+   support OIDs where the length of the dotted decimal (see [RFC 2252],
+   section 4.1) string representation can be up to 100 bytes
+   (inclusive).  Implementations MUST be able to handle OIDs with up to
+   20 elements (inclusive).  CAs SHOULD NOT issue certificates which
+   contain OIDs that exceed these requirements.  Likewise, CRL issuers
+   SHOULD NOT issue CRLs which contain OIDs that exceed these
+   requirements.
+
+   Implementors are warned that the X.500 standards community has
+   developed a series of extensibility rules.  These rules determine
+   when an ASN.1 definition can be changed without assigning a new
+   object identifier (OID).  For example, at least two extension
+   definitions included in RFC 2459 [RFC 2459], the predecessor to this
+   profile document, have different ASN.1 definitions in this
+   specification, but the same OID is used.  If unknown elements appear
+   within an extension, and the extension is not marked critical, those
+   unknown elements ought to be ignored, as follows:
+
+      (a)  ignore all unknown bit name assignments within a bit string;
+
+
+
+Housley, et. al.            Standards Track                   [Page 114]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+      (b)  ignore all unknown named numbers in an ENUMERATED type or
+      INTEGER type that is being used in the enumerated style, provided
+      the number occurs as an optional element of a SET or SEQUENCE; and
+
+      (c)  ignore all unknown elements in SETs, at the end of SEQUENCEs,
+      or in CHOICEs where the CHOICE is itself an optional element of a
+      SET or SEQUENCE.
+
+   If an extension containing unexpected values is marked critical, the
+   implementation MUST reject the certificate or CRL containing the
+   unrecognized extension.
+
+Appendix C.  Examples
+
+   This section contains four examples: three certificates and a CRL.
+   The first two certificates and the CRL comprise a minimal
+   certification path.
+
+   Section C.1 contains an annotated hex dump of a "self-signed"
+   certificate issued by a CA whose distinguished name is
+   cn=us,o=gov,ou=nist.  The certificate contains a DSA public key with
+   parameters, and is signed by the corresponding DSA private key.
+
+   Section C.2 contains an annotated hex dump of an end entity
+   certificate.  The end entity certificate contains a DSA public key,
+   and is signed by the private key corresponding to the "self-signed"
+   certificate in section C.1.
+
+   Section C.3 contains a dump of an end entity certificate which
+   contains an RSA public key and is signed with RSA and MD5.  This
+   certificate is not part of the minimal certification path.
+
+   Section C.4 contains an annotated hex dump of a CRL.  The CRL is
+   issued by the CA whose distinguished name is cn=us,o=gov,ou=nist and
+   the list of revoked certificates includes the end entity certificate
+   presented in C.2.
+
+   The certificates were processed using Peter Gutman's dumpasn1 utility
+   to generate the output.  The source for the dumpasn1 utility is
+   available at <http://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c>.  The
+   binaries for the certificates and CRLs are available at
+   <http://csrc.nist.gov/pki/pkixtools>.
+
+C.1  Certificate
+
+   This section contains an annotated hex dump of a 699 byte version 3
+   certificate.  The certificate contains the following information:
+   (a)  the serial number is 23 (17 hex);
+
+
+
+Housley, et. al.            Standards Track                   [Page 115]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   (b)  the certificate is signed with DSA and the SHA-1 hash algorithm;
+   (c)  the issuer's distinguished name is OU=NIST; O=gov; C=US
+   (d)  and the subject's distinguished name is OU=NIST; O=gov; C=US
+   (e)  the certificate was issued on June 30, 1997 and will expire on
+   December 31, 1997;
+   (f)  the certificate contains a 1024 bit DSA public key with
+   parameters;
+   (g)  the certificate contains a subject key identifier extension
+   generated using method (1) of section 4.2.1.2; and
+   (h)  the certificate is a CA certificate (as indicated through the
+   basic constraints extension.)
+
+  0 30  699: SEQUENCE {
+  4 30  635:   SEQUENCE {
+  8 A0    3:     [0] {
+ 10 02    1:       INTEGER 2
+          :       }
+ 13 02    1:     INTEGER 17
+ 16 30    9:     SEQUENCE {
+ 18 06    7:       OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+          :       }
+ 27 30   42:     SEQUENCE {
+ 29 31   11:       SET {
+ 31 30    9:         SEQUENCE {
+ 33 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+ 38 13    2:           PrintableString 'US'
+          :           }
+          :         }
+ 42 31   12:       SET {
+ 44 30   10:         SEQUENCE {
+ 46 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+ 51 13    3:           PrintableString 'gov'
+          :           }
+          :         }
+ 56 31   13:       SET {
+ 58 30   11:         SEQUENCE {
+ 60 06    3:           OBJECT IDENTIFIER
+          :             organizationalUnitName (2 5 4 11)
+ 65 13    4:           PrintableString 'NIST'
+           :           }
+           :         }
+           :       }
+ 71 30   30:     SEQUENCE {
+ 73 17   13:       UTCTime '970630000000Z'
+ 88 17   13:       UTCTime '971231000000Z'
+           :       }
+103 30   42:     SEQUENCE {
+105 31   11:       SET {
+
+
+
+Housley, et. al.            Standards Track                   [Page 116]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+107 30    9:         SEQUENCE {
+109 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+114 13    2:           PrintableString 'US'
+           :           }
+           :         }
+118 31   12:       SET {
+120 30   10:         SEQUENCE {
+122 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+127 13    3:           PrintableString 'gov'
+           :           }
+           :         }
+132 31   13:       SET {
+134 30   11:         SEQUENCE {
+136 06    3:           OBJECT IDENTIFIER
+           :             organizationalUnitName (2 5 4 11)
+141 13    4:           PrintableString 'NIST'
+           :           }
+           :         }
+           :       }
+147 30  440:     SEQUENCE {
+151 30  300:       SEQUENCE {
+155 06    7:         OBJECT IDENTIFIER dsa (1 2 840 10040 4 1)
+164 30  287:         SEQUENCE {
+168 02  129:           INTEGER
+           :             00 B6 8B 0F 94 2B 9A CE A5 25 C6 F2 ED FC
+           :             FB 95 32 AC 01 12 33 B9 E0 1C AD 90 9B BC
+           :             48 54 9E F3 94 77 3C 2C 71 35 55 E6 FE 4F
+           :             22 CB D5 D8 3E 89 93 33 4D FC BD 4F 41 64
+           :             3E A2 98 70 EC 31 B4 50 DE EB F1 98 28 0A
+           :             C9 3E 44 B3 FD 22 97 96 83 D0 18 A3 E3 BD
+           :             35 5B FF EE A3 21 72 6A 7B 96 DA B9 3F 1E
+           :             5A 90 AF 24 D6 20 F0 0D 21 A7 D4 02 B9 1A
+           :             FC AC 21 FB 9E 94 9E 4B 42 45 9E 6A B2 48
+           :             63 FE 43
+300 02   21:           INTEGER
+           :             00 B2 0D B0 B1 01 DF 0C 66 24 FC 13 92 BA
+           :             55 F7 7D 57 74 81 E5
+323 02  129:           INTEGER
+           :             00 9A BF 46 B1 F5 3F 44 3D C9 A5 65 FB 91
+           :             C0 8E 47 F1 0A C3 01 47 C2 44 42 36 A9 92
+           :             81 DE 57 C5 E0 68 86 58 00 7B 1F F9 9B 77
+           :             A1 C5 10 A5 80 91 78 51 51 3C F6 FC FC CC
+           :             46 C6 81 78 92 84 3D F4 93 3D 0C 38 7E 1A
+           :             5B 99 4E AB 14 64 F6 0C 21 22 4E 28 08 9C
+           :             92 B9 66 9F 40 E8 95 F6 D5 31 2A EF 39 A2
+           :             62 C7 B2 6D 9E 58 C4 3A A8 11 81 84 6D AF
+           :             F8 B4 19 B4 C2 11 AE D0 22 3B AA 20 7F EE
+           :             1E 57 18
+
+
+
+Housley, et. al.            Standards Track                   [Page 117]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+           :           }
+           :         }
+455 03  133:       BIT STRING 0 unused bits, encapsulates {
+459 02  129:           INTEGER
+           :             00 B5 9E 1F 49 04 47 D1 DB F5 3A DD CA 04
+           :             75 E8 DD 75 F6 9B 8A B1 97 D6 59 69 82 D3
+           :             03 4D FD 3B 36 5F 4A F2 D1 4E C1 07 F5 D1
+           :             2A D3 78 77 63 56 EA 96 61 4D 42 0B 7A 1D
+           :             FB AB 91 A4 CE DE EF 77 C8 E5 EF 20 AE A6
+           :             28 48 AF BE 69 C3 6A A5 30 F2 C2 B9 D9 82
+           :             2B 7D D9 C4 84 1F DE 0D E8 54 D7 1B 99 2E
+           :             B3 D0 88 F6 D6 63 9B A7 E2 0E 82 D4 3B 8A
+           :             68 1B 06 56 31 59 0B 49 EB 99 A5 D5 81 41
+           :             7B C9 55
+           :           }
+           :       }
+591 A3   50:     [3] {
+593 30   48:       SEQUENCE {
+595 30   29:         SEQUENCE {
+597 06    3:           OBJECT IDENTIFIER
+           :             subjectKeyIdentifier (2 5 29 14)
+602 04   22:           OCTET STRING, encapsulates {
+604 04   20:               OCTET STRING
+           :                 86 CA A5 22 81 62 EF AD 0A 89 BC AD 72 41
+           :                 2C 29 49 F4 86 56
+           :               }
+           :           }
+626 30   15:         SEQUENCE {
+628 06    3:           OBJECT IDENTIFIER basicConstraints (2 5 29 19)
+633 01    1:           BOOLEAN TRUE
+636 04    5:           OCTET STRING, encapsulates {
+638 30    3:               SEQUENCE {
+640 01    1:                 BOOLEAN TRUE
+           :                 }
+           :               }
+           :           }
+           :         }
+           :       }
+           :     }
+643 30    9:   SEQUENCE {
+645 06    7:     OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+           :     }
+654 03   47:   BIT STRING 0 unused bits, encapsulates {
+657 30   44:       SEQUENCE {
+659 02   20:         INTEGER
+           :           43 1B CF 29 25 45 C0 4E 52 E7 7D D6 FC B1
+           :           66 4C 83 CF 2D 77
+681 02   20:         INTEGER
+
+
+
+Housley, et. al.            Standards Track                   [Page 118]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+           :           0B 5B 9A 24 11 98 E8 F3 86 90 04 F6 08 A9
+           :           E1 8D A5 CC 3A D4
+           :         }
+           :       }
+           :   }
+
+C.2  Certificate
+
+   This section contains an annotated hex dump of a 730 byte version 3
+   certificate.  The certificate contains the following information:
+   (a)  the serial number is 18 (12 hex);
+   (b)  the certificate is signed with DSA and the SHA-1 hash algorithm;
+   (c)  the issuer's distinguished name is OU=nist; O=gov; C=US
+   (d)  and the subject's distinguished name is CN=Tim Polk; OU=nist;
+   O=gov; C=US
+   (e)  the certificate was valid from July 30, 1997 through December 1,
+   1997;
+   (f)  the certificate contains a 1024 bit DSA public key;
+   (g)  the certificate is an end entity certificate, as the basic
+   constraints extension is not present;
+   (h)  the certificate contains an authority key identifier extension
+   matching the subject key identifier of the certificate in Appendix
+   C.1; and
+   (i)  the certificate includes one alternative name - an RFC 822
+   address of "wpolk@nist.gov".
+
+     0 30  730: SEQUENCE {
+     4 30  665:   SEQUENCE {
+     8 A0    3:     [0] {
+    10 02    1:       INTEGER 2
+              :       }
+    13 02    1:     INTEGER 18
+    16 30    9:     SEQUENCE {
+    18 06    7:       OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+              :       }
+    27 30   42:     SEQUENCE {
+    29 31   11:       SET {
+    31 30    9:         SEQUENCE {
+    33 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+    38 13    2:           PrintableString 'US'
+              :           }
+              :         }
+    42 31   12:       SET {
+    44 30   10:         SEQUENCE {
+    46 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+    51 13    3:           PrintableString 'gov'
+              :           }
+              :         }
+
+
+
+Housley, et. al.            Standards Track                   [Page 119]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+    56 31   13:       SET {
+    58 30   11:         SEQUENCE {
+    60 06    3:           OBJECT IDENTIFIER
+              :             organizationalUnitName (2 5 4 11)
+    65 13    4:           PrintableString 'NIST'
+              :           }
+              :         }
+              :       }
+    71 30   30:     SEQUENCE {
+    73 17   13:       UTCTime '970730000000Z'
+    88 17   13:       UTCTime '971201000000Z'
+              :       }
+   103 30   61:     SEQUENCE {
+   105 31   11:       SET {
+   107 30    9:         SEQUENCE {
+   109 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+   114 13    2:           PrintableString 'US'
+              :           }
+              :         }
+   118 31   12:       SET {
+   120 30   10:         SEQUENCE {
+   122 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+   127 13    3:           PrintableString 'gov'
+              :           }
+              :         }
+   132 31   13:       SET {
+   134 30   11:         SEQUENCE {
+   136 06    3:           OBJECT IDENTIFIER
+              :             organizationalUnitName (2 5 4 11)
+   141 13    4:           PrintableString 'NIST'
+              :           }
+              :         }
+   147 31   17:       SET {
+   149 30   15:         SEQUENCE {
+   151 06    3:           OBJECT IDENTIFIER commonName (2 5 4 3)
+   156 13    8:           PrintableString 'Tim Polk'
+              :           }
+              :         }
+              :       }
+   166 30  439:     SEQUENCE {
+   170 30  300:       SEQUENCE {
+   174 06    7:         OBJECT IDENTIFIER dsa (1 2 840 10040 4 1)
+   183 30  287:         SEQUENCE {
+   187 02  129:           INTEGER
+              :             00 B6 8B 0F 94 2B 9A CE A5 25 C6 F2 ED FC
+              :             FB 95 32 AC 01 12 33 B9 E0 1C AD 90 9B BC
+              :             48 54 9E F3 94 77 3C 2C 71 35 55 E6 FE 4F
+              :             22 CB D5 D8 3E 89 93 33 4D FC BD 4F 41 64
+
+
+
+Housley, et. al.            Standards Track                   [Page 120]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+              :             3E A2 98 70 EC 31 B4 50 DE EB F1 98 28 0A
+              :             C9 3E 44 B3 FD 22 97 96 83 D0 18 A3 E3 BD
+              :             35 5B FF EE A3 21 72 6A 7B 96 DA B9 3F 1E
+              :             5A 90 AF 24 D6 20 F0 0D 21 A7 D4 02 B9 1A
+              :             FC AC 21 FB 9E 94 9E 4B 42 45 9E 6A B2 48
+              :             63 FE 43
+   319 02   21:           INTEGER
+              :             00 B2 0D B0 B1 01 DF 0C 66 24 FC 13 92 BA
+              :             55 F7 7D 57 74 81 E5
+   342 02  129:           INTEGER
+              :             00 9A BF 46 B1 F5 3F 44 3D C9 A5 65 FB 91
+              :             C0 8E 47 F1 0A C3 01 47 C2 44 42 36 A9 92
+              :             81 DE 57 C5 E0 68 86 58 00 7B 1F F9 9B 77
+              :             A1 C5 10 A5 80 91 78 51 51 3C F6 FC FC CC
+              :             46 C6 81 78 92 84 3D F4 93 3D 0C 38 7E 1A
+              :             5B 99 4E AB 14 64 F6 0C 21 22 4E 28 08 9C
+              :             92 B9 66 9F 40 E8 95 F6 D5 31 2A EF 39 A2
+              :             62 C7 B2 6D 9E 58 C4 3A A8 11 81 84 6D AF
+              :             F8 B4 19 B4 C2 11 AE D0 22 3B AA 20 7F EE
+              :             1E 57 18
+              :           }
+              :         }
+   474 03  132:       BIT STRING 0 unused bits, encapsulates {
+   478 02  128:           INTEGER
+              :             30 B6 75 F7 7C 20 31 AE 38 BB 7E 0D 2B AB
+              :             A0 9C 4B DF 20 D5 24 13 3C CD 98 E5 5F 6C
+              :             B7 C1 BA 4A BA A9 95 80 53 F0 0D 72 DC 33
+              :             37 F4 01 0B F5 04 1F 9D 2E 1F 62 D8 84 3A
+              :             9B 25 09 5A 2D C8 46 8E 2B D4 F5 0D 3B C7
+              :             2D C6 6C B9 98 C1 25 3A 44 4E 8E CA 95 61
+              :             35 7C CE 15 31 5C 23 13 1E A2 05 D1 7A 24
+              :             1C CB D3 72 09 90 FF 9B 9D 28 C0 A1 0A EC
+              :             46 9F 0D B8 D0 DC D0 18 A6 2B 5E F9 8F B5
+              :             95 BE
+              :           }
+              :       }
+   609 A3   62:     [3] {
+   611 30   60:       SEQUENCE {
+   613 30   25:         SEQUENCE {
+   615 06    3:           OBJECT IDENTIFIER subjectAltName (2 5 29 17)
+   620 04   18:           OCTET STRING, encapsulates {
+   622 30   16:               SEQUENCE {
+   624 81   14:                 [1] 'wpolk@nist.gov'
+              :                 }
+              :               }
+              :           }
+   640 30   31:         SEQUENCE {
+   642 06    3:           OBJECT IDENTIFIER
+
+
+
+Housley, et. al.            Standards Track                   [Page 121]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+              :             authorityKeyIdentifier (2 5 29 35)
+   647 04   24:           OCTET STRING, encapsulates {
+   649 30   22:               SEQUENCE {
+   651 80   20:                 [0]
+              :                   86 CA A5 22 81 62 EF AD 0A 89 BC AD 72
+              :                   41 2C 29 49 F4 86 56
+              :                 }
+              :               }
+              :           }
+              :         }
+              :       }
+              :     }
+   673 30    9:   SEQUENCE {
+   675 06    7:     OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+              :     }
+   684 03   48:   BIT STRING 0 unused bits, encapsulates {
+   687 30   45:       SEQUENCE {
+   689 02   20:         INTEGER
+              :           36 97 CB E3 B4 2C E1 BB 61 A9 D3 CC 24 CC
+              :           22 92 9F F4 F5 87
+   711 02   21:         INTEGER
+              :           00 AB C9 79 AF D2 16 1C A9 E3 68 A9 14 10
+              :           B4 A0 2E FF 22 5A 73
+              :         }
+              :       }
+              :   }
+
+C.3  End Entity Certificate Using RSA
+
+   This section contains an annotated hex dump of a 654 byte version 3
+   certificate.  The certificate contains the following information:
+   (a)  the serial number is 256;
+   (b)  the certificate is signed with RSA and the SHA-1 hash algorithm;
+   (c)  the issuer's distinguished name is OU=NIST; O=gov; C=US
+   (d)  and the subject's distinguished name is CN=Tim Polk; OU=NIST;
+   O=gov; C=US
+   (e)  the certificate was issued on May 21, 1996 at 09:58:26 and
+   expired on May 21, 1997 at 09:58:26;
+   (f)  the certificate contains a 1024 bit RSA public key;
+   (g)  the certificate is an end entity certificate (not a CA
+   certificate);
+   (h)  the certificate includes an alternative subject name of
+   "<http://www.itl.nist.gov/div893/staff/polk/index.html>" and an
+   alternative issuer name of "<http://www.nist.gov/>" - both are URLs;
+   (i)  the certificate include an authority key identifier extension
+   and a certificate policies extension specifying the policy OID
+   2.16.840.1.101.3.2.1.48.9; and
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 122]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+   (j)  the certificate includes a critical key usage extension
+   specifying that the public key is intended for verification of
+   digital signatures.
+
+  0 30  654: SEQUENCE {
+  4 30  503:   SEQUENCE {
+  8 A0    3:     [0] {
+ 10 02    1:       INTEGER 2
+           :       }
+ 13 02    2:     INTEGER 256
+ 17 30   13:     SEQUENCE {
+ 19 06    9:       OBJECT IDENTIFIER
+           :         sha1withRSAEncryption (1 2 840 113549 1 1 5)
+ 30 05    0:       NULL
+           :       }
+ 32 30   42:     SEQUENCE {
+ 34 31   11:       SET {
+ 36 30    9:         SEQUENCE {
+ 38 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+ 43 13    2:           PrintableString 'US'
+           :           }
+           :         }
+ 47 31   12:       SET {
+ 49 30   10:         SEQUENCE {
+ 51 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+ 56 13    3:           PrintableString 'gov'
+           :           }
+           :         }
+ 61 31   13:       SET {
+ 63 30   11:         SEQUENCE {
+ 65 06    3:           OBJECT IDENTIFIER
+           :             organizationalUnitName (2 5 4 11)
+ 70 13    4:           PrintableString 'NIST'
+           :           }
+           :         }
+           :       }
+ 76 30   30:     SEQUENCE {
+ 78 17   13:       UTCTime '960521095826Z'
+ 93 17   13:       UTCTime '970521095826Z'
+           :       }
+108 30   61:     SEQUENCE {
+110 31   11:       SET {
+112 30    9:         SEQUENCE {
+114 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+119 13    2:           PrintableString 'US'
+           :           }
+           :         }
+123 31   12:       SET {
+
+
+
+Housley, et. al.            Standards Track                   [Page 123]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+125 30   10:         SEQUENCE {
+127 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+132 13    3:           PrintableString 'gov'
+           :           }
+           :         }
+137 31   13:       SET {
+139 30   11:         SEQUENCE {
+141 06    3:           OBJECT IDENTIFIER
+           :             organizationalUnitName (2 5 4 11)
+146 13    4:           PrintableString 'NIST'
+           :           }
+           :         }
+152 31   17:       SET {
+154 30   15:         SEQUENCE {
+156 06    3:           OBJECT IDENTIFIER commonName (2 5 4 3)
+161 13    8:           PrintableString 'Tim Polk'
+           :           }
+           :         }
+           :       }
+171 30  159:     SEQUENCE {
+174 30   13:       SEQUENCE {
+176 06    9:         OBJECT IDENTIFIER
+           :           rsaEncryption (1 2 840 113549 1 1 1)
+187 05    0:         NULL
+           :         }
+189 03  141:       BIT STRING 0 unused bits, encapsulates {
+193 30  137:           SEQUENCE {
+196 02  129:             INTEGER
+           :               00 E1 6A E4 03 30 97 02 3C F4 10 F3 B5 1E
+           :               4D 7F 14 7B F6 F5 D0 78 E9 A4 8A F0 A3 75
+           :               EC ED B6 56 96 7F 88 99 85 9A F2 3E 68 77
+           :               87 EB 9E D1 9F C0 B4 17 DC AB 89 23 A4 1D
+           :               7E 16 23 4C 4F A8 4D F5 31 B8 7C AA E3 1A
+           :               49 09 F4 4B 26 DB 27 67 30 82 12 01 4A E9
+           :               1A B6 C1 0C 53 8B 6C FC 2F 7A 43 EC 33 36
+           :               7E 32 B2 7B D5 AA CF 01 14 C6 12 EC 13 F2
+           :               2D 14 7A 8B 21 58 14 13 4C 46 A3 9A F2 16
+           :               95 FF 23
+328 02    3:             INTEGER 65537
+           :             }
+           :           }
+           :       }
+333 A3  175:     [3] {
+336 30  172:       SEQUENCE {
+339 30   63:         SEQUENCE {
+341 06    3:           OBJECT IDENTIFIER subjectAltName (2 5 29 17)
+346 04   56:           OCTET STRING, encapsulates {
+348 30   54:               SEQUENCE {
+
+
+
+Housley, et. al.            Standards Track                   [Page 124]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+350 86   52:                 [6]
+           :                   'http://www.itl.nist.gov/div893/staff/'
+           :                   'polk/index.html'
+           :                 }
+           :               }
+           :           }
+404 30   31:         SEQUENCE {
+406 06    3:           OBJECT IDENTIFIER issuerAltName (2 5 29 18)
+411 04   24:           OCTET STRING, encapsulates {
+413 30   22:               SEQUENCE {
+415 86   20:                 [6] 'http://www.nist.gov/'
+           :                 }
+           :               }
+           :           }
+437 30   31:         SEQUENCE {
+439 06    3:           OBJECT IDENTIFIER
+           :             authorityKeyIdentifier (2 5 29 35)
+444 04   24:           OCTET STRING, encapsulates {
+446 30   22:               SEQUENCE {
+448 80   20:                 [0]
+           :                   08 68 AF 85 33 C8 39 4A 7A F8 82 93 8E
+           :                   70 6A 4A 20 84 2C 32
+           :                 }
+           :               }
+           :           }
+470 30   23:         SEQUENCE {
+472 06    3:           OBJECT IDENTIFIER
+           :             certificatePolicies (2 5 29 32)
+477 04   16:           OCTET STRING, encapsulates {
+479 30   14:               SEQUENCE {
+481 30   12:                 SEQUENCE {
+483 06   10:                   OBJECT IDENTIFIER
+           :                            '2 16 840 1 101 3 2 1 48 9'
+           :                   }
+           :                 }
+           :               }
+           :           }
+495 30   14:         SEQUENCE {
+497 06    3:           OBJECT IDENTIFIER keyUsage (2 5 29 15)
+502 01    1:           BOOLEAN TRUE
+505 04    4:           OCTET STRING, encapsulates {
+507 03    2:               BIT STRING 7 unused bits
+           :                 '1'B (bit 0)
+           :               }
+           :           }
+           :         }
+           :       }
+           :     }
+
+
+
+Housley, et. al.            Standards Track                   [Page 125]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+511 30   13:   SEQUENCE {
+513 06    9:     OBJECT IDENTIFIER
+           :       sha1withRSAEncryption (1 2 840 113549 1 1 5)
+524 05    0:     NULL
+           :     }
+526 03  129:   BIT STRING 0 unused bits
+           :     1E 07 77 6E 66 B5 B6 B8 57 F0 03 DC 6F 77
+           :     6D AF 55 1D 74 E5 CE 36 81 FC 4B C5 F4 47
+           :     82 C4 0A 25 AA 8D D6 7D 3A 89 AB 44 34 39
+           :     F6 BD 61 1A 78 85 7A B8 1E 92 A2 22 2F CE
+           :     07 1A 08 8E F1 46 03 59 36 4A CB 60 E6 03
+           :     40 01 5B 2A 44 D6 E4 7F EB 43 5E 74 0A E6
+           :     E4 F9 3E E1 44 BE 1F E7 5F 5B 2C 41 8D 08
+           :     BD 26 FE 6A A6 C3 2F B2 3B 41 12 6B C1 06
+           :     8A B8 4C 91 59 EB 2F 38 20 2A 67 74 20 0B
+           :     77 F3
+           :   }
+
+C.4  Certificate Revocation List
+
+   This section contains an annotated hex dump of a version 2 CRL with
+   one extension (cRLNumber).  The CRL was issued by OU=NIST; O=gov;
+   C=US on August 7, 1997; the next scheduled issuance was September 7,
+   1997.  The CRL includes one revoked certificates: serial number 18
+   (12 hex), which was revoked on July 31, 1997 due to keyCompromise.
+   The CRL itself is number 18, and it was signed with DSA and SHA-1.
+
+  0 30  203: SEQUENCE {
+  3 30  140:   SEQUENCE {
+  6 02    1:     INTEGER 1
+  9 30    9:     SEQUENCE {
+ 11 06    7:       OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+           :       }
+ 20 30   42:     SEQUENCE {
+ 22 31   11:       SET {
+ 24 30    9:         SEQUENCE {
+ 26 06    3:           OBJECT IDENTIFIER countryName (2 5 4 6)
+ 31 13    2:           PrintableString 'US'
+           :           }
+           :         }
+ 35 31   12:       SET {
+ 37 30   10:         SEQUENCE {
+ 39 06    3:           OBJECT IDENTIFIER organizationName (2 5 4 10)
+ 44 13    3:           PrintableString 'gov'
+           :           }
+           :         }
+ 49 31   13:       SET {
+ 51 30   11:         SEQUENCE {
+
+
+
+Housley, et. al.            Standards Track                   [Page 126]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+ 53 06    3:           OBJECT IDENTIFIER
+           :             organizationalUnitName (2 5 4 11)
+ 58 13    4:           PrintableString 'NIST'
+           :           }
+           :         }
+           :       }
+ 64 17   13:     UTCTime '970807000000Z'
+ 79 17   13:     UTCTime '970907000000Z'
+ 94 30   34:     SEQUENCE {
+ 96 30   32:       SEQUENCE {
+ 98 02    1:         INTEGER 18
+101 17   13:         UTCTime '970731000000Z'
+116 30   12:         SEQUENCE {
+118 30   10:           SEQUENCE {
+120 06    3:             OBJECT IDENTIFIER cRLReason (2 5 29 21)
+125 04    3:             OCTET STRING, encapsulates {
+127 0A    1:                 ENUMERATED 1
+           :                 }
+           :             }
+           :           }
+           :         }
+           :       }
+130 A0   14:     [0] {
+132 30   12:       SEQUENCE {
+134 30   10:         SEQUENCE {
+136 06    3:           OBJECT IDENTIFIER cRLNumber (2 5 29 20)
+141 04    3:           OCTET STRING, encapsulates {
+143 02    1:               INTEGER 12
+           :               }
+           :           }
+           :         }
+           :       }
+           :     }
+146 30    9:   SEQUENCE {
+148 06    7:     OBJECT IDENTIFIER dsaWithSha1 (1 2 840 10040 4 3)
+           :     }
+157 03   47:   BIT STRING 0 unused bits, encapsulates {
+160 30   44:       SEQUENCE {
+162 02   20:         INTEGER
+           :           22 4E 9F 43 BA 95 06 34 F2 BB 5E 65 DB A6
+           :           80 05 C0 3A 29 47
+184 02   20:         INTEGER
+           :           59 1A 57 C9 82 D7 02 21 14 C3 D4 0B 32 1B
+           :           96 16 B1 1F 46 5A
+           :         }
+           :       }
+           :   }
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 127]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+Author Addresses
+
+   Russell Housley
+   RSA Laboratories
+   918 Spring Knoll Drive
+   Herndon, VA 20170
+   USA
+
+   EMail:  rhousley@rsasecurity.com
+
+   Warwick Ford
+   VeriSign, Inc.
+   401 Edgewater Place
+   Wakefield, MA 01880
+   USA
+
+   EMail:  wford@verisign.com
+
+   Tim Polk
+   NIST
+   Building 820, Room 426
+   Gaithersburg, MD 20899
+   USA
+
+   EMail:  wpolk@nist.gov
+
+   David Solo
+   Citigroup
+   909 Third Ave, 16th Floor
+   New York, NY 10043
+   USA
+
+   EMail:  dsolo@alum.mit.edu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 128]
+\f
+RFC 3280        Internet X.509 Public Key Infrastructure      April 2002
+
+
+Full Copyright Statement
+
+   Copyright (C) The Internet Society (2002).  All Rights Reserved.
+
+   This document and translations of it may be copied and furnished to
+   others, and derivative works that comment on or otherwise explain it
+   or assist in its implementation may be prepared, copied, published
+   and distributed, in whole or in part, without restriction of any
+   kind, provided that the above copyright notice and this paragraph are
+   included on all such copies and derivative works.  However, this
+   document itself may not be modified in any way, such as by removing
+   the copyright notice or references to the Internet Society or other
+   Internet organizations, except as needed for the purpose of
+   developing Internet standards in which case the procedures for
+   copyrights defined in the Internet Standards process must be
+   followed, or as required to translate it into languages other than
+   English.
+
+   The limited permissions granted above are perpetual and will not be
+   revoked by the Internet Society or its successors or assigns.
+
+   This document and the information contained herein is provided on an
+   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+   Funding for the RFC Editor function is currently provided by the
+   Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Housley, et. al.            Standards Track                   [Page 129]
+\f
diff --git a/examples/rfc3525.txt b/examples/rfc3525.txt
new file mode 100644 (file)
index 0000000..80663cc
--- /dev/null
@@ -0,0 +1,11931 @@
+
+
+
+
+
+
+Network Working Group                                          C. Groves
+Request for Comments: 3525                                   M. Pantaleo
+Obsoletes: 3015                                              LM Ericsson
+Category: Standards Track                                    T. Anderson
+                                                              Consultant
+                                                               T. Taylor
+                                                         Nortel Networks
+                                                                 Editors
+                                                               June 2003
+
+
+                  Gateway Control Protocol Version 1
+
+Status of this Memo
+
+   This document specifies an Internet standards track protocol for the
+   Internet community, and requests discussion and suggestions for
+   improvements.  Please refer to the current edition of the "Internet
+   Official Protocol Standards" (STD 1) for the standardization state
+   and status of this protocol.  Distribution of this memo is unlimited.
+
+Copyright Notice
+
+   Copyright (C) The Internet Society (2003).  All Rights Reserved.
+
+Abstract
+
+   This document defines the protocol used between elements of a
+   physically decomposed multimedia gateway, i.e., a Media Gateway and a
+   Media Gateway Controller.  The protocol presented in this document
+   meets the requirements for a media gateway control protocol as
+   presented in RFC 2805.
+
+   This document replaces RFC 3015.  It is the result of continued
+   cooperation between the IETF Megaco Working Group and ITU-T Study
+   Group 16.  It incorporates the original text of RFC 3015, modified by
+   corrections and clarifications discussed on the Megaco
+   E-mail list and incorporated into the Study Group 16 Implementor's
+   Guide for Recommendation H.248.  The present version of this document
+   underwent  ITU-T Last Call as Recommendation H.248 Amendment 1.
+   Because of ITU-T renumbering, it was published by the ITU-T as
+   Recommendation H.248.1 (03/2002), Gateway Control Protocol Version 1.
+
+   Users of this specification are advised to consult the H.248 Sub-
+   series Implementors' Guide at http://www.itu.int/itudoc/itu-
+   t/com16/implgd for additional corrections and clarifications.
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 1]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+Conventions used in this document
+
+   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+   document are to be interpreted as described in RFC 2119 [RFC2119].
+
+Table of Contents
+
+   1 Scope.........................................................5
+     1.1 Changes From RFC 3015.....................................5
+     1.2 Differences From ITU-T Recommendation H.248.1 (03/2002)...5
+   2 References....................................................6
+     2.1 Normative references......................................6
+     2.2 Informative references....................................9
+   3 Definitions..................................................10
+   4 Abbreviations................................................11
+   5 Conventions..................................................12
+   6 Connection model.............................................13
+     6.1 Contexts.................................................16
+     6.2 Terminations.............................................17
+       6.2.1 Termination dynamics.................................21
+       6.2.2 TerminationIDs.......................................21
+       6.2.3 Packages.............................................22
+       6.2.4 Termination properties and descriptors...............23
+       6.2.5 Root Termination.....................................25
+   7 Commands.....................................................26
+     7.1 Descriptors..............................................27
+       7.1.1 Specifying parameters................................27
+       7.1.2 Modem descriptor.....................................28
+       7.1.3 Multiplex descriptor.................................28
+       7.1.4 Media descriptor.....................................29
+       7.1.5 TerminationState descriptor..........................29
+       7.1.6 Stream descriptor....................................30
+       7.1.7 LocalControl descriptor..............................31
+       7.1.8 Local and Remote descriptors.........................32
+       7.1.9 Events descriptor....................................35
+       7.1.10 EventBuffer descriptor..............................38
+       7.1.11 Signals descriptor..................................38
+       7.1.12 Audit descriptor....................................40
+       7.1.13 ServiceChange descriptor............................41
+       7.1.14 DigitMap descriptor.................................41
+       7.1.15 Statistics descriptor...............................46
+       7.1.16 Packages descriptor.................................47
+       7.1.17 ObservedEvents descriptor...........................47
+       7.1.18 Topology descriptor.................................47
+       7.1.19 Error Descriptor....................................50
+     7.2 Command Application Programming Interface................50
+       7.2.1 Add..................................................51
+
+
+
+Groves, et al.              Standards Track                     [Page 2]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+       7.2.2 Modify...............................................52
+       7.2.3 Subtract.............................................53
+       7.2.4 Move.................................................55
+       7.2.5 AuditValue...........................................56
+       7.2.6 AuditCapabilities....................................59
+       7.2.7 Notify...............................................60
+       7.2.8 ServiceChange........................................61
+       7.2.9 Manipulating and Auditing Context Attributes.........65
+       7.2.10 Generic Command Syntax..............................66
+     7.3 Command Error Codes......................................66
+   8 Transactions.................................................66
+     8.1 Common parameters........................................68
+       8.1.1 Transaction Identifiers..............................68
+       8.1.2 Context Identifiers..................................68
+     8.2 Transaction Application Programming Interface............69
+       8.2.1 TransactionRequest...................................69
+       8.2.2 TransactionReply.....................................69
+       8.2.3 TransactionPending...................................71
+     8.3 Messages.................................................72
+   9 Transport....................................................72
+     9.1 Ordering of Commands.....................................73
+     9.2 Protection against Restart Avalanche.....................74
+   10 Security Considerations.....................................75
+     10.1 Protection of Protocol Connections......................75
+     10.2 Interim AH scheme.......................................76
+     10.3 Protection of Media Connections.........................77
+   11 MG-MGC Control Interface....................................78
+     11.1 Multiple Virtual MGs....................................78
+     11.2 Cold start..............................................79
+     11.3 Negotiation of protocol version.........................79
+     11.4 Failure of a MG.........................................80
+     11.5 Failure of an MGC.......................................81
+   12 Package definition..........................................82
+     12.1 Guidelines for defining packages........................82
+       12.1.1 Package.............................................83
+       12.1.2 Properties..........................................84
+       12.1.3 Events..............................................85
+       12.1.4 Signals.............................................85
+       12.1.5 Statistics..........................................86
+       12.1.6 Procedures..........................................86
+     12.2 Guidelines to defining Parameters to Events and Signals.86
+     12.3 Lists...................................................87
+     12.4 Identifiers.............................................87
+     12.5 Package registration....................................88
+   13 IANA Considerations.........................................88
+     13.1 Packages................................................88
+     13.2 Error codes.............................................89
+     13.3 ServiceChange reasons...................................89
+
+
+
+Groves, et al.              Standards Track                     [Page 3]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ANNEX A  Binary encoding of the protocol.......................90
+     A.1 Coding of wildcards......................................90
+     A.2 ASN.1 syntax specification...............................92
+     A.3 Digit maps and path names...............................111
+   ANNEX B Text encoding of the protocol.........................113
+     B.1 Coding of wildcards.....................................113
+     B.2 ABNF specification......................................113
+     B.3 Hexadecimal octet coding................................127
+     B.4 Hexadecimal octet sequence..............................127
+   ANNEX C Tags for media stream properties......................128
+     C.1 General media attributes................................128
+     C.2 Mux properties..........................................130
+     C.3 General bearer properties...............................130
+     C.4 General ATM properties..................................130
+     C.5 Frame Relay.............................................134
+     C.6 IP......................................................134
+     C.7 ATM AAL2................................................134
+     C.8 ATM AAL1................................................136
+     C.9 Bearer capabilities.....................................137
+     C.10 AAL5 properties........................................147
+     C.11 SDP equivalents........................................148
+     C.12 H.245..................................................149
+   ANNEX D Transport over IP.....................................150
+     D.1 Transport over IP/UDP using Application Level Framing ..150
+       D.1.1 Providing At-Most-Once functionality................150
+       D.1.2 Transaction identifiers and three-way handshake.....151
+       D.1.3 Computing retransmission timers.....................152
+       D.1.4 Provisional responses...............................153
+       D.1.5 Repeating Requests, Responses and Acknowledgements..153
+     D.2 Using TCP...............................................155
+       D.2.1 Providing the At-Most-Once functionality............155
+       D.2.2 Transaction identifiers and three-way handshake.....155
+       D.2.3 Computing retransmission timers.....................156
+       D.2.4 Provisional responses...............................156
+       D.2.5 Ordering of commands................................156
+   ANNEX E  Basic packages.......................................157
+     E.1 Generic.................................................157
+     E.2 Base Root Package.......................................159
+     E.3 Tone Generator Package..................................161
+     E.4 Tone Detection Package..................................163
+     E.5 Basic DTMF Generator Package............................166
+     E.6 DTMF detection Package..................................167
+     E.7 Call Progress Tones Generator Package...................169
+     E.8 Call Progress Tones Detection Package...................171
+     E.9 Analog Line Supervision Package.........................172
+     E.10 Basic Continuity Package...............................175
+     E.11 Network Package........................................178
+     E.12 RTP Package............................................180
+
+
+
+Groves, et al.              Standards Track                     [Page 4]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     E.13 TDM Circuit Package....................................182
+   APPENDIX I EXAMPLE CALL FLOWS (INFORMATIVE)...................184
+     A.1 Residential Gateway to Residential Gateway Call.........184
+       A.1.1 Programming Residential GW Analog Line Terminations
+             for Idle Behavior...................................184
+       A.1.2 Collecting Originator Digits and Initiating
+             Termination.........................................186
+   APPENDIX II  Changes From RFC 3015............................195
+   Intellectual Property Rights..................................210
+   Acknowledgments...............................................211
+   Authors' Addresses............................................212
+   Full Copyright Statement......................................213
+
+1  Scope
+
+   The present document, which is identical to the published version of
+   ITU-T Recommendation H.248.1 (03/2002) except as noted below, defines
+   the protocols used between elements of a physically decomposed
+   multimedia gateway.  There are no functional differences from a
+   system view between a decomposed gateway, with distributed sub-
+   components potentially on more than one physical device, and a
+   monolithic gateway such as described in ITU-T Recommendation H.246.
+   This document does not define how gateways, multipoint control units
+   or interactive voice response units (IVRs) work.  Instead it creates
+   a general framework that is suitable for these applications.
+
+   Packet network interfaces may include IP, ATM or possibly others.
+   The interfaces will support a variety of Switched Circuit Network
+   (SCN) signalling systems, including tone signalling, ISDN, ISUP, QSIG
+   and GSM.  National variants of these signalling systems will be
+   supported where applicable.
+
+1.1 Changes From RFC 3015
+
+   The differences between this document and RFC 3015 are documented in
+   Appendix II.
+
+1.2 Differences From ITU-T Recommendation H.248.1 (03/2002)
+
+   This document differs from the corresponding ITU-T publication in the
+   following respects:
+
+   -  Added IETF front matter in place of the corresponding ITU-T
+      material.
+
+   -  The ITU-T summary is too H.323-specific and has been omitted.
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 5]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  The IETF conventions have been stated as governing this document.
+      As discussed in section 5 below, this gives slightly greater
+      strength to "should" requirements.
+
+   -  The Scope section (just above) has been edited slightly to suit
+      its IETF context.
+
+   -  Added normative references to RFCs 2026 and 2119.
+
+   -  Figures 4, 5, and 6 show the centre of the context for greater
+      clarity.  Also added Figure 6a showing an important additional
+      example.
+
+   -  Added a paragraph in section 7.1.18 which was approved in the
+      Implementor's Guide but lost inadvertently in the ITU-T approved
+      version.
+
+   -  This document incorporates corrections to the informative examples
+      in Appendix I which also appear in H.248.1 version 2, but which
+      were not picked up in H.248.1 (03/2002).
+
+   -  This document includes a new Appendix II listing all the changes
+      from RFC 3015.
+
+   -  This document includes an Acknowledgements section listing the
+      authors of RFC 3015 but also many other people who contributed to
+      the development of the Megaco/H.248.x protocol.
+
+   -  Moved the Intellectual Property declaration to its usual place in
+      an IETF document and added a reference to declarations on the IETF
+      web site.
+
+2  References
+
+   The following ITU-T Recommendations and other references contain
+   provisions which, through reference in this text, constitute
+   provisions of this RFC.  At the time of publication, the editions
+   indicated were valid.  All Recommendations and other references are
+   subject to revision; all users of this RFC are therefore encouraged
+   to investigate the possibility of applying the most recent edition of
+   the Recommendations and other references listed below.  A list of the
+   currently valid ITU-T Recommendations is regularly published.
+
+2.1   Normative references
+
+   -  ITU-T Recommendation H.225.0 (1999), Call signalling protocols and
+      media stream packetization for packet-based multimedia
+      communication systems.
+
+
+
+Groves, et al.              Standards Track                     [Page 6]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ITU-T Recommendation H.235 (1998), Security and encryption for
+      H-Series (H.323 and other H.245-based) multimedia terminals.
+
+   -  ITU-T Recommendation H.245 (1998), Control protocol for multimedia
+      communication.
+
+   -  ITU-T Recommendation H.246 (1998), Interworking of H-series
+      multimedia terminals with H-series multimedia terminals and
+      voice/voiceband terminals on GSTN and ISDN.
+
+   -  ITU-T Recommendation H.248.8 (2002), H.248 Error Codes and Service
+      Change Reasons.
+
+   -  ITU-T Recommendation H.323 (1999), Packet-based multimedia
+      communication systems.
+
+   -  ITU-T Recommendation I.363.1 (1996), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 1 AAL.
+
+   -  ITU-T Recommendation I.363.2 (1997), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 2 AAL.
+
+   -  ITU-T Recommendation I.363.5 (1996), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 5 AAL.
+
+   -  ITU-T Recommendation I.366.1 (1998), Segmentation and Reassembly
+      Service Specific Convergence Sublayer for the AAL type 2.
+
+   -  ITU-T Recommendation I.366.2 (1999), AAL type 2 service specific
+      convergence sublayer for trunking.
+
+   -  ITU-T Recommendation I.371 (2000), Traffic control and congestion
+      control in B-ISDN.
+
+   -  ITU-T Recommendation Q.763 (1999), Signalling System No. 7 - ISDN
+      user part formats and codes.
+
+   -  ITU-T Recommendation Q.765.5 (2001), Application transport
+      mechanism - Bearer independent call control (BICC).
+
+   -  ITU-T Recommendation Q.931 (1998), ISDN user-network interface
+      layer 3 specification for basic call control.
+
+   -  ITU-T Recommendation Q.2630.1 (1999), AAL type 2 signalling
+      protocol (Capability Set 1).
+
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 7]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ITU-T Recommendation Q.2931 (1995), Digital Subscriber Signalling
+      System No. 2 (DSS2) - User-Network Interface (UNI) - Layer 3
+      specification for basic call/connection control.
+
+   -  ITU-T Recommendation Q.2941.1 (1997), Digital Subscriber
+      Signalling System No. 2 - Generic identifier transport.
+
+   -  ITU-T Recommendation Q.2961.1 (1995), Additional signalling
+      capabilities to support traffic parameters for the tagging option
+      and the sustainable call rate parameter set.
+
+   -  ITU-T Recommendation Q.2961.2 (1997), Additional traffic
+      parameters: Support of ATM transfer capability in the broadband
+      bearer capability information element.
+
+   -  ITU-T Recommendation Q.2965.1 (1999), Digital subscriber
+      signalling system No. 2 - Support of Quality of Service classes.
+
+   -  ITU-T Recommendation Q.2965.2 (1999), Digital subscriber
+      signalling system No. 2 - Signalling of individual Quality of
+      Service parameters.
+
+   -  ITU-T Recommendation V.76 (1996), Generic multiplexer using V.42
+      LAPM-based procedures.
+
+   -  ITU-T Recommendation X.213 (1995), Information technology - Open
+      Systems Interconnection - Network service definition plus
+      Amendment 1 (1997), Addition of the Internet protocol address
+      format identifier.
+
+   -  ITU-T Recommendation X.680 (1997), Information technology -
+      Abstract Syntax Notation One (ASN.1): Specification of basic
+      notation.
+
+   -  ITU-T Recommendation X.690 (1997), Information Technology - ASN.1
+      Encoding Rules: Specification of Basic Encoding Rules (BER),
+      Canonical Encoding Rules (CER) and Distinguished Encoding Rules
+      (DER).
+
+   -  ATM Forum (1996), ATM User-Network Interface (UNI) Signalling
+      Specification - Version 4.0.
+
+   [RFC 1006] Rose, M. and D. Cass, "ISO Transport Service on top of the
+              TCP, Version 3", STD 35, RFC 1006, May 1987.
+
+   [RFC 2026] Brander, S., "The Internet Standards Process -- Revision
+              3", BCP 9, RFC 2026, October 1996.
+
+
+
+
+Groves, et al.              Standards Track                     [Page 8]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   [RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate
+              Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+   [RFC 2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+              Specifications: ABNF", RFC 2234, November 1997.
+
+   [RFC 2327] Handley, M. and V. Jacobson, "SDP: Session Description
+              Protocol", RFC 2327, April 1998.
+
+   [RFC 2402] Kent, S. and R. Atkinson, "IP Authentication Header", RFC
+              2402, November 1998.
+
+   [RFC 2406] Kent, S. and R. Atkinson, "IP Encapsulating Security
+              Payload (ESP)", RFC 2406, November 1998.
+
+2.2   Informative references
+
+   -  ITU-T Recommendation E.180/Q.35 (1998), Technical characteristics
+      of tones for the telephone service.
+
+   -  CCITT Recommendation G.711 (1988), Pulse Code Modulation (PCM) of
+      voice frequencies.
+
+   -  ITU-T Recommendation H.221 (1999), Frame structure for a 64 to
+      1920 kbit/s channel in audiovisual teleservices.
+
+   -  ITU  T Recommendation H.223 (1996), Multiplexing protocol for low
+      bit rate multimedia communication.
+
+   -  ITU-T Recommendation H.226 (1998), Channel aggregation protocol
+      for multilink operation on circuit-switched networks
+
+   -  ITU-T Recommendation Q.724 (1998), Signalling procedures.
+
+   -  ITU-T Recommendation Q.764 (1999), Signalling system No. 7 - ISDN
+      user part signalling procedures.
+
+   -  ITU-T Recommendation Q.1902.4 (2001), Bearer independent call
+      control protocol - Basic call procedures.
+
+   [RFC 768]  Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+              August 1980.
+
+   [RFC 791]  Postel, J., "Internet Protocol", STD 5, RFC 791, September
+              1981.
+
+   [RFC 793]  Postel, J., "Transmission Control Protocol", STD 7, RFC
+              793, September 1981.
+
+
+
+Groves, et al.              Standards Track                     [Page 9]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   [RFC 1661] Simpson, W., Ed., "The Point-to-Point Protocol (PPP)", STD
+              51, RFC 1661, July 1994.
+
+   [RFC 1889] Schulzrinne, H., Casner, S., Frederick, R. and V.
+              Jacobson, "RTP: A Transport Protocol for Real-Time
+              Applications", RFC 1889, January 1996.
+
+   [RFC 1890] Schulzrinne, H. and G. Fokus, "RTP Profile for Audio and
+              Video Conferences with Minimal Control",  RFC 1890,
+              January 1996.
+
+   [RFC 2401] Kent, S. and R. Atkinson, "Security Architecture for the
+              Internet Protocol", RFC 2401, November 1998.
+
+   [RFC 2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+              (IPv6) Specification", RFC 2460, December 1998.
+
+   [RFC 2543] Handley, M., Schulzrinne, H., Schooler, E. and J.
+              Rosenberg, "SIP: Session Initiation Protocol", RFC 2543,
+              March 1999.
+
+   [RFC 2805] Greene, N., Ramalho, M. and B. Rosen, "Media Gateway
+              Control Protocol Architecture and Requirements", RFC 2805,
+              April 2000.
+
+3  Definitions
+
+   This document defines the following terms:
+
+   Access gateway:
+   A type of gateway that provides a User-Network Interface (UNI) such
+   as ISDN.
+
+   Descriptor:
+   A syntactic element of the protocol that groups related properties.
+   For instance, the properties of a media flow on the MG can be set by
+   the MGC by including the appropriate descriptor in a command.
+
+   Media Gateway (MG):
+   The media gateway converts media provided in one type of network to
+   the format required in another type of network.  For example, a MG
+   could terminate bearer channels from a switched circuit network
+   (e.g., DS0s) and media streams from a packet network (e.g., RTP
+   streams in an IP network).  This gateway may be capable of processing
+   audio, video and T.120 alone or in any combination, and will be
+   capable of full duplex media translations.  The MG may also play
+   audio/video messages and perform other IVR functions, or may perform
+   media conferencing.
+
+
+
+Groves, et al.              Standards Track                    [Page 10]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Media Gateway Controller (MGC):
+   Controls the parts of the call state that pertain to connection
+   control for media channels in a MG.
+
+   Multipoint Control Unit (MCU):
+   An entity that controls the setup and coordination of a multi-user
+   conference that typically includes processing of audio, video and
+   data.
+
+   Residential gateway:
+   A gateway that interworks an analogue line to a packet network.  A
+   residential gateway typically contains one or two analogue lines and
+   is located at the customer premises.
+
+   SCN FAS signalling gateway:
+   This function contains the SCN Signalling Interface that terminates
+   SS7, ISDN or other signalling links where the call control channel
+   and bearer channels are collocated in the same physical span.
+
+   SCN NFAS signalling gateway:
+   This function contains the SCN Signalling Interface that terminates
+   SS7 or other signalling links where the call control channels are
+   separated from bearer channels.
+
+   Stream:
+   Bidirectional media or control flow received/sent by a media gateway
+   as part of a call or conference.
+
+   Trunk:
+   A communication channel between two switching systems such as a DS0
+   on a T1 or E1 line.
+
+   Trunking gateway:
+   A gateway between SCN network and packet network that typically
+   terminates a large number of digital circuits.
+
+4  Abbreviations
+
+   This RFC document uses the following abbreviations:
+
+   ALF   Application Layer Framing
+
+   ATM   Asynchronous Transfer Mode
+
+   CAS   Channel Associated Signalling
+
+   DTMF  Dual Tone Multi-Frequency
+
+
+
+
+Groves, et al.              Standards Track                    [Page 11]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   FAS   Facility Associated Signalling
+
+   GSM   Global System for Mobile communications
+
+   GW    GateWay
+
+   IANA  Internet Assigned Numbers Authority (superseded by Internet
+         Corporation for Assigned Names and Numbers - ICANN)
+
+   IP    Internet Protocol
+
+   ISUP  ISDN User Part
+
+   IVR   Interactive Voice Response
+
+   MG    Media Gateway
+
+   MGC   Media Gateway Controller
+
+   NFAS  Non-Facility Associated Signalling
+
+   PRI   Primary Rate Interface
+
+   PSTN  Public Switched Telephone Network
+
+   QoS   Quality of Service
+
+   RTP   Real-time Transport Protocol
+
+   SCN   Switched Circuit Network
+
+   SG    Signalling Gateway
+
+   SS7   Signalling System No. 7
+
+5  Conventions
+
+   In the H.248.1 Recommendation, "SHALL" refers to a mandatory
+   requirement, while "SHOULD" refers to a suggested but optional
+   feature or procedure.  The term "MAY" refers to an optional course of
+   action without expressing a preference.  Note that these definition
+   are overridden in the present document by the RFC 2119 conventions
+   stated at the beginning of this document.  RFC 2119 has a more
+   precise definition of "should" than is provided by the ITU-T.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 12]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+6  Connection model
+
+   The connection model for the protocol describes the logical entities,
+   or objects, within the Media Gateway that can be controlled by the
+   Media Gateway Controller.  The main abstractions used in the
+   connection model are Terminations and Contexts.
+
+   A Termination sources and/or sinks one or more streams.  In a
+   multimedia conference, a Termination can be multimedia and sources or
+   sinks multiple media streams.  The media stream parameters, as well
+   as modem, and bearer parameters are encapsulated within the
+   Termination.
+
+   A Context is an association between a collection of Terminations.
+   There is a special type of Context, the null Context, which contains
+   all Terminations that are not associated to any other Termination.
+   For instance, in a decomposed access gateway, all idle lines are
+   represented by Terminations in the null Context.
+
+   Following is a graphical depiction of these concepts.  The diagram of
+   Figure 1 gives several examples and is not meant to be an
+   all-inclusive illustration.  The asterisk box in each of the Contexts
+   represents the logical association of Terminations implied by the
+   Context.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 13]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context                          +-------------+ |  |
+         | |                                 | Termination | |  |
+         | |                                 |-------------| |  |
+         | |  +-------------+             +->| SCN Bearer  |<---+->
+         | |  | Termination |   +-----+   |  |   Channel   | |  |
+         | |  |-------------|   |     |---+  +-------------+ |  |
+       <-+--->| RTP Stream  |---|  *  |                      |  |
+         | |  |             |   |     |---+  +-------------+ |  |
+         | |  +-------------+   +-----+   |  | Termination | |  |
+         | |                              |  |-------------| |  |
+         | |                              +->| SCN Bearer  |<---+->
+         | |                                 |   Channel   | |  |
+         | |                                 +-------------+ |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         |                                                      |
+         |                    +------------------------------+  |
+         |   (NULL Context)   |Context                       |  |
+         |  +-------------+   |              +-------------+ |  |
+         |  | Termination |   | +-----+      | Termination | |  |
+         |  |-------------|   | |     |      |-------------| |  |
+         |  | SCN Bearer  |   | |  *  |------| SCN Bearer  |<---+->
+         |  |   Channel   |   | |     |      |   Channel   | |  |
+         |  +-------------+   | +-----+      +-------------+ |  |
+         |                    +------------------------------+  |
+         |                                                      |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context                                          |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Termination |   +-----+      | Termination | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| SCN Bearer  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |   Channel   |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         | ___________________________________________________  |
+         +------------------------------------------------------+
+
+            Figure 1: Examples of Megaco/H.248 Connection Model
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 14]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The example in Figure 2 shows an example of one way to accomplish a
+   call-waiting scenario in a decomposed access gateway, illustrating
+   the relocation of a Termination between Contexts.  Terminations T1
+   and T2 belong to Context C1 in a two-way audio call.  A second audio
+   call is waiting for T1 from Termination T3.  T3 is alone in Context
+   C2.  T1 accepts the call from T3, placing T2 on hold.  This action
+   results in T1 moving into Context C2, as shown in Figure 3.
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context C1                                       |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Term. T2    |   +-----+      | Term. T1    | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| RTP Stream  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |             |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context C2                                       |  |
+         | |                                 +-------------+ |  |
+         | |                    +-----+      | Term. T3    | |  |
+         | |                    |     |      |-------------| |  |
+         | |                    |  *  |------| SCN Bearer  |<---+->
+         | |                    |     |      |   Channel   | |  |
+         | |                    +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         +------------------------------------------------------+
+
+     Figure 2: Example Call Waiting Scenario / Alerting Applied to T1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 15]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context C1                                       |  |
+         | |  +-------------+                                |  |
+         | |  | Term. T2    |   +-----+                      |  |
+         | |  |-------------|   |     |                      |  |
+       <-+--->| RTP Stream  |---|  *  |                      |  |
+         | |  |             |   |     |                      |  |
+         | |  +-------------+   +-----+                      |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context C2                                       |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Term. T1    |   +-----+      | Term. T3    | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| SCN Bearer  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |   Channel   |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         +------------------------------------------------------+
+
+          Figure 3. Example Call Waiting Scenario / Answer by T1
+
+6.1   Contexts
+
+   A Context is an association between a number of Terminations.  The
+   Context describes the topology (who hears/sees whom) and the media
+   mixing and/or switching parameters if more than two Terminations are
+   involved in the association.
+
+   There is a special Context called the null Context.  It contains
+   Terminations that are not associated to any other Termination.
+   Terminations in the null Context can have their parameters examined
+   or modified, and may have events detected on them.
+
+   In general, an Add command is used to add Terminations to Contexts.
+   If the MGC does not specify an existing Context to which the
+   Termination is to be added, the MG creates a new Context.  A
+   Termination may be removed from a Context with a Subtract command,
+   and a Termination may be moved from one Context to another with a
+   Move command.  A Termination SHALL exist in only one Context at a
+   time.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 16]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The maximum number of Terminations in a Context is a MG property.
+   Media gateways that offer only point-to-point connectivity might
+   allow at most two Terminations per Context.  Media gateways that
+   support multipoint conferences might allow three or more Terminations
+   per Context.
+
+6.1.1 Context attributes and descriptors
+
+   The attributes of Contexts are:
+
+   -  ContextID.
+
+   -  The topology (who hears/sees whom).
+
+      The topology of a Context describes the flow of media between the
+      Terminations within a Context.  In contrast, the mode of a
+      Termination (send/receive/...) describes the flow of the media at
+      the ingress/egress of the media gateway.
+
+   -  The priority is used for a Context in order to provide the MG with
+      information about a certain precedence handling for a Context.
+      The MGC can also use the priority to control autonomously the
+      traffic precedence in the MG in a smooth way in certain
+      situations (e.g., restart), when a lot of Contexts must be handled
+      simultaneously.  Priority 0 is the lowest priority and a priority
+      of 15 is the highest priority.
+
+   -  An indicator for an emergency call is also provided to allow a
+      preference handling in the MG.
+
+6.1.2 Creating, deleting and modifying Contexts
+
+   The protocol can be used to (implicitly) create Contexts and modify
+   the parameter values of existing Contexts.  The protocol has commands
+   to add Terminations to Contexts, subtract them from Contexts, and to
+   move Terminations between Contexts.  Contexts are deleted implicitly
+   when the last remaining Termination is subtracted or moved out.
+
+6.2   Terminations
+
+   A Termination is a logical entity on a MG that sources and/or sinks
+   media and/or control streams.  A Termination is described by a number
+   of characterizing Properties, which are grouped in a set of
+   Descriptors that are included in commands.  Terminations have unique
+   identities (TerminationIDs), assigned by the MG at the time of their
+   creation.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 17]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Terminations representing physical entities have a semi-permanent
+   existence.  For example, a Termination representing a TDM channel
+   might exist for as long as it is provisioned in the gateway.
+   Terminations representing ephemeral information flows, such as RTP
+   flows, would usually exist only for the duration of their use.
+
+   Ephemeral Terminations are created by means of an Add command.  They
+   are destroyed by means of a Subtract command.  In contrast, when a
+   physical Termination is Added to or Subtracted from a Context, it is
+   taken from or to the null Context, respectively.
+
+   Terminations may have signals applied to them (see 7.1.11).
+   Terminations may be programmed to detect Events, the occurrence of
+   which can trigger notification messages to the MGC, or action by the
+   MG.  Statistics may be accumulated on a Termination.  Statistics are
+   reported to the MGC upon request (by means of the AuditValue command,
+   see 7.2.5) and when the Termination is taken out of the call it is
+   in.
+
+   Multimedia gateways may process multiplexed media streams.  For
+   example, Recommendation H.221 describes a frame structure for
+   multiple media streams multiplexed on a number of digital 64 kbit/s
+   channels.  Such a case is handled in the connection model in the
+   following way.  For every bearer channel that carries part of the
+   multiplexed streams, there is a physical or ephemeral "bearer
+   Termination".  The bearer Terminations that source/sink the digital
+   channels are connected to a separate Termination called the
+   "multiplexing Termination".  The multiplexing termination is an
+   ephemeral termination representing a frame-oriented session.  The
+   MultiplexDescriptor for this Termination describes the multiplex used
+   (e.g., H.221 for an H.320 session) and indicates the order in which
+   the contained digital channels are assembled into a frame.
+
+   Multiplexing terminations may be cascades (e.g., H.226 multiplex of
+   digital channels feeding into a H.223 multiplex supporting an H.324
+   session).
+
+   The individual media streams carried in the session are described by
+   StreamDescriptors on the multiplexing Termination.  These media
+   streams can be associated with streams sourced/sunk by Terminations
+   in the Context other than the bearer Terminations supporting the
+   multiplexing Termination.  Each bearer Termination supports only a
+   single data stream.  These data streams do not appear explicitly as
+   streams on the multiplexing Termination and they are hidden from the
+   rest of the context.
+
+   Figures 4, 5, 6, and 6a illustrate typical applications of the
+   multiplexing termination and Multiplex Descriptor.
+
+
+
+Groves, et al.              Standards Track                    [Page 18]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                  +-----------------------------------+
+                  | Context     +-------+             |
+                 +----+         |       |             |
+   Circuit 1 -|--| TC1|---------+ Tmux  |             |
+              |  +----+ (Str 1) |       |  Audio    +-----+
+              |   |             |       +-----*-----+     |-----
+              |  +----+         | H.22x | Stream 1  |     |
+   Circuit 2 -|--| TC2|---------+ multi-|           | TR1 |
+              |  +----+ (Str 1) | plex  |           |(RTP)|
+              |   |             |       |  Video    |     |
+              |  +----+         |       +-----*-----+     |-----
+   Circuit 3 -|--| TC3|---------+       | Stream 2  |     |
+              /  +----+ (Str 1) |       |           +-----+
+             /    |             +-------+             |
+            /     +-----------------\-----------------+
+   Audio, video, and control         \
+   signals are carried in frames    Tmux is an ephemeral with two
+   spanning the circuits.           explicit Stream Descriptors
+                                    and a Multiplex Descriptor.
+
+      Figure 4: Multiplexed Termination Scenario - Circuit to Packet
+              (Asterisks * denote the centre of the context)
+
+                    Context
+                  +--------------------------------------+
+                  |       +-------+        +-------+     |
+                 +----+   |       |        |       |   +----+
+   Circuit 1 ----| TC1|---+ Tmux1 |  Audio | Tmux2 +---| TC4|---
+                 +----+   |       +---*----+       |   +----+
+                  |       |       |  Str 1 |       |     |
+                 +----+   | H.22x |        | H.22x |   +----+
+   Circuit 2 ----| TC2|---+ multi-|        | multi-+---| TC5|---
+                 +----+   | plex  |        | plex  |   +----+
+                  |       |       |  Video |       |     |
+                 +----+   |       +---*----+       |   +----+
+   Circuit 3 ----| TC3|---+       |  Str 2 |       +---| TC6|---
+                 +----+   |       |        |       |   +----+
+                  |       +-------+        +-------+     |
+                  +-----------------\-----/--------------+
+                                     \   /
+             Tmux1 and Tmux2 are ephemerals each with two
+            explicit Stream Descriptors and a Multiplex Descriptor.
+
+      Figure 5: Multiplexed Termination Scenario - Circuit to Circuit
+              (Asterisks * denote the centre of the context)
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 19]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                  +-----------------------------------+
+                  | Context     +-------+             |
+                 +----+         |       |             |
+   Circuit 1 -|--| TC1|---------+ Tmux  |             |
+              |  +----+ (Str 1) |       |  Audio    +-----+
+              |   |             |       +-----*-----+ TR1 |-----
+              |  +----+         | H.22x | Stream 1  |(RTP)|
+   Circuit 2 -|--| TC2|---------+ multi-|           +-----+
+              |  +----+ (Str 1) | plex  |             |
+              |   |             |       |  Video    +-----+
+              |  +----+         |       +-----*-----+ TR2 |-----
+   Circuit 3 -|--| TC3|---------+       | Stream 2  |(RTP)|
+              /  +----+ (Str 1) |       |           +-----+
+             /    |             +-------+             |
+            /     +-----------------\-----------------+
+   Audio, video, and control         \ Tmux is an ephemeral with two
+   signals are carried in frames    explicit Stream Descriptors and
+   spanning the circuits.           and a Multiplex Descriptor.
+
+      Figure 6: Multiplexed Termination Scenario - Single to Multiple
+                               Terminations
+              (Asterisks * denote the centre of the context)
+
+            Context
+          +---------------------------------------------+
+          |       +-------+       +-------+             |
+   Cct 1 +----+   |       |       |       | Audio     +-----+
+     ----| TC1|---+ Tmux1 |       | Tmux2 +-----*-----| TR1 |-----
+         +----+   |       |       |       | Stream 1  |(RTP)|
+          |       |       | Data  |       |           +-----+
+   Cct 2 +----+   | H.226 +-------+ H.223 |             |
+     ----| TC2|---+ multi-|(Str 1)| multi-| Control   +-----+
+         +----+   | plex  |       | plex  +-----*-----+ Tctl|-----
+          |       |       |       |       | Stream 3  +-----+
+   Cct 3 +----+   |       |       |       |             |
+     ----| TC3|---+       |       |       |           +-----+
+         +----+   |       |       |       +-----*-----+ TR2 |-----
+          |       +-------+       |       |  Video    |(RTP)|
+          |                       +-------+ Stream 2  +-----+
+          |                                             |
+          +---------------------------------------------+
+        Tmux1 has a Multiplex Descriptor and a single data stream.
+        Tmux2 has a Multiplex Descriptor with a single bearer and
+        three explicit Stream Descriptors.
+
+    Figure 6a: Multiplexed Termination Scenario - Cascaded Multiplexes
+              (Asterisks * denote the centre of the context)
+     Note: this figure does not appear in Rec.  H.248.1
+
+
+
+Groves, et al.              Standards Track                    [Page 20]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Terminations may be created which represent multiplexed bearers, such
+   as an ATM AAL Type 2 bearer.  When a new multiplexed bearer is to be
+   created, an ephemeral Termination is created in a Context established
+   for this purpose.  When the Termination is subtracted, the
+   multiplexed bearer is destroyed.
+
+6.2.1 Termination dynamics
+
+   The protocol can be used to create new Terminations and to modify
+   property values of existing Terminations.  These modifications
+   include the possibility of adding or removing events and/or signals.
+   The Termination properties, and events and signals are described in
+   the ensuing subclauses.  An MGC can only release/modify Terminations
+   and the resources that the Termination represents which it has
+   previously seized via, e.g., the Add command.
+
+6.2.2 TerminationIDs
+
+   Terminations are referenced by a TerminationID, which is an arbitrary
+   schema chosen by the MG.
+
+   TerminationIDs of physical Terminations are provisioned in the Media
+   Gateway.  The TerminationIDs may be chosen to have structure.  For
+   instance, a TerminationID may consist of trunk group and a trunk
+   within the group.
+
+   A wildcarding mechanism using two types of wildcards can be used with
+   TerminationIDs.  The two wildcards are ALL and CHOOSE.  The former is
+   used to address multiple Terminations at once, while the latter is
+   used to indicate to a media gateway that it must select a Termination
+   satisfying the partially specified TerminationID.  This allows, for
+   instance, that a MGC instructs a MG to choose a circuit within a
+   trunk group.
+
+   When ALL is used in the TerminationID of a command, the effect is
+   identical to repeating the command with each of the matching
+   TerminationIDs.  The use of ALL does not address the ROOT
+   termination.  Since each of these commands may generate a response,
+   the size of the entire response may be large.  If individual
+   responses are not required, a wildcard response may be requested.  In
+   such a case, a single response is generated, which contains the UNION
+   of all of the individual responses which otherwise would have been
+   generated, with duplicate values suppressed.  For instance, given a
+   Termination Ta with properties p1=a, p2=b and Termination Tb with
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 21]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   properties p2=c, p3=d, a UNION response would consist of a wildcarded
+   TerminationId and the sequence of properties p1=a, p2=b,c and p3=d.
+   Wildcard response may be particularly useful in the Audit commands.
+
+   The encoding of the wildcarding mechanism is detailed in Annexes A
+   and B.
+
+6.2.3 Packages
+
+   Different types of gateways may implement Terminations that have
+   widely differing characteristics.  Variations in Terminations are
+   accommodated in the protocol by allowing Terminations to have
+   optional Properties, Events, Signals and Statistics implemented by
+   MGs.
+
+   In order to achieve MG/MGC interoperability, such options are grouped
+   into Packages, and typically a Termination realizes a set of such
+   Packages.  More information on definition of packages can be found in
+   clause 12.  An MGC can audit a Termination to determine which
+   Packages it realizes.
+
+   Properties, Events, Signals and Statistics defined in Packages, as
+   well as parameters to them, are referenced by identifiers (Ids).
+   Identifiers are scoped.  For each package, PropertyIds, EventIds,
+   SignalIds, StatisticsIds and ParameterIds have unique name spaces and
+   the same identifier may be used in each of them.  Two PropertyIds in
+   different packages may also have the same identifier, etc.
+
+   To support a particular package the MG must support all properties,
+   signals, events and statistics defined in a package.  It must also
+   support all Signal and Event parameters.  The MG may support a subset
+   of the values listed in a package for a particular Property or
+   Parameter.
+
+   When packages are extended, the properties, events, signals and
+   statistics defined in the base package can be referred to using
+   either the extended package name or the base package name.  For
+   example, if Package A defines event e1, and Package B extends Package
+   A, then B/e1 is an event for a termination implementing Package B. By
+   definition, the MG MUST also implement the base Package, but it is
+   optional to publish the base package as an allowed interface.  If it
+   does publish  A, then A would be reported on the Package Descriptor
+   in AuditValue as well as B, and event A/e1 would be available on a
+   termination.  If the MG does not publish A, then only B/e1 would be
+   available.  If published through AuditValue, A/e1 and B/e1 are the
+   same event.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 22]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   For improved interoperability and backward compatibility, an MG MAY
+   publish all Packages supported by its Terminations, including base
+   Packages from which extended Packages are derived.  An exception to
+   this is in cases where the base packages are expressly "Designed to
+   be extended only".
+
+6.2.4 Termination properties and descriptors
+
+   Terminations have properties.  The properties have unique
+   PropertyIDs. Most properties have default values, which are
+   explicitly defined in this protocol specification or in a package
+   (see clause 12) or set by provisioning.  If not provisioned
+   otherwise, the properties in all descriptors except TerminationState
+   and LocalControl default to empty/"no value" when a Termination is
+   first created or returned to the null Context.  The default contents
+   of the two exceptions are described in 7.1.5 and 7.1.7.
+
+   The provisioning of a property value in the MG will override any
+   default value, be it supplied in this protocol specification or in a
+   package.  Therefore if it is essential for the MGC to have full
+   control over the property values of a Termination, it should supply
+   explicit values when ADDing the Termination to a Context.
+   Alternatively, for a physical Termination the MGC can determine any
+   provisioned property values by auditing the Termination while it is
+   in the NULL Context.
+
+   There are a number of common properties for Terminations and
+   properties specific to media streams.  The common properties are also
+   called the Termination state properties.  For each media stream,
+   there are local properties and properties of the received and
+   transmitted flows.
+
+   Properties not included in the base protocol are defined in Packages.
+   These properties are referred to by a name consisting of the
+   PackageName and a PropertyId.  Most properties have default values
+   described in the Package description.  Properties may be read-only or
+   read/write.  The possible values of a property may be audited, as can
+   their current values.  For properties that are read/write, the MGC
+   can set their values.  A property may be declared as "Global" which
+   has a single value shared by all Terminations realizing the package.
+   Related properties are grouped into descriptors for convenience.
+
+   When a Termination is added to a Context, the value of its read/write
+   properties can be set by including the appropriate descriptors as
+   parameters to the Add command.  Similarly, a property of a
+   Termination in a Context may have its value changed by the Modify
+   command.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 23]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Properties may also have their values changed when a Termination is
+   moved from one Context to another as a result of a Move command.  In
+   some cases, descriptors are returned as output from a command.
+
+   In general, if a Descriptor is completely omitted from one of the
+   aforementioned Commands, the properties in that Descriptor retain
+   their prior values for the Termination(s) upon which the Command
+   acts.  On the other hand, if some read/write properties are omitted
+   from a Descriptor in a Command (i.e., the Descriptor is only
+   partially specified), those properties will be reset to their default
+   values for the Termination(s) upon which the Command acts, unless the
+   package specifies other behavior.  For more details, see clause 7.1
+   dealing with the individual Descriptors.
+
+   The following table lists all of the possible descriptors and their
+   use.  Not all descriptors are legal as input or output parameters to
+   every command.
+
+   Descriptor name  Description
+
+   Modem            Identifies modem type and properties when
+                    applicable
+
+   Mux              Describes multiplex type for multimedia
+                    Terminations (e.g., H.221, H.223, H.225.0) and
+                    Terminations forming the input mux
+
+   Media            A list of media stream specifications (see 7.1.4)
+
+   TerminationState Properties of a Termination (which can be defined
+                    in Packages) that are not stream specific
+
+   Stream           A list of remote/local/localControl descriptors for
+                    a single stream
+
+   Local            Contains properties that specify the media flows
+                    that the MG receives from the remote entity.
+
+   Remote           Contains properties that specify the media flows
+                    that the MG sends to the remote entity.
+
+   LocalControl     Contains properties (which can be defined in
+                    packages) that are of interest between the MG and
+                    the MGC.
+
+   Events           Describes events to be detected by the MG and what
+                    to do when an event is detected.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 24]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   EventBuffer      Describes events to be detected by the MG when
+                    Event Buffering is active.
+
+   Signals          Describes signals (see 7.1.11) applied  to
+                    Terminations.
+
+   Audit            In Audit commands, identifies which information is
+                    desired.
+
+   Packages         In AuditValue, returns a list of Packages realized
+                    by Termination.
+
+   DigitMap         Defines patterns against which sequences of a
+                    specified set of events are to be matched so they
+                    can be reported as a group rather than singly.
+
+   ServiceChange    In ServiceChange, what, why service change
+                    occurred, etc.
+
+   ObservedEvents   In Notify or AuditValue, report of events observed.
+
+   Statistics       In Subtract and Audit, report of Statistics kept on
+                    a Termination.
+
+   Topology         Specifies flow directions between Terminations in a
+                    Context.
+
+   Error            Contains an error code and optionally error text;
+                    it may occur in command replies and in Notify
+                    requests.
+
+6.2.5 Root Termination
+
+   Occasionally, a command must refer to the entire gateway, rather than
+   a Termination within it.  A special TerminationID, "Root" is reserved
+   for this purpose.  Packages may be defined on Root.  Root thus may
+   have properties, events and statistics (signals are not appropriate
+   for root).  Accordingly, the root TerminationID may appear in:
+
+   -  a Modify command - to change a property or set an event
+
+   -  a Notify command - to report an event
+
+   -  an AuditValue return - to examine the values of properties and
+      statistics implemented on root
+
+   -  an AuditCapability - to determine what properties of root are
+      implemented
+
+
+
+Groves, et al.              Standards Track                    [Page 25]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  a ServiceChange - to declare the gateway in or out of service.
+
+   Any other use of the root TerminationID is an error.  Error code
+   410 - Incorrect identifier shall be returned in these cases.
+
+7  Commands
+
+   The protocol provides commands for manipulating the logical entities
+   of the protocol connection model, Contexts and Terminations.
+   Commands provide control at the finest level of granularity supported
+   by the protocol.  For example, Commands exist to add Terminations to
+   a Context, modify Terminations, subtract Terminations from a Context,
+   and audit properties of Contexts or Terminations.  Commands provide
+   for complete control of the properties of Contexts and Terminations.
+   This includes specifying which events a Termination is to report,
+   which signals/actions are to be applied to a Termination and
+   specifying the topology of a Context (who hears/sees whom).
+
+   Most commands are for the specific use of the Media Gateway
+   Controller as command initiator in controlling Media Gateways as
+   command responders.  The exceptions are the Notify and ServiceChange
+   commands: Notify is sent from Media Gateway to Media Gateway
+   Controller, and ServiceChange may be sent by either entity.  Below is
+   an overview of the commands; they are explained in more detail in
+   7.2.
+
+   1) Add - The Add command adds a Termination to a Context.  The Add
+      command on the first Termination in a Context is used to create a
+      Context.
+
+   2) Modify - The Modify command modifies the properties, events and
+      signals of a Termination.
+
+   3) Subtract - The Subtract command disconnects a Termination from its
+      Context and returns statistics on the Termination's participation
+      in the Context.  The Subtract command on the last Termination in a
+      Context deletes the Context.
+
+   4) Move - The Move command atomically moves a Termination to another
+      Context.
+
+   5) AuditValue - The AuditValue command returns the current state of
+      properties, events, signals and statistics of Terminations.
+
+   6) AuditCapabilities - The AuditCapabilities command returns all the
+      possible values for Termination properties, events and signals
+      allowed by the Media Gateway.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 26]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7) Notify - The Notify command allows the Media Gateway to inform the
+      Media Gateway Controller of the occurrence of events in the Media
+      Gateway.
+
+   8) ServiceChange - The ServiceChange command allows the Media Gateway
+      to notify the Media Gateway Controller that a Termination or group
+      of Terminations is about to be taken out of service or has just
+      been returned to service.  ServiceChange is also used by the MG to
+      announce its availability to a MGC (registration), and to notify
+      the MGC of impending or completed restart of the MG.  The MGC may
+      announce a handover to the MG by sending it a ServiceChange
+      command.  The MGC may also use ServiceChange to instruct the MG to
+      take a Termination or group of Terminations in or out of service.
+
+   These commands are detailed in 7.2.1 through 7.2.8.
+
+7.1   Descriptors
+
+   The parameters to a command are termed Descriptors.  A descriptor
+   consists of a name and a list of items.  Some items may have values.
+   Many Commands share common descriptors.  This subclause enumerates
+   these descriptors.  Descriptors may be returned as output from a
+   command.  In any such return of descriptor contents, an empty
+   descriptor is represented by its name unaccompanied by any list.
+   Parameters and parameter usage specific to a given Command type are
+   described in the subclause that describes the Command.
+
+7.1.1 Specifying parameters
+
+   Command parameters are structured into a number of descriptors.  In
+   general, the text format of descriptors is
+   DescriptorName=<someID>{parm=value, parm=value, ...}.
+
+   Parameters may be fully specified, overspecified or underspecified:
+
+   1) Fully specified parameters have a single, unambiguous value that
+      the command initiator is instructing the command responder to use
+      for the specified parameter.
+
+   2) Underspecified parameters, using the CHOOSE value, allow the
+      command responder to choose any value it can support.
+
+   3) Overspecified parameters have a list of potential values.  The
+      list order specifies the command initiator's order of preference
+      of selection.  The command responder chooses one value from
+      the offered list and returns that value to the command initiator.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 27]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If a required descriptor other than the Audit descriptor is
+   unspecified (i.e., entirely absent) from a command, the previous
+   values set in that descriptor for that Termination, if any, are
+   retained.  In commands other than Subtract, a missing Audit
+   descriptor is equivalent to an empty Audit descriptor.  The Behaviour
+   of the MG with respect to unspecified parameters within a descriptor
+   varies with the descriptor concerned, as indicated in succeeding
+   subclauses.  Whenever a parameter is underspecified or overspecified,
+   the descriptor containing the value chosen by the responder is
+   included as output from the command.
+
+   Each command specifies the TerminationId the command operates on.
+   This TerminationId may be "wildcarded".  When the TerminationId of a
+   command is wildcarded, the effect shall be as if the command was
+   repeated with each of the TerminationIds matched.
+
+7.1.2 Modem descriptor
+
+   The Modem descriptor specifies the modem type and parameters, if any,
+   required for use in e.g., H.324 and text conversation.  The
+   descriptor includes the following modem types: V.18, V.22, V.22 bis,
+   V.32, V.32 bis, V.34, V.90, V.91, Synchronous ISDN, and allows for
+   extensions.  By default, no Modem descriptor is present in a
+   Termination.
+
+7.1.3 Multiplex descriptor
+
+   In multimedia calls, a number of media streams are carried on a
+   (possibly different) number of bearers.  The multiplex descriptor
+   associates the media and the bearers.  The descriptor includes the
+   multiplex type:
+
+   -  H.221;
+
+   -  H.223;
+
+   -  H.226;
+
+   -  V.76;
+
+   -  possible extensions,
+
+   and a set of TerminationIDs representing the multiplexed bearers, in
+   order.  For example:
+
+      Mux = H.221{ MyT3/1/2, MyT3/2/13, MyT3/3/6, MyT3/21/22}
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 28]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.1.4 Media descriptor
+
+   The Media descriptor specifies the parameters for all the media
+   streams.  These parameters are structured into two descriptors: a
+   TerminationState descriptor, which specifies the properties of a
+   Termination that are not stream dependent, and one or more Stream
+   descriptors each of which describes a single media stream.
+
+   A stream is identified by a StreamID.  The StreamID is used to link
+   the streams in a Context that belong together.  Multiple streams
+   exiting a Termination shall be synchronized with each other.  Within
+   the Stream descriptor, there are up to three subsidiary descriptors:
+   LocalControl, Local, and Remote.  The relationship between these
+   descriptors is thus:
+
+   Media descriptor
+      TerminationState Descriptor
+      Stream descriptor
+         LocalControl descriptor
+         Local descriptor
+         Remote descriptor
+
+   As a convenience, LocalControl, Local, or Remote descriptors may be
+   included in the Media descriptor without an enclosing Stream
+   descriptor.  In this case, the StreamID is assumed to be 1.
+
+7.1.5 TerminationState descriptor
+
+   The TerminationState descriptor contains the ServiceStates property,
+   the EventBufferControl property and properties of a Termination
+   (defined in Packages) that are not stream specific.
+
+   The ServiceStates property describes the overall state of the
+   Termination (not stream specific).  A Termination can be in one of
+   the following states: "test", "out of service", or "in service".  The
+   "test" state indicates that the Termination is being tested.  The
+   state "out of service" indicates that the Termination cannot be used
+   for traffic.  The state "in service" indicates that a Termination can
+   be used or is being used for normal traffic.  "in service" is the
+   default state.
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 29]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Values assigned to Properties may be simple values
+   (integer/string/enumeration) or may be underspecified, where more
+   than one value is supplied and the MG may make a choice:
+
+   -  Alternative Values - multiple values in a list, one of which must
+      be selected
+
+   -  Ranges - minimum and maximum values, any value between min and max
+      must be selected, boundary values included
+
+   -  Greater Than/Less Than - value must be greater/less than specified
+      value
+
+   -  CHOOSE Wildcard - the MG chooses from the allowed values for the
+      property
+
+   The EventBufferControl property specifies whether events are buffered
+   following detection of an event in the Events descriptor, or
+   processed immediately.  See 7.1.9 for details.
+
+7.1.6 Stream descriptor
+
+   A Stream descriptor specifies the parameters of a single
+   bidirectional stream.  These parameters are structured into three
+   descriptors: one that contains Termination properties specific to a
+   stream and one each for local and remote flows.  The Stream
+   Descriptor includes a StreamID which identifies the stream.  Streams
+   are created by specifying a new StreamID on one of the Terminations
+   in a Context.  A stream is deleted by setting empty Local and Remote
+   descriptors for the stream with ReserveGroup and ReserveValue in
+   LocalControl set to "false" on all Terminations in the Context that
+   previously supported that stream.
+
+   StreamIDs are of local significance between MGC and MG and they are
+   assigned by the MGC.  Within a Context, StreamID is a means by which
+   to indicate which media flows are interconnected: streams with the
+   same StreamID are connected.
+
+   If a Termination is moved from one Context to another, the effect on
+   the Context to which the Termination is moved is the same as in the
+   case that a new Termination were added with the same StreamIDs as the
+   moved Termination.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 30]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.1.7 LocalControl descriptor
+
+   The LocalControl descriptor contains the Mode property, the
+   ReserveGroup and ReserveValue properties and properties of a
+   Termination (defined in Packages) that are stream specific, and are
+   of interest between the MG and the MGC.  Values of properties may be
+   underspecified as in 7.1.1.
+
+   The allowed values for the mode property are send-only, receive-only,
+   send/receive, inactive and loop-back. "Send" and "receive" are with
+   respect to the exterior of the Context, so that, for example, a
+   stream set to mode=sendOnly does not pass received media into the
+   Context.  The default value for the mode property is "Inactive".
+   Signals and Events are not affected by mode.
+
+   The boolean-valued Reserve properties, ReserveValue and ReserveGroup,
+   of a Termination indicate what the MG is expected to do when it
+   receives a Local and/or Remote descriptor.
+
+   If the value of a Reserve property is True, the MG SHALL reserve
+   resources for all alternatives specified in the Local and/or Remote
+   descriptors for which it currently has resources available.  It SHALL
+   respond with the alternatives for which it reserves resources.  If it
+   cannot not support any of the alternatives, it SHALL respond with a
+   reply to the MGC that contains empty Local and/or Remote descriptors.
+   If media begins to flow while more than a single alternative is
+   reserved, media packets may be sent/received on any of the
+   alternatives and must be processed, although only a single
+   alternative may be active at any given time.
+
+   If the value of a Reserve property is False, the MG SHALL choose one
+   of the alternatives specified in the Local descriptor (if present)
+   and one of the alternatives specified in the Remote descriptor (if
+   present).  If the MG has not yet reserved resources to support the
+   selected alternative, it SHALL reserve the resources.  If, on the
+   other hand, it already reserved resources for the Termination
+   addressed (because of a prior exchange with ReserveValue and/or
+   ReserveGroup equal to True), it SHALL release any excess resources it
+   reserved previously.  Finally, the MG shall send a reply to the MGC
+   containing the alternatives for the Local and/or Remote descriptor
+   that it selected.  If the MG does not have sufficient resources to
+   support any of the alternatives specified, it SHALL respond with
+   error 510 (insufficient resources).
+
+   The default value of ReserveValue and ReserveGroup is False.  More
+   information on the use of the two Reserve properties is provided in
+   7.1.8.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 31]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A new setting of the LocalControl Descriptor completely replaces the
+   previous setting of that descriptor in the MG.  Thus, to retain
+   information from the previous setting, the MGC must include that
+   information in the new setting.  If the MGC wishes to delete some
+   information from the existing descriptor, it merely resends the
+   descriptor (in a Modify command) with the unwanted information
+   stripped out.
+
+7.1.8 Local and Remote descriptors
+
+   The MGC uses Local and Remote descriptors to reserve and commit MG
+   resources for media decoding and encoding for the given Stream(s) and
+   Termination to which they apply.  The MG includes these descriptors
+   in its response to indicate what it is actually prepared to support.
+   The MG SHALL include additional properties and their values in its
+   response if these properties are mandatory yet not present in the
+   requests made by the MGC (e.g., by specifying detailed video encoding
+   parameters where the MGC only specified the payload type).
+
+   Local refers to the media received by the MG and Remote refers to the
+   media sent by the MG.
+
+   When text encoding the protocol, the descriptors consist of session
+   descriptions as defined in SDP (RFC 2327).  In session descriptions
+   sent from the MGC to the MG, the following exceptions to the syntax
+   of RFC 2327 are allowed:
+
+   -  the "s=", "t=" and "o=" lines are optional;
+
+   -  the use of CHOOSE is allowed in place of a single parameter value;
+      and
+
+   -  the use of alternatives is allowed in place of a single parameter
+      value.
+
+   A Stream Descriptor specifies a single bi-directional media stream
+   and so a single session description MUST NOT include more than one
+   media description ("m=" line).  A Stream Descriptor may contain
+   additional session descriptions as alternatives.  Each media stream
+   for a termination must appear in distinct Stream Descriptors.  When
+   multiple session descriptions are provided in one descriptor, the
+   "v=" lines are required as delimiters; otherwise they are optional in
+   session descriptions sent to the MG.  Implementations shall accept
+   session descriptions that are fully conformant to RFC 2327.  When
+   binary encoding the protocol the descriptor consists of groups of
+   properties (tag-value pairs) as specified in Annex C.  Each such
+   group may contain the parameters of a session description.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 32]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Below, the semantics of the Local and Remote descriptors are
+   specified in detail.  The specification consists of two parts.  The
+   first part specifies the interpretation of the contents of the
+   descriptor.  The second part specifies the actions the MG must take
+   upon receiving the Local and Remote descriptors.  The actions to be
+   taken by the MG depend on the values of the ReserveValue and
+   ReserveGroup properties of the LocalControl descriptor.
+
+   Either the Local or the Remote descriptor or both may be:
+
+   1) unspecified (i.e., absent);
+
+   2) empty;
+
+   3) underspecified through use of CHOOSE in a property value;
+
+   4) fully specified; or
+
+   5) overspecified through presentation of multiple groups of
+      properties and possibly multiple property values in one or more of
+      these groups.
+
+   Where the descriptors have been passed from the MGC to the MG, they
+   are interpreted according to the rules given in 7.1.1, with the
+   following additional comments for clarification:
+
+   a) An unspecified Local or Remote descriptor is considered to be a
+      missing mandatory parameter.  It requires the MG to use whatever
+      was last specified for that descriptor.  It is possible that there
+      was no previously specified value, in which case the descriptor
+      concerned is ignored in further processing of the command.
+
+   b) An empty Local (Remote) descriptor in a message from the MGC
+      signifies a request to release any resources reserved for the
+      media flow received (sent).
+
+   c) If multiple groups of properties are present in a Local or Remote
+      descriptor or multiple values within a group, the order of
+      preference is descending.
+
+   d) Underspecified or overspecified properties within a group of
+      properties sent by the MGC are requests for the MG to choose one
+      or more values which it can support for each of those properties.
+      In case of an overspecified property, the list of values is in
+      descending order of preference.
+
+   Subject to the above rules, subsequent action depends on the values
+   of the ReserveValue and ReserveGroup properties in LocalControl.
+
+
+
+Groves, et al.              Standards Track                    [Page 33]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If ReserveGroup is True, the MG reserves the resources required to
+   support any of the requested property group alternatives that it can
+   currently support.  If ReserveValue is True, the MG reserves the
+   resources required to support any of the requested property value
+   alternatives that it can currently support.
+
+   NOTE - If a Local or Remote descriptor contains multiple groups of
+   properties, and ReserveGroup is True, then the MG is requested to
+   reserve resources so that it can decode or encode the media stream
+   according to any of the alternatives.  For instance, if the Local
+   descriptor contains two groups of properties, one specifying
+   packetized G.711 A-law audio and the other G.723.1 audio, the MG
+   reserves resources so that it can decode one audio stream encoded in
+   either G.711 A-law format or G.723.1 format.  The MG does not have to
+   reserve resources to decode two audio streams simultaneously, one
+   encoded in G.711 A-law and one in G.723.1.  The intention for the use
+   of ReserveValue is analogous.
+
+   If ReserveGroup is true or ReserveValue is True, then the following
+   rules apply:
+
+   -  If the MG has insufficient resources to support all alternatives
+      requested by the MGC and the MGC requested resources in both Local
+      and Remote, the MG should reserve resources to support at least
+      one alternative each within Local and Remote.
+
+   -  If the MG has insufficient resources to support at least one
+      alternative within a Local (Remote) descriptor received from the
+      MGC, it shall return an empty Local (Remote) in response.
+
+   -  In its response to the MGC, when the MGC included Local and Remote
+      descriptors, the MG SHALL include Local and Remote descriptors for
+      all groups of properties and property values it reserved resources
+      for.  If the MG is incapable of supporting at least one of the
+      alternatives within the Local (Remote) descriptor received from
+      the MGC, it SHALL return an empty Local (Remote) descriptor.
+
+   -  If the Mode property of the LocalControl descriptor is RecvOnly,
+      SendRecv, or LoopBack, the MG must be prepared to receive media
+      encoded according to any of the alternatives included in its
+      response to the MGC.
+
+   If ReserveGroup is False and ReserveValue is False, then the MG
+   SHOULD apply the following rules to resolve Local and Remote to a
+   single alternative each:
+
+   -  The MG chooses the first alternative in Local for which it is able
+      to support at least one alternative in Remote.
+
+
+
+Groves, et al.              Standards Track                    [Page 34]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  If the MG is unable to support at least one Local and one Remote
+      alternative, it returns Error 510 (Insufficient Resources).
+
+   -  The MG returns its selected alternative in each of Local and
+      Remote.
+
+   A new setting of a Local or Remote descriptor completely replaces the
+   previous setting of that descriptor in the MG.  Thus, to retain
+   information from the previous setting, the MGC must include that
+   information in the new setting.  If the MGC wishes to delete some
+   information from the existing descriptor, it merely resends the
+   descriptor (in a Modify command) with the unwanted information
+   stripped out.
+
+7.1.9 Events descriptor
+
+   The EventsDescriptor parameter contains a RequestIdentifier and a
+   list of events that the Media Gateway is requested to detect and
+   report.  The RequestIdentifier is used to correlate the request with
+   the notifications that it may trigger.  Requested events include, for
+   example, fax tones, continuity test results, and on-hook and off-hook
+   transitions.  The RequestIdentifier is omitted if the
+   EventsDescriptor is empty (i.e., no events are specified).
+
+   Each event in the descriptor contains the Event name, an optional
+   streamID, an optional KeepActive flag, and optional parameters.  The
+   Event name consists of a Package Name (where the event is defined)
+   and an EventID.  The ALL wildcard may be used for the EventID,
+   indicating that all events from the specified package have to be
+   detected.  The default streamID is 0, indicating that the event to be
+   detected is not related to a particular media stream.  Events can
+   have parameters.  This allows a single event description to have some
+   variation in meaning without creating large numbers of individual
+   events.  Further event parameters are defined in the package.
+
+   If a digit map completion event is present or implied in the
+   EventsDescriptor, the EventDM parameter is used to carry either the
+   name or the value of the associated digit map.  See 7.1.14 for
+   further details.
+
+   When an event is processed against the contents of an active Events
+   Descriptor and found to be present in that descriptor ("recognized"),
+   the default action of the MG is to send a Notify command to the MGC.
+   Notification may be deferred if the event is absorbed into the
+   current dial string of an active digit map (see 7.1.14).  Any other
+   action is for further study.  Moreover, event recognition may cause
+   currently active signals to stop, or may cause the current Events
+   and/or Signals descriptor to be replaced, as described at the end of
+
+
+
+Groves, et al.              Standards Track                    [Page 35]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   this subclause.  Unless the Events Descriptor is replaced by another
+   Events Descriptor, it remains active after an event has been
+   recognized.
+
+   If the value of the EventBufferControl property equals LockStep,
+   following detection of such an event, normal handling of events is
+   suspended.  Any event which is subsequently detected and occurs in
+   the EventBuffer descriptor is added to the end of the EventBuffer (a
+   FIFO queue), along with the time that it was detected.  The MG SHALL
+   wait for a new EventsDescriptor to be loaded.  A new EventsDescriptor
+   can be loaded either as the result of receiving a command with a new
+   EventsDescriptor, or by activating an embedded EventsDescriptor.
+
+   If EventBufferControl equals Off, the MG continues processing based
+   on the active EventsDescriptor.
+
+   In the case of an embedded EventsDescriptor being activated, the MG
+   continues event processing based on the newly activated
+   EventsDescriptor.
+
+     NOTE 1 - For purposes of EventBuffer handling, activation of an
+     embedded EventsDescriptor is equivalent to receipt of a new
+     EventsDescriptor.
+
+   When the MG receives a command with a new EventsDescriptor, one or
+   more events may have been buffered in the EventBuffer in the MG.  The
+   value of EventBufferControl then determines how the MG treats such
+   buffered events.
+
+   Case 1
+
+   If EventBufferControl equals LockStep and the MG receives a new
+   EventsDescriptor, it will check the FIFO EventBuffer and take the
+   following actions:
+
+   1) If the EventBuffer is empty, the MG waits for detection of events
+      based on the new EventsDescriptor.
+
+   2) If the EventBuffer is non-empty, the MG processes the FIFO queue
+      starting with the first event:
+
+      a) If the event in the queue is in the events listed in the new
+         EventsDescriptor, the MG acts on the event and removes the
+         event from the EventBuffer.  The time stamp of the Notify shall
+         be the time the event was actually detected.  The MG then waits
+         for a new EventsDescriptor.  While waiting for a new
+         EventsDescriptor, any events detected that appear in the
+
+
+
+
+Groves, et al.              Standards Track                    [Page 36]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         EventsBufferDescriptor will be placed in the EventBuffer.  When
+         a new EventsDescriptor is received, the event processing will
+         repeat from step 1.
+
+      b) If the event is not in the new EventsDescriptor, the MG SHALL
+         discard the event and repeat from step 1.
+
+   Case 2
+
+   If EventBufferControl equals Off and the MG receives a new
+   EventsDescriptor, it processes new events with the new
+   EventsDescriptor.
+
+   If the MG receives a command instructing it to set the value of
+   EventBufferControl to Off, all events in the EventBuffer SHALL be
+   discarded.
+
+   The MG may report several events in a single Transaction as long as
+   this does not unnecessarily delay the reporting of individual events.
+
+   For procedures regarding transmitting the Notify command, refer to
+   the appropriate annex or Recommendation of the H.248 sub-series for
+   specific transport considerations.
+
+   The default value of EventBufferControl is Off.
+
+     NOTE 2 - Since the EventBufferControl property is in the
+     TerminationStateDescriptor, the MG might receive a command that
+     changes the EventBufferControl property and does not include an
+     EventsDescriptor.
+
+   Normally, recognition of an event shall cause any active signals to
+   stop.  When KeepActive is specified in the event, the MG shall not
+   interrupt any signals active on the Termination on which the event is
+   detected.
+
+   An event can include an Embedded Signals descriptor and/or an
+   Embedded Events descriptor which, if present, replaces the current
+   Signals/Events descriptor when the event is recognized.  It is
+   possible, for example, to specify that the dial-tone Signal be
+   generated when an off-hook Event is recognized, or that the dial-tone
+   Signal be stopped when a digit is recognized.  A media gateway
+   controller shall not send EventsDescriptors with an event both marked
+   KeepActive and containing an embedded SignalsDescriptor.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 37]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Only one level of embedding is permitted.  An embedded
+   EventsDescriptor SHALL NOT contain another embedded EventsDescriptor;
+   an embedded EventsDescriptor MAY contain an embedded
+   SignalsDescriptor.
+
+   An EventsDescriptor received by a media gateway replaces any previous
+   Events descriptor.  Event notification in process shall complete, and
+   events detected after the command containing the new EventsDescriptor
+   executes, shall be processed according to the new EventsDescriptor.
+
+   An empty Events Descriptor disables all event recognition and
+   reporting.  An empty EventBuffer Descriptor clears the EventBuffer
+   and disables all event accumulation in LockStep mode: the only events
+   reported will be those occurring while an Events Descriptor is
+   active.  If an empty Events Descriptor is activated while the
+   Termination is operating in LockStep mode, the events buffer is
+   immediately cleared.
+
+7.1.10   EventBuffer descriptor
+
+   The EventBuffer descriptor contains a list of events, with their
+   parameters if any, that the MG is requested to detect and buffer when
+   EventBufferControl equals LockStep (see 7.1.9).
+
+7.1.11   Signals descriptor
+
+   Signals are MG generated media such as tones and announcements as
+   well as bearer-related signals such as hookswitch.  More complex
+   signals may include a sequence of such simple signals interspersed
+   with and conditioned upon the receipt and analysis of media or
+   bearer-related signals.  Examples include echoing of received data as
+   in Continuity Test package.  Signals may also request preparation of
+   media content for future signals.
+
+   A SignalsDescriptor is a parameter that contains the set of signals
+   that the Media Gateway is asked to apply to a Termination.  A
+   SignalsDescriptor contains a number of signals and/or sequential
+   signal lists.  A SignalsDescriptor may contain zero signals and
+   sequential signal lists.  Support of sequential signal lists is
+   optional.
+
+   Signals are defined in packages.  Signals shall be named with a
+   Package name (in which the signal is defined) and a SignalID.  No
+   wildcard shall be used in the SignalID.  Signals that occur in a
+   SignalsDescriptor have an optional StreamID parameter (default is 0,
+   to indicate that the signal is not related to a particular media
+   stream), an optional signal type (see below), an optional duration
+   and possibly parameters defined in the package that defines the
+
+
+
+Groves, et al.              Standards Track                    [Page 38]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   signal.  This allows a single signal to have some variation in
+   meaning, obviating the need to create large numbers of individual
+   signals.
+
+   Finally, the optional parameter "notifyCompletion" allows a MGC to
+   indicate that it wishes to be notified when the signal finishes
+   playout.  The possible cases are that the signal timed out (or
+   otherwise completed on its own), that it was interrupted by an event,
+   that it was halted when a Signals descriptor was replaced, or that it
+   stopped or never started for other reasons.  If the notifyCompletion
+   parameter is not included in a Signals descriptor, notification is
+   generated only if the signal stopped or was never started for other
+   reasons.  For reporting to occur, the signal completion event (see
+   E.1.2) must be enabled in the currently active Events descriptor.
+
+   The duration is an integer value that is expressed in hundredths of a
+   second.
+
+   There are three types of signals:
+
+   -  on/off - the signal lasts until it is turned off;
+
+   -  timeout - the signal lasts until it is turned off or a specific
+      period of time elapses;
+
+   -  brief - the signal will stop on its own unless a new Signals
+      descriptor is applied that causes it to stop; no timeout value is
+      needed.
+
+   If a signal of default type other than TO has its type overridden to
+   type TO in the Signals descriptor, the duration parameter must be
+   present.
+
+   If the signal type is specified in a SignalsDescriptor, it overrides
+   the default signal type (see 12.1.4).  If duration is specified for
+   an on/off signal, it SHALL be ignored.
+
+   A sequential signal list consists of a signal list identifier and a
+   sequence of signals to be played sequentially.  Only the trailing
+   element of the sequence of signals in a sequential signal list may be
+   an on/off signal.  The duration of a sequential signal list is the
+   sum of the durations of the signals it contains.
+
+   Multiple signals and sequential signal lists in the same
+   SignalsDescriptor shall be played simultaneously.
+
+   Signals are defined as proceeding from the Termination towards the
+   exterior of the Context unless otherwise specified in a package.
+
+
+
+Groves, et al.              Standards Track                    [Page 39]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   When the same Signal is applied to multiple Terminations within one
+   Transaction, the MG should consider using the same resource to
+   generate these Signals.
+
+   Production of a Signal on a Termination is stopped by application of
+   a new SignalsDescriptor, or detection of an Event on the Termination
+   (see 7.1.9).
+
+   A new SignalsDescriptor replaces any existing SignalsDescriptor.  Any
+   signals applied to the Termination not in the replacement descriptor
+   shall be stopped, and new signals are applied, except as follows.
+   Signals present in the replacement descriptor and containing the
+   KeepActive flag shall be continued if they are currently playing and
+   have not already completed.  If a replacement signal descriptor
+   contains a signal that is not currently playing and contains the
+   KeepActive flag, that signal SHALL be ignored.  If the replacement
+   descriptor contains a sequential signal list with the same identifier
+   as the existing descriptor, then
+
+   -  the signal type and sequence of signals in the sequential signal
+      list in the replacement descriptor shall be ignored; and
+
+   -  the playing of the signals in the sequential signal list in the
+      existing descriptor shall not be interrupted.
+
+7.1.12   Audit descriptor
+
+   The Audit descriptor specifies what information is to be audited.
+   The Audit descriptor specifies the list of descriptors to be
+   returned.  Audit may be used in any command to force the return of
+   any descriptor containing the current values of its properties,
+   events, signals and statistics even if that descriptor was not
+   present in the command, or had no underspecified parameters.
+   Possible items in the Audit descriptor are:
+
+      Modem
+      Mux
+      Events
+      Media
+      Signals
+      ObservedEvents
+      DigitMap
+      Statistics
+      Packages
+      EventBuffer
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 40]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Audit may be empty, in which case, no descriptors are returned.  This
+   is useful in Subtract, to inhibit return of statistics, especially
+   when using wildcard.
+
+7.1.13   ServiceChange descriptor
+
+   The ServiceChangeDescriptor contains the following parameters:
+
+      .  ServiceChangeMethod
+      .  ServiceChangeReason
+      .  ServiceChangeAddress
+      .  ServiceChangeDelay
+      .  ServiceChangeProfile
+      .  ServiceChangeVersion
+      .  ServiceChangeMGCId
+      .  TimeStamp
+      .  Extension
+
+   See 7.2.8.
+
+7.1.14   DigitMap descriptor
+
+7.1.14.1 DigitMap definition, creation, modification and deletion
+
+   A DigitMap is a dialing plan resident in the Media Gateway used for
+   detecting and reporting digit events received on a Termination.  The
+   DigitMap descriptor contains a DigitMap name and the DigitMap to be
+   assigned.  A digit map may be preloaded into the MG by management
+   action and referenced by name in an EventsDescriptor, may be defined
+   dynamically and subsequently referenced by name, or the actual
+   digitmap itself may be specified in the EventsDescriptor.  It is
+   permissible for a digit map completion event within an Events
+   descriptor to refer by name to a DigitMap which is defined by a
+   DigitMap descriptor within the same command, regardless of the
+   transmitted order of the respective descriptors.
+
+   DigitMaps defined in a DigitMapDescriptor can occur in any of the
+   standard Termination manipulation Commands of the protocol.  A
+   DigitMap, once defined, can be used on all Terminations specified by
+   the (possibly wildcarded) TerminationID in such a command.  DigitMaps
+   defined on the root Termination are global and can be used on every
+   Termination in the MG, provided that a DigitMap with the same name
+   has not been defined on the given Termination.  When a DigitMap is
+   defined dynamically in a DigitMap descriptor:
+
+   -  A new DigitMap is created by specifying a name that is not yet
+      defined.  The value shall be present.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 41]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  A DigitMap value is updated by supplying a new value for a name
+      that is already defined.  Terminations presently using the
+      digitmap shall continue to use the old definition; subsequent
+      EventsDescriptors specifying the name, including any
+      EventsDescriptor in the command containing the DigitMap
+      descriptor, shall use the new one.
+
+   -  A DigitMap is deleted by supplying an empty value for a name that
+      is already defined.  Terminations presently using the digitmap
+      shall continue to use the old definition.
+
+7.1.14.2 DigitMap Timers
+
+   The collection of digits according to a DigitMap may be protected by
+   three timers, viz. a start timer (T), short timer (S), and long timer
+   (L).
+
+   1) The start timer (T) is used prior to any digits having been
+      dialed.  If the start timer is overridden with the value set to
+      zero (T=0), then the start timer shall be disabled.  This implies
+      that the MG will wait indefinitely for digits.
+
+   2) If the Media Gateway can determine that at least one more digit is
+      needed for a digit string to match any of the allowed patterns in
+      the digit map, then the interdigit timer value should be set to a
+      long (L) duration (e.g., 16 seconds).
+
+   3) If the digit string has matched one of the patterns in a digit
+      map, but it is possible that more digits could be received which
+      would cause a match with a different pattern, then instead of
+      reporting the match immediately, the MG must apply the short timer
+      (S) and wait for more digits.
+
+   The timers are configurable parameters to a DigitMap.  Default values
+   of these timers should be provisioned on the MG, but can be
+   overridden by values specified within the DigitMap.
+
+7.1.14.3 DigitMap Syntax
+
+   The formal syntax of the digit map is described by the DigitMap rule
+   in the formal syntax description of the protocol (see Annex A and
+   Annex B).  A DigitMap, according to this syntax, is defined either by
+   a string or by a list of strings.  Each string in the list is an
+   alternative event sequence, specified either as a sequence of digit
+   map symbols or as a regular expression of digit map symbols.  These
+   digit map symbols, the digits "0" through "9" and letters "A" through
+   a maximum value depending on the signalling system concerned, but
+   never exceeding "K", correspond to specified events within a package
+
+
+
+Groves, et al.              Standards Track                    [Page 42]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   which has been designated in the Events descriptor on the Termination
+   to which the digit map is being applied.  (The mapping between events
+   and digit map symbols is defined in the documentation for packages
+   associated with channel-associated signalling systems such as DTMF,
+   MF, or R2.  Digits "0" through "9" MUST be mapped to the
+   corresponding digit events within the signalling system concerned.
+   Letters should be allocated in logical fashion, facilitating the use
+   of range notation for alternative events.)
+
+   The letter "x" is used as a wildcard, designating any event
+   corresponding to symbols in the range "0"-"9".  The string may also
+   contain explicit ranges and, more generally, explicit sets of
+   symbols, designating alternative events any one of which satisfies
+   that position of the digit map.  Finally, the dot symbol "." stands
+   for zero or more repetitions of the event selector (event, range of
+   events, set of alternative events, or wildcard) that precedes it.  As
+   a consequence of the third timing rule above, inter-event timing
+   while matching a terminal dot symbol uses the short timer by default.
+
+   In addition to these event symbols, the string may contain "S" and
+   "L" inter-event timing specifiers and the "Z" duration modifier.  "S"
+   and "L" respectively indicate that the MG should use the short (S)
+   timer or the long (L) timer for subsequent events, overriding the
+   timing rules described above.  If an explicit timing specifier is in
+   effect in one alternative event sequence, but none is given in any
+   other candidate alternative, the timer value set by the explicit
+   timing specifier must be used.  If all sequences with explicit timing
+   controls are dropped from the candidate set, timing reverts to the
+   default rules given above.  Finally, if conflicting timing specifiers
+   are in effect in different alternative sequences, the long timer
+   shall be used.
+
+   A "Z" designates a long duration event: placed in front of the
+   symbol(s) designating the event(s) which satisfy a given digit
+   position, it indicates that that position is satisfied only if the
+   duration of the event exceeds the long-duration threshold.  The value
+   of this threshold is assumed to be provisioned in the MG.
+
+7.1.14.4 DigitMap Completion Event
+
+   A digit map is active while the Events descriptor which invoked it is
+   active and it has not completed.  A digit map completes when:
+
+   -  a timer has expired; or
+
+   -  an alternative event sequence has been matched and no other
+      alternative event sequence in the digit map could be matched
+      through detection of an additional event (unambiguous match); or
+
+
+
+Groves, et al.              Standards Track                    [Page 43]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  an event has been detected such that a match to a complete
+      alternative event sequence of the digit map will be impossible no
+      matter what additional events are received.
+
+   Upon completion, a digit map completion event as defined in the
+   package providing the events being mapped into the digit map shall be
+   generated.  At that point the digit map is deactivated.  Subsequent
+   events in the package are processed as per the currently active event
+   processing mechanisms.
+
+7.1.14.5 DigitMap Procedures
+
+   Pending completion, successive events shall be processed according to
+   the following rules:
+
+   1) The "current dial string", an internal variable, is initially
+      empty.  The set of candidate alternative event sequences includes
+      all of the alternatives specified in the digit map.
+
+   2) At each step, a timer is set to wait for the next event, based
+      either on the default timing rules given above or on explicit
+      timing specified in one or more alternative event sequences.  If
+      the timer expires and a member of the candidate set of
+      alternatives is fully satisfied, a timeout completion with full
+      match is reported.  If the timer expires and part or none of any
+      candidate alternative is satisfied, a timeout completion with
+      partial match is reported.
+
+   3) If an event is detected before the timer expires, it is mapped to
+      a digit string symbol and provisionally added to the end of the
+      current dial string.  The duration of the event (long or not long)
+      is noted if and only if this is relevant in the current symbol
+      position (because at least one of the candidate alternative event
+      sequences includes the "Z" modifier at this position in the
+      sequence).
+
+   4) The current dial string is compared to the candidate alternative
+      event sequences.  If and only if a sequence expecting a
+      long-duration event at this position is matched (i.e., the event
+      had long duration and met the specification for this position),
+      then any alternative event sequences not specifying a long
+      duration event at this position are discarded, and the current
+      dial string is modified by inserting a "Z" in front of the symbol
+      representing the latest event.   Any sequence expecting a long-
+      duration event at this position but not matching the observed
+      event is discarded from the candidate set.  If alternative event
+      sequences not specifying a long duration event in the given
+
+
+
+
+Groves, et al.              Standards Track                    [Page 44]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      position remain in the candidate set after application of the
+      above rules, the observed event duration is treated as irrelevant
+      in assessing matches to them.
+
+   5) If exactly one candidate remains and it has been fully matched, a
+      completion event is generated indicating an unambiguous match.  If
+      no candidates remain, the latest event is removed from the current
+      dial string and a completion event is generated indicating full
+      match if one of the candidates from the previous step was fully
+      satisfied before the latest event was detected, or partial match
+      otherwise.  The event removed from the current dial string will
+      then be reported as per the currently active event processing
+      mechanisms.
+
+   6) If no completion event is reported out of step 5, processing
+      returns to step 2.
+
+7.1.14.6 DigitMap Activation
+
+   A digit map is activated whenever a new Event descriptor is applied
+   to the Termination or embedded Event descriptor is activated, and
+   that Event descriptor contains a digit map completion event.  The
+   digit map completion event contains an eventDM field in the requested
+   actions field.  Each new activation of a digit map begins at step 1
+   of the above procedure, with a clear current dial string.  Any
+   previous contents of the current dial string from an earlier
+   activation are lost.
+
+   A digit map completion event that does not contain an eventDM field
+   in its requested actions field is considered an error.  Upon receipt
+   of such an event in an EventsDescriptor, a MG shall respond with an
+   error response, including Error 457 - Missing parameter in signal or
+   event.
+
+7.1.14.7 Interaction Of DigitMap and Event Processing
+
+   While the digit map is activated, detection is enabled for all events
+   defined in the package containing the specified digit map completion
+   event.  Normal event behaviour (e.g., stopping of signals unless the
+   digit completion event has the KeepActive flag enabled) continues to
+   apply for each such event detected, except that:
+
+   -  the events in the package containing the specified digit map
+      completion event other than the completion event itself are not
+      individually notified and have no side-effects unless separately
+      enabled; and
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 45]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  an event that triggers a partial match completion event is not
+      recognized and therefore has no side effects until reprocessed
+      following the recognition of the digit map completion event.
+
+7.1.14.8 Wildcards
+
+   Note that if a package contains a digit map completion event, then an
+   event specification consisting of the package name with a wildcarded
+   ItemID (Property Name) will activate a digit map; to that end, the
+   event specification must include an eventDM field according to
+   section 7.1.14.6.  If the package also contains the digit events
+   themselves, this form of event specification will cause the
+   individual events to be reported to the MGC as they are detected.
+
+7.1.14.9 Example
+
+   As an example, consider the following dial plan:
+
+   0                      Local operator
+
+   00                     Long-distance operator
+
+   xxxx                   Local extension number (starts with 1-7)
+
+   8xxxxxxx               Local number
+
+   #xxxxxxx               Off-site extension
+
+   *xx                    Star services
+
+   91xxxxxxxxxx           Long-distance number
+
+   9011 + up to 15 digits International number
+
+
+
+   If the DTMF detection package described in E.6 is used to collect the
+   dialed digits, then the dialing plan shown above results in the
+   following digit map:
+
+    (0| 00|[1-7]xxx|8xxxxxxx|Fxxxxxxx|Exx|91xxxxxxxxxx|9011x.)
+
+7.1.15   Statistics descriptor
+
+   The Statistics Descriptor provides information describing the status
+   and usage of a Termination during its existence within a specific
+   Context.  There is a set of standard statistics kept for each
+   Termination where appropriate (number of octets sent and received for
+
+
+
+Groves, et al.              Standards Track                    [Page 46]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   example).  The particular statistical properties that are reported
+   for a given Termination are determined by the Packages realized by
+   the Termination.  By default, statistics are reported when the
+   Termination is Subtracted from the Context.  This behaviour can be
+   overridden by including an empty AuditDescriptor in the Subtract
+   command.  Statistics may also be returned from the AuditValue
+   command, or any Add/Move/Modify command using the Audit descriptor.
+
+   Statistics are cumulative; reporting Statistics does not reset them.
+   Statistics are reset when a Termination is Subtracted from a Context.
+
+7.1.16   Packages descriptor
+
+   Used only with the AuditValue command, the PackageDescriptor returns
+   a list of Packages realized by the Termination.
+
+7.1.17   ObservedEvents descriptor
+
+   ObservedEvents is supplied with the Notify command to inform the MGC
+   of which event(s) were detected.  Used with the AuditValue command,
+   the ObservedEventsDescriptor returns events in the event buffer which
+   have not been Notified.  ObservedEvents contains the
+   RequestIdentifier of the EventsDescriptor that triggered the
+   notification, the event(s) detected, optionally the detection time(s)
+   and any parameters of the observed event.  Detection times are
+   reported with a precision of hundredths of a second.
+
+7.1.18   Topology descriptor
+
+   A Topology descriptor is used to specify flow directions between
+   Terminations in a Context.  Contrary to the descriptors in previous
+   subclauses, the Topology descriptor applies to a Context instead of a
+   Termination.  The default topology of a Context is that each
+   Termination's transmission is received by all other Terminations.
+   The Topology descriptor is optional to implement.  An MG that does
+   not support Topology descriptors, but receives a command containing
+   one, returns Error 444 Unsupported or unknown descriptor, and
+   optionally includes a string containing the name of the unsupported
+   Descriptor ("Topology") in the error text in the error descriptor.
+
+   The Topology descriptor occurs before the commands in an action.  It
+   is possible to have an action containing only a Topology descriptor,
+   provided that the Context to which the action applies already exists.
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 47]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A Topology descriptor consists of a sequence of triples of the form
+   (T1, T2, association).  T1 and T2 specify Terminations within the
+   Context, possibly using the ALL or CHOOSE wildcard.  The association
+   specifies how media flows between these two Terminations as follows.
+
+   -  (T1, T2, isolate) means that the Terminations matching T2 do not
+      receive media from the Terminations matching T1, nor vice versa.
+
+   -  (T1, T2, oneway) means that the Terminations that match T2 receive
+      media from the Terminations matching T1, but not vice versa.  In
+      this case use of the ALL wildcard such that there are Terminations
+      that match both T1 and T2 is not allowed.
+
+   -  (T1, T2, bothway) means that the Terminations matching T2 receive
+      media from the Terminations matching T1, and vice versa.  In this
+      case it is allowed to use wildcards such that there are
+      Terminations that match both T1 and T2.  However, if there is a
+      Termination that matches both, no loopback is introduced.
+
+   CHOOSE wildcards may be used in T1 and T2 as well, under the
+   following restrictions:
+
+   -  the action (see clause 8) of which the topology descriptor is part
+      contains an Add command in which a CHOOSE wildcard is used;
+
+   -  if a CHOOSE wildcard occurs in T1 or T2, then a partial name SHALL
+      NOT be specified.
+
+   The CHOOSE wildcard in a Topology descriptor matches the
+   TerminationID that the MG assigns in the first Add command that uses
+   a CHOOSE wildcard in the same action.  An existing Termination that
+   matches T1 or T2 in the Context to which a Termination is added, is
+   connected to the newly added Termination as specified by the Topology
+   descriptor.
+
+   If a termination is not mentioned within a Topology Descriptor, any
+   topology associated with it remains unchanged.  If, however, a new
+   termination is added into a context its association with the other
+   terminations within the context defaults to bothway, unless a
+   Topology Descriptor is given to change this (e.g., if T3 is added to
+   a context with T1 and T2 with topology (T3, T1, oneway) it will be
+   connected bothway to T2).
+
+   Figure 7 and the table following it show some examples of the effect
+   of including topology descriptors in actions.  In these examples it
+   is assumed that the topology descriptors are applied in sequence.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 48]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     +------------------+  +------------------+  +------------------+
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |      | T2 |      |  |      | T2 |      |  |      | T2 |      |
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |       ^  ^       |  |          ^       |  |          ^       |
+     |       |  |       |  |          |       |  |          |       |
+     |    +--+  +--+    |  |          +---+   |  |          +--+    |
+     |    |        |    |  |              |   |  |             |    |
+     |    v        v    |  |              v   |  |             |    |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     +------------------+  +------------------+  +------------------+
+     1. No Topology Desc.   2. T1, T2, Isolate    3. T3, T2, Oneway
+
+     +------------------+  +------------------+  +------------------+
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |      | T2 |      |  |      | T2 |      |  |      | T2 |      |
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |          |       |  |          ^       |  |       ^  ^       |
+     |          |       |  |          |       |  |       |  |       |
+     |          +--+    |  |          +---+   |  |    +--+  +--+    |
+     |             |    |  |              |   |  |    |        |    |
+     |             v    |  |              v   |  |    v        v    |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     +------------------+  +------------------+  +------------------+
+     4. T2, T3 oneway      5. T2, T3 bothway     6. T1, T2 bothway
+
+     Note: the direction of the arrow indicates the direction of flow.
+
+                       Figure 7: Example topologies
+
+   Topology Description
+
+   1 No topology descriptors    When no topology descriptors are
+                                included, all Terminations have a
+                                bothway connection to all other
+                                Terminations.
+
+   2 T1, T2 Isolate             Removes the connection between T1 and
+                                T2.  T3 has a bothway connection with
+                                both T1 and T2.  T1 and T2 have bothway
+                                connection to T3.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 49]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   3 T3, T2 oneway              A oneway connection from T3 to T2 (i.e.,
+                                T2 receives media flow from T3).  A
+                                bothway connection between T1 and T3.
+
+   4 T2, T3 oneway              A oneway connection between T2 to T3.
+                                T1 and T3 remain bothway connected.
+
+   5 T2, T3 bothway             T2 is bothway connected to T3.  This
+                                results in the same as 2.
+
+   6 T1, T2 bothway (T2, T3     All Terminations have a bothway
+     bothway and T1, T3         connection to all other Terminations.
+     bothway may be implied or
+     explicit).
+
+   A oneway connection must be implemented in such a way that the other
+   Terminations in the Context are not aware of the change in topology.
+
+7.1.19   Error Descriptor
+
+   If a responder encounters an error when processing a transaction
+   request, it must include an error descriptor in its response.  A
+   Notify request may contain an error descriptor as well.
+
+   An error descriptor consists of an IANA-registered error code,
+   optionally accompanied by an error text.  H.248.8 contains a list of
+   valid error codes and error descriptions.
+
+   An error descriptor shall be specified at the "deepest level" that is
+   semantically appropriate for the error being described and that is
+   possible given any parsing problems with the original request.  An
+   error descriptor may refer to a syntactical construct other than
+   where it appears.  For example, Error descriptor 422 - Syntax Error
+   in Action, could appear within a command even though it refers to the
+   larger construct - the action - and not the particular command within
+   which it appears.
+
+7.2   Command Application Programming Interface
+
+   Following is an Application Programming Interface (API) describing
+   the Commands of the protocol.  This API is shown to illustrate the
+   Commands and their parameters and is not intended to specify
+   implementation (e.g., via use of blocking function calls).  It
+   describes the input parameters in parentheses after the command name
+   and the return values in front of the Command.  This is only for
+   descriptive purposes; the actual Command syntax and encoding are
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 50]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   specified in later subclauses.  The order of parameters to commands
+   is not fixed.  Descriptors may appear as parameters to commands in
+   any order.  The descriptors SHALL be processed in the order in which
+   they appear.
+
+   Any reply to a command may contain an error descriptor; the API does
+   not specifically show this.
+
+   All parameters enclosed by square brackets ([. . .]) are considered
+   optional.
+
+7.2.1 Add
+
+   The Add Command adds a Termination to a Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+       Add( TerminationID
+        [, MediaDescriptor]
+        [, ModemDescriptor]
+        [, MuxDescriptor]
+        [, EventsDescriptor]
+        [, EventBufferDescriptor]
+        [, SignalsDescriptor]
+        [, DigitMapDescriptor]
+        [, AuditDescriptor]
+        )
+
+   The TerminationID specifies the Termination to be added to the
+   Context.  The Termination is either created, or taken from the null
+   Context.  If a CHOOSE wildcard is used in the TerminationID, the
+   selected TerminationID will be returned.  Wildcards may be used in an
+   Add, but such usage would be unusual.  If the wildcard matches more
+   than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.
+
+   The optional MediaDescriptor describes all media streams.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 51]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The optional ModemDescriptor and MuxDescriptor specify a modem and
+   multiplexer if applicable.  For convenience, if a Multiplex
+   descriptor is present in an Add command and lists any Terminations
+   that are not currently in the Context, such Terminations are added to
+   the Context as if individual Add commands listing the Terminations
+   were invoked. If an error occurs on such an implied Add, error 471 -
+   Implied Add for Multiplex failure shall be returned and further
+   processing of the command shall cease.
+
+   The EventsDescriptor parameter is optional.  If present, it provides
+   the list of events that should be detected on the Termination.
+
+   The EventBufferDescriptor parameter is optional.  If present, it
+   provides the list of events that the MG is requested to detect and
+   buffer when EventBufferControl equals LockStep.
+
+   The SignalsDescriptor parameter is optional.  If present, it provides
+   the list of signals that should be applied to the Termination.
+
+   The DigitMapDescriptor parameter is optional.  If present, it defines
+   a DigitMap definition that may be used in an EventsDescriptor.
+
+   The AuditDescriptor is optional.  If present, the command will return
+   descriptors as specified in the AuditDescriptor.
+
+   All descriptors that can be modified could be returned by MG if a
+   parameter was underspecified or overspecified.  ObservedEvents,
+   Statistics, and Packages, and the EventBuffer descriptors are
+   returned only if requested in the AuditDescriptor.
+
+   Add SHALL NOT be used on a Termination with a serviceState of
+   "OutofService".
+
+7.2.2 Modify
+
+   The Modify Command modifies the properties of a Termination.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+
+
+
+Groves, et al.              Standards Track                    [Page 52]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Modify( TerminationID
+         [, MediaDescriptor]
+         [, ModemDescriptor]
+         [, MuxDescriptor]
+         [, EventsDescriptor]
+         [, EventBufferDescriptor]
+         [, SignalsDescriptor]
+         [, DigitMapDescriptor]
+         [, AuditDescriptor]
+         )
+
+   The TerminationID may be specific if a single Termination in the
+   Context is to be modified.  Use of wildcards in the TerminationID may
+   be appropriate for some operations.  If the wildcard matches more
+   than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.  The CHOOSE option is an
+   error, as the Modify command may only be used on existing
+   Terminations.
+
+   For convenience, if a Multiplex Descriptor is present in a Modify
+   command, then:
+
+   -  if the new Multiplex Descriptor lists any Terminations that are
+      not currently in the Context, such Terminations are added to the
+      context as if individual commands listing the Terminations were
+      invoked.
+
+   -  if any Terminations listed previously in the Multiplex Descriptor
+      are no longer present in the new Multiplex Descriptor, they are
+      subtracted from the context as if individual Subtract commands
+      listing the Terminations were invoked.
+
+   The remaining parameters to Modify are the same as those to Add.
+   Possible return values are the same as those to Add.
+
+7.2.3 Subtract
+
+   The Subtract Command disconnects a Termination from its Context and
+   returns statistics on the Termination's participation in the Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+
+
+
+Groves, et al.              Standards Track                    [Page 53]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+      Subtract(TerminationID
+         [, AuditDescriptor]
+         )
+
+   TerminationID in the input parameters represents the Termination that
+   is being subtracted.  The TerminationID may be specific or may be a
+   wildcard value indicating that all (or a set of related) Terminations
+   in the Context of the Subtract Command are to be subtracted.  If the
+   wildcard matches more than one TerminationID, all possible matches
+   are attempted, with results reported for each one.  The order of
+   attempts when multiple TerminationIDs match is not specified.
+
+   The use of CHOOSE in the TerminationID is an error, as the Subtract
+   command may only be used on existing Terminations.
+
+   ALL may be used as the ContextID as well as the TerminationId in a
+   Subtract, which would have the effect of deleting all Contexts,
+   deleting all ephemeral Terminations, and returning all physical
+   Terminations to Null Context.  Subtract of a termination from the
+   Null Context is not allowed.
+
+   For convenience, if a multiplexing Termination is the object of a
+   Subtract command, then any bearer Terminations listed in its
+   Multiplex Descriptor are subtracted from the context as if individual
+   Subtract commands listing the Terminations were invoked.
+
+   By default, the Statistics parameter is returned to report
+   information collected on the Termination or Terminations specified in
+   the Command.  The information reported applies to the Termination's
+   or Terminations' existence in the Context from which it or they are
+   being subtracted.
+
+   The AuditDescriptor is optional.  If present, the command will return
+   only those descriptors as specified in the AuditDescriptor, which may
+   be empty.  If omitted, the Statistics descriptor is returned, by
+   default.  Possible return values are the same as those to Add.
+
+   When a provisioned Termination is Subtracted from a Context, its
+   property values shall revert to:
+
+   -  the default value, if specified for the property and not
+      overridden by provisioning;
+
+   -  otherwise, the provisioned value.
+
+
+
+Groves, et al.              Standards Track                    [Page 54]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.2.4 Move
+
+   The Move Command moves a Termination to another Context from its
+   current Context in one atomic operation.  The Move command is the
+   only command that refers to a Termination in a Context different from
+   that to which the command is applied.  The Move command shall not be
+   used to move Terminations to or from the null Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+      Move( TerminationID
+         [, MediaDescriptor]
+         [, ModemDescriptor]
+         [, MuxDescriptor]
+         [, EventsDescriptor]
+         [, EventBufferDescriptor]
+         [, SignalsDescriptor]
+         [, DigitMapDescriptor]
+         [, AuditDescriptor]
+         )
+
+   The TerminationID specifies the Termination to be moved.  It may be
+   wildcarded, but CHOOSE shall not be used in the TerminationID.  If
+   the wildcard matches more than one TerminationID, all possible
+   matches are attempted, with results reported for each one.  The order
+   of attempts when multiple TerminationIDs match is not specified.  The
+   Context to which the Termination is moved is indicated by the target
+   ContextId in the Action.  If the last remaining Termination is moved
+   out of a Context, the Context is deleted.
+
+   The Move command does not affect the properties of the Termination on
+   which it operates, except those properties explicitly modified by
+   descriptors included in the Move command.  The AuditDescriptor with
+   the Statistics option, for example, would return statistics on the
+   Termination just prior to the Move.  Possible descriptors returned
+   from Move are the same as for Add.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 55]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   For convenience, if a multiplexing Termination is the object of a
+   Move command, then any bearer Terminations listed in its Multiplex
+   Descriptor are also moved as if individual Move commands listing the
+   Terminations were invoked.
+
+   Move SHALL NOT be used on a Termination with a serviceState of
+   "OutofService".
+
+7.2.5 AuditValue
+
+   The AuditValue Command returns the current values of properties,
+   events, signals and statistics associated with Terminations.
+
+   TerminationID
+   [,MediaDescriptor]
+   [,ModemDescriptor]
+   [,MuxDescriptor]
+   [,EventsDescriptor]
+   [,SignalsDescriptor]
+   [,DigitMapDescriptor]
+   [,ObservedEventsDescriptor]
+   [,EventBufferDescriptor]
+   [,StatisticsDescriptor]
+   [,PackagesDescriptor]
+     AuditValue(TerminationID,
+      AuditDescriptor
+      )
+
+   TerminationID may be specific or wildcarded.  If the wildcard matches
+   more than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.  If a wildcarded response is
+   requested, only one command return is generated, with the contents
+   containing the union of the values of all Terminations matching the
+   wildcard.  This convention may reduce the volume of data required to
+   audit a group of Terminations.  Use of CHOOSE is an error.
+
+   The appropriate descriptors, with the current values for the
+   Termination, are returned from AuditValue.  Values appearing in
+   multiple instances of a descriptor are defined to be alternate values
+   supported, with each parameter in a descriptor considered
+   independent.
+
+   ObservedEvents returns a list of events in the EventBuffer.  If the
+   ObservedEventsDescriptor is audited while a DigitMap is active, the
+   returned ObservedEvents descriptor also includes a digit map
+   completion event that shows the current dial string but does not show
+   a Termination method.
+
+
+
+Groves, et al.              Standards Track                    [Page 56]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   EventBuffer returns the set of events and associated parameter values
+   currently enabled in the EventBufferDescriptor.  PackagesDescriptor
+   returns a list of packages realized by the Termination.
+   DigitMapDescriptor returns the name or value of the current DigitMap
+   for the Termination.  DigitMap requested in an AuditValue command
+   with TerminationID ALL returns all DigitMaps in the gateway.
+   Statistics returns the current values of all statistics being kept on
+   the Termination.   Specifying an empty Audit descriptor results in
+   only the TerminationID being returned.  This may be useful to get a
+   list of TerminationIDs when used with wildcard.  Annexes A and B
+   provide a special syntax for presenting such a list in condensed
+   form, such that the AuditValue command tag does not have to be
+   repeated for each TerminationID.
+
+   AuditValue results depend on the Context, viz. specific, null, or
+   wildcarded.  (Note that ContextID ALL does not include the null
+   Context.)  The TerminationID may be specific, or wildcarded.
+
+   The following are examples of what is returned in case the context
+   and/or the termination is wildcarded and a wildcarded response has
+   been specified.
+
+   Assume that the gateway has 4 terminations: t1/1, t1/2, t2/1 and
+   t2/2.  Assume that terminations t1/* have implemented packages aaa
+   and bbb and that terminations t2/* have implemented packages ccc and
+   ddd.  Assume that Context 1 has t1/1 and t2/1 in it and that Context
+   2 has t1/2 and t2/2 in it.
+
+   The command:
+
+     Context=1{AuditValue=t1/1{Audit{Packages}}}
+
+   Returns:
+
+     Context=1{AuditValue=t1/1{Packages{aaa,bbb}}}
+
+   The command:
+
+     Context=*{AuditValue=t2/*{Audit{Packages}}}
+
+   Returns:
+
+     Context=1{AuditValue=t2/1{Packages{ccc,ddd}}},
+     Context=2{AuditValue=t2/2{Packages{ccc,ddd}}}
+
+   The command:
+
+     Context=*{W-AuditValue=t1/*{Audit{Packages}}}
+
+
+
+Groves, et al.              Standards Track                    [Page 57]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Returns:
+
+     Context=*{W-AuditValue=t1/*{Packages{aaa,bbb}}}
+
+   Note: A wildcard response may also be used for other commands such as
+   Subtract.
+
+   The following illustrates other information that can be obtained with
+   the AuditValue Command:
+
+   ContextID TerminationID Information Obtained
+
+   Specific  wildcard      Audit of matching Terminations in a Context
+
+   Specific  specific      Audit of a single Termination in a Context
+
+   Null      Root          Audit of Media Gateway state and events
+
+   Null      wildcard      Audit of all matching Terminations in the
+                            null Context
+
+   Null      specific      Audit of a single Termination outside of any
+                            Context
+
+   All       wildcard      Audit of all matching Terminations and the
+                            Context to which they are associated
+
+   All       Root          List of all ContextIds (the ContextID list
+                            should be returned by using multiple action
+                            replies, each containing a ContextID from
+                            the list)
+
+   All       Specific      (Non-null) ContextID in which the
+                            Termination currently exists
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 58]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.2.6 AuditCapabilities
+
+   The AuditCapabilities Command returns the possible values of
+   properties, events, signals and statistics associated with
+   Terminations.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+      AuditCapabilities(TerminationID,
+         AuditDescriptor
+         )
+
+   The appropriate descriptors, with the possible values for the
+   Termination are returned from AuditCapabilities.  Descriptors may be
+   repeated where there are multiple possible values.  If a wildcarded
+   response is requested, only one command return is generated, with the
+   contents containing the union of the values of all Terminations
+   matching the wildcard.  This convention may reduce the volume of data
+   required to audit a group of Terminations.
+
+   Interpretation of what capabilities are requested for various values
+   of ContextID and TerminationID is the same as in AuditValue.
+
+   The EventsDescriptor returns the list of possible events on the
+   Termination together with the list of all possible values for the
+   EventsDescriptor Parameters.  EventBufferDescriptor returns the same
+   information as EventsDescriptor.  The SignalsDescriptor returns the
+   list of possible signals that could be applied to the Termination
+   together with the list of all possible values for the Signals
+   Parameters.  StatisticsDescriptor returns the names of the statistics
+   being kept on the termination.  ObservedEventsDescriptor returns the
+   names of active events on the Termination.  DigitMap and Packages are
+   not legal in AuditCapability.
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 59]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The following illustrates other information that can be obtained with
+   the AuditCapabilties Command:
+
+   ContextID TerminationID Information Obtained
+
+   Specific  wildcard      Audit of matching Terminations in a Context
+
+   Specific  specific      Audit of a single Termination in a Context
+
+   Null      Root          Audit of MG state and events
+
+   Null      wildcard      Audit of all matching Terminations in the
+                            Null Context
+
+   Null      specific      Audit of a single Termination outside of any
+                            Context
+
+   All       wildcard      Audit of all matching Terminations and the
+                            Context to which they are associated
+
+   All       Root          Same as for AuditValue
+
+   All       Specific      Same as for AuditValue
+
+7.2.7 Notify
+
+   The Notify Command allows the Media Gateway to notify the Media
+   Gateway Controller of events occurring within the Media Gateway.
+
+     TerminationID
+      Notify(TerminationID,
+         ObservedEventsDescriptor,
+         [ErrorDescriptor]
+         )
+
+   The TerminationID parameter specifies the Termination issuing the
+   Notify Command.  The TerminationID shall be a fully qualified name.
+
+   The ObservedEventsDescriptor contains the RequestID and a list of
+   events that the Media Gateway detected in the order that they were
+   detected.  Each event in the list is accompanied by parameters
+   associated with the event and optionally an indication of the time
+   that the event was detected.  Procedures for sending Notify commands
+   with RequestID equal to 0 are for further study.
+
+   Notify Commands with RequestID not equal to 0 shall occur only as the
+   result of detection of an event specified by an Events descriptor
+   which is active on the Termination concerned.
+
+
+
+Groves, et al.              Standards Track                    [Page 60]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The RequestID returns the RequestID parameter of the EventsDescriptor
+   that triggered the Notify Command.  It is used to correlate the
+   notification with the request that triggered it.  The events in the
+   list must have been requested via the triggering EventsDescriptor or
+   embedded events descriptor unless the RequestID is 0 (which is for
+   further study).
+
+   The ErrorDescriptor may be sent in the Notify Command as a result of
+   Error 518 - Event buffer full.
+
+7.2.8 ServiceChange
+
+   The ServiceChange Command allows the Media Gateway to notify the
+   Media Gateway Controller that a Termination or group of Terminations
+   is about to be taken out of service or has just been returned to
+   service.  The Media Gateway Controller may indicate that
+   Termination(s) shall be taken out of or returned to service.   The
+   Media Gateway may notify the MGC that the capability of a Termination
+   has changed.  It also allows a MGC to hand over control of a MG to
+   another MGC.
+
+   TerminationID,
+
+     [ServiceChangeDescriptor]
+      ServiceChange ( TerminationID,
+         ServiceChangeDescriptor
+         )
+
+   The TerminationID parameter specifies the Termination(s) that are
+   taken out of or returned to service.  Wildcarding of Termination
+   names is permitted, with the exception that the CHOOSE mechanism
+   shall not be used.  Use of the "Root" TerminationID indicates a
+   ServiceChange affecting the entire Media Gateway.
+
+   The ServiceChangeDescriptor contains the following parameters as
+   required:
+
+   -  ServiceChangeMethod
+   -  ServiceChangeReason
+   -  ServiceChangeDelay
+   -  ServiceChangeAddress
+   -  ServiceChangeProfile
+   -  ServiceChangeVersion
+   -  ServiceChangeMgcId
+   -  TimeStamp
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 61]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The ServiceChangeMethod parameter specifies the type of ServiceChange
+   that will or has occurred:
+
+   1) Graceful - indicates that the specified Terminations will be taken
+      out of service after the specified ServiceChangeDelay; established
+      connections are not yet affected, but the Media Gateway Controller
+      should refrain from establishing new connections and should
+      attempt to gracefully tear down existing connections on the
+      Termination(s) affected by the serviceChange command.  The MG
+      should set Termination serviceState at the expiry of
+      ServiceChangeDelay or the removal of the Termination from an
+      active Context (whichever is first), to "out of service".
+
+   2) Forced - indicates that the specified Terminations were taken
+      abruptly out of service and any established connections associated
+      with them may be lost.  For non-Root terminations, the MGC is
+      responsible for cleaning up the Context (if any) with which the
+      failed Termination is associated.  At a minimum the Termination
+      shall be subtracted from the Context.  The Termination
+      serviceState should be "out of service".  For the root
+      termination, the MGC can assume that all connections are lost on
+      the MG and thus can consider that all the terminations have been
+      subtracted.
+
+   3) Restart - indicates that service will be restored on the specified
+      Terminations after expiration of the ServiceChangeDelay.  The
+      serviceState should be set to "inService" upon expiry of
+      ServiceChangeDelay.
+
+   4) Disconnected - always applied with the Root TerminationID,
+      indicates that the MG lost communication with the MGC, but it was
+      subsequently restored to the same MGC (possibly after trying other
+      MGCs on a pre-provisioned list).  Since MG state may have changed,
+      the MGC may wish to use the Audit command to resynchronize its
+      state with the MG's.
+
+   5) Handoff - sent from the MGC to the MG, this reason indicates that
+      the MGC is going out of service and a new MGC association must be
+      established.  Sent from the MG to the MGC, this indicates that the
+      MG is attempting to establish a new association in accordance with
+      a Handoff received from the MGC with which it was previously
+      associated.
+
+   6) Failover - sent from MG to MGC to indicate the primary MG is out
+      of service and a secondary MG is taking over.  This serviceChange
+      method is also sent from the MG to the MGC when the MG detects
+      that MGC has failed.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 62]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7) Another value whose meaning is mutually understood between the MG
+      and the MGC.
+
+   The ServiceChangeReason parameter specifies the reason why the
+   ServiceChange has or will occur.  It consists of an alphanumeric
+   token (IANA registered) and, optionally, an explanatory string.
+
+   The optional ServiceChangeAddress parameter specifies the address
+   (e.g., IP port number for IP networks) to be used for subsequent
+   communications.  It can be specified in the input parameter
+   descriptor or the returned result descriptor.  ServiceChangeAddress
+   and ServiceChangeMgcId parameters must not both be present in the
+   ServiceChangeDescriptor or the ServiceChangeResultDescriptor.  The
+   ServiceChangeAddress provides an address to be used within the
+   Context of the association currently being negotiated, while the
+   ServiceChangeMgcId provides an alternate address where the MG should
+   seek to establish another association.  Note that the use of
+   ServiceChangeAddress is not encouraged.  MGCs and MGs must be able to
+   cope with the ServiceChangeAddress being either a full address or
+   just a port number in the case of TCP transports.
+
+   The optional ServiceChangeDelay parameter is expressed in seconds.
+   If the delay is absent or set to zero, the delay value should be
+   considered to be null.  In the case of a "graceful"
+   ServiceChangeMethod, a null delay indicates that the Media Gateway
+   Controller should wait for the natural removal of existing
+   connections and should not establish new connections.  For "graceful"
+   only, a null delay means the MG must not set serviceState "out of
+   service" until the Termination is in the null Context.
+
+   The optional ServiceChangeProfile parameter specifies the Profile (if
+   any) of the protocol supported.  The ServiceChangeProfile includes
+   the version of the profile supported.
+
+   The optional ServiceChangeVersion parameter contains the protocol
+   version and is used if protocol version negotiation occurs (see
+   11.3).
+
+   The optional TimeStamp parameter specifies the actual time as kept by
+   the sender.  As such, it is not necessarily absolute time according
+   to, for example, a local time zone - it merely establishes an
+   arbitrary starting time against which all future timestamps
+   transmitted by a sender during this association shall be compared.
+   It can be used by the responder to determine how its notion of time
+   differs from that of its correspondent.  TimeStamp is sent with a
+   precision of hundredths of a second.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 63]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The optional Extension parameter may contain any value whose meaning
+   is mutually understood by the MG and MGC.
+
+   A ServiceChange Command specifying the "Root" for the TerminationID
+   and ServiceChangeMethod equal to Restart is a registration command by
+   which a Media Gateway announces its existence to the Media Gateway
+   Controller.  The Media Gateway may also announce a registration
+   command by specifying the "Root" for the TerminationID and
+   ServiceChangeMethod equal to Failover when the MG detects MGC
+   failures.  The Media Gateway is expected to be provisioned with the
+   name of one primary and optionally some number of alternate Media
+   Gateway Controllers.  Acknowledgement of the ServiceChange Command
+   completes the registration process, except when the MGC has returned
+   an alternative ServiceChangeMgcId as described in the following
+   paragraph.  The MG may specify the transport ServiceChangeAddress to
+   be used by the MGC for sending messages in the ServiceChangeAddress
+   parameter in the input ServiceChangeDescriptor.  The MG may specify
+   an address in the ServiceChangeAddress parameter of the ServiceChange
+   request, and the MGC may also do so in the ServiceChange reply.  In
+   either case, the recipient must use the supplied address as the
+   destination for all subsequent transaction requests within the
+   association.  At the same time, as indicated in clause 9, transaction
+   replies and pending indications must be sent to the address from
+   which the corresponding requests originated.  This must be done even
+   if it implies extra messaging because commands and responses cannot
+   be packed together.  The TimeStamp parameter shall be sent with a
+   registration command and its response.
+
+   The Media Gateway Controller may return a ServiceChangeMgcId
+   parameter that describes the Media Gateway Controller that should
+   preferably be contacted for further service by the Media Gateway.  In
+   this case the Media Gateway shall reissue the ServiceChange command
+   to the new Media Gateway Controller.  The MGC specified in a
+   ServiceChangeMgcId, if provided, shall be contacted before any
+   further alternate MGCs.  On a HandOff message from MGC to MG, the
+   ServiceChangeMgcId is the new MGC that will take over from the
+   current MGC.
+
+   The return from ServiceChange is empty except when the Root
+   terminationID is used.  In that case it includes the following
+   parameters as required:
+
+   -  ServiceChangeAddress, if the responding MGC wishes to specify a
+      new destination for messages from the MG for the remainder of the
+      association;
+
+   -  ServiceChangeMgcId, if the responding MGC does not wish to sustain
+      an association with the MG;
+
+
+
+Groves, et al.              Standards Track                    [Page 64]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ServiceChangeProfile, if the responder wishes to negotiate the
+      profile to be used for the association;
+
+   -  ServiceChangeVersion, if the responder wishes to negotiate the
+      version of the protocol to be used for the association.
+
+   The following ServiceChangeReasons are defined.  This list may be
+   extended by an IANA registration as outlined in 13.3.
+
+      900 Service Restored
+      901 Cold Boot
+      902 Warm Boot
+      903 MGC Directed Change
+      904 Termination malfunctioning
+      905 Termination taken out of service
+      906 Loss of lower layer connectivity (e.g., downstream sync)
+      907 Transmission Failure
+      908 MG Impending Failure
+      909 MGC Impending Failure
+      910 Media Capability Failure
+      911 Modem Capability Failure
+      912 Mux Capability Failure
+      913 Signal Capability Failure
+      914 Event Capability Failure
+      915 State Loss
+
+7.2.9 Manipulating and Auditing Context Attributes
+
+   The commands of the protocol as discussed in the preceding subclauses
+   apply to Terminations.  This subclause specifies how Contexts are
+   manipulated and audited.
+
+   Commands are grouped into actions (see clause 8).  An action applies
+   to one Context.  In addition to commands, an action may contain
+   Context manipulation and auditing instructions.
+
+   An action request sent to a MG may include a request to audit
+   attributes of a Context.  An action may also include a request to
+   change the attributes of a Context.
+
+   The Context properties that may be included in an action reply are
+   used to return information to a MGC.  This can be information
+   requested by an audit of Context attributes or details of the effect
+   of manipulation of a Context.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 65]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If a MG receives an action which contains both a request to audit
+   context attributes and a request to manipulate those attributes, the
+   response SHALL include the values of the attributes after processing
+   the manipulation request.
+
+7.2.10   Generic Command Syntax
+
+   The protocol can be encoded in a binary format or in a text format.
+   MGCs should support both encoding formats.  MGs may support both
+   formats.
+
+   The protocol syntax for the binary format of the protocol is defined
+   in Annex A.  Annex C specifies the encoding of the Local and Remote
+   descriptors for use with the binary format.
+
+   A complete ABNF of the text encoding of the protocol per RFC 2234 is
+   given in Annex B.  SDP is used as the encoding of the Local and
+   Remote descriptors for use with the text encoding as modified in
+   7.1.8.
+
+7.3   Command Error Codes
+
+   Errors consist of an IANA registered error code and an explanatory
+   string.  Sending the explanatory string is optional.  Implementations
+   are encouraged to append diagnostic information to the end of the
+   string.
+
+   When a MG reports an error to a MGC, it does so in an error
+   descriptor.  An error descriptor consists of an error code and
+   optionally the associated explanatory string.
+
+   H.248.8 contains the error codes supported by Recommendations in the
+   H.248 sub-series.
+
+8  Transactions
+
+   Commands between the Media Gateway Controller and the Media Gateway
+   are grouped into Transactions, each of which is identified by a
+   TransactionID.  Transactions consist of one or more Actions.  An
+   Action consists of a non-empty series of Commands, Context property
+   modifications, or Context property audits that are limited to
+   operating within a single Context.  Consequently, each Action
+   typically specifies a ContextID.  However, there are two
+   circumstances where a specific ContextID is not provided with an
+   Action.  One is the case of modification of a Termination outside of
+   a Context.  The other is where the controller requests the gateway to
+   create a new Context.  Figure 8 is a graphic representation of the
+   Transaction, Action and Command relationships.
+
+
+
+Groves, et al.              Standards Track                    [Page 66]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      +----------------------------------------------------------+
+      | Transaction x                                            |
+      |  +----------------------------------------------------+  |
+      |  | Action 1                                           |  |
+      |  | +---------+  +---------+  +---------+  +---------+ |  |
+      |  | | Command |  | Command |  | Command |  | Command | |  |
+      |  | |    1    |  |    2    |  |    3    |  |    4    | |  |
+      |  | +---------+  +---------+  +---------+  +---------+ |  |
+      |  +----------------------------------------------------+  |
+      |                                                          |
+      |  +----------------------------------------------------+  |
+      |  | Action 2                                           |  |
+      |  | +---------+                                        |  |
+      |  | | Command |                                        |  |
+      |  | |    1    |                                        |  |
+      |  | +---------+                                        |  |
+      |  +----------------------------------------------------+  |
+      |                                                          |
+      |  +----------------------------------------------------+  |
+      |  | Action 3                                           |  |
+      |  | +---------+  +---------+  +---------+              |  |
+      |  | | Command |  | Command |  | Command |              |  |
+      |  | |    1    |  |    2    |  |    3    |              |  |
+      |  | +---------+  +---------+  +---------+              |  |
+      |  +----------------------------------------------------+  |
+      +----------------------------------------------------------+
+
+               Figure 8: Transactions, Actions and Commands
+
+   Transactions are presented as TransactionRequests.  Corresponding
+   responses to a TransactionRequest are received in a single reply,
+   possibly preceded by a number of TransactionPending messages (see
+   8.2.3).
+
+   Transactions guarantee ordered Command processing.  That is, Commands
+   within a Transaction are executed sequentially.  Ordering of
+   Transactions is NOT guaranteed - transactions may be executed in any
+   order, or simultaneously.
+
+   At the first failing Command in a Transaction, processing of the
+   remaining Commands in that Transaction stops.  If a command contains
+   a wildcarded TerminationID, the command is attempted with each of the
+   actual TerminationIDs matching the wildcard.  A response within the
+   TransactionReply is included for each matching TerminationID, even if
+   one or more instances generated an error.  If any TerminationID
+   matching a wildcard results in an error when executed, any commands
+   following the wildcarded command are not attempted.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 67]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Commands may be marked as "Optional" which can override this
+   behaviour - if a command marked as Optional results in an error,
+   subsequent commands in the Transaction will be executed.  If a
+   command fails, the MG shall as far as possible restore the state that
+   existed prior to the attempted execution of the command before
+   continuing with command processing.
+
+   A TransactionReply includes the results for all of the Commands in
+   the corresponding TransactionRequest.  The TransactionReply includes
+   the return values for the Commands that were executed successfully,
+   and the Command and error descriptor for any Command that failed.
+
+   TransactionPending is used to periodically notify the receiver that a
+   Transaction has not completed yet, but is actively being processed.
+
+   Applications SHOULD implement an application level timer per
+   transaction.  Expiration of the timer should cause a retransmission
+   of the request.  Receipt of a Reply should cancel the timer.  Receipt
+   of Pending should restart the timer.
+
+8.1   Common parameters
+
+8.1.1 Transaction Identifiers
+
+   Transactions are identified by a TransactionID, which is assigned by
+   sender and is unique within the scope of the sender.  A response
+   containing an error descriptor to indicate that the TransactionID is
+   missing in a request shall use TransactionID 0 in the corresponding
+   TransactionReply.
+
+8.1.2 Context Identifiers
+
+   Contexts are identified by a ContextID, which is assigned by the
+   Media Gateway and is unique within the scope of the Media Gateway.
+   The Media Gateway Controller shall use the ContextID supplied by the
+   Media Gateway in all subsequent Transactions relating to that
+   Context.  The protocol makes reference to a distinguished value that
+   may be used by the Media Gateway Controller when referring to a
+   Termination that is currently not associated with a Context, namely
+   the null ContextID.
+
+   The CHOOSE wildcard is used to request that the Media Gateway create
+   a new Context.
+
+   The MGC may use the ALL wildcard to address all Contexts on the MG.
+   The null Context is not included when the ALL wildcard is used.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 68]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The MGC shall not use partially specified ContextIDs containing the
+   CHOOSE or ALL wildcards.
+
+8.2   Transaction Application Programming Interface
+
+   Following is an Application Programming Interface (API) describing
+   the Transactions of the protocol.  This API is shown to illustrate
+   the Transactions and their parameters and is not intended to specify
+   implementation (e.g., via use of blocking function calls).  It will
+   describe the input parameters and return values expected to be used
+   by the various Transactions of the protocol from a very high level.
+   Transaction syntax and encodings are specified in later subclauses.
+
+8.2.1 TransactionRequest
+
+   The TransactionRequest is invoked by the sender.  There is one
+   Transaction per request invocation.  A request contains one or more
+   Actions, each of which specifies its target Context and one or more
+   Commands per Context.
+
+     TransactionRequest(TransactionId {
+         ContextID {Command ... Command},
+            . . .
+         ContextID {Command ... Command } })
+
+   The TransactionID parameter must specify a value for later
+   correlation with the TransactionReply or TransactionPending response
+   from the receiver.
+
+   The ContextID parameter must specify a value to pertain to all
+   Commands that follow up to either the next specification of a
+   ContextID parameter or the end of the TransactionRequest, whichever
+   comes first.
+
+   The Command parameter represents one of the Commands mentioned in 7.2
+   (Command Application Programming Interface).
+
+8.2.2 TransactionReply
+
+   The TransactionReply is invoked by the receiver.  There is one reply
+   invocation per transaction.  A reply contains one or more Actions,
+   each of which must specify its target Context and one or more
+   Responses per Context.  The TransactionReply is invoked by the
+   responder when it has processed the TransactionRequest.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 69]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A TransactionRequest has been processed:
+
+   -  when all actions in that TransactionRequest have been processed;
+      or
+
+   -  when an error is encountered in processing that
+      TransactionRequest, except when the error is in an optional
+      command.
+
+   A command has been processed when all descriptors in that command
+   have been processed.
+
+   A SignalsDescriptor is considered to have been processed when it has
+   been established that the descriptor is syntactically valid, the
+   requested signals are supported and they have been queued to be
+   applied.
+
+   An EventsDescriptor or EventBufferDescriptor is considered to have
+   been processed when it has been established that the descriptor is
+   syntactically valid, the requested events can be observed, any
+   embedded signals can be generated, any embedded events can be
+   detected, and the MG has been brought into a state in which the
+   events will be detected.
+
+     TransactionReply(TransactionID {
+         ContextID { Response ... Response },
+            . . .
+         ContextID { Response ... Response } })
+
+   The TransactionID parameter must be the same as that of the
+   corresponding TransactionRequest.
+
+   The ContextID parameter must specify a value to pertain to all
+   Responses for the action.  The ContextID may be specific, all or
+   null.
+
+   Each of the Response parameters represents a return value as
+   mentioned in 7.2, or an error descriptor if the command execution
+   encountered an error.  Commands after the point of failure are not
+   processed and, therefore, Responses are not issued for them.
+
+   An exception to this occurs if a command has been marked as optional
+   in the Transaction request.  If the optional command generates an
+   error, the transaction still continues to execute, so the Reply
+   would, in this case, have Responses after an Error.
+
+   Section 7.1.19 Error Descriptor specifies the generation of error
+   descriptors.  The text below discusses several individual cases.
+
+
+
+Groves, et al.              Standards Track                    [Page 70]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If the receiver encounters an error in processing a ContextID, the
+   requested Action response will consist of the Context ID and a single
+   error descriptor, 422 - Syntax Error in Action.
+
+   If the receiver encounters an error such that it cannot determine a
+   legal Action, it will return a TransactionReply consisting of the
+   TransactionID and a single error descriptor, 422 - Syntax Error in
+   Action.  If the end of an action cannot be reliably determined but
+   one or more commands can be parsed, it will process them and then
+   send 422 - Syntax Error in Action as the last action for the
+   transaction.  If the receiver encounters an error such that is cannot
+   determine a legal Transaction, it will return a TransactionReply with
+   a null TransactionID and a single error descriptor (403 - Syntax
+   Error in TransactionRequest).
+
+   If the end of a transaction cannot be reliably determined and one or
+   more Actions can be parsed, it will process them and then return 403
+   - Syntax Error in Transaction as the last action reply for the
+   transaction.  If no Actions can be parsed, it will return 403 -
+   Syntax Error in TransactionRequest as the only reply.
+
+   If the terminationID cannot be reliably determined, it will send 442
+   - Syntax Error in Command as the action reply.
+
+   If the end of a command cannot be reliably determined, it will return
+   442 - Syntax Error in Command as the reply to the last action it can
+   parse.
+
+8.2.3 TransactionPending
+
+   The receiver invokes the TransactionPending.  A TransactionPending
+   indicates that the Transaction is actively being processed, but has
+   not been completed.  It is used to prevent the sender from assuming
+   the TransactionRequest was lost where the Transaction will take some
+   time to complete.
+
+     TransactionPending(TransactionID { } )
+
+   The TransactionID parameter must be the same as that of the
+   corresponding TransactionRequest.  A property of root
+   (normalMGExecutionTime) is settable by the MGC to indicate the
+   interval within which the MGC expects a response to any transaction
+   from the MG.  Another property (normalMGCExecutionTime) is settable
+   by the MGC to indicate the interval within which the MG should expect
+   a response to any transaction from the MGC.  Senders may receive more
+   than one TransactionPending for a command.  If a duplicate request is
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 71]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   received when pending, the responder may send a duplicate pending
+   immediately, or continue waiting for its timer to trigger another
+   TransactionPending.
+
+8.3   Messages
+
+   Multiple Transactions can be concatenated into a Message.  Messages
+   have a header, which includes the identity of the sender.  The
+   Message Identifier (MID) of a message is set to a provisioned name
+   (e.g., domain address/domain name/device name) of the entity
+   transmitting the message.  Domain name is a suggested default.  An
+   H.248.1 entity (MG/MGC) must consistently use the same MID in all
+   messages it originates for the duration of control association with
+   the peer (MGC/MG).
+
+   Every Message contains a Version Number identifying the version of
+   the protocol the message conforms to.  Versions consist of one or two
+   digits, beginning with version 1 for the present version of the
+   protocol.
+
+   The transactions in a message are treated independently.  There is no
+   order implied; there is no application or protocol acknowledgement of
+   a message.  A message is essentially a transport mechanism.  For
+   example, message X containing transaction requests A, B, and C may be
+   responded to with message Y containing replies to A and C and message
+   Z containing the reply to B.  Likewise, message L containing request
+   D and message M containing request E may be responded to with message
+   N containing replies to both D and E.
+
+9  Transport
+
+   The transport mechanism for the protocol should allow the reliable
+   transport of transactions between a MGC and MG.  The transport shall
+   remain independent of what particular commands are being sent and
+   shall be applicable to all application states.  There are several
+   transports defined for the protocol, which are defined in Annexes to
+   this RFC and other Recommendations of the H.248
+   sub-series.  Additional Transports may be defined as additional
+
+   Recommendations of the H.248 sub-series.  For transport of the
+   protocol over IP, MGCs shall implement both TCP and UDP/ALF, a MG
+   shall implement TCP or UDP/ALF or both.
+
+   The MG is provisioned with a name or address (such as DNS name or IP
+   address) of a primary and zero or more secondary MGCs (see 7.2.8)
+   that is the address the MG uses to send messages to the MGC.  If TCP
+   or UDP is used as the protocol transport and the port to which the
+   initial ServiceChange request is to be sent is not otherwise known,
+
+
+
+Groves, et al.              Standards Track                    [Page 72]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   that request should be sent to the default port number for the
+   protocol.  This port number is 2944 for text-encoded operation or
+   2945 for binary-encoded operation, for either UDP or TCP.  The MGC
+   receives the message containing the ServiceChange request from the MG
+   and can determine the MG's address from it.  As described in 7.2.8,
+   either the MG or the MGC may supply an address in the
+   ServiceChangeAddress parameter to which subsequent transaction
+   requests must be addressed, but responses (including the response to
+   the initial ServiceChange request) must always be sent back to the
+   address which was the source of the corresponding request.  For
+   example, in IP networks, this is the source address in the IP header
+   and the source port number in the TCP/UDP/SCTP header.
+
+9.1   Ordering of Commands
+
+   This RFC does not mandate that the underlying transport protocol
+   guarantees the sequencing of transactions sent to an entity.  This
+   property tends to maximize the timeliness of actions, but it has a
+   few drawbacks.  For example:
+
+   -  Notify commands may be delayed and arrive at the MGC after the
+      transmission of a new command changing the EventsDescriptor.
+
+   -  If a new command is transmitted before a previous one is
+      acknowledged, there is no guarantee that prior command will be
+      executed before the new one.
+
+   Media Gateway Controllers that want to guarantee consistent operation
+   of the Media Gateway may use the following rules.  These rules are
+   with respect to commands that are in different transactions.
+   Commands that are in the same transaction are executed in order (see
+   clause 8).
+
+   1) When a Media Gateway handles several Terminations, commands
+      pertaining to the different Terminations may be sent in parallel,
+      for example following a model where each Termination (or group of
+      Terminations) is controlled by its own process or its own thread.
+
+   2) On a Termination, there should normally be at most one outstanding
+      command (Add or Modify or Move), unless the outstanding commands
+      are in the same transaction.  However, a Subtract command may be
+      issued at any time.  In consequence, a Media Gateway may sometimes
+      receive a Modify command that applies to a previously subtracted
+      Termination.  Such commands should be ignored, and an error code
+      should be returned.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 73]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   3) For transports that do not guarantee in-sequence delivery of
+      messages (i.e., UDP), there should normally be on a given
+      Termination at most one outstanding Notify command at any time.
+
+   4) In some cases, an implicitly or explicitly wildcarded Subtract
+      command that applies to a group of Terminations may step in front
+      of a pending Add command.  The Media Gateway Controller should
+      individually delete all Terminations for which an Add command was
+      pending at the time of the global Subtract command.  Also, new Add
+      commands for Terminations named by the wildcarding (or implied in
+      a Multiplex descriptor) should not be sent until the wildcarded
+      Subtract command is acknowledged.
+
+   5) AuditValue and AuditCapability are not subject to any sequencing.
+
+   6) ServiceChange shall always be the first command sent by a MG as
+      defined by the restart procedure.  Any other command or response
+      must be delivered after this ServiceChange command.
+
+   These rules do not affect the command responder, which should always
+   respond to commands.
+
+9.2   Protection against Restart Avalanche
+
+   In the event that a large number of Media Gateways are powered on
+   simultaneously and they were to all initiate a ServiceChange
+   transaction, the Media Gateway Controller would very likely be
+   swamped, leading to message losses and network congestion during the
+   critical period of service restoration.  In order to prevent such
+   avalanches, the following behaviour is suggested:
+
+   1) When a Media Gateway is powered on, it should initiate a restart
+      timer to a random value, uniformly distributed between 0 and a
+      maximum waiting delay (MWD).  Care should be taken to avoid
+      synchronicity of the random number generation between multiple
+      Media Gateways that would use the same algorithm.
+
+   2) The Media Gateway should then wait for either the end of this
+      timer or the detection of a local user activity, such as for
+      example an off-hook transition on a residential Media Gateway.
+
+   3) When the timer elapses, or when an activity is detected, the Media
+      Gateway should initiate the restart procedure.
+
+   The restart procedure simply requires the MG to guarantee that the
+   first message that the Media Gateway Controller sees from this MG is
+   a ServiceChange message informing the Media Gateway Controller about
+   the restart.
+
+
+
+Groves, et al.              Standards Track                    [Page 74]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     NOTE - The value of MWD is a configuration parameter that depends
+     on the type of the Media Gateway.  The following reasoning may be
+     used to determine the value of this delay on residential gateways.
+
+   Media Gateway Controllers are typically dimensioned to handle the
+   peak hour traffic load, during which, in average, 10% of the lines
+   will be busy, placing calls whose average duration is typically 3
+   minutes.  The processing of a call typically involves 5 to 6 Media
+   Gateway Controller transactions between each Media Gateway and the
+   Media Gateway Controller.  This simple calculation shows that the
+   Media Gateway Controller is expected to handle 5 to 6 transactions
+   for each Termination, every 30 minutes on average, or, to put it
+   otherwise, about one transaction per Termination every 5 to 6 minutes
+   on average.  This suggests that a reasonable value of MWD for a
+   residential gateway would be 10 to 12 minutes.  In the absence of
+   explicit configuration, residential gateways should adopt a value of
+   600 seconds for MWD.
+
+   The same reasoning suggests that the value of MWD should be much
+   shorter for trunking gateways or for business gateways, because they
+   handle a large number of Terminations, and also because the usage
+   rate of these Terminations is much higher than 10% during the peak
+   busy hour, a typical value being 60%.  These Terminations, during the
+   peak hour, are this expected to contribute about one transaction per
+   minute to the Media Gateway Controller load.  A reasonable algorithm
+   is to make the value of MWD per "trunk" Termination six times shorter
+   than the MWD per residential gateway, and also inversely proportional
+   to the number of Terminations that are being restarted.  For example
+   MWD should be set to 2.5 seconds for a gateway that handles a T1
+   line, or to 60 milliseconds for a gateway that handles a T3 line.
+
+10 Security Considerations
+
+   This clause covers security when using the protocol in an IP
+   environment.
+
+10.1  Protection of Protocol Connections
+
+   A security mechanism is clearly needed to prevent unauthorized
+   entities from using the protocol defined in this RFC for setting up
+   unauthorized calls or interfering with authorized calls.  The
+   security mechanism for the protocol when transported over IP networks
+   is IPsec [RFC 2401 to RFC 2411].
+
+   The AH header [RFC 2402] affords data origin authentication,
+   connectionless integrity and optional anti-replay protection of
+   messages passed between the MG and the MGC.  The ESP header [RFC
+   2406] provides confidentiality of messages, if desired.  For
+
+
+
+Groves, et al.              Standards Track                    [Page 75]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   instance, the ESP encryption service should be requested if the
+   session descriptions are used to carry session keys, as defined in
+   SDP.
+
+   Implementations of the protocol defined in this RFC employing the ESP
+   header SHALL comply with section 5 of [RFC 2406], which defines a
+   minimum set of algorithms for integrity checking and encryption.
+   Similarly, implementations employing the AH header SHALL comply with
+   section 5 of [RFC 2402], which defines a minimum set of algorithms
+   for integrity checking using manual keys.
+
+   Implementations SHOULD use IKE [RFC 2409] to permit more robust
+   keying options.  Implementations employing IKE SHOULD support
+   authentication with RSA signatures and RSA public key encryption.
+
+10.2  Interim AH scheme
+
+   Implementation of IPsec requires that the AH or ESP header be
+   inserted immediately after the IP header.  This cannot be easily done
+   at the application level.  Therefore, this presents a deployment
+   problem for the protocol defined in this RFC where the underlying
+   network implementation does not support IPsec.
+
+   As an interim solution, an optional AH header is defined within the
+   H.248.1 protocol header.  The header fields are exactly those of the
+   SPI, SEQUENCE NUMBER and DATA fields as defined in [RFC 2402].  The
+   semantics of the header fields are the same as the "transport mode"
+   of [RFC 2402], except for the calculation of the Integrity Check
+   Value (ICV).  In IPsec, the ICV is calculated over the entire IP
+   packet including the IP header.  This prevents spoofing of the IP
+   addresses.  To retain the same functionality, the ICV calculation
+   should be performed across all the transactions (concatenated) in the
+   message prepended by a synthesized IP header consisting of a 32-bit
+   source IP address, a 32-bit destination address and a 16-bit UDP
+   destination port encoded as 20 hex digits.  When the interim AH
+   mechanism is employed when TCP is the transport Layer, the UDP Port
+   above becomes the TCP port, and all other operations are the same.
+
+   Implementations of the H.248.1 protocol SHALL implement IPsec where
+   the underlying operating system and the transport network supports
+   IPsec.  Implementations of the protocol using IPv4 SHALL implement
+   the interim AH scheme.  However, this interim scheme SHALL NOT be
+   used when the underlying network layer supports IPsec.  IPv6
+   implementations are assumed to support IPsec and SHALL NOT use the
+   interim AH scheme.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 76]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   All implementations of the interim AH mechanism SHALL comply with
+   section 5 of RFC 2402 which defines a minimum set of algorithms for
+   integrity checking using manual keys.
+
+   The interim AH interim scheme does not provide protection against
+   eavesdropping, thus forbidding third parties from monitoring the
+   connections set up by a given Termination.  Also, it does not provide
+   protection against replay attacks.  These procedures do not
+   necessarily protect against denial of service attacks by misbehaving
+   MGs or misbehaving MGCs.  However, they will provide an
+   identification of these misbehaving entities, which should then be
+   deprived of their authorization through maintenance procedures.
+
+10.3  Protection of Media Connections
+
+   The protocol allows the MGC to provide MGs with "session keys" that
+   can be used to encrypt the audio messages, protecting against
+   eavesdropping.
+
+   A specific problem of packet networks is "uncontrolled barge-in".
+   This attack can be performed by directing media packets to the IP
+   address and UDP port used by a connection.  If no protection is
+   implemented, the packets must be decompressed and the signals must be
+   played on the "line side".
+
+   A basic protection against this attack is to only accept packets from
+   known sources, checking for example that the IP source address and
+   UDP source port match the values announced in the Remote descriptor.
+   This has two inconveniences: it slows down connection establishment
+   and it can be fooled by source spoofing:
+
+   -  To enable the address-based protection, the MGC must obtain the
+      remote session description of the egress MG and pass it to the
+      ingress MG.  This requires at least one network round trip, and
+      leaves us with a dilemma: either allow the call to proceed without
+      waiting for the round trip to complete, and risk for example,
+      "clipping" a remote announcement, or wait for the full round trip
+      and settle for slower call-set up procedures.
+
+   -  Source spoofing is only effective if the attacker can obtain valid
+      pairs of source destination addresses and ports, for example by
+      listening to a fraction of the traffic.  To fight source spoofing,
+      one could try to control all access points to the network.  But
+      this is in practice very hard to achieve.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 77]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   An alternative to checking the source address is to encrypt and
+   authenticate the packets, using a secret key that is conveyed during
+   the call set-up procedure.  This will not slow down the call set-up,
+   and provides strong protection against address spoofing.
+
+11 MG-MGC Control Interface
+
+   The control association between MG and MGC is initiated at MG cold
+   start, and announced by a ServiceChange message, but can be changed
+   by subsequent events, such as failures or manual service events.
+   While the protocol does not have an explicit mechanism to support
+   multiple MGCs controlling a physical MG, it has been designed to
+   support the multiple logical MG (within a single physical MG) that
+   can be associated with different MGCs.
+
+11.1  Multiple Virtual MGs
+
+   A physical Media Gateway may be partitioned into one or more Virtual
+   MGs.  A virtual MG consists of a set of statically partitioned
+   physical Terminations and/or sets of ephemeral Terminations.  A
+   physical Termination is controlled by one MGC.  The model does not
+   require that other resources be statically allocated, just
+   Terminations.  The mechanism for allocating Terminations to virtual
+   MGs is a management method outside the scope of the protocol.  Each
+   of the virtual MGs appears to the MGC as a complete MG client.
+
+   A physical MG may have only one network interface, which must be
+   shared across virtual MGs.  In such a case, the packet/cell side
+   Termination is shared.  It should be noted however, that in use, such
+   interfaces require an ephemeral instance of the Termination to be
+   created per flow, and thus sharing the Termination is
+   straightforward.  This mechanism does lead to a complication, namely
+   that the MG must always know which of its controlling MGCs should be
+   notified if an event occurs on the interface.
+
+   In normal operation, the Virtual MG will be instructed by the MGC to
+   create network flows (if it is the originating side), or to expect
+   flow requests (if it is the terminating side), and no confusion will
+   arise.  However, if an unexpected event occurs, the Virtual MG must
+   know what to do with respect to the physical resources it is
+   controlling.
+
+   If recovering from the event requires manipulation of a physical
+   interface's state, only one MGC should do so.  These issues are
+   resolved by allowing any of the MGCs to create EventsDescriptors to
+   be notified of such events, but only one MGC can have read/write
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 78]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   access to the physical interface properties; all other MGCs have
+   read-only access.  The management mechanism is used to designate
+   which MGC has read/write capability, and is designated the Master
+   MGC.
+
+   Each virtual MG has its own Root Termination.  In most cases the
+   values for the properties of the Root Termination are independently
+   settable by each MGC.  Where there can only be one value, the
+   parameter is read-only to all but the Master MGC.
+
+   ServiceChange may only be applied to a Termination or set of
+   Terminations partitioned to the Virtual MG or created (in the case of
+   ephemeral Terminations) by that Virtual MG.
+
+11.2  Cold start
+
+   A MG is pre-provisioned by a management mechanism outside the scope
+   of this protocol with a primary and (optionally) an ordered list of
+   secondary MGCs.  Upon a cold start of the MG, it will issue a
+   ServiceChange command with a "Restart" method, on the Root
+   Termination to its primary MGC.  If the MGC accepts the MG, it sends
+   a Transaction Reply not including a ServiceChangeMgcId parameter.  If
+   the MGC does not accept the MG's registration, it sends a Transaction
+   Reply, providing the address of an alternate MGC to be contacted by
+   including a ServiceChangeMgcId parameter.
+
+   If the MG receives a Transaction Reply that includes a
+   ServiceChangeMgcId parameter, it sends a ServiceChange to the MGC
+   specified in the ServiceChangeMgcId.  It continues this process until
+   it gets a controlling MGC to accept its registration, or it fails to
+   get a reply.  Upon failure to obtain a reply, either from the primary
+   MGC, or a designated successor, the MG tries its pre-provisioned
+   secondary MGCs, in order.  If the MG is unable to establish a control
+   relationship with any MGC, it shall wait a random amount of time as
+   described in 9.2 and then start contacting its primary, and if
+   necessary, its secondary MGCs again.
+
+   It is possible that the reply to a ServiceChange with Restart will be
+   lost, and a command will be received by the MG prior to the receipt
+   of the ServiceChange response.  The MG shall issue Error 505 -
+   Command Received before a ServiceChange Reply has been received.
+
+11.3  Negotiation of protocol version
+
+   The first ServiceChange command from a MG shall contain the version
+   number of the protocol supported by the MG in the
+   ServiceChangeVersion parameter.  Upon receiving such a message, if
+   the MGC supports only a lower version, then the MGC shall send a
+
+
+
+Groves, et al.              Standards Track                    [Page 79]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ServiceChangeReply with the lower version and thereafter all the
+   messages between MG and MGC shall conform to the lower version of the
+   protocol.  If the MG is unable to comply and it has established a
+   transport connection to the MGC, it should close that connection.  In
+   any event, it should reject all subsequent requests from the MGC with
+   error 406 - Version Not Supported.
+
+   If the MGC supports a higher version than the MG but is able to
+   support the lower version proposed by the MG, it shall send a
+   ServiceChangeReply with the lower version and thereafter all the
+   messages between MG and MGC shall conform to the lower version of the
+   protocol.  If the MGC is unable to comply, it shall reject the
+   association, with error 406 - Version Not Supported.
+
+   Protocol version negotiation may also occur at "handoff" and
+   "failover" ServiceChanges.
+
+   When extending the protocol with new versions, the following rules
+   should be followed:
+
+   1) Existing protocol elements, i.e., procedures, parameters,
+      descriptor, property, values, should not be changed unless a
+      protocol error needs to be corrected or it becomes necessary to
+      change the operation of the service that is being supported by the
+      protocol.
+
+   2) The semantics of a command, a parameter, a descriptor, a property,
+      or a value should not be changed.
+
+   3) Established rules for formatting and encoding messages and
+      parameters should not be modified.
+
+   4) When information elements are found to be obsolete they can be
+      marked as not used.  However, the identifier for that information
+      element will be marked as reserved.  In that way it can not be
+      used in future versions.
+
+11.4  Failure of a MG
+
+   If a MG fails, but is capable of sending a message to the MGC, it
+   sends a ServiceChange with an appropriate method (graceful or forced)
+   and specifies the Root TerminationID.  When it returns to service, it
+   sends a ServiceChange with a "Restart" method.
+
+   Allowing the MGC to send duplicate messages to both MGs accommodates
+   pairs of MGs that are capable of redundant failover of one of the
+   MGs.  Only the Working MG shall accept or reject transactions.  Upon
+   failover, the primary MG sends a ServiceChange command with a
+
+
+
+Groves, et al.              Standards Track                    [Page 80]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   "Failover" method and a "MG Impending Failure" reason.  The MGC then
+   uses the secondary MG as the active MG.  When the error condition is
+   repaired, the Working MG can send a "ServiceChange" with a "Restart"
+   method.
+
+     Note: Redundant failover MGs require a reliable transport, because
+     the protocol provides no means for a secondary MG running ALF to
+     acknowledge messages sent from the MGC.
+
+11.5  Failure of an MGC
+
+   If the MG detects a failure of its controlling MGC, it attempts to
+   contact the next MGC on its pre-provisioned list.  It starts its
+   attempts at the beginning (primary MGC), unless that was the MGC that
+   failed, in which case it starts at its first secondary MGC.  It sends
+   a ServiceChange message with a "Failover" method and a "MGC Impending
+   Failure" reason.  If the MG is unable to establish a control
+   relationship with any MGC, it shall wait a random amount of time as
+   described in section 9.2 and then start again contacting its primary,
+   and (if necessary) its secondary MGCs.  When contacting its
+   previously controlling MGC, the MG sends the ServiceChange message
+   with "Disconnected" method.
+
+   In partial failure, or for manual maintenance reasons, an MGC may
+   wish to direct its controlled MGs to use a different MGC.  To do so,
+   it sends a ServiceChange method to the MG with a "HandOff" method,
+   and its designated replacement in ServiceChangeMgcId.  If "HandOff"
+   is supported, the MG shall send a ServiceChange message with a
+   "Handoff" method and a "MGC directed change" reason to the designated
+   MGC.  If it fails to get a reply from the designated MGC, the MG
+   shall behave as if its MGC failed, and start contacting secondary
+   MGCs as specified in the previous paragraph.  If the MG is unable to
+   establish a control relationship with any MGC, it shall wait a random
+   amount of time as described in 9.2 and then start contacting its
+   primary, and if necessary, its secondary MGCs again.
+
+   No recommendation is made on how the MGCs involved in the Handoff
+   maintain state information; this is considered to be out of scope of
+   this RFC.  The MGC and MG may take the following steps when Handoff
+   occurs.  When the MGC initiates a HandOff, the handover should be
+   transparent to Operations on the Media Gateway.  Transactions can be
+   executed in any order, and could be in progress when the
+   ServiceChange is executed.  Accordingly, commands in progress
+   continue and replies to all commands from the original MGC must be
+   sent to the transport address from which they were sent.  If the
+   service relationship with the sending MGC has ended, the replies
+   should be discarded.  The MG may receive outstanding transaction
+   replies from the new MGC.  No new messages shall be sent to the new
+
+
+
+Groves, et al.              Standards Track                    [Page 81]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MGC until the control association is established.  Repeated
+   transaction requests shall be directed to the new MGC.  The MG shall
+   maintain state on all Terminations and Contexts.
+
+   It is possible that the MGC could be implemented in such a way that a
+   failed MGC is replaced by a working MGC where the identity of the new
+   MGC is the same as the failed one.  In such a case,
+   ServiceChangeMgcId would be specified with the previous value and the
+   MG shall behave as if the value was changed, and send a ServiceChange
+   message, as above.
+
+   Pairs of MGCs that are capable of redundant failover can notify the
+   controlled MGs of the failover by the above mechanism.
+
+12 Package definition
+
+   The primary mechanism for extension is by means of Packages.
+   Packages define additional Properties, Events, Signals and Statistics
+   that may occur on Terminations.
+
+   Packages defined by IETF will appear in separate RFCs.
+
+   Packages defined by ITU-T may appear in the relevant Recommendations
+   (e.g., as Recommendations of the H.248 sub-series).
+
+   1) A public document or a standard forum document, which can be
+      referenced as the document that describes the package following
+      the guideline above, should be specified.
+
+   2) The document shall specify the version of the Package that it
+      describes.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.  The site should provide a mechanism to provide
+      comments and appropriate responses should be returned.
+
+12.1  Guidelines for defining packages
+
+   Packages define Properties, Events, Signals, and Statistics.
+
+   Packages may also define new error codes according to the guidelines
+   given in 13.2.  This is a matter of documentary convenience: the
+   package documentation is submitted to IANA in support of the error
+   code registration.  If a package is modified, it is unnecessary to
+   provide IANA with a new document reference in support of the error
+   code unless the description of the error code itself is modified.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 82]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Names of all such defined constructs shall consist of the PackageID
+   (which uniquely identifies the package) and the ID of the item (which
+   uniquely identifies the item in that package).  In the text encoding
+   the two shall be separated by a forward slash ("/") character.
+   Example: togen/playtone is the text encoding to refer to the play
+   tone signal in the tone generation package.
+
+   A Package will contain the following sections:
+
+12.1.1   Package
+
+   Overall description of the package, specifying:
+
+      Package Name: only descriptive
+
+      PackageID: is an identifier
+
+      Description:
+
+      Version:
+
+         A new version of a package can only add additional Properties,
+         Events, Signals, Statistics and new possible values for an
+         existing parameter described in the original package.  No
+         deletions or modifications shall be allowed.  A version is an
+         integer in the range from 1 to 99.
+
+      Designed to be extended only (Optional):
+
+         This indicates that the package has been expressly designed to
+         be extended by others, not to be directly referenced.  For
+         example, the package may not have any function on its own or be
+         nonsensical on its own.  The MG SHOULD NOT publish this
+         PackageID when reporting packages.
+
+      Extends (Optional): existing package Descriptor
+
+         A package may extend an existing package.  The version of the
+         original package must be specified.  When a package extends
+         another package it shall only add additional Properties,
+         Events, Signals, Statistics and new possible values for an
+         existing parameter described in the original package.  An
+         extended package shall not redefine or overload an identifier
+         defined in the original package and packages it may have
+         extended (multiple levels of extension).  Hence, if package B
+         version 1 extends package A version 1, version 2 of B will not
+         be able to extend the A version 2 if A version 2 defines a name
+         already in B version 1.
+
+
+
+Groves, et al.              Standards Track                    [Page 83]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+12.1.2   Properties
+
+   Properties defined by the package, specifying:
+
+      Property Name: only descriptive
+
+      PropertyID: is an identifier
+
+      Description:
+
+      Type: One of:
+
+         Boolean
+
+         String: UTF-8 string
+
+         Octet String: A number of octets.  See Annex A and Annex B.3
+         for encoding
+
+         Integer: 4 byte signed integer
+
+         Double: 8 byte signed integer
+
+         Character: unicode UTF-8 encoding of a single letter.  Could be
+         more than one octet.
+
+         Enumeration: one of a list of possible unique values (see 12.3)
+
+         Sub-list: a list of several values from a list.  The type of
+         sub-list SHALL also be specified.  The type shall be chosen
+         from the types specified in this section (with the exception of
+         sub-list).  For example, Type: sub-list of enumeration.  The
+         encoding of sub-lists is specified in Annexes A and B.3.
+
+      Possible values:
+
+         A package MUST specify either a specific set of values or a
+         description of how values are determined.  A package MUST also
+         specify a default value or the default behaviour when the value
+         is omitted from its descriptor.  For example, a package may
+         specify that procedures related to the property are suspended
+         when its value is omitted.  A default value (but not
+   procedures)
+         may be specified as provisionable.
+
+      Defined in:
+
+         Which H.248.1 descriptor the property is defined in.
+
+
+
+Groves, et al.              Standards Track                    [Page 84]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         LocalControl is for stream dependent properties.
+         TerminationState is for stream independent properties.  These
+         are expected to be the most common cases, but it is possible
+         for properties to be defined in other descriptors.
+
+      Characteristics: Read/Write or both, and (optionally), global:
+
+         Indicates whether a property is read-only, or read-write, and
+         if it is global.  If Global is omitted, the property is not
+         global.  If a property is declared as global, the value of the
+         property is shared by all Terminations realizing the package.
+
+12.1.3   Events
+
+   Events defined by the package, specifying:
+
+      Event name: only descriptive
+
+      EventID: is an identifier
+
+      Description:
+
+      EventsDescriptor Parameters:
+
+         Parameters used by the MGC to configure the event, and found in
+         the EventsDescriptor.  See 12.2.
+
+      ObservedEventsDescriptor Parameters:
+
+         Parameters returned to the MGC in Notify requests and in
+         replies to command requests from the MGC that audit
+         ObservedEventsDescriptor, and found in the
+         ObservedEventsDescriptor.  See 12.2.
+
+12.1.4   Signals
+
+   Signals defined by the package, specifying:
+
+      Signal Name: only descriptive
+
+      SignalID: is an identifier.  SignalID is used in a
+      SignalsDescriptor
+
+      Description
+
+      SignalType: one of:
+
+         OO (On/Off)
+
+
+
+Groves, et al.              Standards Track                    [Page 85]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         TO (TimeOut)
+
+         BR (Brief)
+
+      NOTE - SignalType may be defined such that it is dependent on the
+      value of one or more parameters.  The package MUST specify a
+      default signal type.  If the default type is TO, the package MUST
+      specify a default duration which may be provisioned.  A default
+      duration is meaningless for BR.
+
+      Duration: in hundredths of seconds
+
+      Additional Parameters: see 12.2
+
+12.1.5   Statistics
+
+   Statistics defined by the package, specifying:
+
+      Statistic name: only descriptive
+
+      StatisticID: is an identifier
+
+      StatisticID is used in a StatisticsDescriptor
+
+      Description:
+
+      Units: unit of measure, e.g., milliseconds, packets
+
+12.1.6   Procedures
+
+   Additional guidance on the use of the package.
+
+12.2  Guidelines to defining Parameters to Events and Signals
+
+   Parameter Name: only descriptive
+
+   ParameterID: is an identifier.  The textual ParameterID of parameters
+   to Events and Signals shall not start with "EPA" and "SPA",
+   respectively.  The textual ParameterID shall also not be "ST",
+   "Stream", "SY", "SignalType", "DR", "Duration", "NC",
+   "NotifyCompletion", "KA", "Keepactive", "EB", "Embed", "DM" or
+   "DigitMap".
+
+   Type: One of:
+
+      Boolean
+
+      String: UTF-8 octet string
+
+
+
+Groves, et al.              Standards Track                    [Page 86]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Octet String: A number of octets.  See Annex A and Annex B.3 for
+      encoding
+
+      Integer: 4-octet signed integer
+
+      Double: 8-octet signed integer
+
+      Character: unicode UTF-8 encoding of a single letter.  Could be
+      more than one octet.
+
+      Enumeration: one of a list of possible unique values (see 12.3)
+
+      Sub-list: a list of several values from a list (not supported for
+      statistics).  The type of sub-list SHALL also be specified.  The
+      type shall be chosen from the types specified in this section
+      (with the exception of sub-list).  For example, Type: sub-list of
+      enumeration.  The encoding of sub-lists is specified in Annexes A
+      and B.3.
+
+   Possible values:
+
+      A package MUST specify either a specific set of values or a
+      description of how values are determined.  A package MUST also
+      specify a default value or the default behavior when the value is
+      omitted from its descriptor.  For example, a package may specify
+      that procedures related to the parameter are suspended when it
+      value is omitted.  A default value (but not procedures) may be
+      specified as provisionable.
+
+   Description:
+
+12.3  Lists
+
+   Possible values for parameters include enumerations.  Enumerations
+   may be defined in a list.  It is recommended that the list be IANA
+   registered so that packages that extend the list can be defined
+   without concern for conflicting names.
+
+12.4  Identifiers
+
+   Identifiers in text encoding shall be strings of up to 64 characters,
+   containing no spaces, starting with an alphabetic character and
+   consisting of alphanumeric characters and/or digits, and possibly
+   including the special character underscore ("_").
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 87]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Identifiers in binary encoding are 2 octets long.
+
+   Both text and binary values shall be specified for each identifier,
+   including identifiers used as values in enumerated types.
+
+12.5  Package registration
+
+   A package can be registered with IANA for interoperability reasons.
+   See clause 13 for IANA Considerations.
+
+13 IANA Considerations
+
+13.1  Packages
+
+   The following considerations SHALL be met to register a package with
+   IANA:
+
+   1) A unique string name, unique serial number and version number is
+      registered for each package.  The string name is used with text
+      encoding.  The serial number shall be used with binary encoding.
+      Serial Numbers 0x8000 to 0xFFFF are reserved for private use.
+      Serial number 0 is reserved.
+
+   2) A contact name, email and postal addresses for that contact shall
+      be specified.  The contact information shall be updated by the
+      defining organization as necessary.
+
+   3) A reference to a document that describes the package, which should
+      be public:
+
+      The document shall specify the version of the Package that it
+      describes.
+
+      If the document is public, it should be located on a public web
+      server and should have a stable URL.  The site should provide a
+      mechanism to provide comments and appropriate responses should be
+      returned.
+
+   4) Packages registered by other than recognized standards bodies
+      shall have a minimum package name length of 8 characters.
+
+   5) All other package names are first come-first served if all other
+      conditions are met.
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 88]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+13.2  Error codes
+
+   The following considerations SHALL be met to register an error code
+   with IANA:
+
+   1) An error number and a one-line (80-character maximum) string is
+      registered for each error.
+
+   2) A complete description of the conditions under which the error is
+      detected shall be included in a publicly available document.  The
+      description shall be sufficiently clear to differentiate the error
+      from all other existing error codes.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.
+
+   4) Error numbers registered by recognized standards bodies shall have
+      3- or 4-character error numbers.
+
+   5) Error numbers registered by all other organizations or individuals
+      shall have 4-character error numbers.
+
+   6) An error number shall not be redefined nor modified except by the
+      organization or individual that originally defined it, or their
+      successors or assigns.
+
+13.3  ServiceChange reasons
+
+   The following considerations SHALL be met to register service change
+   reason with IANA:
+
+   1) A one-phrase, 80-character maximum, unique reason code is
+      registered for each reason.
+
+   2) A complete description of the conditions under which the reason is
+      used is detected shall be included in a publicly available
+      document.  The description shall be sufficiently clear to
+      differentiate the reason from all other existing reasons.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 89]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX A - Binary encoding of the protocol
+
+   This annex specifies the syntax of messages using the notation
+   defined in Recommendation X.680; Information technology - Abstract
+   Syntax Notation One (ASN.1): Specification of basic notation.
+   Messages shall be encoded for transmission by applying the basic
+   encoding rules specified in Recommendation X.690, Information
+   Technology - ASN.1 Encoding Rules: Specification of Basic Encoding
+   Rules (BER), Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules.
+
+A.1   Coding of wildcards
+
+   The use of wildcards ALL and CHOOSE is allowed in the protocol.  This
+   allows a MGC to partially specify Termination IDs and to let the MG
+   choose from the values that conform to the partial specification.
+   Termination IDs may encode a hierarchy of names.  This hierarchy is
+   provisioned.  For instance, a TerminationID may consist of a trunk
+   group, a trunk within the group and a circuit.  Wildcarding must be
+   possible at all levels.  The following paragraphs explain how this is
+   achieved.
+
+   The ASN.1 description uses octet strings of up to 8 octets in length
+   for Termination IDs.  This means that Termination IDs consist of at
+   most 64 bits.  A fully specified Termination ID may be preceded by a
+   sequence of wildcarding fields.  A wildcarding field is one octet in
+   length.  Bit 7 (the most significant bit) of this octet specifies
+   what type of wildcarding is invoked: if the bit value equals 1, then
+   the ALL wildcard is used; if the bit value if 0, then the CHOOSE
+   wildcard is used.  Bit 6 of the wildcarding field specifies whether
+   the wildcarding pertains to one level in the hierarchical naming
+   scheme (bit value 0) or to the level of the hierarchy specified in
+   the wildcarding field plus all lower levels (bit value 1).  Bits 0
+   through 5 of the wildcarding field specify the bit position in the
+   Termination ID at which the wildcarding starts.
+
+   We illustrate this scheme with some examples.  In these examples, the
+   most significant bit in a string of bits appears on the left hand
+   side.
+
+   Assume that Termination IDs are three octets long and that each octet
+   represents a level in a hierarchical naming scheme.  A valid
+   Termination ID is:
+
+      00000001 00011110 01010101.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 90]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Addressing ALL names with prefix 00000001 00011110 is done as
+   follows:
+
+      wildcarding field: 10000111
+
+      Termination ID: 00000001 00011110 xxxxxxxx.
+
+   The values of the bits labeled "x" is irrelevant and shall be ignored
+   by the receiver.
+
+   Indicating to the receiver that it must choose a name with 00011110
+   as the second octet is done as follows:
+
+      wildcarding fields: 00010111 followed by 00000111
+
+      Termination ID: xxxxxxxx 00011110 xxxxxxxx.
+
+   The first wildcard field indicates a CHOOSE wildcard for the level in
+   the naming hierarchy starting at bit 23, the highest level in our
+   assumed naming scheme.  The second wildcard field indicates a CHOOSE
+   wildcard for the level in the naming hierarchy starting at bit 7, the
+   lowest level in our assumed naming scheme.
+
+   Finally, a CHOOSE-wildcarded name with the highest level of the name
+   equal to 00000001 is specified as follows:
+
+      wildcard field: 01001111
+
+      Termination ID: 0000001 xxxxxxxx xxxxxxxx .
+
+   Bit value 1 at bit position 6 of the first octet of the wildcard
+   field indicates that the wildcarding pertains to the specified level
+   in the naming hierarchy and all lower levels.
+
+   Context IDs may also be wildcarded.  In the case of Context IDs,
+   however, specifying partial names is not allowed.  Context ID 0x0
+   SHALL be used to indicate the NULL Context, Context ID 0xFFFFFFFE
+   SHALL be used to indicate a CHOOSE wildcard, and Context ID
+   0xFFFFFFFF SHALL be used to indicate an ALL wildcard.
+
+   TerminationID 0xFFFFFFFFFFFFFFFF SHALL be used to indicate the ROOT
+   Termination.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 91]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+A.2   ASN.1 syntax specification
+
+   This subclause contains the ASN.1 specification of the H.248.1
+   protocol syntax.
+
+     NOTE 1 - In case a transport mechanism is used that employs
+     application level framing, the definition of Transaction below
+     changes.  Refer to the annex or to the Recommendation of the H.248
+     sub-series defining the transport mechanism for the definition that
+     applies in that case.
+
+     NOTE 2 - The ASN.1 specification below contains a clause defining
+     TerminationIDList as a sequence of TerminationIDs.  The length of
+     this sequence SHALL be one, except possibly when used in
+     contextAuditResult.
+
+     NOTE 3 - This syntax specification does not enforce all
+     restrictions on element inclusions and values.  Some additional
+     restrictions are stated in comments and other restrictions appear
+     in the text of this RFC.  These additional restrictions
+     are part of the protocol even though not enforced by this
+     specification.
+
+     NOTE 4 - The ASN.1 module in this Annex uses octet string types to
+     encode values for property parameter, signal parameter and event
+     parameter values and statistics.  The actual types of these values
+     vary and are specified in Annex C or the relevant package
+     definition.
+
+   A value is first BER-encoded based on its type using the table below.
+   The result of this BER-encoding is then encoded as an ASN.1 octet
+   string, "double wrapping" the value.  The format specified in Annex C
+   or the package relates to BER encoding according to the following
+   table:
+
+   Type Specified in Package   ASN.1 BER Type
+
+   String                      IA5String or UTF8String (Note 4)
+
+   Integer (4 Octet)           INTEGER
+
+   Double (8 octet signed int) INTEGER (Note 3)
+
+   Character (UTF-8, Note 1)   IA5String
+
+   Enumeration                 ENUMERATED
+
+   Boolean                     BOOLEAN
+
+
+
+Groves, et al.              Standards Track                    [Page 92]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Unsigned Integer (Note 2)   INTEGER  (Note 3)
+
+   Octet (String)              OCTET STRING
+
+     Note 1: Can be more than one byte
+
+     Note 2: Unsigned integer is referenced in Annex C
+
+     Note 3: The BER encoding of INTEGER does not imply the use of 4
+     bytes.
+
+     Note 4: String should be encoded as IA5String when the contents
+     are all ASCII characters, but as UTF8String if it contains any
+     Non-ASCII characters.
+
+   See ITU-T Rec.  X.690, 8.7, for the definition of the encoding of an
+   octet string value.
+
+   MEDIA-GATEWAY-CONTROL DEFINITIONS AUTOMATIC TAGS::=
+   BEGIN
+
+   MegacoMessage ::= SEQUENCE
+   {
+      authHeader     AuthenticationHeader OPTIONAL,
+      mess           Message
+   }
+
+   AuthenticationHeader ::= SEQUENCE
+   {
+      secParmIndex   SecurityParmIndex,
+      seqNum         SequenceNum,
+      ad             AuthData
+   }
+
+   SecurityParmIndex ::= OCTET STRING(SIZE(4))
+
+   SequenceNum       ::= OCTET STRING(SIZE(4))
+
+   AuthData          ::= OCTET STRING (SIZE (12..32))
+
+   Message ::= SEQUENCE
+   {
+      version           INTEGER(0..99),
+      -- The version of the protocol defined here is equal to 1.
+      mId               MId,  -- Name/address of message originator
+      messageBody       CHOICE
+      {
+         messageError      ErrorDescriptor,
+
+
+
+Groves, et al.              Standards Track                    [Page 93]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         transactions      SEQUENCE OF Transaction
+      },
+      ...
+   }
+
+   MId ::= CHOICE
+   {
+      ip4Address           IP4Address,
+      ip6Address           IP6Address,
+      domainName           DomainName,
+      deviceName           PathName,
+      mtpAddress           OCTET STRING(SIZE(2..4)),
+      -- Addressing structure of mtpAddress:
+      --     25 - 15           0
+      --        |  PC        | NI |
+      --      24 - 14 bits    2 bits
+      -- Note: 14 bits are defined for international use.
+      -- Two national options exist where the point code is 16 or 24
+      -- bits.
+      -- To octet align the mtpAddress, the MSBs shall be encoded as 0s.
+             ...
+   }
+
+   DomainName ::= SEQUENCE
+   {
+      name        IA5String,
+      -- The name starts with an alphanumeric digit followed by a
+      -- sequence of alphanumeric digits, hyphens and dots.  No two
+      -- dots shall occur consecutively.
+      portNumber     INTEGER(0..65535) OPTIONAL
+   }
+
+   IP4Address ::= SEQUENCE
+   {
+      address        OCTET STRING (SIZE(4)),
+      portNumber     INTEGER(0..65535) OPTIONAL
+   }
+
+   IP6Address ::= SEQUENCE
+   {
+      address        OCTET STRING (SIZE(16)),
+      portNumber     INTEGER(0..65535) OPTIONAL
+   }
+
+   PathName ::= IA5String(SIZE (1..64))
+   -- See A.3
+
+   Transaction ::= CHOICE
+
+
+
+Groves, et al.              Standards Track                    [Page 94]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   {
+      transactionRequest   TransactionRequest,
+      transactionPending   TransactionPending,
+      transactionReply     TransactionReply,
+      transactionResponseAck  TransactionResponseAck,
+          -- use of response acks is dependent on underlying transport
+      ...
+   }
+
+   TransactionId ::= INTEGER(0..4294967295)  -- 32-bit unsigned integer
+
+   TransactionRequest ::= SEQUENCE
+   {
+      transactionId        TransactionId,
+      actions              SEQUENCE OF ActionRequest,
+      ...
+   }
+
+   TransactionPending ::= SEQUENCE
+   {
+      transactionId        TransactionId,
+      ...
+   }
+
+   TransactionReply ::= SEQUENCE
+   {
+      transactionId        TransactionId,
+      immAckRequired       NULL OPTIONAL,
+      transactionResult    CHOICE
+      {
+           transactionError   ErrorDescriptor,
+           actionReplies      SEQUENCE OF ActionReply
+      },
+      ...
+   }
+
+   TransactionResponseAck ::= SEQUENCE OF TransactionAck
+   TransactionAck ::= SEQUENCE
+   {
+      firstAck       TransactionId,
+      lastAck        TransactionId OPTIONAL
+   }
+
+   ErrorDescriptor ::= SEQUENCE
+   {
+      errorCode      ErrorCode,
+      errorText      ErrorText OPTIONAL
+   }
+
+
+
+Groves, et al.              Standards Track                    [Page 95]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ErrorCode ::= INTEGER(0..65535)
+   -- See clause 13 for IANA Considerations with respect to error codes
+
+   ErrorText ::= IA5String
+
+   ContextID ::= INTEGER(0..4294967295)
+
+   -- Context   NULL Value: 0
+   -- Context CHOOSE Value: 4294967294 (0xFFFFFFFE)
+   -- Context    ALL Value: 4294967295 (0xFFFFFFFF)
+
+
+   ActionRequest ::= SEQUENCE
+   {
+      contextId         ContextID,
+      contextRequest       ContextRequest OPTIONAL,
+      contextAttrAuditReq  ContextAttrAuditRequest OPTIONAL,
+      commandRequests   SEQUENCE OF CommandRequest
+   }
+
+   ActionReply ::= SEQUENCE
+   {
+      contextId         ContextID,
+      errorDescriptor   ErrorDescriptor OPTIONAL,
+      contextReply      ContextRequest OPTIONAL,
+      commandReply      SEQUENCE OF CommandReply
+   }
+
+   ContextRequest ::= SEQUENCE
+   {
+      priority       INTEGER(0..15) OPTIONAL,
+      emergency      BOOLEAN OPTIONAL,
+      topologyReq    SEQUENCE OF TopologyRequest OPTIONAL,
+      ...
+   }
+
+   ContextAttrAuditRequest ::= SEQUENCE
+   {
+      topology    NULL OPTIONAL,
+      emergency   NULL OPTIONAL,
+      priority    NULL OPTIONAL,
+      ...
+   }
+
+   CommandRequest ::= SEQUENCE
+   {
+      command           Command,
+
+
+
+Groves, et al.              Standards Track                    [Page 96]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      optional          NULL OPTIONAL,
+      wildcardReturn    NULL OPTIONAL,
+      ...
+   }
+
+   Command ::= CHOICE
+   {
+      addReq               AmmRequest,
+      moveReq              AmmRequest,
+      modReq               AmmRequest,
+      -- Add, Move, Modify requests have the same parameters
+      subtractReq          SubtractRequest,
+      auditCapRequest      AuditRequest,
+      auditValueRequest    AuditRequest,
+      notifyReq            NotifyRequest,
+      serviceChangeReq     ServiceChangeRequest,
+      ...
+   }
+
+   CommandReply ::= CHOICE
+   {
+      addReply                AmmsReply,
+      moveReply               AmmsReply,
+      modReply                AmmsReply,
+      subtractReply           AmmsReply,
+      -- Add, Move, Modify, Subtract replies have the same parameters
+      auditCapReply           AuditReply,
+      auditValueReply         AuditReply,
+      notifyReply             NotifyReply,
+      serviceChangeReply      ServiceChangeReply,
+      ...
+   }
+
+   TopologyRequest ::= SEQUENCE
+   {
+      terminationFrom         TerminationID,
+      terminationTo           TerminationID,
+      topologyDirection       ENUMERATED
+      {
+         bothway(0),
+         isolate(1),
+         oneway(2)
+      },
+      ...
+   }
+
+   AmmRequest ::= SEQUENCE
+   {
+
+
+
+Groves, et al.              Standards Track                    [Page 97]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      terminationID        TerminationIDList,
+      descriptors          SEQUENCE OF AmmDescriptor,
+      -- At most one descriptor of each type (see AmmDescriptor)
+      -- allowed in the sequence.
+      ...
+   }
+
+   AmmDescriptor ::= CHOICE
+   {
+      mediaDescriptor         MediaDescriptor,
+      modemDescriptor         ModemDescriptor,
+      muxDescriptor           MuxDescriptor,
+      eventsDescriptor        EventsDescriptor,
+      eventBufferDescriptor   EventBufferDescriptor,
+      signalsDescriptor       SignalsDescriptor,
+      digitMapDescriptor      DigitMapDescriptor,
+      auditDescriptor         AuditDescriptor,
+      ...
+   }
+
+   AmmsReply ::= SEQUENCE
+   {
+      terminationID        TerminationIDList,
+      terminationAudit     TerminationAudit OPTIONAL,
+      ...
+   }
+
+   SubtractRequest ::= SEQUENCE
+   {
+      terminationID        TerminationIDList,
+      auditDescriptor      AuditDescriptor OPTIONAL,
+      ...
+   }
+
+   AuditRequest ::= SEQUENCE
+   {
+      terminationID        TerminationID,
+      auditDescriptor      AuditDescriptor,
+      ...
+   }
+
+   AuditReply ::= CHOICE
+   {
+      contextAuditResult   TerminationIDList,
+      error                ErrorDescriptor,
+      auditResult          AuditResult,
+      ...
+   }
+
+
+
+Groves, et al.              Standards Track                    [Page 98]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   AuditResult ::= SEQUENCE
+   {
+
+      terminationID           TerminationID,
+      terminationAuditResult  TerminationAudit
+   }
+
+   TerminationAudit ::= SEQUENCE OF AuditReturnParameter
+
+   AuditReturnParameter ::= CHOICE
+   {
+      errorDescriptor         ErrorDescriptor,
+      mediaDescriptor         MediaDescriptor,
+      modemDescriptor         ModemDescriptor,
+      muxDescriptor           MuxDescriptor,
+      eventsDescriptor        EventsDescriptor,
+      eventBufferDescriptor   EventBufferDescriptor,
+      signalsDescriptor       SignalsDescriptor,
+      digitMapDescriptor      DigitMapDescriptor,
+      observedEventsDescriptor   ObservedEventsDescriptor,
+      statisticsDescriptor    StatisticsDescriptor,
+      packagesDescriptor      PackagesDescriptor,
+      emptyDescriptors        AuditDescriptor,
+      ...
+   }
+
+   AuditDescriptor ::= SEQUENCE
+   {
+      auditToken  BIT STRING
+         {
+            muxToken(0), modemToken(1), mediaToken(2),
+            eventsToken(3), signalsToken(4),
+            digitMapToken(5), statsToken(6),
+            observedEventsToken(7),
+            packagesToken(8), eventBufferToken(9)
+         } OPTIONAL,
+      ...
+   }
+
+   NotifyRequest ::= SEQUENCE
+   {
+      terminationID              TerminationIDList,
+      observedEventsDescriptor   ObservedEventsDescriptor,
+      errorDescriptor            ErrorDescriptor OPTIONAL,
+      ...
+   }
+
+
+
+
+Groves, et al.              Standards Track                    [Page 99]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   NotifyReply ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+      errorDescriptor         ErrorDescriptor OPTIONAL,
+      ...
+   }
+
+   ObservedEventsDescriptor ::= SEQUENCE
+   {
+      requestId               RequestID,
+      observedEventLst        SEQUENCE OF ObservedEvent
+   }
+
+   ObservedEvent ::= SEQUENCE
+   {
+      eventName            EventName,
+      streamID             StreamID OPTIONAL,
+      eventParList         SEQUENCE OF EventParameter,
+      timeNotation         TimeNotation OPTIONAL,
+      ...
+   }
+
+   EventName ::= PkgdName
+
+   EventParameter ::= SEQUENCE
+   {
+      eventParameterName      Name,
+      value                   Value,
+   -- For use of extraInfo see the comment related to PropertyParm
+      extraInfo CHOICE
+      {
+         relation Relation,
+         range    BOOLEAN,
+         sublist  BOOLEAN
+      } OPTIONAL,
+      ...
+   }
+
+   ServiceChangeRequest ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+      serviceChangeParms      ServiceChangeParm,
+      ...
+   }
+
+   ServiceChangeReply ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+
+
+
+Groves, et al.              Standards Track                   [Page 100]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      serviceChangeResult     ServiceChangeResult,
+      ...
+   }
+
+   -- For ServiceChangeResult, no parameters are mandatory.  Hence the
+   -- distinction between ServiceChangeParm and ServiceChangeResParm.
+
+   ServiceChangeResult ::= CHOICE
+   {
+      errorDescriptor            ErrorDescriptor,
+      serviceChangeResParms      ServiceChangeResParm
+   }
+
+   WildcardField ::= OCTET STRING(SIZE(1))
+
+   TerminationID ::= SEQUENCE
+   {
+      wildcard SEQUENCE OF WildcardField,
+      id    OCTET STRING(SIZE(1..8)),
+      ...
+   }
+   -- See A.1 for explanation of wildcarding mechanism.
+   -- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination.
+
+   TerminationIDList ::= SEQUENCE OF TerminationID
+
+   MediaDescriptor ::= SEQUENCE
+   {
+
+      termStateDescr TerminationStateDescriptor OPTIONAL,
+      streams     CHOICE
+      {
+         oneStream      StreamParms,
+         multiStream    SEQUENCE OF StreamDescriptor
+      } OPTIONAL,
+      ...
+   }
+
+   StreamDescriptor ::= SEQUENCE
+   {
+      streamID          StreamID,
+      streamParms       StreamParms
+   }
+
+   StreamParms ::= SEQUENCE
+   {
+      localControlDescriptor     LocalControlDescriptor OPTIONAL,
+      localDescriptor            LocalRemoteDescriptor OPTIONAL,
+
+
+
+Groves, et al.              Standards Track                   [Page 101]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      remoteDescriptor           LocalRemoteDescriptor OPTIONAL,
+      ...
+   }
+
+   LocalControlDescriptor ::= SEQUENCE
+   {
+
+      streamMode        StreamMode OPTIONAL,
+      reserveValue      BOOLEAN OPTIONAL,
+      reserveGroup      BOOLEAN OPTIONAL,
+      propertyParms     SEQUENCE OF PropertyParm,
+      ...
+   }
+
+   StreamMode ::= ENUMERATED
+   {
+      sendOnly(0),
+      recvOnly(1),
+      sendRecv(2),
+      inactive(3),
+      loopBack(4),
+         ...
+   }
+
+   -- In PropertyParm, value is a SEQUENCE OF octet string.  When sent
+   -- by an MGC the interpretation is as follows:
+   -- empty sequence means CHOOSE
+   -- one element sequence specifies value
+   -- If the sublist field is not selected, a longer sequence means
+   -- "choose one of the values" (i.e., value1 OR value2 OR ...)
+   -- If the sublist field is selected,
+   -- a sequence with more than one element encodes the value of a
+   -- list-valued property (i.e., value1 AND value2 AND ...).
+   -- The relation field may only be selected if the value sequence
+   -- has length 1.  It indicates that the MG has to choose a value
+   -- for the property.  E.g., x > 3 (using the greaterThan
+   -- value for relation) instructs the MG to choose any value larger
+   -- than 3 for property x.
+   -- The range field may only be selected if the value sequence
+   -- has length 2.  It indicates that the MG has to choose a value
+   -- in the range between the first octet in the value sequence and
+   -- the trailing octet in the value sequence, including the
+   -- boundary values.
+   -- When sent by the MG, only responses to an AuditCapability request
+   -- may contain multiple values, a range, or a relation field.
+
+   PropertyParm ::= SEQUENCE
+   {
+
+
+
+Groves, et al.              Standards Track                   [Page 102]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      name        PkgdName,
+      value       SEQUENCE OF OCTET STRING,
+      extraInfo   CHOICE
+      {
+         relation    Relation,
+         range       BOOLEAN,
+         sublist     BOOLEAN
+      } OPTIONAL,
+      ...
+   }
+
+   Name ::= OCTET STRING(SIZE(2))
+
+   PkgdName ::= OCTET STRING(SIZE(4))
+   -- represents Package Name (2 octets) plus Property, Event,
+   -- Signal Names or Statistics ID. (2 octets)
+   -- To wildcard a package use 0xFFFF for first two octets, choose
+   -- is not allowed.  To reference native property tag specified in
+   -- Annex C, use 0x0000 as first two octets.
+   -- To wildcard a Property, Event, Signal, or Statistics ID, use
+   -- 0xFFFF for last two octets, choose is not allowed.
+   -- Wildcarding of Package Name is permitted only if Property,
+   -- Event, Signal, or Statistics ID are
+   -- also wildcarded.
+
+   Relation ::= ENUMERATED
+   {
+      greaterThan(0),
+      smallerThan(1),
+      unequalTo(2),
+      ...
+   }
+
+   LocalRemoteDescriptor ::= SEQUENCE
+   {
+      propGrps SEQUENCE OF PropertyGroup,
+      ...
+   }
+
+   PropertyGroup ::= SEQUENCE OF PropertyParm
+
+   TerminationStateDescriptor ::= SEQUENCE
+   {
+      propertyParms        SEQUENCE OF PropertyParm,
+      eventBufferControl   EventBufferControl OPTIONAL,
+      serviceState         ServiceState OPTIONAL,
+      ...
+   }
+
+
+
+Groves, et al.              Standards Track                   [Page 103]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   EventBufferControl ::= ENUMERATED
+   {
+      off(0),
+      lockStep(1),
+      ...
+   }
+
+   ServiceState ::= ENUMERATED
+
+   {
+      test(0),
+      outOfSvc(1),
+      inSvc(2),
+         ...
+   }
+
+   MuxDescriptor   ::= SEQUENCE
+   {
+      muxType           MuxType,
+      termList          SEQUENCE OF TerminationID,
+      nonStandardData   NonStandardData OPTIONAL,
+      ...
+   }
+
+   MuxType ::= ENUMERATED
+   {
+      h221(0),
+      h223(1),
+      h226(2),
+      v76(3),
+      ...
+   }
+
+   StreamID ::= INTEGER(0..65535)   -- 16-bit unsigned integer
+
+   EventsDescriptor ::= SEQUENCE
+   {
+      requestID      RequestID OPTIONAL,
+                  -- RequestID must be present if eventList
+                  -- is non empty
+      eventList      SEQUENCE OF RequestedEvent,
+      ...
+   }
+
+   RequestedEvent ::= SEQUENCE
+   {
+      pkgdName       PkgdName,
+
+
+
+Groves, et al.              Standards Track                   [Page 104]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      streamID       StreamID OPTIONAL,
+      eventAction    RequestedActions OPTIONAL,
+      evParList      SEQUENCE OF EventParameter,
+      ...
+   }
+
+   RequestedActions ::= SEQUENCE
+   {
+      keepActive        BOOLEAN OPTIONAL,
+      eventDM           EventDM OPTIONAL,
+      secondEvent          SecondEventsDescriptor OPTIONAL,
+      signalsDescriptor    SignalsDescriptor OPTIONAL,
+      ...
+   }
+
+   EventDM ::= CHOICE
+   {  digitMapName   DigitMapName,
+      digitMapValue  DigitMapValue
+   }
+
+   SecondEventsDescriptor ::= SEQUENCE
+   {
+      requestID         RequestID OPTIONAL,
+      eventList         SEQUENCE OF SecondRequestedEvent,
+      ...
+   }
+
+   SecondRequestedEvent ::= SEQUENCE
+   {
+      pkgdName          PkgdName,
+      streamID          StreamID OPTIONAL,
+      eventAction       SecondRequestedActions OPTIONAL,
+      evParList         SEQUENCE OF EventParameter,
+      ...
+   }
+
+   SecondRequestedActions ::= SEQUENCE
+   {
+      keepActive           BOOLEAN OPTIONAL,
+      eventDM              EventDM OPTIONAL,
+      signalsDescriptor    SignalsDescriptor OPTIONAL,
+      ...
+   }
+
+   EventBufferDescriptor ::= SEQUENCE OF EventSpec
+
+   EventSpec ::= SEQUENCE
+   {
+
+
+
+Groves, et al.              Standards Track                   [Page 105]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      eventName      EventName,
+      streamID       StreamID OPTIONAL,
+      eventParList   SEQUENCE OF EventParameter,
+      ...
+   }
+
+   SignalsDescriptor ::= SEQUENCE OF SignalRequest
+
+   SignalRequest ::=CHOICE
+   {
+      signal         Signal,
+      seqSigList     SeqSigList,
+      ...
+   }
+
+   SeqSigList ::= SEQUENCE
+   {
+      id                INTEGER(0..65535),
+      signalList        SEQUENCE OF Signal
+   }
+
+   Signal ::= SEQUENCE
+   {
+      signalName        SignalName,
+      streamID          StreamID OPTIONAL,
+      sigType           SignalType OPTIONAL,
+      duration          INTEGER (0..65535) OPTIONAL,
+      notifyCompletion  NotifyCompletion OPTIONAL,
+      keepActive        BOOLEAN OPTIONAL,
+      sigParList        SEQUENCE OF SigParameter,
+      ...
+   }
+
+   SignalType ::= ENUMERATED
+   {
+      brief(0),
+      onOff(1),
+      timeOut(2),
+      ...
+   }
+
+   SignalName ::= PkgdName
+
+   NotifyCompletion ::= BIT STRING
+   {
+      onTimeOut(0), onInterruptByEvent(1),
+      onInterruptByNewSignalDescr(2), otherReason(3)
+   }
+
+
+
+Groves, et al.              Standards Track                   [Page 106]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   SigParameter ::= SEQUENCE
+   {
+      sigParameterName     Name,
+      value                Value,
+      -- For use of extraInfo see the comment related to PropertyParm
+      extraInfo CHOICE
+      {
+         relation Relation,
+         range    BOOLEAN,
+         sublist  BOOLEAN
+
+      } OPTIONAL,
+      ...
+   }
+
+   -- For an AuditCapReply with all events, the RequestID SHALL be ALL.
+   -- ALL is represented by 0xffffffff.
+
+   RequestID ::= INTEGER(0..4294967295)   -- 32-bit unsigned integer
+
+   ModemDescriptor ::= SEQUENCE
+   {
+      mtl               SEQUENCE OF ModemType,
+      mpl               SEQUENCE OF PropertyParm,
+      nonStandardData   NonStandardData OPTIONAL
+   }
+
+   ModemType ::= ENUMERATED
+   {
+      v18(0),
+      v22(1),
+      v22bis(2),
+      v32(3),
+      v32bis(4),
+      v34(5),
+      v90(6),
+      v91(7),
+      synchISDN(8),
+      ...
+   }
+
+   DigitMapDescriptor ::= SEQUENCE
+   {
+      digitMapName   DigitMapName   OPTIONAL,
+      digitMapValue  DigitMapValue  OPTIONAL
+   }
+
+
+
+
+Groves, et al.              Standards Track                   [Page 107]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   DigitMapName ::= Name
+
+   DigitMapValue ::= SEQUENCE
+   {
+      startTimer     INTEGER(0..99) OPTIONAL,
+      shortTimer     INTEGER(0..99) OPTIONAL,
+      longTimer      INTEGER(0..99) OPTIONAL,
+      digitMapBody      IA5String,
+   -- Units are seconds for start, short and long timers, and
+   -- hundreds of milliseconds for duration timer.  Thus start,
+   -- short, and long range from 1 to 99 seconds and duration
+   -- from 100 ms to 9.9 s
+      -- See A.3 for explanation of digit map syntax
+      ...
+   }
+
+   ServiceChangeParm ::= SEQUENCE
+   {
+      serviceChangeMethod     ServiceChangeMethod,
+      serviceChangeAddress    ServiceChangeAddress OPTIONAL,
+      serviceChangeVersion    INTEGER(0..99) OPTIONAL,
+      serviceChangeProfile    ServiceChangeProfile OPTIONAL,
+      serviceChangeReason     Value,
+   -- A serviceChangeReason consists of a numeric reason code
+   -- and an optional text description.
+   -- The serviceChangeReason SHALL be a string consisting of
+   -- a decimal reason code, optionally followed by a single
+   -- space character and a textual description string.
+   -- This string is first BER-encoded as an IA5String.
+   -- The result of this BER-encoding is then encoded as
+   -- an ASN.1 OCTET STRING type, "double wrapping" the
+   -- value as was done for package elements.
+      serviceChangeDelay      INTEGER(0..4294967295) OPTIONAL,
+                                        -- 32-bit unsigned integer
+      serviceChangeMgcId      MId OPTIONAL,
+      timeStamp               TimeNotation OPTIONAL,
+      nonStandardData         NonStandardData OPTIONAL,
+      ...
+   }
+
+   ServiceChangeAddress ::= CHOICE
+   {
+      portNumber        INTEGER(0..65535),    -- TCP/UDP port number
+      ip4Address        IP4Address,
+      ip6Address        IP6Address,
+      domainName        DomainName,
+      deviceName        PathName,
+      mtpAddress        OCTET STRING(SIZE(2..4)),
+
+
+
+Groves, et al.              Standards Track                   [Page 108]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      ...
+   }
+
+   ServiceChangeResParm ::= SEQUENCE
+   {
+      serviceChangeMgcId      MId OPTIONAL,
+      serviceChangeAddress    ServiceChangeAddress OPTIONAL,
+      serviceChangeVersion    INTEGER(0..99) OPTIONAL,
+      serviceChangeProfile    ServiceChangeProfile OPTIONAL,
+      timestamp               TimeNotation OPTIONAL,
+      ...
+   }
+
+   ServiceChangeMethod ::= ENUMERATED
+
+   {
+      failover(0),
+      forced(1),
+      graceful(2),
+      restart(3),
+      disconnected(4),
+      handOff(5),
+      ...
+   }
+
+   ServiceChangeProfile ::= SEQUENCE
+   {
+      profileName    IA5String(SIZE (1..67))
+      -- 64 characters for name, 1 for "/", 2 for version to match ABNF
+   }
+
+   PackagesDescriptor ::= SEQUENCE OF PackagesItem
+
+   PackagesItem ::= SEQUENCE
+   {
+      packageName       Name,
+      packageVersion    INTEGER(0..99),
+      ...
+   }
+
+   StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter
+
+   StatisticsParameter ::= SEQUENCE
+   {
+      statName       PkgdName,
+      statValue      Value OPTIONAL
+   }
+
+
+
+
+Groves, et al.              Standards Track                   [Page 109]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   NonStandardData ::= SEQUENCE
+   {
+      nonStandardIdentifier   NonStandardIdentifier,
+      data                    OCTET STRING
+   }
+
+   NonStandardIdentifier ::= CHOICE
+   {
+      object            OBJECT IDENTIFIER,
+      h221NonStandard   H221NonStandard,
+      experimental      IA5String(SIZE(8)),
+          -- first two characters should be "X-" or "X+"
+      ...
+   }
+
+   H221NonStandard ::= SEQUENCE
+   {  t35CountryCode1   INTEGER(0..255),
+      t35CountryCode2   INTEGER(0..255),      -- country, as per T.35
+      t35Extension      INTEGER(0..255),      -- assigned nationally
+      manufacturerCode     INTEGER(0..65535), -- assigned nationally
+      ...
+   }
+
+   TimeNotation ::= SEQUENCE
+   {
+      date     IA5String(SIZE(8)),  -- yyyymmdd format
+      time     IA5String(SIZE(8))   -- hhmmssss format
+      -- per ISO 8601:1988
+   }
+
+   Value ::= SEQUENCE OF OCTET STRING
+
+   END
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 110]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+A.3   Digit maps and path names
+
+   From a syntactic viewpoint, digit maps are strings with syntactic
+   restrictions imposed upon them.  The syntax of valid digit maps is
+   specified in ABNF [RFC 2234].  The syntax for digit maps presented in
+   this subclause is for illustrative purposes only.  The definition of
+   digitMap in Annex B takes precedence in the case of differences
+   between the two.
+
+     digitMap = (digitString / LWSP "(" LWSP digitStringList LWSP ")"
+               LWSP)
+
+     digitStringList = digitString *( LWSP "|" LWSP digitString )
+     digitString = 1*(digitStringElement)
+     digitStringElement = digitPosition [DOT]
+     digitPosition = digitMapLetter / digitMapRange
+     digitMapRange = ("x" / (LWSP "[" LWSP digitLetter LWSP "]" LWSP))
+     digitLetter = *((DIGIT "-" DIGIT) /digitMapLetter)
+     digitMapLetter = DIGIT           ;digits 0-9
+             / %x41-4B / %x61-6B    ;a-k and A-K
+             / "L"/ "S"       ;Inter-event timers
+                                 ;(long, short)
+             / "Z"            ;Long duration event
+     DOT = %x2E ; "."
+     LWSP = *(WSP / COMMENT / EOL)
+     WSP = SP / HTAB
+     COMMENT = ";" *(SafeChar / RestChar / WSP) EOL
+     EOL = (CR [LF]) / LF
+     SP = %x20
+     HTAB = %x09
+     CR = %x0D
+     LF = %x0A
+     SafeChar = DIGIT / ALPHA / "+" / "-" / "&" / "!" / "_" / "/" /
+         "'" / "?" / "@" / "^" / "`" / "~" / "*" / "$" / "\" /
+         "(" / ")" / "%" / "."
+     RestChar = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" /
+         "<" / ">" / "=" / %x22
+     DIGIT = %x30-39       ; digits 0 through 9
+     ALPHA = %x41-5A / %x61-7A; A-Z, a-z
+
+   A path name is also a string with syntactic restrictions imposed upon
+   it.  The ABNF production defining it is copied from Annex B.
+
+     ; Total length of pathNAME must not exceed 64 chars.
+     pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
+                            ["@" pathDomainName ]
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 111]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     ; ABNF allows two or more consecutive "." although it is
+     ; meaningless in a path domain name.
+     pathDomainName       = (ALPHA / DIGIT / "*" )
+                            *63(ALPHA / DIGIT / "-"
+     NAME = ALPHA *63(ALPHA / DIGIT / "_" )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 112]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX B - Text encoding of the protocol
+
+B.1   Coding of wildcards
+
+   In a text encoding of the protocol, while TerminationIDs are
+   arbitrary, by judicious choice of names, the wildcard character, "*"
+   may be made more useful.  When the wildcard character is encountered,
+   it will "match" all TerminationIDs having the same previous and
+   following characters (if appropriate).  For example, if there were
+   TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID
+   R13/3/* would match all of them.  There are some circumstances where
+   ALL Terminations must be referred to.  The TerminationID "*"
+   suffices, and is referred to as ALL.  The CHOOSE TerminationID "$"
+   may be used to signal to the MG that it has to create an ephemeral
+   Termination or select an idle physical Termination.
+
+B.2   ABNF specification
+
+   The protocol syntax is presented in ABNF according to RFC 2234.
+
+      Note 1 - This syntax specification does not enforce all
+      restrictions on element inclusions and values.  Some additional
+      restrictions are stated in comments and other restrictions appear
+      in the text of this RFC.  These additional restrictions are part
+      of the protocol even though not enforced by this specification.
+
+      Note 2 - The syntax is context-dependent.  For example, "Add" can
+      be the AddToken or a NAME depending on the context in which it
+      occurs.
+
+   Everything in the ABNF and text encoding is case insensitive.  This
+   includes TerminationIDs, digitmap Ids etc.  SDP is case sensitive as
+   per RFC 2327.
+
+   ; NOTE -- The ABNF in this section uses the VALUE construct (or lists
+   ; of VALUE constructs) to encode various package element values
+   ; (properties, signal parameters, etc.).  The types of these values
+   ; vary and are specified the relevant package definition.  Several
+   ; such types are described in section 12.2.
+   ;
+   ; The ABNF specification for VALUE allows a quotedString form or a
+   ; collection of SafeChars.  The encoding of package element values
+   ; into ABNF VALUES is specified below.  If a type's encoding allows
+   ; characters other than SafeChars, the quotedString form MUST be used
+   ; for all values of that type, even for specific values that consist
+   ; only of SafeChars.
+   ;
+
+
+
+
+Groves, et al.              Standards Track                   [Page 113]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ; String:  A string MUST use the quotedString form of VALUE and can
+   ; contain anything allowable in the quotedString form.
+   ;
+   ; Integer, Double, and Unsigned Integer:  Decimal values can be
+   ; encoded using characters 0-9.  Hexadecimal values must be prefixed
+   ; with '0x' and can use characters 0-9,a-f,A-F.  An octal format is
+   ; not supported.  Negative integers start with '-' and MUST be
+   ; Decimal.  The SafeChar form of VALUE MUST be used.
+   ;
+   ; Character:  A UTF-8 encoding of a single letter surrounded by
+   ; double quotes.
+   ;
+   ; Enumeration:  An enumeration MUST use the SafeChar form of VALUE
+   ; and can contain anything allowable in the SafeChar form.
+   ;
+   ; Boolean:  Boolean values are encoded as "on" and "off" and are
+   ; case insensitive.  The SafeChar form of VALUE MUST be used.
+   ;
+   ; Future types:  Any defined types MUST fit within
+   ; the ABNF specification of VALUE.  Specifically, if a type's
+   ; encoding allows characters other than SafeChars, the quotedString
+   ; form MUST be used for all values of that type, even for specific
+   ; values that consist only of SafeChars.
+   ;
+   ; Note that there is no way to use the double quote character within
+   ; a value.
+   ;
+   ; Note that SDP disallows whitespace at the beginning of a line,
+   ; Megaco ABNF allows whitespace before the beginning of the SDP in
+   ; the Local/Remote descriptor.  Parsers should accept whitespace
+   ; between the LBRKT following the Local/Remote token and the
+   ; beginning of the SDP.
+
+   megacoMessage        = LWSP [authenticationHeader SEP ] message
+
+   authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
+                          SequenceNum COLON AuthData
+
+   SecurityParmIndex    = "0x" 8(HEXDIG)
+   SequenceNum          = "0x" 8(HEXDIG)
+   AuthData             = "0x" 24*64(HEXDIG)
+
+   message            = MegacopToken SLASH Version SEP mId SEP
+   messageBody
+   ; The version of the protocol defined here is equal to 1.
+
+   messageBody          = ( errorDescriptor / transactionList )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 114]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   transactionList      = 1*( transactionRequest / transactionReply /
+                          transactionPending / transactionResponseAck )
+   ;Use of response acks is dependent on underlying transport
+
+
+   transactionPending   = PendingToken EQUAL TransactionID LBRKT
+   RBRKT
+
+   transactionResponseAck = ResponseAckToken LBRKT transactionAck
+                  *(COMMA transactionAck) RBRKT
+   transactionAck = transactionID / (transactionID "-" transactionID)
+
+   transactionRequest   = TransToken EQUAL TransactionID LBRKT
+                          actionRequest *(COMMA actionRequest) RBRKT
+
+   actionRequest        = CtxToken EQUAL ContextID LBRKT ((
+                          contextRequest [COMMA  commandRequestList])
+                          / commandRequestList) RBRKT
+
+   contextRequest    = ((contextProperties [COMMA contextAudit])
+               / contextAudit)
+
+   contextProperties    = contextProperty *(COMMA contextProperty)
+
+   ; at-most-once
+   contextProperty    = (topologyDescriptor / priority / EmergencyToken)
+
+   contextAudit   = ContextAuditToken LBRKT contextAuditProperties
+                         *(COMMA contextAuditProperties) RBRKT
+
+   ; at-most-once
+   contextAuditProperties = ( TopologyToken / EmergencyToken /
+                              PriorityToken )
+
+   ; "O-" indicates an optional command
+   ; "W-" indicates a wildcarded response to a command
+   commandRequestList = ["O-"] ["W-"] commandRequest
+                        *(COMMA ["O-"] ["W-"]commandRequest)
+
+   commandRequest      = ( ammRequest / subtractRequest / auditRequest /
+                           notifyRequest / serviceChangeRequest)
+
+   transactionReply     = ReplyToken EQUAL TransactionID LBRKT
+                     [ ImmAckRequiredToken COMMA]
+                   ( errorDescriptor / actionReplyList ) RBRKT
+
+   actionReplyList      = actionReply *(COMMA actionReply )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 115]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   actionReply          = CtxToken EQUAL ContextID LBRKT
+                     ( errorDescriptor / commandReply ) /
+            (commandReply COMMA errorDescriptor) ) RBRKT
+
+   commandReply      = (( contextProperties [COMMA commandReplyList] ) /
+                           commandReplyList )
+
+
+   commandReplyList     = commandReplys *(COMMA commandReplys )
+
+   commandReplys        = (serviceChangeReply / auditReply / ammsReply /
+                           notifyReply )
+
+   ;Add Move and Modify have the same request parameters
+   ammRequest           = (AddToken / MoveToken / ModifyToken ) EQUAL
+                          TerminationID [LBRKT ammParameter *(COMMA
+                          ammParameter) RBRKT]
+
+   ;at-most-once
+   ammParameter         = (mediaDescriptor / modemDescriptor /
+                           muxDescriptor / eventsDescriptor /
+                           signalsDescriptor / digitMapDescriptor /
+                           eventBufferDescriptor / auditDescriptor)
+
+   ammsReply            = (AddToken / MoveToken / ModifyToken /
+                           SubtractToken ) EQUAL TerminationID [ LBRKT
+                           terminationAudit RBRKT ]
+
+   subtractRequest      =  SubtractToken EQUAL TerminationID
+                           [ LBRKT auditDescriptor RBRKT]
+
+   auditRequest         =  (AuditValueToken / AuditCapToken ) EQUAL
+                           TerminationID LBRKT auditDescriptor RBRKT
+
+   auditReply           = (AuditValueToken / AuditCapToken )
+                          ( contextTerminationAudit  / auditOther)
+
+   auditOther           = EQUAL TerminationID [LBRKT
+                          terminationAudit RBRKT]
+
+   terminationAudit = auditReturnParameter *(COMMA auditReturnParameter)
+
+   contextTerminationAudit = EQUAL CtxToken ( terminationIDList /
+                          LBRKT errorDescriptor RBRKT )
+
+   auditReturnParameter = (mediaDescriptor / modemDescriptor /
+                           muxDescriptor / eventsDescriptor /
+                           signalsDescriptor / digitMapDescriptor /
+
+
+
+Groves, et al.              Standards Track                   [Page 116]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                      observedEventsDescriptor / eventBufferDescriptor /
+                           statisticsDescriptor / packagesDescriptor /
+                            errorDescriptor / auditItem)
+
+   auditDescriptor      = AuditToken LBRKT [ auditItem
+                          *(COMMA auditItem) ] RBRKT
+
+   notifyRequest        = NotifyToken EQUAL TerminationID
+                          LBRKT ( observedEventsDescriptor
+                                [ COMMA errorDescriptor ] ) RBRKT
+
+   notifyReply          = NotifyToken EQUAL TerminationID
+                          [ LBRKT errorDescriptor RBRKT ]
+
+   serviceChangeRequest = ServiceChangeToken EQUAL TerminationID
+                          LBRKT serviceChangeDescriptor RBRKT
+
+   serviceChangeReply   = ServiceChangeToken EQUAL TerminationID
+                          [LBRKT (errorDescriptor /
+                          serviceChangeReplyDescriptor) RBRKT]
+
+   errorDescriptor   = ErrorToken EQUAL ErrorCode
+                       LBRKT [quotedString] RBRKT
+
+   ErrorCode            = 1*4(DIGIT) ; could be extended
+
+   TransactionID        = UINT32
+
+   mId                  = (( domainAddress / domainName )
+                          [":" portNumber]) / mtpAddress / deviceName
+
+   ; ABNF allows two or more consecutive "." although it is meaningless
+   ; in a domain name.
+   domainName           = "<" (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" /
+                          ".") ">"
+   deviceName           = pathNAME
+
+   ;The values 0x0, 0xFFFFFFFE and 0xFFFFFFFF are reserved.
+   ContextID            = (UINT32 / "*" / "-" / "$")
+
+   domainAddress        = "[" (IPv4address / IPv6address) "]"
+   ;RFC2373 contains the definition of IP6Addresses.
+   IPv6address          = hexpart [ ":" IPv4address ]
+   IPv4address          = V4hex DOT V4hex DOT V4hex DOT V4hex
+   V4hex                = 1*3(DIGIT) ; "0".."255"
+   ; this production, while occurring in RFC2373, is not referenced
+   ; IPv6prefix           = hexpart SLASH 1*2DIGIT
+   hexpart           = hexseq "::" [ hexseq ] / "::" [ hexseq ] / hexseq
+
+
+
+Groves, et al.              Standards Track                   [Page 117]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   hexseq               = hex4 *( ":" hex4)
+   hex4                 = 1*4HEXDIG
+
+   portNumber           = UINT16
+
+   ; Addressing structure of mtpAddress:
+   ; 25 - 15            0
+   ;    |  PC        | NI |
+   ;    24 - 14 bits    2 bits
+   ; Note: 14 bits are defined for international use.
+   ; Two national options exist where the point code is 16 or 24 bits.
+   ; To octet align the mtpAddress the MSBs shall be encoded as 0s.
+   ; An octet shall be represented by 2 hex digits.
+   mtpAddress           = MTPToken LBRKT 4*8 (HEXDIG) RBRKT
+
+   terminationIDList  = LBRKT TerminationID *(COMMA TerminationID) RBRKT
+
+   ; Total length of pathNAME must not exceed 64 chars.
+   pathNAME      = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
+                          ["@" pathDomainName ]
+
+   ; ABNF allows two or more consecutive "." although it is meaningless
+   ; in a path domain name.
+   pathDomainName       = (ALPHA / DIGIT / "*" )
+                          *63(ALPHA / DIGIT / "-" / "*" / ".")
+
+   TerminationID        = "ROOT" / pathNAME / "$" / "*"
+
+   mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm) RBRKT
+
+   ; at-most one terminationStateDescriptor
+   ; and either streamParm(s) or streamDescriptor(s) but not both
+   mediaParm            = (streamParm / streamDescriptor /
+                           terminationStateDescriptor)
+
+   ; at-most-once per item
+   streamParm           = ( localDescriptor / remoteDescriptor /
+                           localControlDescriptor )
+
+   streamDescriptor     = StreamToken EQUAL StreamID LBRKT streamParm
+                          *(COMMA streamParm) RBRKT
+
+   localControlDescriptor = LocalControlToken LBRKT localParm
+                            *(COMMA localParm) RBRKT
+
+   ; at-most-once per item except for propertyParm
+   localParm = ( streamMode / propertyParm / reservedValueMode
+                  / reservedGroupMode )
+
+
+
+Groves, et al.              Standards Track                   [Page 118]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   reservedValueMode    = ReservedValueToken EQUAL ( "ON" / "OFF" )
+   reservedGroupMode    = ReservedGroupToken EQUAL ( "ON" / "OFF" )
+
+   streamMode           = ModeToken EQUAL streamModes
+
+   streamModes     = (SendonlyToken / RecvonlyToken / SendrecvToken /
+                          InactiveToken / LoopbackToken )
+
+   propertyParm         = pkgdName parmValue
+   parmValue            = (EQUAL alternativeValue/ INEQUAL VALUE)
+   alternativeValue     = ( VALUE
+                  / LSBRKT VALUE *(COMMA VALUE) RSBRKT
+                   ; sublist (i.e., A AND B AND ...)
+                  / LBRKT VALUE *(COMMA VALUE) RBRKT
+                   ; alternatives (i.e., A OR B OR ...)
+                  /  LSBRKT VALUE COLON VALUE RSBRKT )
+                   ; range
+
+   INEQUAL              = LWSP (">" / "<" / "#" ) LWSP
+   LSBRKT               = LWSP "[" LWSP
+   RSBRKT               = LWSP "]" LWSP
+
+   ; Note - The octet zero is not among the permitted characters in
+   ; octet string.  As the current definition is limited to SDP, and a
+   ; zero octet would not be a legal character in SDP, this is not a
+   ; concern.
+
+   localDescriptor      = LocalToken LBRKT octetString RBRKT
+
+   remoteDescriptor     = RemoteToken LBRKT octetString RBRKT
+
+   eventBufferDescriptor= EventBufferToken [ LBRKT eventSpec
+                          *( COMMA eventSpec) RBRKT ]
+
+   eventSpec      = pkgdName [ LBRKT eventSpecParameter
+                *(COMMA eventSpecParameter) RBRKT ]
+   eventSpecParameter   = (eventStream / eventOther)
+
+   eventBufferControl     = BufferToken EQUAL ( "OFF" / LockStepToken )
+
+   terminationStateDescriptor = TerminationStateToken LBRKT
+              terminationStateParm *( COMMA terminationStateParm ) RBRKT
+
+   ; at-most-once per item except for propertyParm
+   terminationStateParm = (propertyParm / serviceStates /
+                           eventBufferControl )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 119]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   serviceStates        = ServiceStatesToken EQUAL ( TestToken /
+                          OutOfSvcToken / InSvcToken )
+
+   muxDescriptor        = MuxToken EQUAL MuxType  terminationIDList
+
+   MuxType              = ( H221Token / H223Token / H226Token / V76Token
+                           / extensionParameter )
+
+   StreamID             = UINT16
+   pkgdName     = (PackageName SLASH ItemID) ;specific item
+                / (PackageName SLASH "*") ;all items in package
+                / ("*" SLASH "*") ; all items supported by the MG
+   PackageName          = NAME
+   ItemID               = NAME
+
+   eventsDescriptor     = EventsToken [ EQUAL RequestID LBRKT
+                        requestedEvent *( COMMA requestedEvent ) RBRKT ]
+
+   requestedEvent       = pkgdName [ LBRKT eventParameter
+                          *( COMMA eventParameter ) RBRKT ]
+
+   ; at-most-once each of KeepActiveToken , eventDM and eventStream
+   ;at most one of either embedWithSig or embedNoSig but not both
+   ;KeepActiveToken and embedWithSig must not both be present
+   eventParameter       = ( embedWithSig / embedNoSig / KeepActiveToken
+                            /eventDM / eventStream / eventOther )
+
+   embedWithSig         = EmbedToken LBRKT signalsDescriptor
+                            [COMMA embedFirst ] RBRKT
+   embedNoSig        = EmbedToken LBRKT embedFirst RBRKT
+
+   ; at-most-once of each
+   embedFirst      = EventsToken [ EQUAL RequestID LBRKT
+              secondRequestedEvent *(COMMA secondRequestedEvent) RBRKT ]
+
+   secondRequestedEvent = pkgdName [ LBRKT secondEventParameter
+                          *( COMMA secondEventParameter ) RBRKT ]
+
+   ; at-most-once each of embedSig , KeepActiveToken, eventDM or
+   ; eventStream
+   ; KeepActiveToken and embedSig must not both be present
+   secondEventParameter = ( embedSig / KeepActiveToken / eventDM /
+                            eventStream / eventOther )
+
+   embedSig  = EmbedToken LBRKT signalsDescriptor RBRKT
+
+   eventStream          = StreamToken EQUAL StreamID
+
+
+
+
+Groves, et al.              Standards Track                   [Page 120]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   eventOther           = eventParameterName parmValue
+
+   eventParameterName   = NAME
+
+   eventDM              = DigitMapToken EQUAL(( digitMapName ) /
+                          (LBRKT digitMapValue RBRKT ))
+
+   signalsDescriptor    = SignalsToken LBRKT [ signalParm
+                          *(COMMA signalParm)] RBRKT
+
+   signalParm           = signalList / signalRequest
+
+   signalRequest        = signalName [ LBRKT sigParameter
+                          *(COMMA sigParameter) RBRKT ]
+
+   signalList           = SignalListToken EQUAL signalListId LBRKT
+                          signalListParm *(COMMA signalListParm) RBRKT
+
+   signalListId         = UINT16
+
+   ;exactly once signalType, at most once duration and every signal
+   ;parameter
+   signalListParm       = signalRequest
+
+   signalName           = pkgdName
+   ;at-most-once sigStream, at-most-once sigSignalType,
+   ;at-most-once sigDuration, every signalParameterName at most once
+   sigParameter = sigStream / sigSignalType / sigDuration / sigOther
+               / notifyCompletion / KeepActiveToken
+   sigStream            = StreamToken EQUAL StreamID
+   sigOther             = sigParameterName parmValue
+   sigParameterName     = NAME
+   sigSignalType        = SignalTypeToken EQUAL signalType
+   signalType           = (OnOffToken / TimeOutToken / BriefToken)
+   sigDuration          = DurationToken EQUAL UINT16
+   notifyCompletion     = NotifyCompletionToken EQUAL (LBRKT
+            notificationReason *(COMMA notificationReason) RBRKT)
+
+   notificationReason   = ( TimeOutToken / InterruptByEventToken
+                        / InterruptByNewSignalsDescrToken
+                        / OtherReasonToken )
+   observedEventsDescriptor = ObservedEventsToken EQUAL RequestID
+                      LBRKT observedEvent *(COMMA observedEvent) RBRKT
+
+   ;time per event, because it might be buffered
+   observedEvent        = [ TimeStamp LWSP COLON] LWSP
+                          pkgdName [ LBRKT observedEventParameter
+                          *(COMMA observedEventParameter) RBRKT ]
+
+
+
+Groves, et al.              Standards Track                   [Page 121]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ;at-most-once eventStream, every eventParameterName at most once
+   observedEventParameter = eventStream / eventOther
+
+   ; For an AuditCapReply with all events, the RequestID should be ALL.
+   RequestID            = ( UINT32 / "*" )
+
+   modemDescriptor      = ModemToken (( EQUAL modemType) /
+                      (LSBRKT modemType *(COMMA modemType) RSBRKT))
+                     [ LBRKT propertyParm *(COMMA propertyParm) RBRKT ]
+
+
+   ; at-most-once except for extensionParameter
+   modemType            = (V32bisToken / V22bisToken / V18Token /
+                           V22Token / V32Token / V34Token / V90Token /
+                         V91Token / SynchISDNToken / extensionParameter)
+
+   digitMapDescriptor  = DigitMapToken EQUAL
+                        ( ( LBRKT digitMapValue RBRKT ) /
+                        (digitMapName [ LBRKT digitMapValue RBRKT ]) )
+   digitMapName        = NAME
+   digitMapValue       = ["T" COLON Timer COMMA] ["S" COLON Timer COMMA]
+                         ["L" COLON Timer COMMA] digitMap
+   Timer               = 1*2DIGIT
+   ; Units are seconds for T, S, and L timers, and hundreds of
+   ; milliseconds for Z timer.  Thus T, S, and L range from 1 to 99
+   ; seconds and Z from 100 ms to 9.9 s
+   digitMap = (digitString /
+               LWSP "(" LWSP digitStringList LWSP ")" LWSP)
+   digitStringList   = digitString *( LWSP "|" LWSP digitString )
+   digitString       = 1*(digitStringElement)
+   digitStringElement = digitPosition [DOT]
+   digitPosition     = digitMapLetter / digitMapRange
+   digitMapRange     = ("x" / (LWSP "[" LWSP digitLetter LWSP "]" LWSP))
+   digitLetter       = *((DIGIT "-" DIGIT ) / digitMapLetter)
+   digitMapLetter    = DIGIT   ;Basic event symbols
+               / %x41-4B / %x61-6B ; a-k, A-K
+               / "L" / "S"   ;Inter-event timers (long, short)
+               / "Z"         ;Long duration modifier
+
+   ;at-most-once, and DigitMapToken and PackagesToken are not allowed
+   ;in AuditCapabilities command
+   auditItem            = ( MuxToken / ModemToken / MediaToken /
+                           SignalsToken / EventBufferToken /
+                           DigitMapToken / StatsToken / EventsToken /
+                           ObservedEventsToken / PackagesToken )
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 122]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   serviceChangeDescriptor = ServicesToken LBRKT serviceChangeParm
+                            *(COMMA serviceChangeParm) RBRKT
+
+   ; each parameter at-most-once
+   ; at most one of either serviceChangeAddress or serviceChangeMgcId
+   ; but not both
+   ; serviceChangeMethod and serviceChangeReason are REQUIRED
+   serviceChangeParm    = (serviceChangeMethod / serviceChangeReason /
+                          serviceChangeDelay / serviceChangeAddress /
+                          serviceChangeProfile / extension / TimeStamp /
+                          serviceChangeMgcId / serviceChangeVersion )
+
+   serviceChangeReplyDescriptor = ServicesToken LBRKT
+                        servChgReplyParm *(COMMA servChgReplyParm) RBRKT
+
+   ; at-most-once.  Version is REQUIRED on first ServiceChange response
+   ; at most one of either serviceChangeAddress or serviceChangeMgcId
+   ; but not both
+   servChgReplyParm     = (serviceChangeAddress / serviceChangeMgcId /
+                          serviceChangeProfile / serviceChangeVersion /
+                          TimeStamp)
+   serviceChangeMethod  = MethodToken EQUAL (FailoverToken /
+                          ForcedToken / GracefulToken / RestartToken /
+                          DisconnectedToken / HandOffToken /
+                          extensionParameter)
+   ; A serviceChangeReason consists of a numeric reason code
+   ; and an optional text description.
+   ; A serviceChangeReason MUST be encoded using the quotedString
+   ; form of VALUE.
+   ; The quotedString SHALL contain a decimal reason code,
+   ; optionally followed by a single space character and a
+   ; textual description string.
+
+
+   serviceChangeReason  = ReasonToken  EQUAL VALUE
+   serviceChangeDelay   = DelayToken   EQUAL UINT32
+   serviceChangeAddress = ServiceChangeAddressToken EQUAL ( mId /
+                          portNumber )
+   serviceChangeMgcId   = MgcIdToken   EQUAL mId
+   serviceChangeProfile = ProfileToken EQUAL NAME SLASH Version
+   serviceChangeVersion = VersionToken EQUAL Version
+   extension            = extensionParameter parmValue
+
+   packagesDescriptor   = PackagesToken LBRKT packagesItem
+                          *(COMMA packagesItem) RBRKT
+
+   Version              = 1*2(DIGIT)
+   packagesItem         = NAME "-" UINT16
+
+
+
+Groves, et al.              Standards Track                   [Page 123]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   TimeStamp            = Date "T" Time ; per ISO 8601:1988
+   ; Date = yyyymmdd
+   Date                 = 8(DIGIT)
+   ; Time = hhmmssss
+   Time                 = 8(DIGIT)
+   statisticsDescriptor = StatsToken LBRKT statisticsParameter
+                         *(COMMA statisticsParameter ) RBRKT
+
+   ;at-most-once per item
+   statisticsParameter  = pkgdName [EQUAL VALUE]
+
+   topologyDescriptor   = TopologyToken LBRKT topologyTriple
+                          *(COMMA topologyTriple) RBRKT
+   topologyTriple       = terminationA COMMA
+                          terminationB COMMA topologyDirection
+   terminationA         = TerminationID
+   terminationB         = TerminationID
+   topologyDirection    = BothwayToken / IsolateToken / OnewayToken
+
+   priority             = PriorityToken EQUAL UINT16
+
+   extensionParameter   = "X"  ("-" / "+") 1*6(ALPHA / DIGIT)
+
+   ; octetString is used to describe SDP defined in RFC2327.
+   ; Caution should be taken if CRLF in RFC2327 is used.
+   ; To be safe, use EOL in this ABNF.
+   ; Whenever "}" appears in SDP, it is escaped by "\", e.g., "\}"
+   octetString          = *(nonEscapeChar)
+   nonEscapeChar        = ( "\}" / %x01-7C / %x7E-FF )
+   ; Note - The double-quote character is not allowed in quotedString.
+   quotedString         = DQUOTE *(SafeChar / RestChar/ WSP) DQUOTE
+
+   UINT16               = 1*5(DIGIT)  ; %x0-FFFF
+   UINT32               = 1*10(DIGIT) ; %x0-FFFFFFFF
+
+   NAME                 = ALPHA *63(ALPHA / DIGIT / "_" )
+   VALUE                = quotedString / 1*(SafeChar)
+   SafeChar             = DIGIT / ALPHA / "+" / "-" / "&" /
+                          "!" / "_" / "/" / "\'" / "?" / "@" /
+                          "^" / "`" / "~" / "*" / "$" / "\" /
+                          "(" / ")" / "%" / "|" / "."
+
+   EQUAL                = LWSP %x3D LWSP ; "="
+   COLON                = %x3A           ; ":"
+   LBRKT                = LWSP %x7B LWSP ; "{"
+   RBRKT                = LWSP %x7D LWSP ; "}"
+   COMMA                = LWSP %x2C LWSP ; ","
+
+
+
+Groves, et al.              Standards Track                   [Page 124]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   DOT                  = %x2E           ; "."
+   SLASH                = %x2F           ; "/"
+   ALPHA                = %x41-5A / %x61-7A ; A-Z / a-z
+   DIGIT                = %x30-39         ; 0-9
+   DQUOTE               = %x22            ; " (Double Quote)
+   HEXDIG               = ( DIGIT / "A" / "B" / "C" / "D" / "E" / "F" )
+   SP                   = %x20        ; space
+   HTAB                 = %x09        ; horizontal tab
+   CR                   = %x0D        ; Carriage return
+   LF                   = %x0A        ; linefeed
+   LWSP                 = *( WSP / COMMENT / EOL )
+   EOL                  = (CR [LF] / LF )
+   WSP                  = SP / HTAB ; white space
+   SEP                  = ( WSP / EOL / COMMENT) LWSP
+   COMMENT              = ";" *(SafeChar/ RestChar / WSP / %x22) EOL
+   RestChar            = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" /
+                          "<" / ">" / "="
+
+   ; New Tokens added to sigParameter must take the format of SPA*
+   ; * may be of any form i.e., SPAM
+   ; New Tokens added to eventParameter must take the form of EPA*
+   ; * may be of any form i.e., EPAD
+
+   AddToken                   = ("Add"                   / "A")
+   AuditToken                 = ("Audit"                 / "AT")
+   AuditCapToken              = ("AuditCapability"       / "AC")
+   AuditValueToken            = ("AuditValue"            / "AV")
+   AuthToken                  = ("Authentication"        / "AU")
+   BothwayToken               = ("Bothway"               / "BW")
+   BriefToken                 = ("Brief"                 / "BR")
+   BufferToken                = ("Buffer"                / "BF")
+   CtxToken                   = ("Context"               / "C")
+   ContextAuditToken       = ("ContextAudit"    / "CA")
+   DigitMapToken              = ("DigitMap"              / "DM")
+   DisconnectedToken          = ("Disconnected"          / "DC")
+   DelayToken                 = ("Delay"                 / "DL")
+   DurationToken              = ("Duration"              / "DR")
+   EmbedToken                 = ("Embed"                 / "EM")
+   EmergencyToken             = ("Emergency"             / "EG")
+   ErrorToken                 = ("Error"                 / "ER")
+   EventBufferToken           = ("EventBuffer"           / "EB")
+   EventsToken                = ("Events"                / "E")
+   FailoverToken              = ("Failover"              / "FL")
+   ForcedToken                = ("Forced"                / "FO")
+   GracefulToken              = ("Graceful"              / "GR")
+   H221Token                  = ("H221" )
+   H223Token                  = ("H223" )
+   H226Token                  = ("H226" )
+
+
+
+Groves, et al.              Standards Track                   [Page 125]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   HandOffToken               = ("HandOff"               / "HO")
+   ImmAckRequiredToken        = ("ImmAckRequired"        / "IA")
+   InactiveToken              = ("Inactive"              / "IN")
+   IsolateToken               = ("Isolate"               / "IS")
+   InSvcToken                 = ("InService"             / "IV")
+   InterruptByEventToken      = ("IntByEvent"            / "IBE")
+   InterruptByNewSignalsDescrToken
+                              = ("IntBySigDescr"         / "IBS")
+   KeepActiveToken            = ("KeepActive"            / "KA")
+   LocalToken                 = ("Local"                 / "L")
+   LocalControlToken          = ("LocalControl"          / "O")
+   LockStepToken              = ("LockStep"              / "SP")
+   LoopbackToken              = ("Loopback"              / "LB")
+   MediaToken                 = ("Media"                 / "M")
+   MegacopToken               = ("MEGACO"                / "!")
+   MethodToken                = ("Method"                / "MT")
+   MgcIdToken                 = ("MgcIdToTry"            / "MG")
+   ModeToken                  = ("Mode"                  / "MO")
+   ModifyToken                = ("Modify"                / "MF")
+   ModemToken                 = ("Modem"                 / "MD")
+   MoveToken                  = ("Move"                  / "MV")
+   MTPToken                   = ("MTP")
+   MuxToken                   = ("Mux"                   / "MX")
+   NotifyToken                = ("Notify"                / "N")
+   NotifyCompletionToken      = ("NotifyCompletion"      / "NC")
+   ObservedEventsToken        = ("ObservedEvents"        / "OE")
+   OnewayToken                = ("Oneway"                / "OW")
+   OnOffToken                 = ("OnOff"                 / "OO")
+   OtherReasonToken           = ("OtherReason"           / "OR")
+   OutOfSvcToken              = ("OutOfService"          / "OS")
+   PackagesToken              = ("Packages"              / "PG")
+   PendingToken               = ("Pending"               / "PN")
+   PriorityToken              = ("Priority"              / "PR")
+   ProfileToken               = ("Profile"               / "PF")
+   ReasonToken                = ("Reason"                / "RE")
+   RecvonlyToken              = ("ReceiveOnly"           / "RC")
+   ReplyToken                 = ("Reply"                 / "P")
+   RestartToken               = ("Restart"               / "RS")
+   RemoteToken                = ("Remote"                / "R")
+   ReservedGroupToken         = ("ReservedGroup"         / "RG")
+   ReservedValueToken         = ("ReservedValue"         / "RV")
+   SendonlyToken              = ("SendOnly"              / "SO")
+   SendrecvToken              = ("SendReceive"           / "SR")
+   ServicesToken              = ("Services"              / "SV")
+   ServiceStatesToken         = ("ServiceStates"         / "SI")
+   ServiceChangeToken         = ("ServiceChange"         / "SC")
+   ServiceChangeAddressToken  = ("ServiceChangeAddress"  / "AD")
+   SignalListToken            = ("SignalList"            / "SL")
+
+
+
+Groves, et al.              Standards Track                   [Page 126]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   SignalsToken               = ("Signals"               / "SG")
+   SignalTypeToken            = ("SignalType"            / "SY")
+   StatsToken                 = ("Statistics"            / "SA")
+   StreamToken                = ("Stream"                / "ST")
+   SubtractToken              = ("Subtract"              / "S")
+   SynchISDNToken             = ("SynchISDN"             / "SN")
+   TerminationStateToken      = ("TerminationState"      / "TS")
+   TestToken                  = ("Test"                  / "TE")
+   TimeOutToken               = ("TimeOut"               / "TO")
+   TopologyToken              = ("Topology"              / "TP")
+   TransToken                 = ("Transaction"           / "T")
+   ResponseAckToken           = ("TransactionResponseAck" / "K")
+   V18Token                   = ("V18")
+   V22Token                   = ("V22")
+   V22bisToken                = ("V22b")
+   V32Token                   = ("V32")
+   V32bisToken                = ("V32b")
+   V34Token                   = ("V34")
+   V76Token                   = ("V76")
+   V90Token                   = ("V90")
+   V91Token                   = ("V91")
+   VersionToken               = ("Version"               / "V")
+
+B.3   Hexadecimal octet coding
+
+   Hexadecimal octet coding is a means for representing a string of
+   octets as a string of hexadecimal digits, with two digits
+   representing each octet.  This octet encoding should be used when
+   encoding octet strings in the text version of the protocol.  For each
+   octet, the 8-bit sequence is encoded as two hexadecimal digits.  Bit
+   0 is the first transmitted; bit 7 is the last.  Bits 7-4 are encoded
+   as the first hexadecimal digit, with Bit 7 as MSB and Bit 4 as LSB.
+   Bits 3-0 are encoded as the second hexadecimal digit, with Bit 3 as
+   MSB and Bit 0 as LSB. Examples:
+
+        Octet bit pattern                   Hexadecimal coding
+        00011011                            D8
+        11100100                            27
+        10000011 10100010 11001000 00001001 C1451390
+
+B.4   Hexadecimal octet sequence
+
+   A hexadecimal octet sequence is an even number of hexadecimal digits,
+   terminated by a <CR> character.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 127]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX C - Tags for media stream properties
+
+   Parameters for Local, Remote and LocalControl descriptors are
+   specified as tag-value pairs if binary encoding is used for the
+   protocol.  This annex contains the property names (PropertyID), the
+   tags (Property tag), type of the property (Type) and the values
+   (Value).  Values presented in the Value field when the field contains
+   references shall be regarded as "information".  The reference
+   contains the normative values.  If a value field does not contain a
+   reference, then the values in that field can be considered as
+   "normative".
+
+   Tags are given as hexadecimal numbers in this annex.  When setting
+   the value of a property, a MGC may underspecify the value according
+   to one of the mechanisms specified in 7.1.1.
+
+   It is optional to support the properties in this Annex or any of its
+   sub-sections.  For example, only three properties from C.3 and only
+   five properties from C.8 might be implemented.
+
+   For type "enumeration" the value is represented by the value in
+   brackets, e.g., Send(0), Receive(1).  Annex C properties with the
+   types "N bits" or "M Octets" should be treated as octet strings when
+   encoding the protocol.  Properties with "N bit integer" shall be
+   treated as an integers.  "String" shall be treated as an IA5String
+   when encoding the protocol.
+
+   When a type is smaller than one octet, the value shall be stored in
+   the low-order bits of an octet string of size 1.
+
+C.1   General media attributes
+
+   PropertyID    Property Type          Value
+                 tag
+
+   Media         1001     Enumeration   Audio(0), Video(1), Data(2)
+
+   Transmission  1002     Enumeration   Send(0), Receive(1),
+   mode                                 Send&Receive(2)
+
+   Number of     1003     Unsigned      0-255
+   Channels               integer
+
+   Sampling      1004     Unsigned      0-2^32
+   rate                   integer
+
+   Bitrate       1005     Integer       (0..4294967295)NOTE - Units of
+                                        100 bit/s.
+
+
+
+Groves, et al.              Standards Track                   [Page 128]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ACodec        1006     Octet string  Audio Codec Type:
+                                        Ref.: ITU-T Q.765
+                                        Non-ITU-T codecs are defined
+                                        with the appropriate standards
+                                        organization under a defined
+                                        Organizational Identifier.
+
+   Samplepp      1007     Unsigned      Maximum samples or frames per
+                          integer       packet: 0..65535
+
+   Silencesupp   1008     Boolean       Silence Suppression: True/False
+
+   Encrypttype   1009     Octet string  Ref.: ITU-T H.245
+
+   Encryptkey    100A     Octet string  Encryption key
+                          size          Ref.: ITU-T H.235
+                          (0..65535)
+
+   Echocanc      100B                    Not Used.  See H.248.1 E.13 for
+                                        an example of possible Echo
+                                        Control properties.
+
+   Gain          100C     Unsigned      Gain in dB: 0..65535
+                          integer
+
+   Jitterbuff    100D     Unsigned      Jitter buffer size in ms:
+                          integer       0..65535
+
+   PropDelay     100E     Unsigned      Propagation Delay: 0..65535
+                          integer       Maximum propagation delay in
+                                        milliseconds for the bearer
+                                        connection between two media
+                                        gateways.  The maximum delay
+                                        will be dependent on the bearer
+                                        technology.
+
+   RTPpayload    100F     Integer       Payload type in RTP Profile for
+                                        Audio and Video Conferences
+                                        with Minimal Control
+                                        Ref.: RFC 1890
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 129]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+C.2   Mux properties
+
+   PropertyID Property tag Type         Value
+
+   H222       2001         Octet string H222LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   H223       2002         Octet string H223LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   V76        2003         Octet string V76LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   H2250      2004         Octet string H2250LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+C.3   General bearer properties
+
+   PropertyID Property   Type        Value
+              tag
+
+   Mediatx    3001       Enumeration Media Transport TypeTDM
+                                      Circuit(0), ATM(1), FR(2),
+                                      Ipv4(3), Ipv6(4), ...
+
+   BIR        3002       4 octets    Value depends on transport
+                                      technology
+
+   NSAP       3003       1-20 octets See NSAP.
+                                      Ref.: Annex A/X.213
+
+C.4   General ATM properties
+
+   PropertyID Property Type              Value
+              tag
+
+   AESA       4001     20 octets         ATM End System Address
+
+   VPVC       4002     4 octets: VPCI    VPCI/VCI
+                        in first two
+                        least             Ref.: ITU-T Q.2931
+                        significant
+                        octets, VCI in
+                        second two
+                        octets
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 130]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   SC         4003     Enumeration       Service Category: CBR(0),
+                                          nrt-VBR1(1), nrt  VBR2(2),
+                                          nrt-VBR3(3), rt-VBR1(4),
+                                          rt  VBR2(5), rt-VBR3(6),
+                                          UBR1(7), UBR2(8), ABR(9).
+                                          Ref.: ATM Forum UNI 4.0
+
+   BCOB       4004     5-bit integer     Broadband Bearer Class
+                                          Ref.: ITU-T Q.2961.2
+
+   BBTC       4005     7-bit integer     Broadband Transfer Capability
+                                          Ref.: ITU-T Q.2961.1
+
+   ATC        4006     Enumeration       I.371 ATM Traffic
+                                          CapabilityDBR(0), SBR1(1),
+                                          SBR2(2), SBR3(3), ABT/IT(4),
+                                          ABT/DT(5), ABR(6)
+                                          Ref.: ITU-T I.371
+
+   STC        4007     2 bits            Susceptibility to clipping:
+                                          Bits
+                                          2 1
+                                          ---
+                                          0 0     not susceptible to
+                                                  clipping
+                                          0 1     susceptible to
+                                                  clipping
+                                          Ref.: ITU-T Q.2931
+
+   UPCC       4008     2 bits            User Plane Connection
+                                          configuration:
+                                          Bits
+                                          2 1
+                                          ---
+                                          0 0     point-to-point
+                                          0 1     point-to-multipoint
+                                          Ref.: ITU-T Q.2931
+
+   PCR0       4009     24-bit integer    Peak Cell Rate (For CLP = 0)
+                                          Ref.: ITU-T Q.2931
+
+   SCR0       400A     24-bit integer    Sustainable Cell Rate (For
+                                          CLP = 0)
+                                          Ref.: ITU-T Q.2961.1
+
+   MBS0       400B     24-bit integer    Maximum Burst Size (For CLP =
+                                          0)
+                                          Ref.: ITU-T Q.2961.1
+
+
+
+Groves, et al.              Standards Track                   [Page 131]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   PCR1       400C     24-bit integer    Peak Cell Rate (For CLP = 0 +
+                                          1)
+                                          Ref.: ITU-T Q.2931
+
+   SCR1       400D     24-bit integer    Sustainable Cell Rate (For
+                                          CLP = 0 + 1)
+                                          Ref.: ITU-T Q.2961.1
+
+   MBS1       400E     24-bit integer    Maximum Burst Size (For CLP =
+                                          0 + 1)
+                                          Ref.: ITU-T Q.2961.1
+
+   BEI        400F     Boolean           Best Effort Indicator
+                                          Value 1 indicates that BEI is
+                                          to be included in the ATM
+                                          signaling; value 0 indicates
+                                          that BEI is not to be
+                                          included in the ATM
+                                          signaling.
+                                          Ref.: ATM Forum UNI 4.0
+
+   TI         4010     Boolean           Tagging Indicator
+                                          Value 0 indicates that
+                                          tagging is not allowed; value
+                                          1 indicates that tagging is
+                                          requested.
+                                          Ref.: ITU-T Q.2961.1
+
+   FD         4011     Boolean           Frame Discard
+                                          Value 0 indicates that no
+                                          frame discard is allowed;
+                                          value 1 indicates that frame
+                                          discard is allowed.
+                                          Ref.: ATM Forum UNI 4.0
+
+   A2PCDV     4012     24-bit integer    Acceptable 2-point CDV
+                                          Ref.: ITU-T Q.2965.2
+
+   C2PCDV     4013     24-bit integer    Cumulative 2-point CDV
+                                          Ref.: ITU-T Q.2965.2
+
+   APPCDV     4014     24-bit integer    Acceptable P-P CDV
+                                          Ref.: ATM Forum UNI 4.0
+
+   CPPCDV     4015     24-bit integer    Cumulative P-P CDV
+                                          Ref.: ATM Forum UNI 4.0
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 132]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ACLR       4016     8-bit integer     Acceptable Cell Loss Ratio
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   MEETD      4017     16-bit integer    Maximum End-to-end transit
+                                          delay
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   CEETD      4018     16-bit integer    Cumulative End-to-end transit
+                                          delay
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   QosClass   4019     Integer 0-5          QoS Class
+
+                                            QoS Class     Meaning
+
+                                            0             Default QoS
+                                                           associated
+                                                           with the ATC
+                                                           as defined
+                                                           in ITU-T
+                                                           Q.2961.2
+
+                                            1             Stringent
+
+                                            2             Tolerant
+
+                                            3             Bi-level
+
+                                            4             Unbounded
+
+                                            5             Stringent
+                                                           Bi-level
+                                          Ref.: ITU-T Q.2965.1
+
+   AALtype    401A     1 octet           AAL Type
+                                          Bits
+                                          8 7 6 5 4 3 2 1
+                                          ---------------
+                                          0 0 0 0 0 0 0 0   AAL for
+                                                            voice
+                                          0 0 0 0 0 0 0 1   AAL type 1
+                                          0 0 0 0 0 0 1 0   AAL type 2
+                                          0 0 0 0 0 0 1 1   AAL type
+                                                            3/4
+                                          0 0 0 0 0 1 0 1   AAL type 5
+
+
+
+Groves, et al.              Standards Track                   [Page 133]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                          0 0 0 1 0 0 0 0   user-
+                                                            defined AAL
+                                          Ref.: ITU-T Q.2931
+
+C.5   Frame Relay
+
+   PropertyID         Property    Type          Value
+                      tag
+
+   DLCI               5001        Unsigned      Data link connection
+                                  integer       id
+
+   CID                5002        Unsigned      sub-channel id
+                                  integer
+
+   SID/Noiselevel     5003        Unsigned      silence insertion
+                                  integer       descriptor
+
+   Primary Payload    5004        Unsigned      Primary Payload Type
+   type                           integer       Covers FAX and codecs
+
+C.6   IP
+
+   PropertyID Property tag Type                Value
+
+   IPv4       6001         32 bits Ipv4Address Ipv4Address
+                                                Ref.: IETF RFC 791
+
+   IPv6       6002         128 bits            IPv6 Address
+                                                Ref.: IETF RFC 2460
+
+   Port       6003         Unsigned integer    0..65535
+
+   Porttype   6004         Enumerated          TCP(0), UDP(1), SCTP(2)
+
+
+C.7   ATM AAL2
+
+   PropertyID Property Type                   Value
+              tag
+
+   AESA       7001     20 octets              AAL2 service endpoint
+                                                address as defined in
+                                                the referenced
+                                                Recommendation.
+                                                ESEANSEA
+                                                Ref.: ITU-T Q.2630.1
+
+
+
+
+Groves, et al.              Standards Track                   [Page 134]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   BIR        See C.3  4 octets               Served user generated
+                                                reference as defined in
+                                                the referenced
+                                                Recommendation.
+                                                SUGR
+                                                Ref.: ITU-T Q.2630.1
+
+   ALC        7002     12 octets              AAL2 link
+                                                characteristics as
+                                                defined in the
+                                                referenced
+                                                Recommendation.
+                                                Maximum/Average CPS-SDU
+                                                bit rate;
+                                                Maximum/Average CPS-SDU
+                                                size
+                                                Ref.: ITU-T Q.2630.1
+
+   SSCS       7003     I.366.2: Audio (8      Service specific
+                        octets); Multirate (3  convergence sublayer
+                        octets), or I.366.1:   information as defined
+                        SAR-assured (14        in:
+                        octets);SAR-unassured  - ITU-T Q.2630.1,and
+                        (7 octets).            used in:
+                                                - ITU-T I.366.2:
+                                                Audio/Multirate;
+                                                - ITU-T I.366.1: SAR-
+                                                assured/unassured.
+                                                Ref.: ITU-T Q.2630.1,
+                                                I.366.1 and I.366.2
+
+   SUT        7004     1..254 octets          Served user transport
+                                                parameter as defined in
+                                                the referenced
+                                                Recommendation.
+                                                Ref.: ITU-T Q.2630.1
+
+   TCI        7005     Boolean                Test connection
+                                                indicator as defined in
+                                                the referenced
+                                                Recommendation.
+                                                Ref.: ITU-T Q.2630.1
+
+   Timer_CU   7006     32-bit integer         Timer-CU
+                                                Milliseconds to hold
+                                                partially filled cell
+                                                before sending.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 135]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MaxCPSSDU  7007     8-bit integer          Maximum Common Part
+                                                Sublayer Service Data
+                                                Unit
+                                                Ref.: ITU-T Q.2630.1
+
+   CID        7008     8 bits                 subchannel id: 0-255
+                                                Ref.: ITU-T I.363.2
+C.8   ATM AAL1
+
+   PropertyID Property   Type        Value
+              tag
+
+   BIR        See table  4-29 octets GIT (Generic Identifier
+              in C.3                 Transport)
+                                      Ref.: ITU-T Q.2941.1
+
+   AAL1ST     8001       1 octet     AAL1 Subtype
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     voiceband
+                                      signal transport on 64 kbit/s
+                                      0 0 0 0 0 0 1 0     circuit
+                                      transport
+                                      0 0 0 0 0 1 0 0     high-quality
+                                      audio signal transport
+                                      0 0 0 0 0 1 0 1     video signal
+                                      transport
+                                      Ref.: ITU-T Q.2931
+
+   CBRR       8002       1 octet     CBR Rate
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 1       64 kbit/s
+                                      0 0 0 0 0 1 0 0     1544 kbit/s
+                                      0 0 0 0 0 1 0 1     6312 kbit/s
+                                      0 0 0 0 0 1 1 0   32 064 kbit/s
+                                      0 0 0 0 0 1 1 1   44 736 kbit/s
+                                      0 0 0 0 1 0 0 0   97 728 kbit/s
+                                      0 0 0 1 0 0 0 0     2048 kbit/s
+                                      0 0 0 1 0 0 0 1     8448 kbit/s
+                                      0 0 0 1 0 0 1 0   34 368 kbit/s
+                                      0 0 0 1 0 0 1 1  139 264 kbit/s
+                                      0 1 0 0 0 0 0 0   n x 64 kbit/s
+                                      0 1 0 0 0 0 0 1    n x 8 kbit/s
+                                      Ref.: ITU-T Q.2931
+
+
+
+Groves, et al.              Standards Track                   [Page 136]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MULT       See table              Multiplier, or n x 64k/8k/300
+              in C.9                 Ref.: ITU-T Q.2931
+
+   SCRI       8003       1 octet     Source Clock Frequency Recovery
+                                      Method
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     SRTS
+                                      0 0 0 0 0 0 1 0     ACM
+                                      Ref.: ITU-T Q.2931
+
+   ECM        8004       1 octet     Error Correction Method
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     FEC - Loss
+                                      0 0 0 0 0 0 1 0     FEC - Delay
+                                      Ref.: ITU-T Q.2931
+
+   SDTB       8005       16-bit      Structured Data Transfer
+                         integer     Blocksize
+                                      Block size of SDT CBR service
+                                      Ref.: ITU-T I.363.1
+
+   PFCI       8006       8-bit       Partially filled cells identifier
+                         integer     1-47
+                                      Ref.: ITU-T I.363.1
+
+C.9   Bearer capabilities
+
+   The table entries referencing Recommendation Q.931 refer to the
+   encoding in the bearer capability information element of Q.931, not
+   to the low layer information element.
+
+   PropertyID    Tag    Type      Value
+
+   TMR           9001   1 octet   Transmission Medium
+                                  Requirement (Q.763)
+                                  Bits
+                                  87654321
+                                  --------
+                                  00000000  speech
+                                  00000001  spare
+                                  00000010  64 kbit/s
+                                  unrestricted
+
+
+
+Groves, et al.              Standards Track                   [Page 137]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  00000011  3.1 kHz audio
+                                  00000100  reserved for
+                                  alternate speech (service
+                                  2)/64 kbit/s unrestricted
+                                  (service 1)
+                                  00000101  reserved for
+                                  alternate 64 kbit/s
+                                  unrestricted (service
+                                  1)/speech (service 2)
+                                  00000110  64 kbit/s preferred
+
+                                  The assigned codepoints
+                                  listed below are all for
+                                  unrestricted service.
+                                  00000111  2 x 64 kbit/s
+                                  00001000  384 kbit/s
+                                  00001001  1536 kbit/s
+                                  00001010  1920 kbit/s
+                                  00001011
+                                   through
+                                  00001111  spare
+                                  00010000
+                                   through
+                                  00101010:
+                                     3 x 64 kbit/s through
+                                    29 x 64 kbit/s
+                                  except
+                                  00010011  spare
+                                  00100101  spare
+
+                                  00101011
+                                   through
+                                  11111111  spare
+                                  Ref.: ITU-T Q.763
+
+   TMRSR         9002   1 octet   Transmission Medium
+                                  Requirement Subrate
+                                  0     unspecified
+                                  1      8 kbit/s
+                                  2     16 kbit/s
+                                  3     32 kbit/s
+
+   Contcheck     9003   Boolean   Continuity Check
+                                  0     continuity check not
+                                  required on this circuit
+                                  1     continuity check
+                                  required on this circuit
+                                  Ref.: ITU-T Q.763
+
+
+
+Groves, et al.              Standards Track                   [Page 138]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ITC           9004   5 bits    Information Transfer
+                                  Capability
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 0     Speech
+                                  0 1 0 0 0     Unrestricted
+                                  digital information
+                                  0 1 0 0 1     Restricted
+                                  digital information
+                                  1 0 0 0 0     3.1 kHz audio
+                                  1 0 0 0 1     Unrestricted
+                                  digital information with
+                                  tones/announcements
+                                  1 1 0 0 0     Video
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.763
+
+   TransMode     9005   2 bits    Transfer Mode
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Circuit mode
+                                  1 0     Packet mode
+                                  Ref.: ITU-T Q.931
+
+   TransRate     9006   5 bits    Transfer Rate
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 0     This code shall
+                                  be used for packet mode calls
+                                  1 0 0 0 0      64 kbit/s
+                                  1 0 0 0 1  2 x 64 kbit/s
+                                  1 0 0 1 1     384 kbit/s
+                                  1 0 1 0 1    1536 kbit/s
+                                  1 0 1 1 1    1920 kbit/s
+                                  1 1 0 0 0  Multirate (64
+                                  kbit/s base rate)
+                                  Ref.: ITU-T Q.931
+
+   MULT          9007   7 bits    Rate Multiplier
+                                  Any value from 2 to n
+                                  (maximum number of B-
+                                  channels)
+                                  Ref.: ITU-T Q.931
+
+
+
+Groves, et al.              Standards Track                   [Page 139]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   layer1prot    9008   5 bits    User Information Layer 1
+                                  Protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 1     ITU-T
+                                  standardized rate adaption
+                                  V.110 and X.30.
+                                  0 0 0 1 0     Recommendation
+                                  G.711 m-law
+                                  0 0 0 1 1     Recommendation
+                                  G.711 A-law
+                                  0 0 1 0 0     Recommendation
+                                  G.721 32 kbit/s ADPCM and
+                                  Recommendation I.460
+                                  0 0 1 0 1     Recommendations
+                                  H.221 and H.242
+                                  0 0 1 1 0     Recommendations
+                                  H.223 and H.245
+                                  0 0 1 1 1     Non-ITU-T
+                                  standardized rate adaption.
+                                  0 1 0 0 0     ITU-T
+                                  standardized rate adaption
+                                  V.120.
+                                  0 1 0 0 1     ITU-T
+                                  standardized rate adaption
+                                  X.31 HDLC flag stuffing
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU Recommendation
+                                  Q.931
+
+   syncasync     9009   Boolean   Synchronous/Asynchronous
+                                  0     Synchronous data
+                                  1     Asynchronous data
+                                  Ref.: ITU-T Q.931
+
+   negotiation   900A   Boolean   Negotiation
+                                  0     In-band negotiation
+                                  possible
+                                  1     In-band negotiation not
+                                  possible
+                                  Ref.: ITU-T Q.931
+
+   Userrate      900B   5 bits    User Rate
+                                  Bits
+                                  5 4 3 2 1
+
+
+
+Groves, et al.              Standards Track                   [Page 140]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ---------
+                                  0 0 0 0 0     Rate is
+                                  indicated by E-bits specified
+                                  in Recommendation I.460 or
+                                  may be negotiated in-band
+                                  0 0 0 0 1     0.6 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 0 1 0     1.2 kbit/s
+                                  Recommendation V.6
+                                  0 0 0 1 1     2.4 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 1 0 0     3.6 kbit/s
+                                  Recommendation V.6
+                                  0 0 1 0 1     4.8 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 1 1 0     7.2 kbit/s
+                                  Recommendation V.6
+                                  0 0 1 1 1     8 kbit/s
+                                  Recommendation I.460
+                                  0 1 0 0 0     9.6 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 1 0 0 1     14.4 kbit/s
+                                  Recommendation V.6
+                                  0 1 0 1 0     16 kbit/s
+                                  Recommendation I.460
+                                  0 1 0 1 1     19.2 kbit/s
+                                  Recommendation V.6
+                                  0 1 1 0 0     32 kbit/s
+                                  Recommendation I.460
+                                  0 1 1 0 1     38.4 kbit/s
+                                  Recommendation V.110
+                                  0 1 1 1 0     48 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 1 1 1 1     56 kbit/s
+                                  Recommendation V.6
+                                  1 0 0 1 0     57.6 kbit/s
+                                  Recommendation V.14 extended
+                                  1 0 0 1 1     28.8 kbit/s
+                                  Recommendation V.110
+                                  1 0 1 0 0     24 kbit/s
+                                  Recommendation V.110
+                                  1 0 1 0 1     0.1345 kbit/s
+                                  Recommendation X.1
+                                  1 0 1 1 0     0.100 kbit/s
+                                  Recommendation X.1
+                                  1 0 1 1 1     0.075/1.2
+                                  kbit/s Recommendations V.6
+                                  and X.1
+
+
+
+Groves, et al.              Standards Track                   [Page 141]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  1 1 0 0 0     1.2/0.075
+                                  kbit/s Recommendations V.6
+                                  and X.1
+                                  1 1 0 0 1     0.050 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 0 1 0     0.075 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 0 1 1     0.110 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 0 0     0.150 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 0 1     0.200 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 1 0     0.300 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 1 1     12 kbit/s
+                                  Recommendation V.6
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+   INTRATE       900C   2 bits    Intermediate Rate
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     8 kbit/s
+                                  1 0     16 kbit/s
+                                  1 1     32 kbit/s
+                                  Ref.: ITU-T Q.931
+
+   nictx         900D   Boolean   Network Independent Clock
+                                  (NIC) on transmission
+                                  0     Not required to send
+                                  data with network independent
+                                  clock
+                                  1     Required to send data
+                                  with network independent
+                                  clock
+                                  Ref.: ITU-T Q.931
+
+   nicrx         900E   Boolean   Network independent clock
+                                  (NIC) on reception
+                                  0     Cannot accept data with
+                                  network independent clock
+                                  (i.e., sender does not support
+                                  this optional procedure)
+                                  1     Can accept data with
+                                  network independent clock
+
+
+
+Groves, et al.              Standards Track                   [Page 142]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  (i.e., sender does support
+                                  this optional procedure)
+                                  Ref.: ITU-T Q.931
+
+   flowconttx    900F   Boolean   Flow Control on transmission
+                                  (Tx)
+                                  0     Not required to send
+                                  data with flow control
+                                  mechanism
+                                  1     Required to send data
+                                  with flow control mechanism
+                                  Ref.: ITU-T Q.931
+
+   flowcontrx    9010   Boolean   Flow control on reception
+                                  (Rx)
+                                  0     Cannot accept data with
+                                  flow control mechanism (i.e.,
+                                  sender does not support this
+                                  optional procedure)
+                                  1     Can accept data with
+                                  flow control mechanism (i.e.,
+                                  sender does support this
+                                  optional procedure)
+                                  Ref.: ITU-T Q.931
+
+   rateadapthdr  9011   Boolean   Rate adaption header/no
+                                  header
+                                  0     Rate adaption header
+                                  not included
+                                  1     Rate adaption header
+                                  included
+                                  Ref.: ITU-T Q.931
+
+   multiframe    9012   Boolean   Multiple frame establishment
+                                  support in data link
+                                  0     Multiple frame
+                                  establishment not supported.
+                                  Only UI frames allowed
+                                  1     Multiple frame
+                                  establishment supported
+                                  Ref.: ITU-T Q.931
+
+   OPMODE        9013   Boolean   Mode of operation
+                                  0     Bit transparent mode of
+                                  operation
+                                  1     Protocol sensitive mode
+                                  of operation
+                                  Ref.: ITU-T Q.931
+
+
+
+Groves, et al.              Standards Track                   [Page 143]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   llidnegot     9014   Boolean   Logical link identifier
+                                  negotiation
+                                  0     Default, LLI = 256 only
+                                  1     Full protocol
+                                  negotiation
+                                  Ref.: ITU-T Q.931
+
+   assign        9015   Boolean   Assignor/assignee
+                                  0     Message originator is
+                                  "default assignee"
+                                  1     Message originator is
+                                  "assignor only"
+                                  Ref.: ITU-T Q.931
+
+   inbandneg     9016   Boolean   In-band/out-band negotiation
+                                  0     Negotiation is done
+                                  with USER INFORMATION
+                                  messages on a temporary
+                                  signalling connection
+                                  1     Negotiation is done in-
+                                  band using logical link zero
+                                  Ref.: ITU-T Q.931
+
+   stopbits      9017   2 bits    Number of stop bits
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     1 bit
+                                  1 0     1.5 bits
+                                  1 1     2 bits
+                                  Ref.: ITU-T Q.931
+
+   databits      9018   2 bits    Number of data bits excluding
+                                  parity bit if present
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     5 bits
+                                  1 0     7 bits
+                                  1 1     8 bits
+                                  Ref.: ITU-T Q.931
+
+   parity        9019   3 bits    Parity information
+                                  Bits
+                                  3 2 1
+
+
+
+Groves, et al.              Standards Track                   [Page 144]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ------
+                                  0 0 0     Odd
+                                  0 1 0     Even
+                                  0 1 1     None
+                                  1 0 0     Forced to 0
+                                  1 0 1     Forced to 1
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   duplexmode    901A   Boolean   Mode duplex
+                                  0     Half duplex
+                                  1     Full duplex
+                                  Ref.: ITU-T Q.931
+
+   modem         901B   6 bits    Modem Type
+                                  Bits
+                                  6 5 4 3 2 1
+                                  -----------
+                                  0 0 0 0 0 0 through
+                                  0 0 0 1 0 1   National use
+                                  0 1 0 0 0 1   Rec.  V.21
+                                  0 1 0 0 1 0     Rec.  V.22
+                                  0 1 0 0 1 1     Rec.  V.22 bis
+                                  0 1 0 1 0 0     Rec.  V.23
+                                  0 1 0 1 0 1     Rec.  V.26
+                                  0 1 1 0 0 1     Rec.  V.26 bis
+                                  0 1 0 1 1 1     Rec.  V.26 ter
+                                  0 1 1 0 0 0     Rec.  V.27
+                                  0 1 1 0 0 1     Rec.  V.27 bis
+                                  0 1 1 0 1 0     Rec.  V.27 ter
+                                  0 1 1 0 1 1     Rec.  V.29
+                                  0 1 1 1 0 1     Rec.  V.32
+                                  0 1 1 1 1 0     Rec.  V.34
+                                  1 0 0 0 0 0  through
+                                  1 0 1 1 1 1    National use
+                                  1 1 0 0 0 0  through
+                                  1 1 1 1 1 1    User specified
+                                  Ref.: ITU-T Q.931
+
+   layer2prot    901C   5 bits    User information layer 2
+                                  protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 1 0    Rec.  Q.921/I.441
+                                  0 0 1 1 0    Rec.  X.25, link
+                                  layer
+
+
+
+Groves, et al.              Standards Track                   [Page 145]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  0 1 1 0 0    LAN logical link
+                                  control (ISO/IEC 8802  2)
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   layer3prot    901D   5 bits    User information layer 3
+                                  protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 1 0     ITU-T Q.931
+                                  0 0 1 1 0     ITU-T X.25,
+                                  packet layer
+                                  0 1 0 1 1     ISO/IEC TR 9577
+                                  (Protocol identification in
+                                  the network layer)
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   addlayer3prot 901E   Octet     Additional User Information
+                                  layer 3 protocol
+                                  Bits        Bits
+                                  4 3 2 1     4 3 2 1
+                                  -------     -------
+                                  1 1 0 0     1 1 0 0
+                                  Internet Protocol (RFC 791)
+                                  (ISO/IEC TR 9577)
+                                  1 1 0 0     1 1 1 1
+                                  Point-to-point Protocol (RFC
+                                  1661)
+                                  Ref.: ITU-T Q.931
+
+   DialledN      901F   30        Dialled Number
+                        octets
+
+   DiallingN     9020   30        Dialling Number
+                        octets
+
+   ECHOCI        9021             Not Used.  See H.248.1 E.13
+                                  for an example of possible
+                                  Echo Control properties.
+
+   NCI           9022   1 octet   Nature of Connection
+                                  Indicators
+                                  Bits
+                                  2 1     Satellite Indicator
+
+
+
+Groves, et al.              Standards Track                   [Page 146]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ---
+                                  0 0     no satellite circuit
+                                  in the connection
+                                  0 1     one satellite circuit
+                                  in the connection
+                                  1 0     two satellite
+                                  circuits in the connection
+                                  1 1     spare
+
+                                  Bits
+                                  4 3     Continuity check
+                                  ---     indicator
+                                  0 0     continuity check not
+                                  required
+                                  0 1     continuity check
+                                  required on this circuit
+                                  1 0     continuity check
+                                  performed on a previous
+                                  circuit
+                                  1 1     spare
+
+                                  Bit
+                                  5     Echo control device
+                                  -     indicator
+                                  0     outgoing echo control
+                                  device not included
+                                  1     outgoing echo control
+                                  device included
+
+                                  Bits
+                                  8 7 6     Spare
+                                  Ref.: ITU-T Q.763
+
+   USI           9023   Octet     User Service Information
+                        string    Ref.: ITU-T Q.763 Clause 3.57
+
+C.10  AAL5 properties
+
+   PropertyID Property    Type       Value
+              tag
+
+   FMSDU      A001        32-bit     Forward Maximum CPCS-SDU Size:
+                          integer    Maximum CPCS-SDU size sent in the
+                                     direction from the calling user to
+                                     the called user.
+                                     Ref.: ITU-T Q.2931
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 147]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   BMSDU      A002        32-bit     Backwards Maximum CPCS-SDU Size:
+                          integer    Maximum CPCS-SDU size sent in the
+                                     direction from the called user to
+                                     the calling user.
+                                     Ref.: ITU-T Q.2931
+
+   SSCS       See table   See table  See table in C.7
+              in C.7      in C.7     Additional values:
+                                     VPI/VCI
+
+C.11  SDP equivalents
+
+   PropertyID Property    Type   Value
+              tag
+
+   SDP_V      B001        String Protocol Version
+                                  Ref.: RFC 2327
+
+   SDP_O      B002        String Owner/creator and session ID
+                                  Ref.: RFC 2327
+
+   SDP_S      B003        String Session name
+                                  Ref.: RFC 2327
+
+   SDP_I      B004        String Session identifier
+                                  Ref.: RFC 2327
+
+   SDP_U      B005        String URI of descriptor
+                                  Ref.: RFC 2327
+
+   SDC_E      B006        String email address
+                                  Ref.: RFC 2327
+
+   SDP_P      B007        String phone number
+                                  Ref.: RFC 2327
+
+   SDP_C      B008        String Connection information
+                                  Ref.: RFC 2327
+
+   SDP_B      B009        String Bandwidth Information
+                                  Ref.: RFC 2327
+
+   SDP_Z      B00A        String Time zone adjustment
+                                  Ref.: RFC 2327
+
+   SDP_K      B00B        String Encryption Key
+                                  Ref.: RFC 2327
+
+
+
+
+Groves, et al.              Standards Track                   [Page 148]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   SDP_A      B00C        String Zero or more session attributes
+                                  Ref.: RFC 2327
+
+   SDP_T      B00D        String Active Session Time
+                                  Ref.: RFC 2327
+
+   SDP_R      B00E        String Zero or more repeat times
+                                  Reference: RFC 2327
+
+   SDP_M      B00F        String Media type, port, transport and format
+                                  Ref.: RFC 2327
+
+C.12  H.245
+
+   PropertyID Property   Type     Value
+              tag
+
+   OLC        C001       Octet    The value of H.245
+                                   OpenLogicalChannel structure.
+                         string   Ref.: ITU-T H.245
+
+   OLCack     C002       Octet    The value of H.245
+                         string   OpenLogicalChannelAck structure.
+                                   Ref.: ITU-T H.245
+
+   OLCcnf     C003       Octet    The value of H.245
+                         string   OpenLogicalChannelConfirm structure.
+                                   Ref.: ITU-T H.245
+
+   OLCrej     C004       Octet    The value of H.245
+                         string   OpenLogicalChannelReject structure.
+                                   Ref.: ITU-T H.245
+
+   CLC        C005       Octet    The value of H.245
+                         string   CloseLogicalChannel structure.
+                                   Ref.: ITU-T H.245
+
+   CLCack     C006       Octet    The value of H.245
+                         string   CloseLogicalChannelAck structure.
+                                   Ref.: ITU-T H.245
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 149]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX D - Transport over IP
+
+D.1   Transport over IP/UDP using Application Level Framing (ALF)
+
+   Protocol messages defined in this RFC may be transmitted over UDP.
+   When no port is provided by the peer (see 7.2.8), commands should be
+   sent to the default port number: 2944 for text-encoded operation, or
+   2945 for binary-encoded operation.  Responses must be sent to the
+   address and port from which the corresponding commands were sent.
+
+   ALF is a set of techniques that allows an application, as opposed to
+   a stack, to affect how messages are sent to the other side.  A
+   typical ALF technique is to allow an application to change the order
+   of messages sent when there is a queue after it has queued them.
+   There is no formal specification for ALF.  The procedures in Annex
+   D.1 contain a minimum suggested set of ALF behaviours
+
+   Implementors using IP/UDP with ALF should be aware of the
+   restrictions of the MTU on the maximum message size.
+
+D.1.1 Providing At-Most-Once functionality
+
+   Messages, being carried over UDP, may be subject to losses.  In the
+   absence of a timely response, commands are repeated.  Most commands
+   are not idempotent.  The state of the MG would become unpredictable
+   if, for example, Add commands were executed several times.  The
+   transmission procedures shall thus provide an "At-Most-Once"
+   functionality.
+
+   Peer protocol entities are expected to keep in memory a list of the
+   responses that they sent to recent transactions and a list of the
+   transactions that are currently outstanding.  The transaction
+   identifier of each incoming message is compared to the transaction
+   identifiers of the recent responses sent to the same MId.  If a match
+   is found, the entity does not execute the transaction, but simply
+   repeats the response.  If no match is found, the message will be
+   compared to the list of currently outstanding transactions.  If a
+   match is found in that list, indicating a duplicate transaction, the
+   entity does not execute the transaction (see D.1.4 for procedures on
+   sending TransactionPending).
+
+   The procedure uses a long timer value, noted LONG-TIMER in the
+   following.  The timer should be set larger than the maximum duration
+   of a transaction, which should take into account the maximum number
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 150]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   of repetitions, the maximum value of the repetition timer and the
+   maximum propagation delay of a packet in the network.  A suggested
+   value is 30 seconds.
+
+   The copy of the responses may be destroyed either LONG-TIMER seconds
+   after the response is issued, or when the entity receives a
+   confirmation that the response has been received, through the
+   "Response Acknowledgement parameter".  For transactions that are
+   acknowledged through this parameter, the entity shall keep a copy of
+   the transaction-id for LONG-TIMER seconds after the response is
+   issued, in order to detect and ignore duplicate copies of the
+   transaction request that could be produced by the network.
+
+D.1.2 Transaction identifiers and three-way handshake
+
+D.1.2.1  Transaction identifiers
+
+   Transaction identifiers are 32-bit integer numbers.  A Media Gateway
+   Controller may decide to use a specific number space for each of the
+   MGs that they manage, or to use the same number space for all MGs
+   that belong to some arbitrary group.  MGCs may decide to share the
+   load of managing a large MG between several independent processes.
+   These processes will share the same transaction number space.  There
+   are multiple possible implementations of this sharing, such as having
+   a centralized allocation of transaction identifiers, or
+   pre-allocating non-overlapping ranges of identifiers to different
+   processes.  The implementations shall guarantee that unique
+   transaction identifiers are allocated to all transactions that
+   originate from a logical MGC (identical mId).  MGs can simply detect
+   duplicate transactions by looking at the transaction identifier and
+   mId only.
+
+D.1.2.2  Three-way handshake
+
+   The TransactionResponse Acknowledgement parameter can be found in any
+   message.  It carries a set of "confirmed transaction-id ranges".
+   Entities may choose to delete the copies of the responses to
+   transactions whose id is included in "confirmed transaction-id
+   ranges" received in the transaction response messages.  They should
+   silently discard further commands when the transaction-id falls
+   within these ranges.
+
+   The "confirmed transaction-id ranges" values shall not be used if
+   more than LONG-TIMER seconds have elapsed since the MG issued its
+   last response to that MGC, or when a MG resumes operation.  In this
+   situation, transactions should be accepted and processed, without any
+   test on the transaction-id.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 151]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Messages that carry the "Transaction Response Acknowledgement"
+   parameter may be transmitted in any order.  The entity shall retain
+   the "confirmed transaction-id ranges" received for LONG-TIMER
+   seconds.
+
+   In the binary encoding, if only the firstAck is present in a response
+   acknowledgement (see A.2), only one transaction is acknowledged.  If
+   both firstAck and lastAck are present, then the range of transactions
+   from firstAck to lastAck is acknowledged.  In the text encoding, a
+   horizontal dash is used to indicate a range of transactions being
+   acknowledged (see B.2).
+
+D.1.3 Computing retransmission timers
+
+   It is the responsibility of the requesting entity to provide suitable
+   timeouts for all outstanding transactions, and to retry transactions
+   when timeouts have been exceeded.  Furthermore, when repeated
+   transactions fail to be acknowledged, it is the responsibility of the
+   requesting entity to seek redundant services and/or clear existing or
+   pending connections.
+
+   The specification purposely avoids specifying any value for the
+   retransmission timers.  These values are typically network dependent.
+   The retransmission timers should normally estimate the timer value by
+   measuring the time spent between the sending of a command and the
+   return of a response.  Implementations SHALL ensure that the
+   algorithm used to calculate retransmission timing performs an
+   exponentially increasing backoff of the retransmission timeout for
+   each retransmission or repetition after the first one.
+
+     NOTE - One possibility is to use the algorithm implemented in
+     TCP-IP, which uses two variables:
+
+   -  The average acknowledgement delay (AAD), estimated through an
+      exponentially smoothed average of the observed delays.
+
+   -  The average deviation (ADEV), estimated through an exponentially
+      smoothed average of the absolute value of the difference between
+      the observed delay and the current average.  The retransmission
+      timer, in TCP, is set to the sum of the average delay plus N times
+      the average deviation.  The maximum value of the timer should
+      however be bounded for the protocol defined in this
+      RFC, in order to guarantee that no repeated packet
+      would be received by the gateways after LONG-TIMER seconds.  A
+      suggested maximum value is 4 seconds.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 152]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   After any retransmission, the entity SHOULD do the following:
+
+   -  It should double the estimated value of the average delay, AAD.
+
+   -  It should compute a random value, uniformly distributed between
+      0.5 AAD and AAD.
+
+   -  It should set the retransmission timer to the sum of that random
+      value and N times the average deviation.
+
+   This procedure has two effects.  Because it includes an exponentially
+   increasing component, it will automatically slow down the stream of
+   messages in case of congestion.  Because it includes a random
+   component, it will break the potential synchronization between
+   notifications triggered by the same external event.
+
+D.1.4 Provisional responses
+
+   Executing some transactions may require a long time.  Long execution
+   times may interact with the timer-based retransmission procedure.
+   This may result either in an inordinate number of retransmissions, or
+   in timer values that become too long to be efficient.  Entities that
+   can predict that a transaction will require a long execution time may
+   send a provisional response, "Transaction Pending".  They SHOULD send
+   this response if they receive a repetition of a transaction that is
+   still being executed.
+
+   Entities that receive a Transaction Pending shall switch to a
+   different repetition timer for repeating requests.  The root
+   Termination has a property (ProvisionalResponseTimerValue), which can
+   be set to the requested maximum number of milliseconds between
+   receipt of a command and transmission of the TransactionPending
+   response.  Upon receipt of a final response following receipt of
+   provisional responses, an immediate confirmation shall be sent, and
+   normal repetition timers shall be used thereafter.  An entity that
+   sends a provisional response, SHALL include the immAckRequired field
+   in the ensuing final response, indicating that an immediate
+   confirmation is expected.  Receipt of a Transaction Pending after
+   receipt of a reply shall be ignored.
+
+D.1.5 Repeating Requests, Responses and Acknowledgements
+
+   The protocol is organized as a set of transactions, each of which is
+   composed of a request and a response, commonly referred to as an
+   acknowledgement.  The protocol messages, being carried over UDP, may
+   be subject to losses.  In the absence of a timely response,
+   transactions are repeated.  Entities are expected to keep in memory a
+
+
+
+
+Groves, et al.              Standards Track                   [Page 153]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   list of the responses that they sent to recent transactions, i.e., a
+   list of all the responses they sent over the last LONG-TIMER seconds,
+   and a list of the transactions that are currently being executed.
+
+   The repetition mechanism is used to guard against three types of
+   possible errors:
+
+   -  transmission errors, when for example a packet is lost due to
+      noise on a line or congestion in a queue;
+
+   -  component failure, when for example an interface to a entity
+      becomes unavailable;
+
+   -  entity failure, when for example an entire entity becomes
+      unavailable.
+
+   The entities should be able to derive from the past history an
+   estimate of the packet loss rate due to transmission errors.  In a
+   properly configured system, this loss rate should be kept very low,
+   typically less than 1%.  If a Media Gateway Controller or a Media
+   Gateway has to repeat a message more than a few times, it is very
+   legitimate to assume that something else than a transmission error is
+   occurring.   For example, given a loss rate of 1%, the probability
+   that five consecutive transmission attempts fail is 1 in 100 billion,
+   an event that should occur less than once every 10 days for a Media
+   Gateway Controller that processes 1000 transactions per second.
+   (Indeed, the number of repetition that is considered excessive should
+   be a function of the prevailing packet loss rate.)  We should note
+   that the "suspicion threshold", which we will call "Max1", is
+   normally lower than the "disconnection threshold", which should be
+   set to a larger value.
+
+   A classic retransmission algorithm would simply count the number of
+   successive repetitions, and conclude that the association is broken
+   after retransmitting the packet an excessive number of times
+   (typically between 7 and 11 times.)  In order to account for the
+   possibility of an undetected or in  progress "failover", we modify
+   the classic algorithm so that if the Media Gateway receives a valid
+   ServiceChange message announcing a failover, it will start
+   transmitting outstanding commands to that new MGC.  Responses to
+   commands are still transmitted to the source address of the command.
+
+   In order to automatically adapt to network load, this RFC specifies
+   exponentially increasing timers.  If the initial timer is set to 200
+   milliseconds, the loss of a fifth retransmission will be detected
+   after about 6 seconds.  This is probably an acceptable waiting delay
+   to detect a failover.  The repetitions should continue after that
+   delay not only in order to perhaps overcome a transient connectivity
+
+
+
+Groves, et al.              Standards Track                   [Page 154]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   problem, but also in order to allow some more time for the execution
+   of a failover  (waiting a total delay of 30 seconds is probably
+   acceptable).
+
+   It is, however, important that the maximum delay of retransmissions
+   be bounded.  Prior to any retransmission, it is checked that the time
+   elapsed since the sending of the initial datagram is no greater than
+   T-MAX.  If more than T-MAX time has elapsed, the MG concludes that
+   the MGC has failed, and it begins its recovery process as described
+   in section 11.5.  If the MG retries to connect to the current MGC it
+   shall use a ServiceChange with ServiceChangeMethod set to
+   Disconnected so that the new MGC will be aware that the MG lost one
+   or more transactions.  The value T-MAX is related to the LONG-TIMER
+   value: the LONG-TIMER value is obtained by adding to T  MAX the
+   maximum propagation delay in the network.
+
+D.2   Using TCP
+
+   Protocol messages as defined in this RFC may be transmitted over TCP.
+   When no port is specified by the other side (see 7.2.8), the commands
+   should be sent to the default port.  The defined protocol has
+   messages as the unit of transfer, while TCP is a stream-oriented
+   protocol.  TPKT, according to RFC 1006, SHALL be used to delineate
+   messages within the TCP stream.
+
+   In a transaction-oriented protocol, there are still ways for
+   transaction requests or responses to be lost.  As such, it is
+   recommended that entities using TCP transport implement application
+   level timers for each request and each response, similar to those
+   specified for application level framing over UDP.
+
+D.2.1 Providing the At-Most-Once functionality
+
+   Messages, being carried over TCP, are not subject to transport
+   losses, but loss of a transaction request or its reply may
+   nonetheless be noted in real implementations.  In the absence of a
+   timely response, commands are repeated.  Most commands are not
+   idempotent.  The state of the MG would become unpredictable if, for
+   example, Add commands were executed several times.
+
+   To guard against such losses, it is recommended that entities follow
+   the procedures in D.1.1.
+
+D.2.2 Transaction identifiers and three-way handshake
+
+   For the same reasons, it is possible that transaction replies may be
+   lost even with a reliable delivery protocol such as TCP.  It is
+   recommended that entities follow the procedures in D.1.2.2.
+
+
+
+Groves, et al.              Standards Track                   [Page 155]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+D.2.3 Computing retransmission timers
+
+   With reliable delivery, the incidence of loss of a transaction
+   request or reply is expected to be very low.  Therefore, only simple
+   timer mechanisms are required.  Exponential back-off algorithms
+   should not be necessary, although they could be employed where, as in
+   an MGC, the code to do so is already required, since MGCs must
+   implement ALF/UDP as well as TCP.
+
+D.2.4 Provisional responses
+
+   As with UDP, executing some transactions may require a long time.
+   Entities that can predict that a transaction will require a long
+   execution time may send a provisional response, "Transaction
+   Pending".  They should send this response if they receive a
+   repetition of a transaction that is still being executed.
+
+   Entities that receive a Transaction Pending shall switch to a longer
+   repetition timer for that transaction.
+
+   Entities shall retain Transactions and replies until they are
+   confirmed.  The basic procedure of D.1.4 should be followed, but
+   simple timer values should be sufficient.  There is no need to send
+   an immediate confirmation upon receipt of a final response.
+
+D.2.5 Ordering of commands
+
+   TCP provides ordered delivery of transactions.  No special procedures
+   are required.  It should be noted that ALF/UDP allows sending entity
+   to modify its behaviour under congestion, and in particular, could
+   reorder transactions when congestion is encountered.  TCP could not
+   achieve the same results.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 156]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX E - Basic packages
+
+   This annex contains definitions of some packages for use with
+   Recommendation H.248.1.
+
+E.1   Generic
+
+   PackageID: g (0x0001)
+   Version: 1
+   Extends: None
+
+   Description:
+      Generic package for commonly encountered items.
+
+E.1.1 Properties
+
+   None.
+
+E.1.2 Events
+
+   Cause
+
+      EventID: cause (0x0001)
+      Generic error event
+
+      EventsDescriptor parameters:  None
+
+      ObservedEvents Descriptor Parameters:
+
+         General Cause
+         ParameterID: Generalcause (0x0001)
+
+            This parameter groups the failures into six groups, which
+            the MGC may act upon.
+
+            Type: enumeration
+
+            Possible values:
+                     "NR" Normal Release (0x0001)
+                     "UR" Unavailable Resources (0x0002)
+                     "FT" Failure, Temporary (0x0003)
+                     "FP" Failure, Permanent (0x0004)
+                     "IW" Interworking Error (0x0005)
+                     "UN" Unsupported (0x0006)
+
+         Failure Cause
+         ParameterID: Failurecause (0x0002)
+
+
+
+
+Groves, et al.              Standards Track                   [Page 157]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:  OCTET STRING
+
+            Description: The Failure Cause is the value generated by the
+            Released equipment, i.e., a released network connection.
+            The concerned value is defined in the appropriate bearer
+            control protocol.
+
+   Signal Completion
+
+      EventID: sc (0x0002)
+
+      Indicates the termination of a signal for which the
+      notifyCompletion parameter was set to enable reporting of a
+      completion event.  For further procedural description, see 7.1.1,
+      7.1.17 and 7.2.7.
+
+      EventsDescriptor parameters:  None
+
+      ObservedEvents Descriptor parameters:
+
+         Signal Identity
+         ParameterID: SigID (0x0001)
+
+            This parameter identifies the signal which has terminated.
+            For a signal that is contained in a signal list, the signal
+            list identity parameter should also be returned indicating
+            the appropriate list.
+
+            Type: Binary: octet (string), Text: string
+
+            Possible values: a signal which has terminated.  A signal
+            shall be identified using the pkgdName syntax without
+            wildcarding.
+
+         Termination Method
+         ParameterID: Meth (0x0002)
+
+            Indicates the means by which the signal terminated.
+
+            Type: enumeration
+
+            Possible values:
+               "TO" (0x0001) Signal timed out or otherwise completed on
+               its own
+               "EV" (0x0002) Interrupted by event
+               "SD" (0x0003) Halted by new Signals descriptor
+               "NC" (0x0004) Not completed, other cause
+
+
+
+
+Groves, et al.              Standards Track                   [Page 158]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Signal List ID
+         ParameterID:  SLID (0x0003)
+
+            Indicates to which signal list a signal belongs.  The
+            SignalList ID is only returned in cases where the signal
+            resides in a signal list.
+
+            Type: integer
+
+            Possible values: any integer
+
+E.1.3 Signals
+
+   None.
+
+E.1.4 Statistics
+
+   None.
+
+E.2   Base Root Package
+
+   PackageID: root (0x0002)
+   Version: 1
+   Extends: None
+
+   Description:
+      This package defines Gateway wide properties.
+
+E.2.1 Properties
+
+   MaxNrOfContexts
+   PropertyID: maxNumberOfContexts (0x0001)
+
+      The value of this property gives the maximum number of contexts
+      that can exist at any time.  The NULL context is not included in
+      this number.
+
+      Type: double
+
+      Possible values: 1 and up
+
+      Defined in: TerminationState
+
+      Characteristics: read only
+
+   MaxTerminationsPerContext
+   PropertyID: maxTerminationsPerContext (0x0002)
+
+
+
+
+Groves, et al.              Standards Track                   [Page 159]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      The maximum number of allowed terminations in a context, see 6.1
+
+      Type: integer
+
+      Possible values: any integer
+
+      Defined in: TerminationState
+
+      Characteristics: read only
+
+   normalMGExecutionTime
+   PropertyId: normalMGExecutionTime (0x0003)
+
+      Settable by the MGC to indicate the interval within which the MGC
+      expects a response to any transaction from the MG (exclusive of
+      network delay)
+
+      Type: integer
+
+      Possible values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   normalMGCExecutionTime
+   PropertyId: normalMGCExecutionTime (0x0004)
+
+      Settable by the MGC to indicate the interval within which the MG
+      should expects a response to any transaction from the MGC
+      (exclusive of network delay)
+
+      Type: integer
+
+      Possible values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   MGProvisionalResponseTimerValue
+   PropertyId: MGProvisionalResponseTimerValue (0x0005)
+
+      Indicates the time within which the MGC should expect a Pending
+      Response from the MG if a Transaction cannot be completed.
+
+      Initially set to normalMGExecutionTime plus network delay, but may
+      be lowered.
+
+
+
+Groves, et al.              Standards Track                   [Page 160]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Type: Integer
+
+      Possible Values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   MGCProvisionalResponseTimerValue
+   PropertyId: MGCProvisionalResponseTimerValue (0x0006)
+
+      Indicates the time within which the MG should expect a Pending
+      Response from the MGC if a Transaction cannot be completed.
+      Initially set to normalMGCExecutionTime plus network delay, but
+      may be lowered.
+
+      Type: Integer
+
+      Possible Values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+E.2.2 Events
+
+   None.
+
+E.2.3 Signals
+
+   None.
+
+E.2.4 Statistics
+
+   None.
+
+E.2.5 Procedures
+
+   None.
+
+E.3   Tone Generator Package
+
+   PackageID: tonegen (0x0003)
+   Version: 1
+   Extends: None
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 161]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Description:
+
+      This package defines signals to generate audio tones.  This
+      package does not specify parameter values.  It is intended to be
+      extendable.  Generally, tones are defined as an individual signal
+      with a parameter, ind, representing "interdigit" time delay, and a
+      tone id to be used with playtones.  A tone id should be kept
+      consistent with any tone generation for the same tone.  MGs are
+      expected to be provisioned with the characteristics of appropriate
+      tones for the country in which the MG is located.
+
+   Designed to be extended only.
+
+E.3.1 Properties
+
+   None.
+
+E.3.2 Events
+
+   None.
+
+E.3.3 Signals
+
+   Play tone
+   SignalID: pt (0x0001)
+
+      Plays audio tone over an audio channel
+
+      Signal Type: Brief
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: list of tone ids
+
+            List of tones to be played in sequence.  The list SHALL
+            contain one or more tone ids.
+
+         Inter signal duration
+         ParameterID: ind (0x0002)
+
+            Type: integer
+
+            Timeout between two consecutive tones in milliseconds
+
+
+
+Groves, et al.              Standards Track                   [Page 162]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   No tone ids are specified in this package.  Packages that extend this
+   package can add possible values for tone id as well as adding
+   individual tone signals.
+
+E.3.4 Statistics
+
+   None.
+
+E.3.5 Procedures
+
+   None.
+
+E.4   Tone Detection Package
+
+   PackageID: tonedet (0x0004)
+   Version: 1
+   Extends: None
+
+   This Package defines events for audio tone detection.  Tones are
+   selected by name (tone id).  MGs are expected to be provisioned with
+   the characteristics of appropriate tones for the country in which the
+   MG is located.
+
+   Designed to be extended only:
+      This package does not specify parameter values.  It is intended to
+      be extendable.
+
+E.4.1 Properties
+
+   None.
+
+E.4.2 Events
+
+   Start tone detected
+   EventID: std, 0x0001
+
+      Detects the start of a tone.  The characteristics of positive tone
+      detection are implementation dependent.
+
+      EventsDescriptor parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: list of tone ids
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 163]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values: The only tone id defined in this package is
+            "wild card" which is "*" in text encoding and 0x0000 in
+            binary.  Extensions to this package would add possible
+            values for tone id.  If tl is "wild card", any tone id is
+            detected.
+
+         ObservedEventsDescriptor parameters:
+
+         Tone id
+         ParameterID: tid (0x0003)
+
+            Type: enumeration
+
+            Possible values: "wildcard" as defined above is the only
+            value defined in this package.  Extensions to this package
+            would add additional possible values for tone id.
+
+         End tone detected
+         EventID: etd, 0x0002
+
+         Detects the end of a tone.
+
+         EventDescriptor parameters:
+
+            Tone id list
+            ParameterID: tl (0x0001)
+
+               Type: enumeration or list of enumerated types
+
+               Possible values: No possible values are specified in this
+               package.  Extensions to this package would add possible
+               values for tone id.
+
+         ObservedEventsDescriptor parameters:
+
+            Tone id
+            ParameterID: tid (0x0003)
+
+               Type: enumeration
+
+               Possible values: "wildcard" as defined above is the only
+               value defined in this package.  Extensions to this
+               package would add possible values for tone id.
+
+            Duration
+            ParameterId: dur (0x0002)
+
+               Type: integer, in milliseconds
+
+
+
+Groves, et al.              Standards Track                   [Page 164]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+               This parameter contains the duration of the tone from
+               first detection until it stopped.
+
+   Long tone detected
+   EventID: ltd, 0x0003
+
+      Detects that a tone has been playing for at least a certain amount
+      of time.
+
+      EventDescriptor parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: enumeration or list
+
+            Possible values: "wildcard" as defined above is the only
+            value defined in this package.  Extensions to this package
+            would add possible values for tone id.
+
+         Duration
+         ParameterID: dur (0x0002)
+
+            Type: integer, duration to test against
+
+            Possible values: any legal integer, expressed in
+            milliseconds
+
+      ObservedEventsDescriptor parameters:
+
+         Tone id
+         ParameterID: tid (0x0003)
+
+            Type: Enumeration
+
+            Possible values: No possible values are specified in this
+            package.  Extensions to this package would add possible
+            values for tone id.
+
+E.4.3 Signals
+
+   None.
+
+E.4.4 Statistics
+
+   None.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 165]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.4.5 Procedures
+
+   None.
+
+E.5   Basic DTMF Generator Package
+
+   PackageID: dg (0x0005)
+   Version: 1
+   Extends: tonegen version 1
+
+   This package defines the basic DTMF tones as signals and extends the
+   allowed values of parameter tl of playtone in tonegen.
+
+E.5.1 Properties
+
+   None.
+
+E.5.2 Events
+
+   None.
+
+E.5.3 Signals
+
+   DTMF character 0
+   SignalID: d0 (0x0010)
+
+      Generate DTMF 0 tone.  The physical characteristic of DTMF 0 is
+      defined in the gateway.
+
+      Signal Type: Brief
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         None.
+
+   Additional values:
+
+      d0 (0x0010) is defined as a tone id for playtone
+
+   The other DTMF characters are specified in exactly the same way.  A
+   table with all signal names and signal IDs is included.  Note that
+   each DTMF character is defined as both a signal and a tone id, thus
+   extending the basic tone generation package.  Also note that DTMF
+   SignalIds are different from the names used in a digit map.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 166]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                     Signal name     Signal ID/Tone id
+
+                    DTMF character 0    d0 (0x0010)
+                    DTMF character 1    d1 (0x0011)
+                    DTMF character 2    d2 (0x0012)
+                    DTMF character 3    d3 (0x0013)
+                    DTMF character 4    d4 (0x0014)
+                    DTMF character 5    d5 (0x0015)
+                    DTMF character 6    d6 (0x0016)
+                    DTMF character 7    d7 (0x0017)
+                    DTMF character 8    d8 (0x0018)
+                    DTMF character 9    d9 (0x0019)
+                    DTMF character *    ds (0x0020)
+                    DTMF character #    do (0x0021)
+                    DTMF character A    da (0x001a)
+                    DTMF character B    db (0x001b)
+                    DTMF character C    dc (0x001c)
+                    DTMF character D    dd (0x001d)
+
+E.5.4 Statistics
+
+   None.
+
+E.5.5 Procedures
+
+   None.
+
+E.6   DTMF detection Package
+
+   PackageID: dd (0x0006)
+   Version: 1
+   Extends: tonedet version 1
+
+   This package defines the basic DTMF tones detection.  This Package
+   extends the possible values of tone id in the "start tone detected"
+   "end tone detected" and "long tone detected" events.
+
+   Additional tone id values are all tone ids described in package dg
+   (basic DTMF generator package).
+
+   The following table maps DTMF events to digit map symbols as
+   described in 7.1.14.
+
+                           DTMF Event Symbol
+
+                           d0   "0"
+                           d1   "1"
+                           d2   "2"
+
+
+
+Groves, et al.              Standards Track                   [Page 167]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                           d3   "3"
+                           d4   "4"
+                           d5   "5"
+                           d6   "6"
+                           d7   "7"
+                           d8   "8"
+                           d9   "9"
+                           da   "A" or "a"
+                           db   "B" or "b"
+                           dc   "C" or "c"
+                           dd   "D" or "d"
+                           ds   "E" or "e"
+                           do   "F" or "f"
+
+E.6.1 Properties
+
+   None.
+
+E.6.2 Events
+
+   DTMF digits
+
+      EventIds are defined with the same names as the SignalIds defined
+      in the table found in E.5.3.
+
+   DigitMap Completion Event
+   EventID: ce, 0x0004
+
+      Generated when a digit map completes as described in 7.1.14.
+
+      EventsDescriptor parameters: None.
+
+      ObservedEventsDescriptor parameters:
+
+         DigitString
+         ParameterID: ds (0x0001)
+
+            Type: string of digit map symbols (possibly empty) returned
+            as a quotedString
+
+            Possible values: a sequence of the characters "0" through
+            "9", "A" through "F", and the long duration modifier "Z".
+
+            Description: the portion of the current dial string as
+            described in 7.1.14 which matched part or all of an
+            alternative event sequence specified in the digit map.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 168]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Termination Method
+         ParameterID: Meth (0x0003)
+
+            Type: enumeration
+
+            Possible values:
+
+               "UM" (0x0001) Unambiguous match
+
+               "PM" (0x0002) Partial match, completion by timer expiry
+               or unmatched event
+
+               "FM" (0x0003) Full match, completion by timer expiry or
+               unmatched event
+
+            Description: indicates the reason for generation of the
+            event.  See the procedures in 7.1.14.
+
+E.6.3 Signals
+
+   None.
+
+E.6.4 Statistics
+
+   None.
+
+E.6.5 Procedures
+
+   Digit map processing is activated only if an events descriptor is
+   activated that contains a digit map completion event as defined in
+   Section E.6.2 and that digit map completion event contains an eventDM
+   field in the requested actions as defined in Section 7.1.9.  Other
+   parameters such as KeepActive or embedded events of signals
+   descriptors may also be present in the events descriptor and do not
+   affect the activation of digit map processing.
+
+E.7   Call Progress Tones Generator Package
+
+   PackageID: cg, 0x0007
+   Version: 1
+   Extends: tonegen version 1
+
+   This package defines the basic call progress tones as signals and
+   extends the allowed values of the tl parameter of playtone in
+   tonegen.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 169]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.7.1 Properties
+
+   None.
+
+E.7.2 Events
+
+   None.
+
+E.7.3 Signals
+
+   Dial Tone
+   SignalID: dt (0x0030)
+
+      Generate dial tone.  The physical characteristic of dial tone is
+      available in the gateway.
+
+      Signal Type: TimeOut
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         None.
+
+   Additional values:
+
+      dt (0x0030) is defined as a tone id for playtone
+
+   The other tones of this package are defined in exactly the same way.
+   A table with all signal names and signal IDs is included.  Note that
+   each tone is defined as both a signal and a tone id, thus extending
+   the basic tone generation package.
+
+     Signal Name                 Signal ID/tone id
+
+     Dial Tone                   dt (0x0030)
+     Ringing Tone                rt (0x0031)
+     Busy Tone                   bt (0x0032)
+     Congestion Tone             ct (0x0033)
+     Special Information Tone    sit(0x0034)
+     Warning Tone                wt (0x0035)
+     Payphone Recognition Tone   prt (0x0036)
+     Call Waiting Tone           cw (0x0037)
+     Caller Waiting Tone         cr (0x0038)
+
+E.7.4 Statistics
+
+   None.
+
+
+
+Groves, et al.              Standards Track                   [Page 170]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.7.5 Procedures
+
+      NOTE - The required set of tone ids corresponds to those defined
+      in Recommendation E.180/Q.35.  See Recommendation E.180/Q.35 for
+      definition of the meanings of these tones.
+
+
+E.8   Call Progress Tones Detection Package
+
+   PackageID: cd (0x0008)
+   Version: 1
+   Extends: tonedet version 1
+
+   This package defines the basic call progress detection tones.  This
+   package extends the possible values of tone id in the "start tone
+   detected", "end tone detected" and "long tone detected" events.
+
+   Additional values
+
+      toneID values are defined for start tone detected, end tone
+      detected and long tone detected with the same values as those in
+      package cg (call progress tones generation package).
+
+   The required set of tone ids corresponds to Recommendation
+   E.180/Q.35.  See Recommendation E.180/Q.35 for definition of the
+   meanings of these tones.
+
+E.8.1 Properties
+
+   None.
+
+E.8.2 Events
+
+   Events are defined as in the call progress tones generator package
+   (cg) for the tones listed in the table of E.7.3.
+
+E.8.3 Signals
+
+   None.
+
+E.8.4 Statistics
+
+   None.
+
+E.8.5 Procedures
+
+   None.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 171]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.9   Analog Line Supervision Package
+
+   PackageID: al, 0x0009
+   Version: 1
+   Extends: None
+
+   This package defines events and signals for an analog line.
+
+   E.9.1 Properties
+
+   None.
+
+E.9.2 Events
+
+   onhook
+   EventID: on (0x0004)
+
+      Detects handset going on hook.  Whenever an events descriptor is
+      activated that requests monitoring for an on-hook event and the
+      line is already on-hook, then the MG shall behave according to the
+      setting of the "strict" parameter.
+
+      EventDescriptor parameters:
+
+         Strict Transition
+         ParameterID: strict (0x0001)
+
+            Type: enumeration
+
+            Possible values: "exact" (0x00), "state" (0x01), "failWrong"
+            (0x02)
+
+              "exact" means that only an actual hook state transition to
+              on-hook is to be recognized;
+
+              "state" means that the event is to be recognized either if
+              the hook state transition is detected or if the hook state
+              is already on-hook;
+
+              "failWrong" means that if the hook state is already
+              on-hook, the command fails and an error is reported.
+
+      ObservedEventsDescriptor parameters:
+
+         Initial State
+         ParameterID: init (0x0002)
+
+            Type: Boolean
+
+
+
+Groves, et al.              Standards Track                   [Page 172]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:
+
+               "True" means that the event was reported because the line
+               was already on-hook when the events descriptor containing
+               this event was activated;
+
+               "False" means that the event represents an actual state
+               transition to on-hook.
+
+   offhook
+   EventID: of (0x0005)
+
+      Detects handset going off hook.  Whenever an events descriptor is
+      activated that requests monitoring for an off-hook event and the
+      line is already off-hook, then the MG shall behave according to
+      the setting of the "strict" parameter.
+
+      EventDescriptor parameters:
+
+         Strict Transition
+         ParameterID: strict (0x0001)
+
+            Type: enumeration
+
+            Possible values: "exact" (0x00), "state" (0x01), "failWrong"
+            (0x02)
+
+               "exact" means that only an actual hook state transition
+               to off-hook is to be recognized;
+
+               "state" means that the event is to be recognized either
+               if the hook state transition is detected or if the hook
+               state is already off-hook;
+
+               "failWrong" means that if the hook state is already off-
+               hook, the command fails and an error is reported.
+
+      ObservedEventsDescriptor parameters
+
+         Initial State
+         ParameterID: init (0x0002)
+
+            Type: Boolean
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 173]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:
+
+               "True" means that the event was reported because the line
+               was already off-hook when the events descriptor
+               containing this event was activated;
+
+               "False" means that the event represents an actual state
+               transition to off-hook.
+
+   flashhook
+   EventID: fl, 0x0006
+
+      Detects handset flash.  A flash occurs when an onhook is followed
+      by an offhook between a minimum and maximum duration.
+
+      EventDescriptor parameters:
+
+         Minimum duration
+         ParameterID: mindur (0x0004)
+
+            Type: integer in milliseconds
+
+            Default value is provisioned.
+
+         Maximum duration
+         ParameterID: maxdur (0x0005)
+
+            Type: integer in milliseconds
+
+            Default value is provisioned.
+
+      ObservedEventsDescriptor parameters:
+
+         None
+
+E.9.3 Signals
+
+   ring
+   SignalID: ri, 0x0002
+
+      Applies ringing on the line
+
+      Signal Type: TimeOut
+
+      Duration: Provisioned
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 174]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Additional parameters:
+
+         Cadence
+         ParameterID: cad (0x0006)
+
+            Type: list of integers representing durations of alternating
+            on and off segments, constituting a complete ringing cycle
+            starting with an on.  Units in milliseconds
+
+            Default is fixed or provisioned.  Restricted function MGs
+            may ignore cadence values they are incapable of generating.
+
+         Frequency
+         ParameterID: freq (0x0007)
+
+            Type: integer in Hz
+
+            Default is fixed or provisioned.  Restricted function MGs
+            may ignore frequency values they are incapable of
+            generating.
+
+E.9.4 Statistics
+
+   None.
+
+E.9.5 Procedures
+
+   If the MGC sets an EventsDescriptor containing a hook state
+   transition event (on-hook or off-hook) with the "strict" (0x0001)
+   parameter set to "failWrong", and the hook state is already what the
+   transition implies, the execution of the command containing that
+   EventsDescriptor fails.  The MG SHALL include error code 540
+   "Unexpected initial hook state" in its reponse.
+
+E.9.6 Error code
+
+   This package defines a new error code:
+
+      540 - Unexpected initial hook state
+
+   The procedure for use of this code is given in E.9.5.
+
+E.10  Basic Continuity Package
+
+   PackageID: ct (0x000a)
+   Version: 1
+   Extends: None
+
+
+
+
+Groves, et al.              Standards Track                   [Page 175]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   This package defines events and signals for continuity test.  The
+   continuity test includes provision of either a loopback or
+   transceiver functionality.
+
+E.10.1   Properties
+
+   None.
+
+E.10.2   Events
+
+   Completion
+   EventID: cmp, 0x0005
+
+      This event detects test completion of continuity test.
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         Result
+         ParameterID: res (0x0008)
+
+            Type: enumeration
+
+            Possible values: success (0x0001), failure (0x0000)
+
+E.10.3   Signals
+
+   Continuity test
+   SignalID: ct (0x0003)
+
+      Initiates sending of continuity test tone on the termination to
+      which it is applied.
+
+      Signal Type: TimeOut
+
+      Default value is provisioned
+
+      Additional parameters:
+
+         None.
+
+   Respond
+   SignalID: rsp (0x0004)
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 176]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      The signal is used to respond to a continuity test.  See E.10.5
+      for further explanation.
+
+      Signal Type: On/Off
+
+      Default duration is provisioned
+
+      Additional parameters:
+
+         None.
+
+E.10.4   Statistics
+
+   None.
+
+E.10.5   Procedures
+
+   When a MGC wants to initiate a continuity test, it sends a command to
+   the MG containing:
+
+   -  a signals descriptor with the ct signal; and
+
+   -  an events descriptor containing the cmp event.
+
+   Upon reception of a command containing the ct signal and cmp event,
+   the MG initiates the continuity test tone for the specified
+   Termination.  If the return tone is detected and any other required
+   conditions are satisfied before the signal times out, the cmp event
+   shall be generated with the value of the result parameter equal to
+   success.  In all other cases, the cmp event shall be generated with
+   the value of the result parameter equal to failure.
+
+   When a MGC wants the MG to respond to a continuity test, it sends a
+   command to the MG containing a signals descriptor with the rsp
+   signal.  Upon reception of a command with the rsp signal, the MG
+   either applies a loopback or (for 2-wire circuits) awaits reception
+   of a continuity test tone.  In the loopback case, any incoming
+   information shall be reflected back as outgoing information.  In the
+   2-wire case, any time the appropriate test tone is received, the
+   appropriate response tone should be sent.  The MGC determines when to
+   remove the rsp signal.
+
+   When a continuity test is performed on a Termination, no echo devices
+   or codecs shall be active on that Termination.
+
+   Performing voice path assurance as part of continuity testing is
+   provisioned by bilateral agreement between network operators.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 177]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      (Informative Note) Example tones and test procedure details are
+      given in Q.724 sections 7 and 8, Q.764 section 2.1.8 and Q.1902.4.
+
+E.11  Network Package
+
+   PackageID: nt (0x000b)
+   Version: 1
+   Extends: None
+
+   This package defines properties of network terminations independent
+   of network type.
+
+E.11.1   Properties
+
+   Maximum Jitter Buffer
+   PropertyID: jit (0x0007)
+
+      This property puts a maximum size on the jitter buffer.
+
+      Type: integer in milliseconds
+
+      Possible values: This property is specified in milliseconds.
+
+      Defined in: LocalControlDescriptor
+
+      Characteristics: read/write
+
+E.11.2   Events
+
+   network failure
+   EventID: netfail, 0x0005
+
+      The termination generates this event upon detection of a failure
+      due to external or internal network reasons.
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         cause
+         ParameterID: cs (0x0001)
+
+            Type: string
+
+            Possible values: any text string
+
+
+
+
+Groves, et al.              Standards Track                   [Page 178]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            This parameter may be included with the failure event to
+            provide diagnostic information on the reason of failure.
+
+   quality alert
+   EventID: qualert, 0x0006
+
+      This property allows the MG to indicate a loss of quality of the
+      network connection.  The MG may do this by measuring packet loss,
+      interarrival jitter, propagation delay and then indicating this
+      using a percentage of quality loss.
+
+      EventDescriptor parameters
+
+         Threshold
+         ParameterId: th (0x0001)
+
+            Type: integer
+
+            Possible values: 0 to 99
+
+            Description: threshold for percent of quality loss measured,
+            calculated based on a provisioned method, that could take
+            into consideration packet loss, jitter, and delay for
+            example.  Event is triggered when calculation exceeds the
+            threshold.
+
+      ObservedEventsDescriptor parameters
+
+         Threshold
+         ParameterId: th (0x0001)
+
+            Type: integer
+
+            Possible values: 0 to 99
+
+            Description: percent of quality loss measured, calculated
+            based on a provisioned method, that could take into
+            consideration packet loss, jitter, and delay for example.
+
+E.11.3   Signals
+
+   None.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 179]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.11.4   Statistics
+
+   Duration
+   StatisticsID: dur (0x0001)
+
+      Description: provides duration of time the termination has been in
+      the Context.
+
+      Type: double, in milliseconds
+
+   Octets Sent
+   StatisticID: os (0x0002)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Octets Received
+   StatisticID: or (0x0003)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+E.11.5   Procedures
+
+   None.
+
+E.12  RTP Package
+
+   PackageID: rtp (0x000c)
+   Version: 1
+   Extends: Network Package version 1
+
+   This package is used to support packet-based multimedia data transfer
+   by means of the Real-time Transport Protocol (RTP) [RFC 1889].
+
+E.12.1   Properties
+
+   None.
+
+E.12.2   Events
+
+   Payload Transition
+   EventID: pltrans, 0x0001
+
+      This event detects and notifies when there is a transition of the
+      RTP payload format from one format to another.
+
+
+
+Groves, et al.              Standards Track                   [Page 180]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         ParameterName: rtppayload
+         ParameterID: rtppltype, 0x01
+
+         Type: list of enumerated types.
+
+         Possible values: The encoding method shall be specified by
+         using one or several valid encoding names, as defined in the
+         RTP AV Profile or registered with IANA.
+
+E.12.3   Signals
+
+   None.
+
+E.12.4   Statistics
+
+   Packets Sent
+   StatisticID: ps (0x0004)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Packets Received
+   StatisticID: pr (0x0005)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Packet Loss
+   StatisticID: pl (0x0006)
+
+      Describes the current rate of packet loss on an RTP stream, as
+      defined in IETF RFC 1889.  Packet loss is expressed as percentage
+      value: number of packets lost in the interval between two
+      reception reports, divided by the number of packets expected
+      during that interval.
+
+      Type: double
+
+      Possible values: a 32-bit whole number and a 32-bit fraction.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 181]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Jitter
+   StatisticID: jit (0x0007)
+
+      Requests the current value of the interarrival jitter on an RTP
+      stream as defined in IETF RFC 1889.  Jitter measures the variation
+      in interarrival time for RTP data packets.
+
+   Delay
+   StatisticID:delay (0x0008)
+
+      Requests the current value of packet propagation delay expressed
+      in timestamp units.  Same as average latency.
+
+E.12.5   Procedures
+
+   None.
+
+E.13  TDM Circuit Package
+
+      PackageID: tdmc (0x000d)
+      Version: 1
+      Extends: Network Package version 1
+
+      This package may be used by any termination that supports gain and
+      echo control.  It was originally intended for use on TDM circuits
+      but may be more widely used.
+
+
+      New versions or extensions of this package should take non-TDM use
+      into account.
+
+E.13.1   Properties
+
+      Echo Cancellation
+      PropertyID: ec (0x0008)
+
+         Type: boolean
+
+         Possible values:
+
+            "on" (when the echo cancellation is requested) and
+
+            "off" (when it is turned off.)
+
+            The default is provisioned.
+
+         Defined in: LocalControlDescriptor
+
+
+
+
+Groves, et al.              Standards Track                   [Page 182]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Characteristics: read/write
+
+      Gain Control
+      PropertyID: gain (0x000a)
+
+         Gain control, or usage of of signal level adaptation and
+         noise level reduction is used to adapt the level of the signal.
+         However, it is necessary, for example for modem calls, to turn
+         off this function.
+
+         Type: integer
+
+         Possible values:
+
+         The gain control parameter may either be specified as
+         "automatic" (0xffffffff), or as an explicit number of decibels
+         of gain (any other integer value).  The default is provisioned
+         in the MG.
+
+      Defined in: LocalControlDescriptor
+
+      Characteristics: read/write
+
+E.13.2   Events
+
+   None.
+
+E.13.3   Signals
+
+   None.
+
+E.13.4   Statistics
+
+   None.
+
+E.13.5   Procedures
+
+   None.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 183]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+APPENDIX I  EXAMPLE CALL FLOWS (INFORMATIVE)
+
+   All H.248.1 implementors must read the normative part of this RFC
+   carefully before implementing from it.  The examples in this appendix
+   should not be used as stand-alone explanations of how to create
+   protocol messages.
+
+   The examples in this appendix use SDP for encoding of the Local and
+   and Remote stream descriptors. SDP is defined in RFC 2327. If there
+   is is any discrepancy between the SDP in the examples, and RFC 2327,
+   the the RFC should be consulted for correctness. Audio profiles used
+   are are those defined in IETF RFC 1890, and others registered with
+   IANA.  For example, G.711 A-law is called PCMA in SDP, and is
+   assigned profile 0. G.723.1 is called G723 and is profile 4; H.263 is
+   called H263 and is profile 34. See also
+   http://www.iana.org/assignments/rtp-parameters.
+
+A.1   Residential Gateway to Residential Gateway Call
+
+   This example scenario illustrates the use of the elements of the
+   protocol to set up a Residential Gateway to Residential Gateway call
+   over an IP-based network.  For simplicity, this example assumes that
+   both Residential Gateways involved in the call are controlled by the
+   same Media Gateway Controller.
+
+A.1.1 Programming Residential GW Analog Line Terminations for Idle
+   Behavior
+
+   The following illustrates the API invocations from the Media Gateway
+   Controller and Media Gateways to get the Terminations in this
+   scenario programmed for idle behavior.  Both the originating and
+   terminating Media Gateways have idle AnalogLine Terminations
+   programmed to look for call initiation events (i.e., -offhook) by
+   using the Modify Command with the appropriate parameters.  The null
+   Context is used to indicate that the Terminations are not yet
+   involved in a Context.  The ROOT termination is used to indicate the
+   entire MG instead of a termination within the MG.
+
+   In this example, MG1 has the IP address 124.124.124.222, MG2 is
+   125.125.125.111, and the MGC is 123.123.123.4. The default Megaco
+   port is 55555 for all three.
+
+   1. An MG registers with an MGC using the ServiceChange command:
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222] Transaction = 9998 {
+       Context = - {
+
+
+
+Groves, et al.              Standards Track                   [Page 184]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+           ServiceChange = ROOT {Services {
+               Method=Restart,
+               ServiceChangeAddress=55555, Profile=ResGW/1}
+           }
+       } }
+
+   2. The MGC sends a reply:
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 9998 {
+      Context = - {ServiceChange = ROOT {
+        Services {ServiceChangeAddress=55555, Profile=ResGW/1} } } }
+
+   3. The MGC programs a Termination in the NULL context.  The
+   terminationId is A4444, the streamId is 1, the requestId in the
+   Events descriptor is 2222.  The mId is the identifier of the sender
+   of this message, in this case, it is the IP address and port
+   [123.123.123.4]:55555.  Mode for this stream is set to SendReceive.
+   "al" is the analog line supervision package.  Local and Remote are
+   assumed to be provisioned.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 9999 {
+       Context = - {
+           Modify = A4444 {
+               Media { Stream = 1 {
+                        LocalControl {
+                            Mode = SendReceive,
+                            tdmc/gain=2,  ; in dB,
+                            tdmc/ec=on
+                        },
+
+                    }
+               },
+               Events = 2222 {al/of(strict=state)}
+           }
+       } }
+
+
+   The dialplan script could have been loaded into the MG previously.
+   Its function would be to wait for the OffHook, turn on dialtone and
+   start collecting DTMF digits.  However in this example, we use the
+   digit map, which is put into place after the offhook is detected
+   (step 5 below).
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 185]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Note that the embedded EventsDescriptor could have been used to
+   combine steps 3 and 4 with steps 8 and 9, eliminating steps 6 and 7.
+
+   4. The MG1 accepts the Modify with this reply:
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555
+
+   Reply = 9999 {
+      Context = - {Modify = A4444} }
+
+   5. A similar exchange happens between MG2 and the MGC, resulting in
+   an idle Termination called A5555.
+
+A.1.2 Collecting Originator Digits and Initiating Termination
+
+   The following builds upon the previously shown conditions.  It
+   illustrates the transactions from the Media Gateway Controller and
+   originating Media Gateway (MG1) to get the originating Termination
+   (A4444) through the stages of digit collection required to initiate a
+   connection to the terminating Media Gateway (MG2).
+
+   6. MG1 detects an offhook event from User 1 and reports it to the
+   Media Gateway Controller via the Notify Command.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Transaction = 10000 {
+      Context = - {
+          Notify = A4444 {ObservedEvents =2222 {
+            19990729T22000000:al/of(init=false)}}
+      } }
+
+   7. And the Notify is acknowledged.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 10000 {
+
+       Context = - {Notify = A4444} }
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 186]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   8. The MGC Modifies the termination to play dial tone, to look for
+   digits according to Dialplan0 and to look for the on-hook event now.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10001 {
+       Context = - {
+           Modify = A4444 {
+               Events = 2223 {
+                   al/on(strict=state), dd/ce {DigitMap=Dialplan0}
+               },
+               Signals {cg/dt},
+               DigitMap= Dialplan0{ (0| 00|[1-
+   7]xxx|8xxxxxxx|Fxxxxxxx|Exx|91xxxxxxxxxx|9011x.)}
+           }
+       } }
+
+   9. And the Modify is acknowledged.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10001 {
+       Context = - {Modify = A4444} }
+
+   10.   Next, digits are accumulated by MG1 as they are dialed by User
+   1.  Dialtone is stopped upon detection of the first digit.  When an
+   appropriate match is made of collected digits against the currently
+   programmed Dialplan for A4444, another Notify is sent to the Media
+   Gateway Controller.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Transaction = 10002 {
+      Context = - {
+          Notify = A4444 {ObservedEvents =2223 {
+            19990729T22010001:dd/ce{ds="916135551212",Meth=UM}}}
+      } }
+
+   11.   And the Notify is acknowledged.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 10002 {
+       Context = - {Notify = A4444} }
+
+
+   12.   The controller then analyses the digits and determines that a
+   connection needs to be made from MG1 to MG2.  Both the TDM
+
+
+
+Groves, et al.              Standards Track                   [Page 187]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   termination A4444, and an RTP termination are added to a new context
+   in MG1.  Mode is ReceiveOnly since Remote descriptor values are not
+   yet specified.  Preferred codecs are in the MGC's preferred order of
+   choice.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10003 {
+       Context = $ {
+          Add = A4444,
+          Add = $ {
+              Media {
+                Stream = 1 {
+                     LocalControl {
+                         Mode = ReceiveOnly,
+
+                         nt/jit=40 ; in ms
+                     },
+                     Local { v=0 c=IN IP4 $ m=audio $ RTP/AVP 4
+   a=ptime:30 v=0 c=IN IP4 $ m=audio $ RTP/AVP 0
+                     }
+                }
+             }
+          }
+       } }
+
+
+      NOTE - The MGC states its preferred parameter values as a series
+      of SDP blocks in  Local.  The MG fills in the Local Descriptor in
+      the Reply.
+
+   13.   MG1 acknowledges the new Termination and fills in the Local IP
+   address and UDP port.  It also makes a choice for the codec based on
+   the MGC preferences in Local.  MG1 sets the RTP port to 2222.
+
+   MG1 -> MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10003 {
+      Context = 2000 {
+         Add = A4444,
+         Add=A4445{
+            Media {
+                Stream = 1 {
+                    Local { v=0 o=- 2890844526 2890842807 IN IP4
+   124.124.124.222 s=- t= 0 0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP 4 a=ptime:30 a=recvonly
+                    } ; RTP profile for G.723.1 is 4
+                }
+
+
+
+Groves, et al.              Standards Track                   [Page 188]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            }
+         }
+      } }
+
+   14.   The MGC will now associate A5555 with a new Context on MG2, and
+   establish an RTP Stream (i.e., A5556 will be assigned), SendReceive
+   connection through to the originating user, User 1.  The MGC also
+   sets ring on A5555.
+
+   MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50003 {
+       Context = $ {
+          Add = A5555  { Media {
+               Stream = 1 {
+                    LocalControl {Mode = SendReceive} }},
+         Events=1234{al/of(strict=state)},
+               Signals {al/ri}
+
+               },
+          Add  = $ {Media {
+               Stream = 1 {
+                    LocalControl {
+                       Mode = SendReceive,
+                       nt/jit=40 ; in ms
+                    },
+                    Local { v=0 c=IN IP4 $ m=audio $ RTP/AVP 4
+   a=ptime:30
+                    },
+                    Remote { v=0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP 4 a=ptime:30
+                    } ; RTP profile for G.723.1 is 4
+                }
+             }
+         }
+      } }
+
+   15.   This is acknowledged.  The stream port number is different from
+   the control port number.  In this case it is 1111 (in the SDP).
+
+   MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50003 {
+      Context = 5000 {
+      Add = A5555,
+         Add = A5556{
+            Media {
+               Stream = 1 {
+
+
+
+Groves, et al.              Standards Track                   [Page 189]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                   Local { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP 4 }
+               } ; RTP profile for G723.1 is 4
+            }
+          }
+
+      } }
+
+   16.   The above IPAddr and UDPport need to be given to MG1 now.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10005 {
+     Context = 2000 {
+       Modify = A4444 {
+         Signals {cg/rt}
+       },
+       Modify = A4445 {
+          Media {
+               Stream = 1 {
+                   Remote { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP 4
+                   }
+               } ; RTP profile for G723.1 is 4
+           }
+       }
+     } }
+
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10005 {
+      Context = 2000 {Modify = A4444, Modify = A4445} }
+
+   17.   The two gateways are now connected and User 1 hears the
+   RingBack.  The MG2 now waits until User2 picks up the receiver and
+   then the two-way call is established.
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 190]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Transaction = 50005 {
+      Context = 5000 {
+
+          Notify = A5555 {ObservedEvents =1234 {
+            19990729T22020002:al/of(init=false)}}
+      } }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 50005 {
+       Context = - {Notify = A5555} }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50006 {
+      Context = 5000 {
+         Modify = A5555 {
+            Events = 1235 {al/on(strict=state)},
+            Signals { } ; to turn off ringing
+         }
+      } }
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50006 {
+    Context = 5000 {Modify = A4445} }
+
+   18.   Change mode on MG1 to SendReceive, and stop the ringback.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10006 {
+      Context = 2000 {
+         Modify = A4445 {
+            Media {
+               Stream = 1 {
+                  LocalControl {
+                     Mode=SendReceive
+
+                  }
+               }
+            }
+         },
+         Modify = A4444 {
+            Signals { }
+         }
+
+
+
+Groves, et al.              Standards Track                   [Page 191]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      } }
+
+   from MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10006 {
+      Context = 2000 {Modify = A4445, Modify = A4444}}
+
+   19.   The MGC decides to Audit the RTP termination on MG2.
+
+   MGC -> MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50007 {
+      Context = - {AuditValue = A5556{
+         Audit{Media, DigitMap, Events, Signals, Packages, Statistics }}
+      } }
+
+   20.   The MG2 replies.
+
+   MG2 -> MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50007 {
+      Context = - { AuditValue = A5556 {
+             Media {
+                TerminationState { ServiceStates = InService,
+            Buffer = OFF },
+          Stream = 1 {
+                    LocalControl { Mode = SendReceive,
+                       nt/jit=40 },
+                    Local { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP  4 a=ptime:30
+                   },
+                    Remote { v=0 o=- 2890844526 2890842807 IN IP4
+   124.124.124.222 s=- t= 0 0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP  4 a=ptime:30
+                    } } },
+              Events,
+           Signals,
+           DigitMap,
+          Packages {nt-1, rtp-1},
+             Statistics { rtp/ps=1200,  ; packets sent
+                          nt/os=62300, ; octets sent
+                          rtp/pr=700, ; packets received
+                          nt/or=45100, ; octets received
+                          rtp/pl=0.2,  ; % packet loss
+                          rtp/jit=20,
+                          rtp/delay=40 } ; avg latency
+          }
+
+
+
+Groves, et al.              Standards Track                   [Page 192]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+       } }
+
+   21.   When the MGC receives an onhook signal from one of the MGs, it
+   brings down the call.  In this example, the user at MG2 hangs up
+   first.
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Transaction = 50008 {
+      Context = 5000 {
+          Notify = A5555 {ObservedEvents =1235 {
+             19990729T24020002:al/on(init=false)}
+          }
+      } }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 50008 {
+
+       Context = - {Notify = A5555} }
+
+   22.   The MGC now sends both MGs a Subtract to take down the call.
+   Only the subtracts to MG2 are shown here.  Each termination has its
+   own set of statistics that it gathers.  An MGC may not need to
+   request both to be returned.  A5555 is a physical termination, and
+   A5556 is an RTP termination.
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50009 {
+      Context = 5000 {
+         Subtract = A5555 {Audit{Statistics}},
+         Subtract = A5556 {Audit{Statistics}}
+      } }
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50009 {
+      Context = 5000 {
+        Subtract = A5555 {
+             Statistics {
+                nt/os=45123, ; Octets Sent
+                nt/dur=40 ; in seconds
+                }
+          },
+          Subtract = A5556 {
+             Statistics {
+                rtp/ps=1245, ; packets sent
+
+
+
+Groves, et al.              Standards Track                   [Page 193]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                nt/os=62345, ; octets sent
+                rtp/pr=780, ; packets received
+                nt/or=45123, ; octets received
+                rtp/pl=10, ;  % packets lost
+                rtp/jit=27,
+                rtp/delay=48 ; average latency
+             }
+          }
+      } }
+
+   23.   The MGC now sets up both MG1 and MG2 to be ready to detect the
+   next off-hook event.  See step 1.  Note that this could be the
+   default state of a termination in the null context, and if this were
+   the case, no message need be sent from the MGC to the MG.  Once a
+   termination returns to the null context, it goes back to the default
+   termination values for that termination.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 194]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+APPENDIX II  Changes From RFC 3015
+
+   In the following table, "source" indicates when the change was first
+   approved.  It has the following values:
+
+   IG1100: H.248 Implementor's Guide approved in November, 2000 (as TD
+   Plen-39, Christian Groves, editor).
+
+   IG0601: H.248 Implementor's Guide approved in June, 2001 (as  TD
+   Plen-15, Christian Groves, editor).
+
+   IGDUB: Draft H.248 Implementor's Guide approved at the Q.3
+   Rapporteur's meeting held near Dublin, October 2001 (as TD-28, Terry
+   Anderson, editor).
+
+   GEN0202: added at the Geneva meeting, February 2002, which consented
+   to H.248 v1 Amendment 1 (as TD Plen-36r1, Marcello Pantaleo, editor).
+
+   ITUPOST: added in post-Geneva editing by the ITU-T.
+
+   TTPOST: added in post-approval editing by the Megaco Chair, Tom
+   Taylor, who assembled this document for submission.
+
+   Section    Source                       Change
+
+   1          ITUPOST   Reference changed from H.248 to H.248.1.
+
+   2.1        ITUPOST   Reference added for error codes, changed from
+                        H.248 Annex L to H.248.8 (2002).
+
+   2.1        IG1100    Corrected Q.765 reference to Q.765.5.
+
+   2.1        GEN0202   Added reference to X.690.
+
+   2.2        GEN0202   Added reference to H.226.
+
+   2.2         IGDUB    Added informative references to Q.724, Q.764,
+                        and Q.1902.4.
+
+   4          IG0601    Added expansion of ALF.
+
+   5          TTPOST    Gave priority to IETF conventions (added at
+                        start of document).
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 195]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   6.1.1      IG0601    Added text regarding use of wildcards for
+                        context identifiers.  (This information
+                        already appeared in section 8.1.2.  The IG
+                        change subsequently disappeared.)
+
+   6.1.1      IG1100    Added ranking of priority values.
+
+   6.2         IGDUB    Deleted definition of signals.
+
+   6.2        GEN0202   Expanded text and diagrams describing
+                        multiplexing terminations.
+
+   6.2        TTPOST    Added asterisks to multiplexing diagrams to
+                        indicate centre of context.  Added Figure 6a
+                        showing cascading of multiplexes.
+
+   6.2.2      IG0601    Added text indicating that ALL does not
+                        include ROOT.
+
+   6.2.3      IG1100    Added text clarifying what must be supported
+                        to claim support of a package.
+
+   6.2.3      IG1100    Added text indicating what packages a peer can
+                        indicate support for, when some of them are
+                        extensions of others.
+
+   6.2.4      IG0601    Added text on ability of provisioning to
+                        override default values, and need for MGC to
+                        audit to learn the provisioned defaults.
+
+   6.2.4      IG0601    Added text indicating effect of omitting
+                        specific properties from Descriptors in
+                        commands modifying a termination.
+                        Contradicted original text saying that omitted
+                        properties retain their prior values (still
+                        true for entirely-omitted Descriptors).
+
+   6.2.4      GEN0202   Modified above text to restrict it to
+                        read/write properties, allow for default
+                        behaviour in place of default values if so
+                        specified in the property definition.
+
+   6.2.4       IGDUB    Trimmed definition of signals Descriptor in
+                        table and inserted cross-reference to section
+                        7.1.11.
+
+   6.2.4      IG1100    Added Topology and Error Descriptors to table.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 196]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   6.2.5       IGDUB    Specified error code to return if ROOT used
+                        inappropriately.
+
+   7.1.1      IG1100    Added qualification to explanation of effect
+                        of missing Audit Descriptor, excepting
+                        Subtract.
+
+   7.1.3      GEN0202   Changed "inputs" to "bearers" to be consistent
+                        with terminology in 6.2.
+
+   7.1.4      IG0601    Small change to make clear that more than one
+                        of Local, Remote, and LocalControl can be
+                        included in the default streamId.
+
+   7.1.7      IG0601    Default value for Mode specified to be
+                        Inactive.
+
+   7.1.7      GEN0202   Added text requiring processing of media in
+                        any of the reserved formats, where more than
+                        one has been reserved in a given stream.
+
+   7.1.8       IGDUB    Added restriction to at most one m= line per
+                        session description.
+
+   7.1.9      IG0601    Text added to omit request identifier if the
+                        EventsDescriptor is empty.  Further text added
+                        at end to indicate the effects of an empty
+                        EventsDescriptor and an empty
+                        EventBufferDescriptor.
+
+   7.1.9      IG0601    Fixed typo for destination of a Notify.
+
+   7.1.9      IG1100    Added note to say event remains active after
+                        it has been notified, so long as it is still
+                        present in the active Events Descriptor.
+
+   7.1.11      IGDUB    Added definition of signals.
+
+   7.1.11     GEN0202   Modified definition to include example of more
+                        complex signal, and added role of signal in
+                        media preparation for future signals.
+
+   7.1.11      IGDUB    The timeout completion reason was broadened to
+                        include other circumstances where the signal
+                        completed on its own.  Text added to indicate
+                        that if default signal type changed to TO,
+                        duration parameter must be provided.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 197]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.1.11     GEN0202   Removed reference to BR signal being "so
+                        short" it will stop on its own.  Added text
+                        indicating that if the type of a signal is
+                        changed to TO, the Duration parameter must be
+                        supplied.
+
+   7.1.11     IG1100    Deleted text discussing type of Signals List.
+
+   7.1.12     GEN0202   Improved wording of introductory paragraph and
+                        added text making content of returned
+                        Descriptor clear.
+
+   7.1.14.2   GEN0202   Added text indicating that when the start
+                        timer is set to 0, initial digit timing is
+                        disabled and the MG waits indefinitely for
+                        digits.
+
+   7.1.14.2   GEN0202   Added text pointing out that default digit
+                        timer values should be provisioned, but can be
+                        overridden in the digit map.
+
+   7.1.14.3   GEN0202   Changed result of long-short digit timer
+                        conflict from undefined to long.
+
+   7.1.14.6   IG1100    Clarified that the digit map is provided by
+                        the eventDM parameter, which must be present.
+
+   7.1.14.7   GEN0202   Added text clarifying that events covered by
+                        the digit map completion event have no side-
+                        effects unless separately enabled.
+
+   7.1.14.8   IG0601    Added requirement that the event specification
+                        include the eventDM parameter.
+
+   7.1.17      IGDUB    Added text to indicate timestamp is optional
+                        and to include observed event parameters in
+                        reported content.
+
+   7.1.17     GEN0202   Deleted provision that time is expressed in
+                        UTC (since intention was to use format, not
+                        time zone).
+
+   7.1.18      IGDUB    Added text indicating error to return if
+                        topology option not supported.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 198]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.1.18     IG1100    Added text clarifying effect of not mentioning
+              TTPOST    a termination in a topology Descriptor, and
+                        default topology for a new termination.  (This
+                        text got lost between the Dublin meeting and
+                        the production of H.248 Amendment 1 out of the
+                        Geneva 02/02 meeting.  It has been added back
+                        to the present document.)
+
+   7.1.19     IG1100    New section to describe Error Descriptor.
+              GEN0202   Slightly edited in Geneva 02/02 meeting.
+              ITUPOST   Reference for error code documentation updated
+                        to H.248.8.
+
+   7.1.19     IG0601    Added paragraph giving guidance on level at
+                        which errors should be reported.
+
+   7.2        IG1100    Noted possibility of Error Descriptor in reply
+                        to any command.
+
+   7.2.1      IG1100    Added EventBufferDescriptor as Add parameter.
+
+   7.2.1      IG1100    Removed restriction on use of CHOOSE wildcard.
+
+   7.2.2      IG1100    Added EventBufferDescriptor as Modify
+                        parameter.
+
+   7.2.2      GEN0202   Added text on side-effects of Modify of a
+                        multiplexing termination.
+
+   7.2.3      IG1100    Added prohibition against subtracting from the
+                        NULL context.
+
+   7.2.3      GEN0202   Added text on side-effects of Subtract of a
+                        multiplexing termination.
+
+   7.2.3       IGDUB    Added text clarifying effect of empty
+                        AuditDescriptor in Subtract.
+
+   7.2.4      IG1100    Added EventBufferDescriptor as Move parameter.
+
+   7.2.4      GEN0202   Removed misleading statement that Move acts as
+                        subtract from original context.
+
+   7.2.4      IG1100    Clarified effect of Move on properties of the
+                        moved termination.
+
+   7.2.4      GEN0202   Added text on side-effects of Move of a
+                        multiplexing termination.
+
+
+
+Groves, et al.              Standards Track                   [Page 199]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.2.5      IG1100    Added examples showing W- wildcard usage.
+
+   7.2.5      IG1100    Noted that returning a list of all contextIDs
+                        requires that they be returned one per
+                        ActionReply.
+
+   7.2.5      IG1100    Added table entry (ALL, specific) to determine
+                        context in which termination currently
+                        resides.
+
+   7.2.6      GEN0202   Added table similar to that in 7.2.5.
+
+   7.2.7      IG0601    Added TerminationID to API.
+
+   7.2.7       IGDUB    Indicated timestamp was optional in Notify, to
+                        accord with syntax.
+
+   7.2.7      IG1100    Noted possibility of sending Error Descriptor
+                        in Notify.
+
+   7.2.8      IG0601    Added text to description of Forced method to
+                        indicate that Forced on ROOT indicates a cold
+                        restart (all context state lost).
+
+   7.2.8       IGDUB    Amplified explanation of Disconnected method
+                        to emphasize return to the previously
+                        controlling MGC.
+
+   7.2.8      IG0601    Added text for MG use of Failover method when
+                        it detects MGC failure.
+
+   7.2.8      IG1100    Added notes discouraging use of
+                        ServiceChangeAddress and warning that it could
+                        be either a full address or just a port
+                        number.
+
+   7.2.8      IG0601    Added text indicating that timestamp does not
+                        necessarily represent absolute time, only
+                        local clock reading.
+
+   7.2.8       IGDUB    Corrected "gateway" to "MGC" in discussion of
+                        returned ServiceChangeMgcId parameter.
+
+   7.3        IG0601    Removed error code documentation to Annex L
+              ITUPOST   (now H.248.8).
+
+   8          IG1100    Added requirement that an Action be non-empty.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 200]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   8          GEN0202   Added context properties and context property
+                        audit requests to commands as potential
+                        contents of actions.
+
+   8.1.2      GEN0202   Added prohibition on using partial contextIDs
+                        with ALL wildcards.
+
+   8.2.2      IG1100    Added text clarifying when in transaction
+                        processing the requested actions have been
+                        completed and a reply can be sent.
+
+   8.2.2      IG1100    Added ALL as allowed contextID in
+                        TransactionReply.
+
+   8.2.2      GEN0202   Provided general reference to section 7.1.19
+                        for generation of error Descriptors.
+
+   8.2.2      IG0601    Corrected Actions to Commands when discussing
+                        partially-understood action.
+
+   8.3        IG0601    Added text specifying that the same MId value
+                        must be used by a given entity throughout the
+                        life of a control association.
+
+   8.3        IG0601    Added text expanding on independence of
+                        transactions from messages.
+
+   9          ITUPOST   Indicated that additional transports may be
+                        defined in separate Recommendations as well as
+                        annexes to the primary specification.
+
+   9          IG0601    Gave specific example of "request source
+                        address" for IP.
+
+   9.1        IG1100    Deleted restriction to one outstanding Notify
+                        command on a termination at one time, since
+                        this is transport-specific.
+
+   9.1        IG0601    Restored restriction, but noted that it
+                        applied only to transport not guaranteeing
+                        ordered delivery.
+
+   10.2       IG1100    Corrected length of synthesized address field
+                        from 10 to 20 hex digits and indicated that
+                        calculation should be over entire message, not
+                        just one transaction.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 201]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   11.2       IG1100    Corrected text in first two paragraphs
+                        describing use of ServiceChangeMgcId
+                        parameter.
+
+   11.2       IG1100    Corrected "Transaction Accept" to "Transaction
+                        Reply".
+
+   11.4       IG0601    Noted that support of redundant MGs requires
+              GEN0202   use of a reliable transport and support in the
+                        MGC.  Added more explanation in Geneva.
+
+   11.5       IG0601    Added text clarifying procedure if MG unable
+                        to establish a control relationship with any
+                        of its eligible MGCs.
+
+   11.5        IGDUB    Added text indicating that when trying to
+                        reestablish contact with the previously
+                        controlling MGC the MG uses the Disconnected
+                        method.
+
+   11.5       IG1100    Clarified handoff procedure.
+
+   11.5       GEN0202   Changed text on replies to transactions in
+                        progress during handoff.  Replies now
+                        discarded when the service relationship with
+                        the old MGC has ended, rather than sent to the
+                        new MGC.  The new MGC could still send replies
+                        to requests sent to the old MGC.
+
+   12.1.1     GEN0202   Added optional package designation as
+                        "designed to be extended only".
+
+   12.1.1     IG1100    Made prohibition on overloading of identifiers
+                        in extended packages transitive through all
+                        ancestors of the extended package.
+
+   12.1.2      IGDUB    Clarified the set of types allowed for
+                        properties.
+
+   12.1.2     GEN0202   Added requirement to specify the base type of
+                        a sub-list.
+
+   12.1.2     GEN0202   Provided requirements for content of the
+                        "Possible Values" template item, including
+                        specification of default values or behaviour.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 202]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   12.1.4     GEN0202   Added requirement to specify the default
+                        signal type, and specify a default duration
+                        for TO signals.  Also noted that duration is
+                        meaningless for BR, and that the signal type
+                        might be dependent on the values of other
+                        signal parameters.
+
+   12.2       GEN0202   Fixed section title (covers only event and
+                        signal parameters, not properties or
+                        statistics).
+
+   12.2       IG1100    Reserved SPA and EPA prefixes, so they are not
+                        to be used for signal and event parameter
+                        tokens.
+
+   12.2       IG0601    Expanded list of reserved prefixes.
+
+   12.2        IGDUB    Clarified the set of types allowed for signal
+                        and event parameters.
+
+   12.2       GEN0202   Added requirement to specify the base type of
+                        a sub-list.
+
+   12.2       GEN0202   Provided requirements for content of the
+                        "Possible Values" template item, including
+                        specification of default values or behaviour.
+
+   12.4        IGDUB    Corrected to indicate identifiers must start
+                        with alphabetic rather than alphanumeric
+                        character.
+
+   13.1       IG0601    Changed private range of binary package
+                        identifiers to convenient hex values.
+
+   A          GEN0202   Removed versions from X.680 and X.690
+                        references.
+
+   A.2         IGDUB    Added note warning that the syntax alone does
+                        not provide a complete description of the
+                        constraints, but must be supplemented by a
+                        reading of the text and comments.
+
+   A.2        IG0601    Added description of double wrapping of
+                        parameters declared as OCTET STRING.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 203]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A.2        GEN0202   Some editing of double wrapping description to
+                        use ASN.1, BER in their proper places.  Added
+                        possibility of encoding strings as UTF8String,
+                        but only if they contain non-ASCII characters.
+
+   A.2         IGDUB    Added line in table on double wrapping of true
+                        octet strings.
+
+   A.2        IG1100    Corrected and expanded comments describing
+                        mtpAddress form of MId.  Fixed maximum length
+                        of mtpAddress both here and in
+                        ServiceChangeAddress.
+
+   A.2        IG0601   Inserted missing lines in IP4Address
+                        production.
+
+   A.2        IG0601    Modified TransactionResponseAck to allow
+                        acknowledgement of multiple ranges of
+                        transactionIds.
+
+   A.2        IG0601    Corrected numerical value of CHOOSE as a
+                        context identifier.
+
+   A.2         IGDUB    Added missing extension marker in
+                        TopologyRequest.
+
+   A.2        IG1100    AuditReply and AuditResult modified to bring
+                        binary functionality into line with text
+                        functionality.
+
+   A.2        IG0601    Removed OPTIONAL tag from terminationID in
+                        NotifyReply.
+
+   A.2        IG0601    Added extraInfo substructure to EventParameter
+                        and SigParameter.
+
+   A.2        IG0601    Modified MediaDescriptor to make it optional
+                        to specify a stream.
+
+   A.2        IG0601    Added OPTIONAL tags to reserveValue and
+                        reserveGroup.
+
+   A.2         IGDUB    Added to comments for pkgdName to indicate
+                        applicability to event names, signal names,
+                        and statisticIds as well as property.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 204]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A.2        IG0601    RequestID made optional in EventsDescriptor
+                        and SecondEventsDescriptor and comment added
+                        saying it must be present if events are
+                        present.
+
+   A.2        IG1100    Added OPTIONAL tags on RequestActions and
+                        SecondRequestedActions keepActive BOOLEANs.
+
+   A.2        IG1100    Added comment to indicate requestID value to
+                        use in an AuditCapReply.
+
+   A.2        GEN0202   Added comment to DigitMapValue indicating time
+                        units for timers.
+
+   A.2        IG0601    Added comment indicating coding of Value for
+              GEN0202   ServiceChangeReason.  Cleaned up in Geneva to
+                        use ASN.1 and BER in their proper places.
+
+   A.2        IG0601    Inserted missing extension marker in
+                        ServiceChangeParm production.
+
+   A.2        IG0601    Aligned definition of mtpAddress in
+                        ServiceChangeAddress with that in MId.
+
+   A.2        IG0601    Added timestamp to ServiceChangeResParm.
+
+   A.2         IGDUB    Changed type of profileName in
+                        ServiceChangeProfile to IA5String.
+
+   A.2        IG0601    Made returned value optional in
+                        statisticsParameter, to support
+                        auditCapability result.
+
+   A.2        GEN0202   Added reference to ISO 8601:1988 for
+                        TimeNotation.
+
+   A.2        IG1100    Value production modified to support the
+                        sublist parameter type.
+
+   A.3        IG1100    Corrected ABNF for digitStringlisT, replacing
+                        "/" with "|".
+
+   A.3        IG1100    Added parentheses to digitMapRange production.
+
+   A.3        IG1100    Replaced more abbreviated syntax for pathName
+                        with fuller definition and constraints copied
+                        from B.2.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 205]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2         IGDUB    Added note warning that the syntax alone does
+                        not provide a complete description of the
+                        constraints, but must be supplemented by a
+                        reading of the text and comments.
+
+   B.2        IG0601    Added note warning that the interpretation of
+                        symbols is context-dependent.
+
+   B.2        IG1100    Added comment to indicate case insensitivity
+                        of protocol (excepting SDP) and ABNF.
+
+   B.2        IG0601    Expanded upon and capitalized this comment.
+
+   B.2        IG0601    Lengthy note added on the coding of the VALUE
+                        construct.
+
+   B.2         IGDUB    Deleted sentence in note suggesting that
+                        packages could add new types for properties,
+                        parameters, or statistics.
+
+   B.2        IG0601    Added note indicating that parsers should
+                        allow for white space preceding the first line
+                        of SDP in Local or Remote.
+
+   B.2         IGDUB    Added comments identifying the O- and W- tags.
+
+   B.2        IG1100    Moved wildcard tag up from individual commands
+                        to commandRequestList.
+
+   B.2        GEN0202   Added additional error case to actionReply.
+
+   B.2        IG0601    Modified syntax of auditOther to allow return
+                        of terminationID only.
+
+   B.2         IGDUB    Corrected upper limit for V4hex.
+
+   B.2        IG1100    Corrected and expanded comments describing
+                        mtpAddress form of MId.
+
+   B.2        IG0601    Modified comment to mediaParm to make
+                        streamParms and StreamDescriptor mutually
+                        exclusive.
+
+   B.2        GEN0202   Modified comment further to indicate at most
+                        one instance of terminationStateDescriptor.
+
+   B.2        GEN0202   Expanded comment for streamParm to indicate
+                        the restriction on repetition is per item.
+
+
+
+Groves, et al.              Standards Track                   [Page 206]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2        IG0601    Modified "at most once" comments to localParm,
+                        terminationStateParm, and modemType, to allow
+                        multiple instances of propertyParm in the
+                        first two cases and extensionParameter in the
+                        last one.
+
+   B.2        IG0601    Added note before description of Local and
+                        Remote, pointing out that the octet value x00
+                        is not allowed in octetString.
+
+   B.2        IG0601    Syntax for eventsDescriptor, embedFirst, and
+                        eventBufferDescriptor modified to make
+                        contents beyond token optional.
+
+   B.2         IGDUB    Replaced "event" by "item" in comment to
+                        pkgdName because pkgdName applies to
+                        properties, signals, and statistics as well.
+
+   B.2        IG0601    Corrected placement of EQUAL in eventDM
+                        production.
+
+   B.2        IG1100    Added comment and syntax to indicate requestID
+                        value to use in an AuditCapReply.
+
+   B.2        IG1100    Corrected Modem Descriptor to allow package
+                        items as properties.
+
+   B.2        IG0601    Comment to modemType changed to allow multiple
+                        instances of extensionParameter.
+
+   B.2        GEN0202   Comment added to indicate units for Timer.
+
+   B.2        IG1100    Added parentheses to digitMapRange production.
+
+   B.2        IG1100    Added comment to serviceChangeParm,
+                        restricting each parameter to one appearance.
+
+   B.2        IG0601    Added comments making serviceChangeMgcId and
+                        serviceChangeAddress mutually exclusive in
+                        ServiceChangeParm and servChgReplyParm.
+
+   B.2         IGDUB    Added comment to serviceChangeParm indicating
+                        that ServiceChangeMethod and
+                        ServiceChangeReason are required.
+
+   B.2        IG0601    Added Timestamp to servChgReplyParm.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 207]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2        IG0601    Added comment indicating coding of Value for
+                        ServiceChangeReason.
+
+   B.2        IG0601    Modified ServiceChangeAddress to use MId
+                        definition for full address.
+
+   B.2        IG1100    Made returned value optional in
+                        statisticsParameter, to support
+                        auditCapability result.
+
+   B.2        IG1100    Changed topologyDescriptor to allow multiple
+                        triples.
+
+   B.2        IG0601    Added comment forbidding use of a double quote
+                        within a quotedString value.
+
+   B.2        IG1100    Reserved prefixes for new tokens added to
+                        signalParameter and eventParameter, to avoid
+                        collision with package names.
+
+   B.2        IG1100    EmbedToken and EmergencyToken changed to
+                        remove clash with EventBufferToken.
+
+   B.3        IG1100    New section describing hexadecimal octet
+                        encoding.
+
+   B.4        IG1100    New section describing hex octet sequence.
+
+   C          IG1100    Added permission to use Annex C properties in
+                        LocalControl as well as in Local and Remote.
+
+   C          IG0601    Added text making support of all properties of
+                        Annex C optional.
+
+   C           IGDUB    Added directions to reconcile tabulated
+                        formats with allowed types for properties.
+
+   C.1        IG1100    Corrected Q.765 reference to Q.765.5 for
+                        ACodec.
+
+   C.1        IG1100    Deprecated Echocanc codepoint in favour of
+                        package-defined property.
+
+   C.4        ITUPOST   Updated references from Q.2961 to Q.2961.1.
+
+   C.4         IGDUB    Added details on format of VPVC.
+
+   C.9        IG1100    Renamed USI to layer1prot.
+
+
+
+Groves, et al.              Standards Track                   [Page 208]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   C.9        IG1100    Deprecated ECHOCI codepoint in favour of
+                        package-defined property.
+
+   C.9        IG1100    Added new USI property.
+
+   C.11       IG1100    Added m= line tag.
+
+   D.1        IG0601    Added explanation of ALF.
+
+   D.1.5       IGDUB    Expanded text indicating that when trying to
+                        reestablish contact with the previously
+                        controlling MGC the MG uses the Disconnected
+                        method.
+
+   E.1.2      GEN0202   Added missing EventsDescriptor parameters
+                        lines.
+
+   E.1.2      GEN0202   For the Signal Completion event:
+                        - corrected the description of how it is
+                        enabled
+                        - heavily edited the description of the Signal
+                        Identity observed event parameter and added a
+                        type.
+
+   E.1.2       IGDUB    The timeout completion reason for the Signal
+                        Completion event was broadened to include
+                        other circumstances where the signal completed
+                        on its own.
+
+   E.1.2      IG1100    Added signal list ID observed event parameter
+                        to the Signal Completion event.
+
+   E.2.1      IG0601    Added missing read only, read-write
+                        specifications.
+
+   E.2.1      IG0601    Split ProvisionalResponseTimer properties into
+                        one for MG, one for MGC.
+
+   E.3        GEN0202   Added "Designed to be extended only" to
+                        tonegen package description.
+
+   E.4        GEN0202   Added "Designed to be extended only" to
+                        tonedet package description.
+
+   E.4.2      GEN0202   Added type for tone ID observed parameter for
+                        Long Tone Detected event.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 209]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   E.6.2      IG1100    Corrected binary identifier for digit map
+                        completion event to avoid clash with base
+                        package.
+
+   E.6.2      IG1100    Removed procedural text.
+
+   E.6.5      IG1100    Added procedural text indicating where to find
+                        the applicable digit map and indicating the
+                        error to return if the parameter is missing.
+
+   E.6.5      IG0601    Further modified procedural text.
+
+   E.7.3      IG1100    Corrected text identifier for payphone
+                        recognition tone to avoid clash with base
+                        package.
+
+   E.10.5      IGDUB    Provided informative references for tones and
+                        procedures for continuity check.
+
+   E.13       GEN0202   Added note that TDM package could also apply
+                        to other transports.
+
+   E.13.1     IG1100    Changed default for echo cancellation from
+                        "on" to provisioned.
+
+   E.13.1     IG0601    Corrected type for gain property.
+
+   Appendix   TTPOST    Included a number of corrections which were
+      I                 not picked up in H.248.1 Amendment 1 but which
+                        do appear in H.248.1 v2.
+
+Intellectual Property Rights
+
+   The ITU draws attention to the possibility that the practice or
+   implementation of this RFC may involve the use of a claimed
+   Intellectual Property Right.  The ITU takes no position concerning
+   the evidence, validity or applicability of claimed Intellectual
+   Property Rights, whether asserted by ITU members or others outside of
+   the Recommendation development process.
+
+   As of the date of approval of this RFC, the ITU had received notice
+   of intellectual property, protected by patents, which may be required
+   to implement this RFC.  However, implementors are cautioned that this
+   may not represent the latest information and are therefore strongly
+   urged to consult the TSB patent database.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 210]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The IETF has also received notice of intellectual property claims
+   relating to Megaco/H.248.1.  Please consult the IETF IPR
+   announcements at http://www.ietf.org/ipr.html.
+
+Acknowledgments
+
+   Megaco/H.248.1 is the result of hard work by many people in both the
+   IETF and in ITU-T Study Group 16.  This section records those who
+   played a prominent role in ITU-T meetings, on the Megaco list, or
+   both.
+
+   Megaco/H.248 owes a large initial debt to the MGCP protocol (RFC
+   2705), and thus to its authors, Mauricio Arango, Andrew Dugan, Ike
+   Elliott, Christian Huitema, and Scott Pickett.  Flemming Andreasen
+   does not appear on this list of authors, but was a major contributor
+   to the development of both MGCP and Megaco/H.248.1.  RFC 3435 has an
+   extensive acknowledgement of many other people who worked on media
+   gateway control before Megaco got started.
+
+   The authors of the first Megaco RFCs (2805, then 3015) were Fernando
+   Cuervo, Nancy Greene, Abdallah Rayhan, Christian Huitema, Brian
+   Rosen, and John Segers.  Christian Groves conceived and was editor of
+   Annex C.  The people most active on the Megaco list in the period
+   leading up to the completion of RFC 2885 were Brian Rosen, Tom
+   Taylor, Nancy Greene, Christian Huitema, Matt Holdrege, Chip Sharp,
+   John Segers, Michael Thomas, Henry Sinnreich, and Paul Sijben.  The
+   people who sacrificed sleep and meals to complete the massive amount
+   of work required in the decisive Study Group 16 meeting of February,
+   2000, were Michael Brown, Ranga Dendi, Larry Forni, Glen Freundlich,
+   Christian Groves, Alf Heidemark, Steve Magnell, Selvam Rengasami,
+   Rich Rubin, Klaus Sambor, John Segers, Chip Sharp, Tom Taylor, and
+   Stephen Terrill.
+
+   The most active people on the Megaco list in the period since the
+   February 2000 have been Tom Taylor, Brian Rosen, Christian Groves,
+   Madhu Babu Brahmanapally, Troy Cauble, Terry Anderson, Chuong Nguyen,
+   and Kevin Boyle, but many other people have been regular
+   contributors.  Brian Rosen did tremendous service in putting together
+   the Megaco interoperability tests.  On the Study Group 16 side, the
+   editorial team for the final revised document in February, 2002
+   included Christian Groves, Marcello Pantaleo, Terry Anderson, Peter
+   Leis, Kevin Boyle, and Tom Taylor.
+
+   Tom Taylor as Megaco Chair managed the day to day operation of the
+   Megaco list, with Brian Rosen taking an equal share of the burden for
+   most of the last three years.  Glen Freundlich as the Study Group 16
+   Rapporteur ran the ITU-T meetings and ensured that all of the work at
+   hand was completed.  Without Glen's determination the Megaco/H.248
+
+
+
+Groves, et al.              Standards Track                   [Page 211]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   standard would have taken at least half a year longer to produce.
+   Christian Groves filled in ably as Rapporteur when Glen could no
+   longer take part.
+
+Authors' Addresses
+
+   Terry L. Anderson
+   24 Hill St
+   Bernardsville, NJ 07924
+   USA
+
+   EMail: tlatla@verizon.net
+
+
+   Christian Groves
+   Ericsson AsiaPacificLab Australia
+   37/360 Elizabeth St
+   Melbourne, Victoria 3000
+   Australia
+
+   EMail: Christian.Groves@ericsson.com.au
+
+
+   Marcello Pantaleo
+   Ericsson Eurolab Deuschland
+   Ericsson Allee 1
+   52134 Herzogenrath, Germany
+
+   EMail: Marcello.Pantaleo@eed.ericsson.se
+
+
+   Tom Taylor
+   Nortel Networks
+   1852 Lorraine Ave,
+   Ottawa, Ontario
+   Canada K1H 6Z8
+
+   Phone: +1 613 736 0961
+   EMail: taylor@nortelnetworks.com
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 212]
+\f
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+Full Copyright Statement
+
+   Copyright (C) The Internet Society (2003).  All Rights Reserved.
+
+   This document and translations of it may be copied and furnished to
+   others, and derivative works that comment on or otherwise explain it
+   or assist in its implementation may be prepared, copied, published
+   and distributed, in whole or in part, without restriction of any
+   kind, provided that the above copyright notice and this paragraph are
+   included on all such copies and derivative works.  However, this
+   document itself may not be modified in any way, such as by removing
+   the copyright notice or references to the Internet Society or other
+   Internet organizations, except as needed for the purpose of
+   developing Internet standards in which case the procedures for
+   copyrights defined in the Internet Standards process must be
+   followed, or as required to translate it into languages other than
+   English.
+
+   The limited permissions granted above are perpetual and will not be
+   revoked by the Internet Society or its successors or assigns.
+
+   This document and the information contained herein is provided on an
+   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+   Funding for the RFC Editor function is currently provided by the
+   Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 213]
+\f
diff --git a/examples/rfc4511.txt b/examples/rfc4511.txt
new file mode 100644 (file)
index 0000000..8041f30
--- /dev/null
@@ -0,0 +1,3811 @@
+
+
+
+
+
+
+Network Working Group                                J. Sermersheim, Ed.
+Request for Comments: 4511                                  Novell, Inc.
+Obsoletes: 2251, 2830, 3771                                    June 2006
+Category: Standards Track
+
+
+      Lightweight Directory Access Protocol (LDAP): The Protocol
+
+Status of This Memo
+
+   This document specifies an Internet standards track protocol for the
+   Internet community, and requests discussion and suggestions for
+   improvements.  Please refer to the current edition of the "Internet
+   Official Protocol Standards" (STD 1) for the standardization state
+   and status of this protocol.  Distribution of this memo is unlimited.
+
+Copyright Notice
+
+   Copyright (C) The Internet Society (2006).
+
+Abstract
+
+   This document describes the protocol elements, along with their
+   semantics and encodings, of the Lightweight Directory Access Protocol
+   (LDAP).  LDAP provides access to distributed directory services that
+   act in accordance with X.500 data and service models.  These protocol
+   elements are based on those described in the X.500 Directory Access
+   Protocol (DAP).
+
+Table of Contents
+
+   1. Introduction ....................................................3
+      1.1. Relationship to Other LDAP Specifications ..................3
+   2. Conventions .....................................................3
+   3. Protocol Model ..................................................4
+      3.1. Operation and LDAP Message Layer Relationship ..............5
+   4. Elements of Protocol ............................................5
+      4.1. Common Elements ............................................5
+           4.1.1. Message Envelope ....................................6
+           4.1.2. String Types ........................................7
+           4.1.3. Distinguished Name and Relative Distinguished Name ..8
+           4.1.4. Attribute Descriptions ..............................8
+           4.1.5. Attribute Value .....................................8
+           4.1.6. Attribute Value Assertion ...........................9
+           4.1.7. Attribute and PartialAttribute ......................9
+           4.1.8. Matching Rule Identifier ...........................10
+           4.1.9. Result Message .....................................10
+           4.1.10. Referral ..........................................12
+
+
+
+Sermersheim                 Standards Track                     [Page 1]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+           4.1.11. Controls ..........................................14
+      4.2. Bind Operation ............................................16
+           4.2.1. Processing of the Bind Request .....................17
+           4.2.2. Bind Response ......................................18
+      4.3. Unbind Operation ..........................................18
+      4.4. Unsolicited Notification ..................................19
+           4.4.1. Notice of Disconnection ............................19
+      4.5. Search Operation ..........................................20
+           4.5.1. Search Request .....................................20
+           4.5.2. Search Result ......................................27
+           4.5.3. Continuation References in the Search Result .......28
+      4.6. Modify Operation ..........................................31
+      4.7. Add Operation .............................................33
+      4.8. Delete Operation ..........................................34
+      4.9. Modify DN Operation .......................................34
+      4.10. Compare Operation ........................................36
+      4.11. Abandon Operation ........................................36
+      4.12. Extended Operation .......................................37
+      4.13. IntermediateResponse Message .............................39
+           4.13.1. Usage with LDAP ExtendedRequest and
+                   ExtendedResponse ..................................40
+           4.13.2. Usage with LDAP Request Controls ..................40
+      4.14. StartTLS Operation .......................................40
+           4.14.1. StartTLS Request ..................................40
+           4.14.2. StartTLS Response .................................41
+           4.14.3. Removal of the TLS Layer ..........................41
+   5. Protocol Encoding, Connection, and Transfer ....................42
+      5.1. Protocol Encoding .........................................42
+      5.2. Transmission Control Protocol (TCP) .......................43
+      5.3. Termination of the LDAP session ...........................43
+   6. Security Considerations ........................................43
+   7. Acknowledgements ...............................................45
+   8. Normative References ...........................................46
+   9. Informative References .........................................48
+   10. IANA Considerations ...........................................48
+   Appendix A. LDAP Result Codes .....................................49
+      A.1. Non-Error Result Codes ....................................49
+      A.2. Result Codes ..............................................49
+   Appendix B. Complete ASN.1 Definition .............................54
+   Appendix C. Changes ...............................................60
+      C.1. Changes Made to RFC 2251 ..................................60
+      C.2. Changes Made to RFC 2830 ..................................66
+      C.3. Changes Made to RFC 3771 ..................................66
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                     [Page 2]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+1.  Introduction
+
+   The Directory is "a collection of open systems cooperating to provide
+   directory services" [X.500].  A directory user, which may be a human
+   or other entity, accesses the Directory through a client (or
+   Directory User Agent (DUA)).  The client, on behalf of the directory
+   user, interacts with one or more servers (or Directory System Agents
+   (DSA)).  Clients interact with servers using a directory access
+   protocol.
+
+   This document details the protocol elements of the Lightweight
+   Directory Access Protocol (LDAP), along with their semantics.
+   Following the description of protocol elements, it describes the way
+   in which the protocol elements are encoded and transferred.
+
+1.1.  Relationship to Other LDAP Specifications
+
+   This document is an integral part of the LDAP Technical Specification
+   [RFC4510], which obsoletes the previously defined LDAP technical
+   specification, RFC 3377, in its entirety.
+
+   This document, together with [RFC4510], [RFC4513], and [RFC4512],
+   obsoletes RFC 2251 in its entirety.  Section 3.3 is obsoleted by
+   [RFC4510].  Sections 4.2.1 (portions) and 4.2.2 are obsoleted by
+   [RFC4513].  Sections 3.2, 3.4, 4.1.3 (last paragraph), 4.1.4, 4.1.5,
+   4.1.5.1, 4.1.9 (last paragraph), 5.1, 6.1, and 6.2 (last paragraph)
+   are obsoleted by [RFC4512].  The remainder of RFC 2251 is obsoleted
+   by this document.  Appendix C.1 summarizes substantive changes in the
+   remainder.
+
+   This document obsoletes RFC 2830, Sections 2 and 4.  The remainder of
+   RFC 2830 is obsoleted by [RFC4513].  Appendix C.2 summarizes
+   substantive changes to the remaining sections.
+
+   This document also obsoletes RFC 3771 in entirety.
+
+2.  Conventions
+
+   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+   "SHOULD", "SHOULD NOT", "RECOMMENDED", and "MAY" in this document are
+   to be interpreted as described in [RFC2119].
+
+   Character names in this document use the notation for code points and
+   names from the Unicode Standard [Unicode].  For example, the letter
+   "a" may be represented as either <U+0061> or <LATIN SMALL LETTER A>.
+
+
+
+
+
+
+Sermersheim                 Standards Track                     [Page 3]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Note: a glossary of terms used in Unicode can be found in [Glossary].
+   Information on the Unicode character encoding model can be found in
+   [CharModel].
+
+   The term "transport connection" refers to the underlying transport
+   services used to carry the protocol exchange, as well as associations
+   established by these services.
+
+   The term "TLS layer" refers to Transport Layer Security (TLS)
+   services used in providing security services, as well as associations
+   established by these services.
+
+   The term "SASL layer" refers to Simply Authentication and Security
+   Layer (SASL) services used in providing security services, as well as
+   associations established by these services.
+
+   The term "LDAP message layer" refers to the LDAP Message Protocol
+   Data Unit (PDU) services used in providing directory services, as
+   well as associations established by these services.
+
+   The term "LDAP session" refers to combined services (transport
+   connection, TLS layer, SASL layer, LDAP message layer) and their
+   associations.
+
+   See the table in Section 5 for an illustration of these four terms.
+
+3.  Protocol Model
+
+   The general model adopted by this protocol is one of clients
+   performing protocol operations against servers.  In this model, a
+   client transmits a protocol request describing the operation to be
+   performed to a server.  The server is then responsible for performing
+   the necessary operation(s) in the Directory.  Upon completion of an
+   operation, the server typically returns a response containing
+   appropriate data to the requesting client.
+
+   Protocol operations are generally independent of one another.  Each
+   operation is processed as an atomic action, leaving the directory in
+   a consistent state.
+
+   Although servers are required to return responses whenever such
+   responses are defined in the protocol, there is no requirement for
+   synchronous behavior on the part of either clients or servers.
+   Requests and responses for multiple operations generally may be
+   exchanged between a client and server in any order.  If required,
+   synchronous behavior may be controlled by client applications.
+
+
+
+
+
+Sermersheim                 Standards Track                     [Page 4]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The core protocol operations defined in this document can be mapped
+   to a subset of the X.500 (1993) Directory Abstract Service [X.511].
+   However, there is not a one-to-one mapping between LDAP operations
+   and X.500 Directory Access Protocol (DAP) operations.  Server
+   implementations acting as a gateway to X.500 directories may need to
+   make multiple DAP requests to service a single LDAP request.
+
+3.1.  Operation and LDAP Message Layer Relationship
+
+   Protocol operations are exchanged at the LDAP message layer.  When
+   the transport connection is closed, any uncompleted operations at the
+   LDAP message layer are abandoned (when possible) or are completed
+   without transmission of the response (when abandoning them is not
+   possible).  Also, when the transport connection is closed, the client
+   MUST NOT assume that any uncompleted update operations have succeeded
+   or failed.
+
+4.  Elements of Protocol
+
+   The protocol is described using Abstract Syntax Notation One
+   ([ASN.1]) and is transferred using a subset of ASN.1 Basic Encoding
+   Rules ([BER]).  Section 5 specifies how the protocol elements are
+   encoded and transferred.
+
+   In order to support future extensions to this protocol, extensibility
+   is implied where it is allowed per ASN.1 (i.e., sequence, set,
+   choice, and enumerated types are extensible).  In addition, ellipses
+   (...) have been supplied in ASN.1 types that are explicitly
+   extensible as discussed in [RFC4520].  Because of the implied
+   extensibility, clients and servers MUST (unless otherwise specified)
+   ignore trailing SEQUENCE components whose tags they do not recognize.
+
+   Changes to the protocol other than through the extension mechanisms
+   described here require a different version number.  A client
+   indicates the version it is using as part of the BindRequest,
+   described in Section 4.2.  If a client has not sent a Bind, the
+   server MUST assume the client is using version 3 or later.
+
+   Clients may attempt to determine the protocol versions a server
+   supports by reading the 'supportedLDAPVersion' attribute from the
+   root DSE (DSA-Specific Entry) [RFC4512].
+
+4.1.  Common Elements
+
+   This section describes the LDAPMessage envelope Protocol Data Unit
+   (PDU) format, as well as data type definitions, which are used in the
+   protocol operations.
+
+
+
+
+Sermersheim                 Standards Track                     [Page 5]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.1.1.  Message Envelope
+
+   For the purposes of protocol exchanges, all protocol operations are
+   encapsulated in a common envelope, the LDAPMessage, which is defined
+   as follows:
+
+        LDAPMessage ::= SEQUENCE {
+             messageID       MessageID,
+             protocolOp      CHOICE {
+                  bindRequest           BindRequest,
+                  bindResponse          BindResponse,
+                  unbindRequest         UnbindRequest,
+                  searchRequest         SearchRequest,
+                  searchResEntry        SearchResultEntry,
+                  searchResDone         SearchResultDone,
+                  searchResRef          SearchResultReference,
+                  modifyRequest         ModifyRequest,
+                  modifyResponse        ModifyResponse,
+                  addRequest            AddRequest,
+                  addResponse           AddResponse,
+                  delRequest            DelRequest,
+                  delResponse           DelResponse,
+                  modDNRequest          ModifyDNRequest,
+                  modDNResponse         ModifyDNResponse,
+                  compareRequest        CompareRequest,
+                  compareResponse       CompareResponse,
+                  abandonRequest        AbandonRequest,
+                  extendedReq           ExtendedRequest,
+                  extendedResp          ExtendedResponse,
+                  ...,
+                  intermediateResponse  IntermediateResponse },
+             controls       [0] Controls OPTIONAL }
+
+        MessageID ::= INTEGER (0 ..  maxInt)
+
+        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
+
+   The ASN.1 type Controls is defined in Section 4.1.11.
+
+   The function of the LDAPMessage is to provide an envelope containing
+   common fields required in all protocol exchanges.  At this time, the
+   only common fields are the messageID and the controls.
+
+   If the server receives an LDAPMessage from the client in which the
+   LDAPMessage SEQUENCE tag cannot be recognized, the messageID cannot
+   be parsed, the tag of the protocolOp is not recognized as a request,
+   or the encoding structures or lengths of data fields are found to be
+   incorrect, then the server SHOULD return the Notice of Disconnection
+
+
+
+Sermersheim                 Standards Track                     [Page 6]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   described in Section 4.4.1, with the resultCode set to protocolError,
+   and MUST immediately terminate the LDAP session as described in
+   Section 5.3.
+
+   In other cases where the client or server cannot parse an LDAP PDU,
+   it SHOULD abruptly terminate the LDAP session (Section 5.3) where
+   further communication (including providing notice) would be
+   pernicious.  Otherwise, server implementations MUST return an
+   appropriate response to the request, with the resultCode set to
+   protocolError.
+
+4.1.1.1.  MessageID
+
+   All LDAPMessage envelopes encapsulating responses contain the
+   messageID value of the corresponding request LDAPMessage.
+
+   The messageID of a request MUST have a non-zero value different from
+   the messageID of any other request in progress in the same LDAP
+   session.  The zero value is reserved for the unsolicited notification
+   message.
+
+   Typical clients increment a counter for each request.
+
+   A client MUST NOT send a request with the same messageID as an
+   earlier request in the same LDAP session unless it can be determined
+   that the server is no longer servicing the earlier request (e.g.,
+   after the final response is received, or a subsequent Bind
+   completes).  Otherwise, the behavior is undefined.  For this purpose,
+   note that Abandon and successfully abandoned operations do not send
+   responses.
+
+4.1.2.  String Types
+
+   The LDAPString is a notational convenience to indicate that, although
+   strings of LDAPString type encode as ASN.1 OCTET STRING types, the
+   [ISO10646] character set (a superset of [Unicode]) is used, encoded
+   following the UTF-8 [RFC3629] algorithm.  Note that Unicode
+   characters U+0000 through U+007F are the same as ASCII 0 through 127,
+   respectively, and have the same single octet UTF-8 encoding.  Other
+   Unicode characters have a multiple octet UTF-8 encoding.
+
+        LDAPString ::= OCTET STRING -- UTF-8 encoded,
+                                    -- [ISO10646] characters
+
+   The LDAPOID is a notational convenience to indicate that the
+   permitted value of this string is a (UTF-8 encoded) dotted-decimal
+   representation of an OBJECT IDENTIFIER.  Although an LDAPOID is
+
+
+
+
+Sermersheim                 Standards Track                     [Page 7]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   encoded as an OCTET STRING, values are limited to the definition of
+   <numericoid> given in Section 1.4 of [RFC4512].
+
+        LDAPOID ::= OCTET STRING -- Constrained to <numericoid>
+                                 -- [RFC4512]
+
+   For example,
+
+        1.3.6.1.4.1.1466.1.2.3
+
+4.1.3.  Distinguished Name and Relative Distinguished Name
+
+   An LDAPDN is defined to be the representation of a Distinguished Name
+   (DN) after encoding according to the specification in [RFC4514].
+
+        LDAPDN ::= LDAPString
+                   -- Constrained to <distinguishedName> [RFC4514]
+
+   A RelativeLDAPDN is defined to be the representation of a Relative
+   Distinguished Name (RDN) after encoding according to the
+   specification in [RFC4514].
+
+        RelativeLDAPDN ::= LDAPString
+                           -- Constrained to <name-component> [RFC4514]
+
+4.1.4.  Attribute Descriptions
+
+   The definition and encoding rules for attribute descriptions are
+   defined in Section 2.5 of [RFC4512].  Briefly, an attribute
+   description is an attribute type and zero or more options.
+
+        AttributeDescription ::= LDAPString
+                                -- Constrained to <attributedescription>
+                                -- [RFC4512]
+
+4.1.5.  Attribute Value
+
+   A field of type AttributeValue is an OCTET STRING containing an
+   encoded attribute value.  The attribute value is encoded according to
+   the LDAP-specific encoding definition of its corresponding syntax.
+   The LDAP-specific encoding definitions for different syntaxes and
+   attribute types may be found in other documents and in particular
+   [RFC4517].
+
+        AttributeValue ::= OCTET STRING
+
+
+
+
+
+
+Sermersheim                 Standards Track                     [Page 8]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Note that there is no defined limit on the size of this encoding;
+   thus, protocol values may include multi-megabyte attribute values
+   (e.g., photographs).
+
+   Attribute values may be defined that have arbitrary and non-printable
+   syntax.  Implementations MUST NOT display or attempt to decode an
+   attribute value if its syntax is not known.  The implementation may
+   attempt to discover the subschema of the source entry and to retrieve
+   the descriptions of 'attributeTypes' from it [RFC4512].
+
+   Clients MUST only send attribute values in a request that are valid
+   according to the syntax defined for the attributes.
+
+4.1.6.  Attribute Value Assertion
+
+   The AttributeValueAssertion (AVA) type definition is similar to the
+   one in the X.500 Directory standards.  It contains an attribute
+   description and a matching rule ([RFC4512], Section 4.1.3) assertion
+   value suitable for that type.  Elements of this type are typically
+   used to assert that the value in assertionValue matches a value of an
+   attribute.
+
+        AttributeValueAssertion ::= SEQUENCE {
+             attributeDesc   AttributeDescription,
+             assertionValue  AssertionValue }
+
+        AssertionValue ::= OCTET STRING
+
+   The syntax of the AssertionValue depends on the context of the LDAP
+   operation being performed.  For example, the syntax of the EQUALITY
+   matching rule for an attribute is used when performing a Compare
+   operation.  Often this is the same syntax used for values of the
+   attribute type, but in some cases the assertion syntax differs from
+   the value syntax.  See objectIdentiferFirstComponentMatch in
+   [RFC4517] for an example.
+
+4.1.7.  Attribute and PartialAttribute
+
+   Attributes and partial attributes consist of an attribute description
+   and attribute values.  A PartialAttribute allows zero values, while
+   Attribute requires at least one value.
+
+        PartialAttribute ::= SEQUENCE {
+             type       AttributeDescription,
+             vals       SET OF value AttributeValue }
+
+
+
+
+
+
+Sermersheim                 Standards Track                     [Page 9]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+        Attribute ::= PartialAttribute(WITH COMPONENTS {
+             ...,
+             vals (SIZE(1..MAX))})
+
+   No two of the attribute values may be equivalent as described by
+   Section 2.2 of [RFC4512].  The set of attribute values is unordered.
+   Implementations MUST NOT rely upon the ordering being repeatable.
+
+4.1.8.  Matching Rule Identifier
+
+   Matching rules are defined in Section 4.1.3 of [RFC4512].  A matching
+   rule is identified in the protocol by the printable representation of
+   either its <numericoid> or one of its short name descriptors
+   [RFC4512], e.g., 'caseIgnoreMatch' or '2.5.13.2'.
+
+        MatchingRuleId ::= LDAPString
+
+4.1.9.  Result Message
+
+   The LDAPResult is the construct used in this protocol to return
+   success or failure indications from servers to clients.  To various
+   requests, servers will return responses containing the elements found
+   in LDAPResult to indicate the final status of the protocol operation
+   request.
+
+        LDAPResult ::= SEQUENCE {
+             resultCode         ENUMERATED {
+                  success                      (0),
+                  operationsError              (1),
+                  protocolError                (2),
+                  timeLimitExceeded            (3),
+                  sizeLimitExceeded            (4),
+                  compareFalse                 (5),
+                  compareTrue                  (6),
+                  authMethodNotSupported       (7),
+                  strongerAuthRequired         (8),
+                       -- 9 reserved --
+                  referral                     (10),
+                  adminLimitExceeded           (11),
+                  unavailableCriticalExtension (12),
+                  confidentialityRequired      (13),
+                  saslBindInProgress           (14),
+                  noSuchAttribute              (16),
+                  undefinedAttributeType       (17),
+                  inappropriateMatching        (18),
+                  constraintViolation          (19),
+                  attributeOrValueExists       (20),
+                  invalidAttributeSyntax       (21),
+
+
+
+Sermersheim                 Standards Track                    [Page 10]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+                       -- 22-31 unused --
+                  noSuchObject                 (32),
+                  aliasProblem                 (33),
+                  invalidDNSyntax              (34),
+                       -- 35 reserved for undefined isLeaf --
+                  aliasDereferencingProblem    (36),
+                       -- 37-47 unused --
+                  inappropriateAuthentication  (48),
+                  invalidCredentials           (49),
+                  insufficientAccessRights     (50),
+                  busy                         (51),
+                  unavailable                  (52),
+                  unwillingToPerform           (53),
+                  loopDetect                   (54),
+                       -- 55-63 unused --
+                  namingViolation              (64),
+                  objectClassViolation         (65),
+                  notAllowedOnNonLeaf          (66),
+                  notAllowedOnRDN              (67),
+                  entryAlreadyExists           (68),
+                  objectClassModsProhibited    (69),
+                       -- 70 reserved for CLDAP --
+                  affectsMultipleDSAs          (71),
+                       -- 72-79 unused --
+                  other                        (80),
+                  ...  },
+             matchedDN          LDAPDN,
+             diagnosticMessage  LDAPString,
+             referral           [3] Referral OPTIONAL }
+
+   The resultCode enumeration is extensible as defined in Section 3.8 of
+   [RFC4520].  The meanings of the listed result codes are given in
+   Appendix A.  If a server detects multiple errors for an operation,
+   only one result code is returned.  The server should return the
+   result code that best indicates the nature of the error encountered.
+   Servers may return substituted result codes to prevent unauthorized
+   disclosures.
+
+   The diagnosticMessage field of this construct may, at the server's
+   option, be used to return a string containing a textual, human-
+   readable diagnostic message (terminal control and page formatting
+   characters should be avoided).  As this diagnostic message is not
+   standardized, implementations MUST NOT rely on the values returned.
+   Diagnostic messages typically supplement the resultCode with
+   additional information.  If the server chooses not to return a
+   textual diagnostic, the diagnosticMessage field MUST be empty.
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 11]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   For certain result codes (typically, but not restricted to
+   noSuchObject, aliasProblem, invalidDNSyntax, and
+   aliasDereferencingProblem), the matchedDN field is set (subject to
+   access controls) to the name of the last entry (object or alias) used
+   in finding the target (or base) object.  This will be a truncated
+   form of the provided name or, if an alias was dereferenced while
+   attempting to locate the entry, of the resulting name.  Otherwise,
+   the matchedDN field is empty.
+
+4.1.10.  Referral
+
+   The referral result code indicates that the contacted server cannot
+   or will not perform the operation and that one or more other servers
+   may be able to.  Reasons for this include:
+
+   - The target entry of the request is not held locally, but the server
+     has knowledge of its possible existence elsewhere.
+
+   - The operation is restricted on this server -- perhaps due to a
+     read-only copy of an entry to be modified.
+
+   The referral field is present in an LDAPResult if the resultCode is
+   set to referral, and it is absent with all other result codes.  It
+   contains one or more references to one or more servers or services
+   that may be accessed via LDAP or other protocols.  Referrals can be
+   returned in response to any operation request (except Unbind and
+   Abandon, which do not have responses).  At least one URI MUST be
+   present in the Referral.
+
+   During a Search operation, after the baseObject is located, and
+   entries are being evaluated, the referral is not returned.  Instead,
+   continuation references, described in Section 4.5.3, are returned
+   when other servers would need to be contacted to complete the
+   operation.
+
+        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
+
+        URI ::= LDAPString     -- limited to characters permitted in
+                               -- URIs
+
+   If the client wishes to progress the operation, it contacts one of
+   the supported services found in the referral.  If multiple URIs are
+   present, the client assumes that any supported URI may be used to
+   progress the operation.
+
+   Clients that follow referrals MUST ensure that they do not loop
+   between servers.  They MUST NOT repeatedly contact the same server
+   for the same request with the same parameters.  Some clients use a
+
+
+
+Sermersheim                 Standards Track                    [Page 12]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   counter that is incremented each time referral handling occurs for an
+   operation, and these kinds of clients MUST be able to handle at least
+   ten nested referrals while progressing the operation.
+
+   A URI for a server implementing LDAP and accessible via TCP/IP (v4 or
+   v6) [RFC793][RFC791] is written as an LDAP URL according to
+   [RFC4516].
+
+   Referral values that are LDAP URLs follow these rules:
+
+   - If an alias was dereferenced, the <dn> part of the LDAP URL MUST be
+     present, with the new target object name.
+
+   - It is RECOMMENDED that the <dn> part be present to avoid ambiguity.
+
+   - If the <dn> part is present, the client uses this name in its next
+     request to progress the operation, and if it is not present the
+     client uses the same name as in the original request.
+
+   - Some servers (e.g., participating in distributed indexing) may
+     provide a different filter in a URL of a referral for a Search
+     operation.
+
+   - If the <filter> part of the LDAP URL is present, the client uses
+     this filter in its next request to progress this Search, and if it
+     is not present the client uses the same filter as it used for that
+     Search.
+
+   - For Search, it is RECOMMENDED that the <scope> part be present to
+     avoid ambiguity.
+
+   - If the <scope> part is missing, the scope of the original Search is
+     used by the client to progress the operation.
+
+   - Other aspects of the new request may be the same as or different
+     from the request that generated the referral.
+
+   Other kinds of URIs may be returned.  The syntax and semantics of
+   such URIs is left to future specifications.  Clients may ignore URIs
+   that they do not support.
+
+   UTF-8 encoded characters appearing in the string representation of a
+   DN, search filter, or other fields of the referral value may not be
+   legal for URIs (e.g., spaces) and MUST be escaped using the % method
+   in [RFC3986].
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 13]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.1.11.  Controls
+
+   Controls provide a mechanism whereby the semantics and arguments of
+   existing LDAP operations may be extended.  One or more controls may
+   be attached to a single LDAP message.  A control only affects the
+   semantics of the message it is attached to.
+
+   Controls sent by clients are termed 'request controls', and those
+   sent by servers are termed 'response controls'.
+
+        Controls ::= SEQUENCE OF control Control
+
+        Control ::= SEQUENCE {
+             controlType             LDAPOID,
+             criticality             BOOLEAN DEFAULT FALSE,
+             controlValue            OCTET STRING OPTIONAL }
+
+   The controlType field is the dotted-decimal representation of an
+   OBJECT IDENTIFIER that uniquely identifies the control.  This
+   provides unambiguous naming of controls.  Often, response control(s)
+   solicited by a request control share controlType values with the
+   request control.
+
+   The criticality field only has meaning in controls attached to
+   request messages (except UnbindRequest).  For controls attached to
+   response messages and the UnbindRequest, the criticality field SHOULD
+   be FALSE, and MUST be ignored by the receiving protocol peer.  A
+   value of TRUE indicates that it is unacceptable to perform the
+   operation without applying the semantics of the control.
+   Specifically, the criticality field is applied as follows:
+
+   - If the server does not recognize the control type, determines that
+     it is not appropriate for the operation, or is otherwise unwilling
+     to perform the operation with the control, and if the criticality
+     field is TRUE, the server MUST NOT perform the operation, and for
+     operations that have a response message, it MUST return with the
+     resultCode set to unavailableCriticalExtension.
+
+   - If the server does not recognize the control type, determines that
+     it is not appropriate for the operation, or is otherwise unwilling
+     to perform the operation with the control, and if the criticality
+     field is FALSE, the server MUST ignore the control.
+
+   - Regardless of criticality, if a control is applied to an
+     operation, it is applied consistently and impartially to the
+     entire operation.
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 14]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The controlValue may contain information associated with the
+   controlType.  Its format is defined by the specification of the
+   control.  Implementations MUST be prepared to handle arbitrary
+   contents of the controlValue octet string, including zero bytes.  It
+   is absent only if there is no value information that is associated
+   with a control of its type.  When a controlValue is defined in terms
+   of ASN.1, and BER-encoded according to Section 5.1, it also follows
+   the extensibility rules in Section 4.
+
+   Servers list the controlType of request controls they recognize in
+   the 'supportedControl' attribute in the root DSE (Section 5.1 of
+   [RFC4512]).
+
+   Controls SHOULD NOT be combined unless the semantics of the
+   combination has been specified.  The semantics of control
+   combinations, if specified, are generally found in the control
+   specification most recently published.  When a combination of
+   controls is encountered whose semantics are invalid, not specified
+   (or not known), the message is considered not well-formed; thus, the
+   operation fails with protocolError.  Controls with a criticality of
+   FALSE may be ignored in order to arrive at a valid combination.
+   Additionally, unless order-dependent semantics are given in a
+   specification, the order of a combination of controls in the SEQUENCE
+   is ignored.  Where the order is to be ignored but cannot be ignored
+   by the server, the message is considered not well-formed, and the
+   operation fails with protocolError.  Again, controls with a
+   criticality of FALSE may be ignored in order to arrive at a valid
+   combination.
+
+   This document does not specify any controls.  Controls may be
+   specified in other documents.  Documents detailing control extensions
+   are to provide for each control:
+
+   - the OBJECT IDENTIFIER assigned to the control,
+
+   - direction as to what value the sender should provide for the
+     criticality field (note: the semantics of the criticality field are
+     defined above should not be altered by the control's
+     specification),
+
+   - whether the controlValue field is present, and if so, the format of
+     its contents,
+
+   - the semantics of the control, and
+
+   - optionally, semantics regarding the combination of the control with
+     other controls.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 15]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.2.  Bind Operation
+
+   The function of the Bind operation is to allow authentication
+   information to be exchanged between the client and server.  The Bind
+   operation should be thought of as the "authenticate" operation.
+   Operational, authentication, and security-related semantics of this
+   operation are given in [RFC4513].
+
+   The Bind request is defined as follows:
+
+        BindRequest ::= [APPLICATION 0] SEQUENCE {
+             version                 INTEGER (1 ..  127),
+             name                    LDAPDN,
+             authentication          AuthenticationChoice }
+
+        AuthenticationChoice ::= CHOICE {
+             simple                  [0] OCTET STRING,
+                                     -- 1 and 2 reserved
+             sasl                    [3] SaslCredentials,
+             ...  }
+
+        SaslCredentials ::= SEQUENCE {
+             mechanism               LDAPString,
+             credentials             OCTET STRING OPTIONAL }
+
+   Fields of the BindRequest are:
+
+   - version: A version number indicating the version of the protocol to
+     be used at the LDAP message layer.  This document describes version
+     3 of the protocol.  There is no version negotiation.  The client
+     sets this field to the version it desires.  If the server does not
+     support the specified version, it MUST respond with a BindResponse
+     where the resultCode is set to protocolError.
+
+   - name: If not empty, the name of the Directory object that the
+     client wishes to bind as.  This field may take on a null value (a
+     zero-length string) for the purposes of anonymous binds ([RFC4513],
+     Section 5.1) or when using SASL [RFC4422] authentication
+     ([RFC4513], Section 5.2).  Where the server attempts to locate the
+     named object, it SHALL NOT perform alias dereferencing.
+
+   - authentication: Information used in authentication.  This type is
+     extensible as defined in Section 3.7 of [RFC4520].  Servers that do
+     not support a choice supplied by a client return a BindResponse
+     with the resultCode set to authMethodNotSupported.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 16]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+     Textual passwords (consisting of a character sequence with a known
+     character set and encoding) transferred to the server using the
+     simple AuthenticationChoice SHALL be transferred as UTF-8 [RFC3629]
+     encoded [Unicode].  Prior to transfer, clients SHOULD prepare text
+     passwords as "query" strings by applying the SASLprep [RFC4013]
+     profile of the stringprep [RFC3454] algorithm.  Passwords
+     consisting of other data (such as random octets) MUST NOT be
+     altered.  The determination of whether a password is textual is a
+     local client matter.
+
+4.2.1.  Processing of the Bind Request
+
+   Before processing a BindRequest, all uncompleted operations MUST
+   either complete or be abandoned.  The server may either wait for the
+   uncompleted operations to complete, or abandon them.  The server then
+   proceeds to authenticate the client in either a single-step or
+   multi-step Bind process.  Each step requires the server to return a
+   BindResponse to indicate the status of authentication.
+
+   After sending a BindRequest, clients MUST NOT send further LDAP PDUs
+   until receiving the BindResponse.  Similarly, servers SHOULD NOT
+   process or respond to requests received while processing a
+   BindRequest.
+
+   If the client did not bind before sending a request and receives an
+   operationsError to that request, it may then send a BindRequest.  If
+   this also fails or the client chooses not to bind on the existing
+   LDAP session, it may terminate the LDAP session, re-establish it, and
+   begin again by first sending a BindRequest.  This will aid in
+   interoperating with servers implementing other versions of LDAP.
+
+   Clients may send multiple Bind requests to change the authentication
+   and/or security associations or to complete a multi-stage Bind
+   process.  Authentication from earlier binds is subsequently ignored.
+
+   For some SASL authentication mechanisms, it may be necessary for the
+   client to invoke the BindRequest multiple times ([RFC4513], Section
+   5.2).  Clients MUST NOT invoke operations between two Bind requests
+   made as part of a multi-stage Bind.
+
+   A client may abort a SASL bind negotiation by sending a BindRequest
+   with a different value in the mechanism field of SaslCredentials, or
+   an AuthenticationChoice other than sasl.
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 17]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   If the client sends a BindRequest with the sasl mechanism field as an
+   empty string, the server MUST return a BindResponse with the
+   resultCode set to authMethodNotSupported.  This will allow the client
+   to abort a negotiation if it wishes to try again with the same SASL
+   mechanism.
+
+4.2.2.  Bind Response
+
+   The Bind response is defined as follows.
+
+        BindResponse ::= [APPLICATION 1] SEQUENCE {
+             COMPONENTS OF LDAPResult,
+             serverSaslCreds    [7] OCTET STRING OPTIONAL }
+
+   BindResponse consists simply of an indication from the server of the
+   status of the client's request for authentication.
+
+   A successful Bind operation is indicated by a BindResponse with a
+   resultCode set to success.  Otherwise, an appropriate result code is
+   set in the BindResponse.  For BindResponse, the protocolError result
+   code may be used to indicate that the version number supplied by the
+   client is unsupported.
+
+   If the client receives a BindResponse where the resultCode is set to
+   protocolError, it is to assume that the server does not support this
+   version of LDAP.  While the client may be able proceed with another
+   version of this protocol (which may or may not require closing and
+   re-establishing the transport connection), how to proceed with
+   another version of this protocol is beyond the scope of this
+   document.  Clients that are unable or unwilling to proceed SHOULD
+   terminate the LDAP session.
+
+   The serverSaslCreds field is used as part of a SASL-defined bind
+   mechanism to allow the client to authenticate the server to which it
+   is communicating, or to perform "challenge-response" authentication.
+   If the client bound with the simple choice, or the SASL mechanism
+   does not require the server to return information to the client, then
+   this field SHALL NOT be included in the BindResponse.
+
+4.3.  Unbind Operation
+
+   The function of the Unbind operation is to terminate an LDAP session.
+   The Unbind operation is not the antithesis of the Bind operation as
+   the name implies.  The naming of these operations are historical.
+   The Unbind operation should be thought of as the "quit" operation.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 18]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The Unbind operation is defined as follows:
+
+        UnbindRequest ::= [APPLICATION 2] NULL
+
+   The client, upon transmission of the UnbindRequest, and the server,
+   upon receipt of the UnbindRequest, are to gracefully terminate the
+   LDAP session as described in Section 5.3.  Uncompleted operations are
+   handled as specified in Section 3.1.
+
+4.4.  Unsolicited Notification
+
+   An unsolicited notification is an LDAPMessage sent from the server to
+   the client that is not in response to any LDAPMessage received by the
+   server.  It is used to signal an extraordinary condition in the
+   server or in the LDAP session between the client and the server.  The
+   notification is of an advisory nature, and the server will not expect
+   any response to be returned from the client.
+
+   The unsolicited notification is structured as an LDAPMessage in which
+   the messageID is zero and protocolOp is set to the extendedResp
+   choice using the ExtendedResponse type (See Section 4.12).  The
+   responseName field of the ExtendedResponse always contains an LDAPOID
+   that is unique for this notification.
+
+   One unsolicited notification (Notice of Disconnection) is defined in
+   this document.  The specification of an unsolicited notification
+   consists of:
+
+   - the OBJECT IDENTIFIER assigned to the notification (to be specified
+     in the responseName,
+
+   - the format of the contents of the responseValue (if any),
+
+   - the circumstances which will cause the notification to be sent, and
+
+   - the semantics of the message.
+
+4.4.1.  Notice of Disconnection
+
+   This notification may be used by the server to advise the client that
+   the server is about to terminate the LDAP session on its own
+   initiative.  This notification is intended to assist clients in
+   distinguishing between an exceptional server condition and a
+   transient network failure.  Note that this notification is not a
+   response to an Unbind requested by the client.  Uncompleted
+   operations are handled as specified in Section 3.1.
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 19]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The responseName is 1.3.6.1.4.1.1466.20036, the responseValue field
+   is absent, and the resultCode is used to indicate the reason for the
+   disconnection.  When the strongerAuthRequired resultCode is returned
+   with this message, it indicates that the server has detected that an
+   established security association between the client and server has
+   unexpectedly failed or been compromised.
+
+   Upon transmission of the Notice of Disconnection, the server
+   gracefully terminates the LDAP session as described in Section 5.3.
+
+4.5.  Search Operation
+
+   The Search operation is used to request a server to return, subject
+   to access controls and other restrictions, a set of entries matching
+   a complex search criterion.  This can be used to read attributes from
+   a single entry, from entries immediately subordinate to a particular
+   entry, or from a whole subtree of entries.
+
+4.5.1.  Search Request
+
+   The Search request is defined as follows:
+
+        SearchRequest ::= [APPLICATION 3] SEQUENCE {
+             baseObject      LDAPDN,
+             scope           ENUMERATED {
+                  baseObject              (0),
+                  singleLevel             (1),
+                  wholeSubtree            (2),
+                  ...  },
+             derefAliases    ENUMERATED {
+                  neverDerefAliases       (0),
+                  derefInSearching        (1),
+                  derefFindingBaseObj     (2),
+                  derefAlways             (3) },
+             sizeLimit       INTEGER (0 ..  maxInt),
+             timeLimit       INTEGER (0 ..  maxInt),
+             typesOnly       BOOLEAN,
+             filter          Filter,
+             attributes      AttributeSelection }
+
+        AttributeSelection ::= SEQUENCE OF selector LDAPString
+                        -- The LDAPString is constrained to
+                        -- <attributeSelector> in Section 4.5.1.8
+
+        Filter ::= CHOICE {
+             and             [0] SET SIZE (1..MAX) OF filter Filter,
+             or              [1] SET SIZE (1..MAX) OF filter Filter,
+             not             [2] Filter,
+
+
+
+Sermersheim                 Standards Track                    [Page 20]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+             equalityMatch   [3] AttributeValueAssertion,
+             substrings      [4] SubstringFilter,
+             greaterOrEqual  [5] AttributeValueAssertion,
+             lessOrEqual     [6] AttributeValueAssertion,
+             present         [7] AttributeDescription,
+             approxMatch     [8] AttributeValueAssertion,
+             extensibleMatch [9] MatchingRuleAssertion,
+             ...  }
+
+        SubstringFilter ::= SEQUENCE {
+             type           AttributeDescription,
+             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE {
+                  initial [0] AssertionValue,  -- can occur at most once
+                  any     [1] AssertionValue,
+                  final   [2] AssertionValue } -- can occur at most once
+             }
+
+        MatchingRuleAssertion ::= SEQUENCE {
+             matchingRule    [1] MatchingRuleId OPTIONAL,
+             type            [2] AttributeDescription OPTIONAL,
+             matchValue      [3] AssertionValue,
+             dnAttributes    [4] BOOLEAN DEFAULT FALSE }
+
+   Note that an X.500 "list"-like operation can be emulated by the
+   client requesting a singleLevel Search operation with a filter
+   checking for the presence of the 'objectClass' attribute, and that an
+   X.500 "read"-like operation can be emulated by a baseObject Search
+   operation with the same filter.  A server that provides a gateway to
+   X.500 is not required to use the Read or List operations, although it
+   may choose to do so, and if it does, it must provide the same
+   semantics as the X.500 Search operation.
+
+4.5.1.1.  SearchRequest.baseObject
+
+   The name of the base object entry (or possibly the root) relative to
+   which the Search is to be performed.
+
+4.5.1.2.  SearchRequest.scope
+
+   Specifies the scope of the Search to be performed.  The semantics (as
+   described in [X.511]) of the defined values of this field are:
+
+      baseObject: The scope is constrained to the entry named by
+      baseObject.
+
+      singleLevel: The scope is constrained to the immediate
+      subordinates of the entry named by baseObject.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 21]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      wholeSubtree: The scope is constrained to the entry named by
+      baseObject and to all its subordinates.
+
+4.5.1.3.  SearchRequest.derefAliases
+
+   An indicator as to whether or not alias entries (as defined in
+   [RFC4512]) are to be dereferenced during stages of the Search
+   operation.
+
+   The act of dereferencing an alias includes recursively dereferencing
+   aliases that refer to aliases.
+
+   Servers MUST detect looping while dereferencing aliases in order to
+   prevent denial-of-service attacks of this nature.
+
+   The semantics of the defined values of this field are:
+
+      neverDerefAliases: Do not dereference aliases in searching or in
+      locating the base object of the Search.
+
+      derefInSearching: While searching subordinates of the base object,
+      dereference any alias within the search scope.  Dereferenced
+      objects become the vertices of further search scopes where the
+      Search operation is also applied.  If the search scope is
+      wholeSubtree, the Search continues in the subtree(s) of any
+      dereferenced object.  If the search scope is singleLevel, the
+      search is applied to any dereferenced objects and is not applied
+      to their subordinates.  Servers SHOULD eliminate duplicate entries
+      that arise due to alias dereferencing while searching.
+
+      derefFindingBaseObj: Dereference aliases in locating the base
+      object of the Search, but not when searching subordinates of the
+      base object.
+
+      derefAlways: Dereference aliases both in searching and in locating
+      the base object of the Search.
+
+4.5.1.4.  SearchRequest.sizeLimit
+
+   A size limit that restricts the maximum number of entries to be
+   returned as a result of the Search.  A value of zero in this field
+   indicates that no client-requested size limit restrictions are in
+   effect for the Search.  Servers may also enforce a maximum number of
+   entries to return.
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 22]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.5.1.5.  SearchRequest.timeLimit
+
+   A time limit that restricts the maximum time (in seconds) allowed for
+   a Search.  A value of zero in this field indicates that no client-
+   requested time limit restrictions are in effect for the Search.
+   Servers may also enforce a maximum time limit for the Search.
+
+4.5.1.6.  SearchRequest.typesOnly
+
+   An indicator as to whether Search results are to contain both
+   attribute descriptions and values, or just attribute descriptions.
+   Setting this field to TRUE causes only attribute descriptions (and
+   not values) to be returned.  Setting this field to FALSE causes both
+   attribute descriptions and values to be returned.
+
+4.5.1.7.  SearchRequest.filter
+
+   A filter that defines the conditions that must be fulfilled in order
+   for the Search to match a given entry.
+
+   The 'and', 'or', and 'not' choices can be used to form combinations
+   of filters.  At least one filter element MUST be present in an 'and'
+   or 'or' choice.  The others match against individual attribute values
+   of entries in the scope of the Search.  (Implementor's note: the
+   'not' filter is an example of a tagged choice in an implicitly-tagged
+   module.  In BER this is treated as if the tag were explicit.)
+
+   A server MUST evaluate filters according to the three-valued logic of
+   [X.511] (1993), Clause 7.8.1.  In summary, a filter is evaluated to
+   "TRUE", "FALSE", or "Undefined".  If the filter evaluates to TRUE for
+   a particular entry, then the attributes of that entry are returned as
+   part of the Search result (subject to any applicable access control
+   restrictions).  If the filter evaluates to FALSE or Undefined, then
+   the entry is ignored for the Search.
+
+   A filter of the "and" choice is TRUE if all the filters in the SET OF
+   evaluate to TRUE, FALSE if at least one filter is FALSE, and
+   Undefined otherwise.  A filter of the "or" choice is FALSE if all the
+   filters in the SET OF evaluate to FALSE, TRUE if at least one filter
+   is TRUE, and Undefined otherwise.  A filter of the 'not' choice is
+   TRUE if the filter being negated is FALSE, FALSE if it is TRUE, and
+   Undefined if it is Undefined.
+
+   A filter item evaluates to Undefined when the server would not be
+   able to determine whether the assertion value matches an entry.
+   Examples include:
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 23]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - An attribute description in an equalityMatch, substrings,
+     greaterOrEqual, lessOrEqual, approxMatch, or extensibleMatch filter
+     is not recognized by the server.
+
+   - The attribute type does not define the appropriate matching rule.
+
+   - A MatchingRuleId in the extensibleMatch is not recognized by the
+     server or is not valid for the attribute type.
+
+   - The type of filtering requested is not implemented.
+
+   - The assertion value is invalid.
+
+   For example, if a server did not recognize the attribute type
+   shoeSize, the filters (shoeSize=*), (shoeSize=12), (shoeSize>=12),
+   and (shoeSize<=12) would each evaluate to Undefined.
+
+   Servers MUST NOT return errors if attribute descriptions or matching
+   rule ids are not recognized, assertion values are invalid, or the
+   assertion syntax is not supported.  More details of filter processing
+   are given in Clause 7.8 of [X.511].
+
+4.5.1.7.1.  SearchRequest.filter.equalityMatch
+
+   The matching rule for an equalityMatch filter is defined by the
+   EQUALITY matching rule for the attribute type or subtype.  The filter
+   is TRUE when the EQUALITY rule returns TRUE as applied to the
+   attribute or subtype and the asserted value.
+
+4.5.1.7.2.  SearchRequest.filter.substrings
+
+   There SHALL be at most one 'initial' and at most one 'final' in the
+   'substrings' of a SubstringFilter.  If 'initial' is present, it SHALL
+   be the first element of 'substrings'.  If 'final' is present, it
+   SHALL be the last element of 'substrings'.
+
+   The matching rule for an AssertionValue in a substrings filter item
+   is defined by the SUBSTR matching rule for the attribute type or
+   subtype.  The filter is TRUE when the SUBSTR rule returns TRUE as
+   applied to the attribute or subtype and the asserted value.
+
+   Note that the AssertionValue in a substrings filter item conforms to
+   the assertion syntax of the EQUALITY matching rule for the attribute
+   type rather than to the assertion syntax of the SUBSTR matching rule
+   for the attribute type.  Conceptually, the entire SubstringFilter is
+   converted into an assertion value of the substrings matching rule
+   prior to applying the rule.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 24]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.5.1.7.3.  SearchRequest.filter.greaterOrEqual
+
+   The matching rule for a greaterOrEqual filter is defined by the
+   ORDERING matching rule for the attribute type or subtype.  The filter
+   is TRUE when the ORDERING rule returns FALSE as applied to the
+   attribute or subtype and the asserted value.
+
+4.5.1.7.4.  SearchRequest.filter.lessOrEqual
+
+   The matching rules for a lessOrEqual filter are defined by the
+   ORDERING and EQUALITY matching rules for the attribute type or
+   subtype.  The filter is TRUE when either the ORDERING or EQUALITY
+   rule returns TRUE as applied to the attribute or subtype and the
+   asserted value.
+
+4.5.1.7.5.  SearchRequest.filter.present
+
+   A present filter is TRUE when there is an attribute or subtype of the
+   specified attribute description present in an entry, FALSE when no
+   attribute or subtype of the specified attribute description is
+   present in an entry, and Undefined otherwise.
+
+4.5.1.7.6.  SearchRequest.filter.approxMatch
+
+   An approxMatch filter is TRUE when there is a value of the attribute
+   type or subtype for which some locally-defined approximate matching
+   algorithm (e.g., spelling variations, phonetic match, etc.) returns
+   TRUE.  If a value matches for equality, it also satisfies an
+   approximate match.  If approximate matching is not supported for the
+   attribute, this filter item should be treated as an equalityMatch.
+
+4.5.1.7.7.  SearchRequest.filter.extensibleMatch
+
+   The fields of the extensibleMatch filter item are evaluated as
+   follows:
+
+   - If the matchingRule field is absent, the type field MUST be
+     present, and an equality match is performed for that type.
+
+   - If the type field is absent and the matchingRule is present, the
+     matchValue is compared against all attributes in an entry that
+     support that matchingRule.
+
+   - If the type field is present and the matchingRule is present, the
+     matchValue is compared against the specified attribute type and its
+     subtypes.
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 25]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - If the dnAttributes field is set to TRUE, the match is additionally
+     applied against all the AttributeValueAssertions in an entry's
+     distinguished name, and it evaluates to TRUE if there is at least
+     one attribute or subtype in the distinguished name for which the
+     filter item evaluates to TRUE.  The dnAttributes field is present
+     to alleviate the need for multiple versions of generic matching
+     rules (such as word matching), where one applies to entries and
+     another applies to entries and DN attributes as well.
+
+   The matchingRule used for evaluation determines the syntax for the
+   assertion value.  Once the matchingRule and attribute(s) have been
+   determined, the filter item evaluates to TRUE if it matches at least
+   one attribute type or subtype in the entry, FALSE if it does not
+   match any attribute type or subtype in the entry, and Undefined if
+   the matchingRule is not recognized, the matchingRule is unsuitable
+   for use with the specified type, or the assertionValue is invalid.
+
+4.5.1.8.  SearchRequest.attributes
+
+   A selection list of the attributes to be returned from each entry
+   that matches the search filter.  Attributes that are subtypes of
+   listed attributes are implicitly included.  LDAPString values of this
+   field are constrained to the following Augmented Backus-Naur Form
+   (ABNF) [RFC4234]:
+
+      attributeSelector = attributedescription / selectorspecial
+
+      selectorspecial = noattrs / alluserattrs
+
+      noattrs = %x31.2E.31 ; "1.1"
+
+      alluserattrs = %x2A ; asterisk ("*")
+
+      The <attributedescription> production is defined in Section 2.5 of
+      [RFC4512].
+
+      There are three special cases that may appear in the attributes
+      selection list:
+
+      1. An empty list with no attributes requests the return of all
+         user attributes.
+
+      2. A list containing "*" (with zero or more attribute
+         descriptions) requests the return of all user attributes in
+         addition to other listed (operational) attributes.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 26]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      3. A list containing only the OID "1.1" indicates that no
+         attributes are to be returned.  If "1.1" is provided with other
+         attributeSelector values, the "1.1" attributeSelector is
+         ignored.  This OID was chosen because it does not (and can not)
+         correspond to any attribute in use.
+
+   Client implementors should note that even if all user attributes are
+   requested, some attributes and/or attribute values of the entry may
+   not be included in Search results due to access controls or other
+   restrictions.  Furthermore, servers will not return operational
+   attributes, such as objectClasses or attributeTypes, unless they are
+   listed by name.  Operational attributes are described in [RFC4512].
+
+   Attributes are returned at most once in an entry.  If an attribute
+   description is named more than once in the list, the subsequent names
+   are ignored.  If an attribute description in the list is not
+   recognized, it is ignored by the server.
+
+4.5.2.  Search Result
+
+   The results of the Search operation are returned as zero or more
+   SearchResultEntry and/or SearchResultReference messages, followed by
+   a single SearchResultDone message.
+
+        SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
+             objectName      LDAPDN,
+             attributes      PartialAttributeList }
+
+        PartialAttributeList ::= SEQUENCE OF
+                             partialAttribute PartialAttribute
+
+        SearchResultReference ::= [APPLICATION 19] SEQUENCE
+                                  SIZE (1..MAX) OF uri URI
+
+        SearchResultDone ::= [APPLICATION 5] LDAPResult
+
+   Each SearchResultEntry represents an entry found during the Search.
+   Each SearchResultReference represents an area not yet explored during
+   the Search.  The SearchResultEntry and SearchResultReference messages
+   may come in any order.  Following all the SearchResultReference and
+   SearchResultEntry responses, the server returns a SearchResultDone
+   response, which contains an indication of success or details any
+   errors that have occurred.
+
+   Each entry returned in a SearchResultEntry will contain all
+   appropriate attributes as specified in the attributes field of the
+   Search Request, subject to access control and other administrative
+   policy.  Note that the PartialAttributeList may hold zero elements.
+
+
+
+Sermersheim                 Standards Track                    [Page 27]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   This may happen when none of the attributes of an entry were
+   requested or could be returned.  Note also that the partialAttribute
+   vals set may hold zero elements.  This may happen when typesOnly is
+   requested, access controls prevent the return of values, or other
+   reasons.
+
+   Some attributes may be constructed by the server and appear in a
+   SearchResultEntry attribute list, although they are not stored
+   attributes of an entry.  Clients SHOULD NOT assume that all
+   attributes can be modified, even if this is permitted by access
+   control.
+
+   If the server's schema defines short names [RFC4512] for an attribute
+   type, then the server SHOULD use one of those names in attribute
+   descriptions for that attribute type (in preference to using the
+   <numericoid> [RFC4512] format of the attribute type's object
+   identifier).  The server SHOULD NOT use the short name if that name
+   is known by the server to be ambiguous, or if it is otherwise likely
+   to cause interoperability problems.
+
+4.5.3.  Continuation References in the Search Result
+
+   If the server was able to locate the entry referred to by the
+   baseObject but was unable or unwilling to search one or more non-
+   local entries, the server may return one or more
+   SearchResultReference messages, each containing a reference to
+   another set of servers for continuing the operation.  A server MUST
+   NOT return any SearchResultReference messages if it has not located
+   the baseObject and thus has not searched any entries.  In this case,
+   it would return a SearchResultDone containing either a referral or
+   noSuchObject result code (depending on the server's knowledge of the
+   entry named in the baseObject).
+
+   If a server holds a copy or partial copy of the subordinate naming
+   context (Section 5 of [RFC4512]), it may use the search filter to
+   determine whether or not to return a SearchResultReference response.
+   Otherwise, SearchResultReference responses are always returned when
+   in scope.
+
+   The SearchResultReference is of the same data type as the Referral.
+
+   If the client wishes to progress the Search, it issues a new Search
+   operation for each SearchResultReference that is returned.  If
+   multiple URIs are present, the client assumes that any supported URI
+   may be used to progress the operation.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 28]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Clients that follow search continuation references MUST ensure that
+   they do not loop between servers.  They MUST NOT repeatedly contact
+   the same server for the same request with the same parameters.  Some
+   clients use a counter that is incremented each time search result
+   reference handling occurs for an operation, and these kinds of
+   clients MUST be able to handle at least ten nested referrals while
+   progressing the operation.
+
+   Note that the Abandon operation described in Section 4.11 applies
+   only to a particular operation sent at the LDAP message layer between
+   a client and server.  The client must individually abandon subsequent
+   Search operations it wishes to.
+
+   A URI for a server implementing LDAP and accessible via TCP/IP (v4 or
+   v6) [RFC793][RFC791] is written as an LDAP URL according to
+   [RFC4516].
+
+   SearchResultReference values that are LDAP URLs follow these rules:
+
+   - The <dn> part of the LDAP URL MUST be present, with the new target
+     object name.  The client uses this name when following the
+     reference.
+
+   - Some servers (e.g., participating in distributed indexing) may
+     provide a different filter in the LDAP URL.
+
+   - If the <filter> part of the LDAP URL is present, the client uses
+     this filter in its next request to progress this Search, and if it
+     is not present the client uses the same filter as it used for that
+     Search.
+
+   - If the originating search scope was singleLevel, the <scope> part
+     of the LDAP URL will be "base".
+
+   - It is RECOMMENDED that the <scope> part be present to avoid
+     ambiguity.  In the absence of a <scope> part, the scope of the
+     original Search request is assumed.
+
+   - Other aspects of the new Search request may be the same as or
+     different from the Search request that generated the
+     SearchResultReference.
+
+   - The name of an unexplored subtree in a SearchResultReference need
+     not be subordinate to the base object.
+
+   Other kinds of URIs may be returned.  The syntax and semantics of
+   such URIs is left to future specifications.  Clients may ignore URIs
+   that they do not support.
+
+
+
+Sermersheim                 Standards Track                    [Page 29]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   UTF-8-encoded characters appearing in the string representation of a
+   DN, search filter, or other fields of the referral value may not be
+   legal for URIs (e.g., spaces) and MUST be escaped using the % method
+   in [RFC3986].
+
+4.5.3.1.  Examples
+
+   For example, suppose the contacted server (hosta) holds the entry
+   <DC=Example,DC=NET> and the entry <CN=Manager,DC=Example,DC=NET>.  It
+   knows that both LDAP servers (hostb) and (hostc) hold
+   <OU=People,DC=Example,DC=NET> (one is the master and the other server
+   a shadow), and that LDAP-capable server (hostd) holds the subtree
+   <OU=Roles,DC=Example,DC=NET>.  If a wholeSubtree Search of
+   <DC=Example,DC=NET> is requested to the contacted server, it may
+   return the following:
+
+     SearchResultEntry for DC=Example,DC=NET
+     SearchResultEntry for CN=Manager,DC=Example,DC=NET
+     SearchResultReference {
+       ldap://hostb/OU=People,DC=Example,DC=NET??sub
+       ldap://hostc/OU=People,DC=Example,DC=NET??sub }
+     SearchResultReference {
+       ldap://hostd/OU=Roles,DC=Example,DC=NET??sub }
+     SearchResultDone (success)
+
+   Client implementors should note that when following a
+   SearchResultReference, additional SearchResultReference may be
+   generated.  Continuing the example, if the client contacted the
+   server (hostb) and issued the Search request for the subtree
+   <OU=People,DC=Example,DC=NET>, the server might respond as follows:
+
+     SearchResultEntry for OU=People,DC=Example,DC=NET
+     SearchResultReference {
+       ldap://hoste/OU=Managers,OU=People,DC=Example,DC=NET??sub }
+     SearchResultReference {
+       ldap://hostf/OU=Consultants,OU=People,DC=Example,DC=NET??sub }
+     SearchResultDone (success)
+
+   Similarly, if a singleLevel Search of <DC=Example,DC=NET> is
+   requested to the contacted server, it may return the following:
+
+     SearchResultEntry for CN=Manager,DC=Example,DC=NET
+     SearchResultReference {
+       ldap://hostb/OU=People,DC=Example,DC=NET??base
+       ldap://hostc/OU=People,DC=Example,DC=NET??base }
+     SearchResultReference {
+       ldap://hostd/OU=Roles,DC=Example,DC=NET??base }
+     SearchResultDone (success)
+
+
+
+Sermersheim                 Standards Track                    [Page 30]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   If the contacted server does not hold the base object for the Search,
+   but has knowledge of its possible location, then it may return a
+   referral to the client.  In this case, if the client requests a
+   subtree Search of <DC=Example,DC=ORG> to hosta, the server returns a
+   SearchResultDone containing a referral.
+
+     SearchResultDone (referral) {
+       ldap://hostg/DC=Example,DC=ORG??sub }
+
+4.6.  Modify Operation
+
+   The Modify operation allows a client to request that a modification
+   of an entry be performed on its behalf by a server.  The Modify
+   Request is defined as follows:
+
+        ModifyRequest ::= [APPLICATION 6] SEQUENCE {
+             object          LDAPDN,
+             changes         SEQUENCE OF change SEQUENCE {
+                  operation       ENUMERATED {
+                       add     (0),
+                       delete  (1),
+                       replace (2),
+                       ...  },
+                  modification    PartialAttribute } }
+
+   Fields of the Modify Request are:
+
+   - object: The value of this field contains the name of the entry to
+     be modified.  The server SHALL NOT perform any alias dereferencing
+     in determining the object to be modified.
+
+   - changes: A list of modifications to be performed on the entry.  The
+     entire list of modifications MUST be performed in the order they
+     are listed as a single atomic operation.  While individual
+     modifications may violate certain aspects of the directory schema
+     (such as the object class definition and Directory Information Tree
+     (DIT) content rule), the resulting entry after the entire list of
+     modifications is performed MUST conform to the requirements of the
+     directory model and controlling schema [RFC4512].
+
+     -  operation: Used to specify the type of modification being
+        performed.  Each operation type acts on the following
+        modification.  The values of this field have the following
+        semantics, respectively:
+
+           add: add values listed to the modification attribute,
+           creating the attribute if necessary.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 31]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+           delete: delete values listed from the modification attribute.
+           If no values are listed, or if all current values of the
+           attribute are listed, the entire attribute is removed.
+
+           replace: replace all existing values of the modification
+           attribute with the new values listed, creating the attribute
+           if it did not already exist.  A replace with no value will
+           delete the entire attribute if it exists, and it is ignored
+           if the attribute does not exist.
+
+     -  modification: A PartialAttribute (which may have an empty SET
+        of vals) used to hold the attribute type or attribute type and
+        values being modified.
+
+   Upon receipt of a Modify Request, the server attempts to perform the
+   necessary modifications to the DIT and returns the result in a Modify
+   Response, defined as follows:
+
+        ModifyResponse ::= [APPLICATION 7] LDAPResult
+
+   The server will return to the client a single Modify Response
+   indicating either the successful completion of the DIT modification,
+   or the reason that the modification failed.  Due to the requirement
+   for atomicity in applying the list of modifications in the Modify
+   Request, the client may expect that no modifications of the DIT have
+   been performed if the Modify Response received indicates any sort of
+   error, and that all requested modifications have been performed if
+   the Modify Response indicates successful completion of the Modify
+   operation.  Whether or not the modification was applied cannot be
+   determined by the client if the Modify Response was not received
+   (e.g., the LDAP session was terminated or the Modify operation was
+   abandoned).
+
+   Servers MUST ensure that entries conform to user and system schema
+   rules or other data model constraints.  The Modify operation cannot
+   be used to remove from an entry any of its distinguished values,
+   i.e., those values which form the entry's relative distinguished
+   name.  An attempt to do so will result in the server returning the
+   notAllowedOnRDN result code.  The Modify DN operation described in
+   Section 4.9 is used to rename an entry.
+
+   For attribute types that specify no equality matching, the rules in
+   Section 2.5.1 of [RFC4512] are followed.
+
+   Note that due to the simplifications made in LDAP, there is not a
+   direct mapping of the changes in an LDAP ModifyRequest onto the
+   changes of a DAP ModifyEntry operation, and different implementations
+
+
+
+
+Sermersheim                 Standards Track                    [Page 32]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   of LDAP-DAP gateways may use different means of representing the
+   change.  If successful, the final effect of the operations on the
+   entry MUST be identical.
+
+4.7.  Add Operation
+
+   The Add operation allows a client to request the addition of an entry
+   into the Directory.  The Add Request is defined as follows:
+
+        AddRequest ::= [APPLICATION 8] SEQUENCE {
+             entry           LDAPDN,
+             attributes      AttributeList }
+
+        AttributeList ::= SEQUENCE OF attribute Attribute
+
+   Fields of the Add Request are:
+
+   - entry: the name of the entry to be added.  The server SHALL NOT
+     dereference any aliases in locating the entry to be added.
+
+   - attributes: the list of attributes that, along with those from the
+     RDN, make up the content of the entry being added.  Clients MAY or
+     MAY NOT include the RDN attribute(s) in this list.  Clients MUST
+     NOT supply NO-USER-MODIFICATION attributes such as the
+     createTimestamp or creatorsName attributes, since the server
+     maintains these automatically.
+
+   Servers MUST ensure that entries conform to user and system schema
+   rules or other data model constraints.  For attribute types that
+   specify no equality matching, the rules in Section 2.5.1 of [RFC4512]
+   are followed (this applies to the naming attribute in addition to any
+   multi-valued attributes being added).
+
+   The entry named in the entry field of the AddRequest MUST NOT exist
+   for the AddRequest to succeed.  The immediate superior (parent) of an
+   object or alias entry to be added MUST exist.  For example, if the
+   client attempted to add <CN=JS,DC=Example,DC=NET>, the
+   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did
+   exist, then the server would return the noSuchObject result code with
+   the matchedDN field containing <DC=NET>.
+
+   Upon receipt of an Add Request, a server will attempt to add the
+   requested entry.  The result of the Add attempt will be returned to
+   the client in the Add Response, defined as follows:
+
+        AddResponse ::= [APPLICATION 9] LDAPResult
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 33]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   A response of success indicates that the new entry has been added to
+   the Directory.
+
+4.8.  Delete Operation
+
+   The Delete operation allows a client to request the removal of an
+   entry from the Directory.  The Delete Request is defined as follows:
+
+        DelRequest ::= [APPLICATION 10] LDAPDN
+
+   The Delete Request consists of the name of the entry to be deleted.
+   The server SHALL NOT dereference aliases while resolving the name of
+   the target entry to be removed.
+
+   Only leaf entries (those with no subordinate entries) can be deleted
+   with this operation.
+
+   Upon receipt of a Delete Request, a server will attempt to perform
+   the entry removal requested and return the result in the Delete
+   Response defined as follows:
+
+        DelResponse ::= [APPLICATION 11] LDAPResult
+
+4.9.  Modify DN Operation
+
+   The Modify DN operation allows a client to change the Relative
+   Distinguished Name (RDN) of an entry in the Directory and/or to move
+   a subtree of entries to a new location in the Directory.  The Modify
+   DN Request is defined as follows:
+
+        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
+             entry           LDAPDN,
+             newrdn          RelativeLDAPDN,
+             deleteoldrdn    BOOLEAN,
+             newSuperior     [0] LDAPDN OPTIONAL }
+
+   Fields of the Modify DN Request are:
+
+   - entry: the name of the entry to be changed.  This entry may or may
+     not have subordinate entries.
+
+   - newrdn: the new RDN of the entry.  The value of the old RDN is
+     supplied when moving the entry to a new superior without changing
+     its RDN.  Attribute values of the new RDN not matching any
+     attribute value of the entry are added to the entry, and an
+     appropriate error is returned if this fails.
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 34]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - deleteoldrdn: a boolean field that controls whether the old RDN
+     attribute values are to be retained as attributes of the entry or
+     deleted from the entry.
+
+   - newSuperior: if present, this is the name of an existing object
+     entry that becomes the immediate superior (parent) of the
+     existing entry.
+
+   The server SHALL NOT dereference any aliases in locating the objects
+   named in entry or newSuperior.
+
+   Upon receipt of a ModifyDNRequest, a server will attempt to perform
+   the name change and return the result in the Modify DN Response,
+   defined as follows:
+
+        ModifyDNResponse ::= [APPLICATION 13] LDAPResult
+
+   For example, if the entry named in the entry field was <cn=John
+   Smith,c=US>, the newrdn field was <cn=John Cougar Smith>, and the
+   newSuperior field was absent, then this operation would attempt to
+   rename the entry as <cn=John Cougar Smith,c=US>.  If there was
+   already an entry with that name, the operation would fail with the
+   entryAlreadyExists result code.
+
+   Servers MUST ensure that entries conform to user and system schema
+   rules or other data model constraints.  For attribute types that
+   specify no equality matching, the rules in Section 2.5.1 of [RFC4512]
+   are followed (this pertains to newrdn and deleteoldrdn).
+
+   The object named in newSuperior MUST exist.  For example, if the
+   client attempted to add <CN=JS,DC=Example,DC=NET>, the
+   <DC=Example,DC=NET> entry did not exist, and the <DC=NET> entry did
+   exist, then the server would return the noSuchObject result code with
+   the matchedDN field containing <DC=NET>.
+
+   If the deleteoldrdn field is TRUE, the attribute values forming the
+   old RDN (but not the new RDN) are deleted from the entry.  If the
+   deleteoldrdn field is FALSE, the attribute values forming the old RDN
+   will be retained as non-distinguished attribute values of the entry.
+
+   Note that X.500 restricts the ModifyDN operation to affect only
+   entries that are contained within a single server.  If the LDAP
+   server is mapped onto DAP, then this restriction will apply, and the
+   affectsMultipleDSAs result code will be returned if this error
+   occurred.  In general, clients MUST NOT expect to be able to perform
+   arbitrary movements of entries and subtrees between servers or
+   between naming contexts.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 35]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+4.10.  Compare Operation
+
+   The Compare operation allows a client to compare an assertion value
+   with the values of a particular attribute in a particular entry in
+   the Directory.  The Compare Request is defined as follows:
+
+        CompareRequest ::= [APPLICATION 14] SEQUENCE {
+             entry           LDAPDN,
+             ava             AttributeValueAssertion }
+
+   Fields of the Compare Request are:
+
+   - entry: the name of the entry to be compared.  The server SHALL NOT
+     dereference any aliases in locating the entry to be compared.
+
+   - ava: holds the attribute value assertion to be compared.
+
+   Upon receipt of a Compare Request, a server will attempt to perform
+   the requested comparison and return the result in the Compare
+   Response, defined as follows:
+
+        CompareResponse ::= [APPLICATION 15] LDAPResult
+
+   The resultCode is set to compareTrue, compareFalse, or an appropriate
+   error.  compareTrue indicates that the assertion value in the ava
+   field matches a value of the attribute or subtype according to the
+   attribute's EQUALITY matching rule.  compareFalse indicates that the
+   assertion value in the ava field and the values of the attribute or
+   subtype did not match.  Other result codes indicate either that the
+   result of the comparison was Undefined (Section 4.5.1.7), or that
+   some error occurred.
+
+   Note that some directory systems may establish access controls that
+   permit the values of certain attributes (such as userPassword) to be
+   compared but not interrogated by other means.
+
+4.11.  Abandon Operation
+
+   The function of the Abandon operation is to allow a client to request
+   that the server abandon an uncompleted operation.  The Abandon
+   Request is defined as follows:
+
+        AbandonRequest ::= [APPLICATION 16] MessageID
+
+   The MessageID is that of an operation that was requested earlier at
+   this LDAP message layer.  The Abandon request itself has its own
+   MessageID.  This is distinct from the MessageID of the earlier
+   operation being abandoned.
+
+
+
+Sermersheim                 Standards Track                    [Page 36]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   There is no response defined in the Abandon operation.  Upon receipt
+   of an AbandonRequest, the server MAY abandon the operation identified
+   by the MessageID.  Since the client cannot tell the difference
+   between a successfully abandoned operation and an uncompleted
+   operation, the application of the Abandon operation is limited to
+   uses where the client does not require an indication of its outcome.
+
+   Abandon, Bind, Unbind, and StartTLS operations cannot be abandoned.
+
+   In the event that a server receives an Abandon Request on a Search
+   operation in the midst of transmitting responses to the Search, that
+   server MUST cease transmitting entry responses to the abandoned
+   request immediately, and it MUST NOT send the SearchResultDone.  Of
+   course, the server MUST ensure that only properly encoded LDAPMessage
+   PDUs are transmitted.
+
+   The ability to abandon other (particularly update) operations is at
+   the discretion of the server.
+
+   Clients should not send Abandon requests for the same operation
+   multiple times, and they MUST also be prepared to receive results
+   from operations they have abandoned (since these might have been in
+   transit when the Abandon was requested or might not be able to be
+   abandoned).
+
+   Servers MUST discard Abandon requests for messageIDs they do not
+   recognize, for operations that cannot be abandoned, and for
+   operations that have already been abandoned.
+
+4.12.  Extended Operation
+
+   The Extended operation allows additional operations to be defined for
+   services not already available in the protocol; for example, to Add
+   operations to install transport layer security (see Section 4.14).
+
+   The Extended operation allows clients to make requests and receive
+   responses with predefined syntaxes and semantics.  These may be
+   defined in RFCs or be private to particular implementations.
+
+   Each Extended operation consists of an Extended request and an
+   Extended response.
+
+        ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
+             requestName      [0] LDAPOID,
+             requestValue     [1] OCTET STRING OPTIONAL }
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 37]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The requestName is a dotted-decimal representation of the unique
+   OBJECT IDENTIFIER corresponding to the request.  The requestValue is
+   information in a form defined by that request, encapsulated inside an
+   OCTET STRING.
+
+   The server will respond to this with an LDAPMessage containing an
+   ExtendedResponse.
+
+        ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
+             COMPONENTS OF LDAPResult,
+             responseName     [10] LDAPOID OPTIONAL,
+             responseValue    [11] OCTET STRING OPTIONAL }
+
+   The responseName field, when present, contains an LDAPOID that is
+   unique for this extended operation or response.  This field is
+   optional (even when the extension specification defines an LDAPOID
+   for use in this field).  The field will be absent whenever the server
+   is unable or unwilling to determine the appropriate LDAPOID to
+   return, for instance, when the requestName cannot be parsed or its
+   value is not recognized.
+
+   Where the requestName is not recognized, the server returns
+   protocolError.  (The server may return protocolError in other cases.)
+
+   The requestValue and responseValue fields contain information
+   associated with the operation.  The format of these fields is defined
+   by the specification of the Extended operation.  Implementations MUST
+   be prepared to handle arbitrary contents of these fields, including
+   zero bytes.  Values that are defined in terms of ASN.1 and BER-
+   encoded according to Section 5.1 also follow the extensibility rules
+   in Section 4.
+
+   Servers list the requestName of Extended Requests they recognize in
+   the 'supportedExtension' attribute in the root DSE (Section 5.1 of
+   [RFC4512]).
+
+   Extended operations may be specified in other documents.  The
+   specification of an Extended operation consists of:
+
+   - the OBJECT IDENTIFIER assigned to the requestName,
+
+   - the OBJECT IDENTIFIER (if any) assigned to the responseName (note
+     that the same OBJECT IDENTIFIER may be used for both the
+     requestName and responseName),
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 38]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - the format of the contents of the requestValue and responseValue
+     (if any), and
+
+   - the semantics of the operation.
+
+4.13.  IntermediateResponse Message
+
+   While the Search operation provides a mechanism to return multiple
+   response messages for a single Search request, other operations, by
+   nature, do not provide for multiple response messages.
+
+   The IntermediateResponse message provides a general mechanism for
+   defining single-request/multiple-response operations in LDAP.  This
+   message is intended to be used in conjunction with the Extended
+   operation to define new single-request/multiple-response operations
+   or in conjunction with a control when extending existing LDAP
+   operations in a way that requires them to return Intermediate
+   response information.
+
+   It is intended that the definitions and descriptions of Extended
+   operations and controls that make use of the IntermediateResponse
+   message will define the circumstances when an IntermediateResponse
+   message can be sent by a server and the associated meaning of an
+   IntermediateResponse message sent in a particular circumstance.
+
+        IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
+                responseName     [0] LDAPOID OPTIONAL,
+                responseValue    [1] OCTET STRING OPTIONAL }
+
+   IntermediateResponse messages SHALL NOT be returned to the client
+   unless the client issues a request that specifically solicits their
+   return.  This document defines two forms of solicitation: Extended
+   operation and request control.  IntermediateResponse messages are
+   specified in documents describing the manner in which they are
+   solicited (i.e., in the Extended operation or request control
+   specification that uses them).  These specifications include:
+
+   - the OBJECT IDENTIFIER (if any) assigned to the responseName,
+
+   - the format of the contents of the responseValue (if any), and
+
+   - the semantics associated with the IntermediateResponse message.
+
+   Extensions that allow the return of multiple types of
+   IntermediateResponse messages SHALL identify those types using unique
+   responseName values (note that one of these may specify no value).
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 39]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Sections 4.13.1 and 4.13.2 describe additional requirements on the
+   inclusion of responseName and responseValue in IntermediateResponse
+   messages.
+
+4.13.1.  Usage with LDAP ExtendedRequest and ExtendedResponse
+
+   A single-request/multiple-response operation may be defined using a
+   single ExtendedRequest message to solicit zero or more
+   IntermediateResponse messages of one or more kinds, followed by an
+   ExtendedResponse message.
+
+4.13.2.  Usage with LDAP Request Controls
+
+   A control's semantics may include the return of zero or more
+   IntermediateResponse messages prior to returning the final result
+   code for the operation.  One or more kinds of IntermediateResponse
+   messages may be sent in response to a request control.
+
+   All IntermediateResponse messages associated with request controls
+   SHALL include a responseName.  This requirement ensures that the
+   client can correctly identify the source of IntermediateResponse
+   messages when:
+
+   - two or more controls using IntermediateResponse messages are
+     included in a request for any LDAP operation or
+
+   - one or more controls using IntermediateResponse messages are
+     included in a request with an LDAP Extended operation that uses
+     IntermediateResponse messages.
+
+4.14.  StartTLS Operation
+
+   The Start Transport Layer Security (StartTLS) operation's purpose is
+   to initiate installation of a TLS layer.  The StartTLS operation is
+   defined using the Extended operation mechanism described in Section
+   4.12.
+
+4.14.1.  StartTLS Request
+
+   A client requests TLS establishment by transmitting a StartTLS
+   request message to the server.  The StartTLS request is defined in
+   terms of an ExtendedRequest.  The requestName is
+   "1.3.6.1.4.1.1466.20037", and the requestValue field is always
+   absent.
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 40]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   The client MUST NOT send any LDAP PDUs at this LDAP message layer
+   following this request until it receives a StartTLS Extended response
+   and, in the case of a successful response, completes TLS
+   negotiations.
+
+   Detected sequencing problems (particularly those detailed in Section
+   3.1.1 of [RFC4513]) result in the resultCode being set to
+   operationsError.
+
+   If the server does not support TLS (whether by design or by current
+   configuration), it returns with the resultCode set to protocolError
+   as described in Section 4.12.
+
+4.14.2.  StartTLS Response
+
+   When a StartTLS request is received, servers supporting the operation
+   MUST return a StartTLS response message to the requestor.  The
+   responseName is "1.3.6.1.4.1.1466.20037" when provided (see Section
+   4.12).  The responseValue is always absent.
+
+   If the server is willing and able to negotiate TLS, it returns the
+   StartTLS response with the resultCode set to success.  Upon client
+   receipt of a successful StartTLS response, protocol peers may
+   commence with TLS negotiation as discussed in Section 3 of [RFC4513].
+
+   If the server is otherwise unwilling or unable to perform this
+   operation, the server is to return an appropriate result code
+   indicating the nature of the problem.  For example, if the TLS
+   subsystem is not presently available, the server may indicate this by
+   returning with the resultCode set to unavailable.  In cases where a
+   non-success result code is returned, the LDAP session is left without
+   a TLS layer.
+
+4.14.3.  Removal of the TLS Layer
+
+   Either the client or server MAY remove the TLS layer and leave the
+   LDAP message layer intact by sending and receiving a TLS closure
+   alert.
+
+   The initiating protocol peer sends the TLS closure alert and MUST
+   wait until it receives a TLS closure alert from the other peer before
+   sending further LDAP PDUs.
+
+   When a protocol peer receives the initial TLS closure alert, it may
+   choose to allow the LDAP message layer to remain intact.  In this
+   case, it MUST immediately transmit a TLS closure alert.  Following
+   this, it MAY send and receive LDAP PDUs.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 41]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Protocol peers MAY terminate the LDAP session after sending or
+   receiving a TLS closure alert.
+
+5.  Protocol Encoding, Connection, and Transfer
+
+   This protocol is designed to run over connection-oriented, reliable
+   transports, where the data stream is divided into octets (8-bit
+   units), with each octet and each bit being significant.
+
+   One underlying service, LDAP over TCP, is defined in Section 5.2.
+   This service is generally applicable to applications providing or
+   consuming X.500-based directory services on the Internet.  This
+   specification was generally written with the TCP mapping in mind.
+   Specifications detailing other mappings may encounter various
+   obstacles.
+
+   Implementations of LDAP over TCP MUST implement the mapping as
+   described in Section 5.2.
+
+   This table illustrates the relationship among the different layers
+   involved in an exchange between two protocol peers:
+
+               +----------------------+
+               |  LDAP message layer  |
+               +----------------------+ > LDAP PDUs
+               +----------------------+ < data
+               |      SASL layer      |
+               +----------------------+ > SASL-protected data
+               +----------------------+ < data
+               |       TLS layer      |
+   Application +----------------------+ > TLS-protected data
+   ------------+----------------------+ < data
+     Transport | transport connection |
+               +----------------------+
+
+5.1.  Protocol Encoding
+
+   The protocol elements of LDAP SHALL be encoded for exchange using the
+   Basic Encoding Rules [BER] of [ASN.1] with the following
+   restrictions:
+
+   - Only the definite form of length encoding is used.
+
+   - OCTET STRING values are encoded in the primitive form only.
+
+   - If the value of a BOOLEAN type is true, the encoding of the value
+     octet is set to hex "FF".
+
+
+
+
+Sermersheim                 Standards Track                    [Page 42]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - If a value of a type is its default value, it is absent.  Only some
+     BOOLEAN and INTEGER types have default values in this protocol
+     definition.
+
+   These restrictions are meant to ease the overhead of encoding and
+   decoding certain elements in BER.
+
+   These restrictions do not apply to ASN.1 types encapsulated inside of
+   OCTET STRING values, such as attribute values, unless otherwise
+   stated.
+
+5.2.  Transmission Control Protocol (TCP)
+
+   The encoded LDAPMessage PDUs are mapped directly onto the TCP
+   [RFC793] bytestream using the BER-based encoding described in Section
+   5.1.  It is recommended that server implementations running over the
+   TCP provide a protocol listener on the Internet Assigned Numbers
+   Authority (IANA)-assigned LDAP port, 389 [PortReg].  Servers may
+   instead provide a listener on a different port number.  Clients MUST
+   support contacting servers on any valid TCP port.
+
+5.3.  Termination of the LDAP session
+
+   Termination of the LDAP session is typically initiated by the client
+   sending an UnbindRequest (Section 4.3), or by the server sending a
+   Notice of Disconnection (Section 4.4.1).  In these cases, each
+   protocol peer gracefully terminates the LDAP session by ceasing
+   exchanges at the LDAP message layer, tearing down any SASL layer,
+   tearing down any TLS layer, and closing the transport connection.
+
+   A protocol peer may determine that the continuation of any
+   communication would be pernicious, and in this case, it may abruptly
+   terminate the session by ceasing communication and closing the
+   transport connection.
+
+   In either case, when the LDAP session is terminated, uncompleted
+   operations are handled as specified in Section 3.1.
+
+6.  Security Considerations
+
+   This version of the protocol provides facilities for simple
+   authentication using a cleartext password, as well as any SASL
+   [RFC4422] mechanism.  Installing SASL and/or TLS layers can provide
+   integrity and other data security services.
+
+   It is also permitted that the server can return its credentials to
+   the client, if it chooses to do so.
+
+
+
+
+Sermersheim                 Standards Track                    [Page 43]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Use of cleartext password is strongly discouraged where the
+   underlying transport service cannot guarantee confidentiality and may
+   result in disclosure of the password to unauthorized parties.
+
+   Servers are encouraged to prevent directory modifications by clients
+   that have authenticated anonymously [RFC4513].
+
+   Security considerations for authentication methods, SASL mechanisms,
+   and TLS are described in [RFC4513].
+
+   Note that SASL authentication exchanges do not provide data
+   confidentiality or integrity protection for the version or name
+   fields of the BindRequest or the resultCode, diagnosticMessage, or
+   referral fields of the BindResponse, nor for any information
+   contained in controls attached to Bind requests or responses.  Thus,
+   information contained in these fields SHOULD NOT be relied on unless
+   it is otherwise protected (such as by establishing protections at the
+   transport layer).
+
+   Implementors should note that various security factors (including
+   authentication and authorization information and data security
+   services) may change during the course of the LDAP session or even
+   during the performance of a particular operation.  For instance,
+   credentials could expire, authorization identities or access controls
+   could change, or the underlying security layer(s) could be replaced
+   or terminated.  Implementations should be robust in the handling of
+   changing security factors.
+
+   In some cases, it may be appropriate to continue the operation even
+   in light of security factor changes.  For instance, it may be
+   appropriate to continue an Abandon operation regardless of the
+   change, or to continue an operation when the change upgraded (or
+   maintained) the security factor.  In other cases, it may be
+   appropriate to fail or alter the processing of the operation.  For
+   instance, if confidential protections were removed, it would be
+   appropriate either to fail a request to return sensitive data or,
+   minimally, to exclude the return of sensitive data.
+
+   Implementations that cache attributes and entries obtained via LDAP
+   MUST ensure that access controls are maintained if that information
+   is to be provided to multiple clients, since servers may have access
+   control policies that prevent the return of entries or attributes in
+   Search results except to particular authenticated clients.  For
+   example, caches could serve result information only to the client
+   whose request caused it to be in the cache.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 44]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   Servers may return referrals or Search result references that
+   redirect clients to peer servers.  It is possible for a rogue
+   application to inject such referrals into the data stream in an
+   attempt to redirect a client to a rogue server.  Clients are advised
+   to be aware of this and possibly reject referrals when
+   confidentiality measures are not in place.  Clients are advised to
+   reject referrals from the StartTLS operation.
+
+   The matchedDN and diagnosticMessage fields, as well as some
+   resultCode values (e.g., attributeOrValueExists and
+   entryAlreadyExists), could disclose the presence or absence of
+   specific data in the directory that is subject to access and other
+   administrative controls.  Server implementations should restrict
+   access to protected information equally under both normal and error
+   conditions.
+
+   Protocol peers MUST be prepared to handle invalid and arbitrary-
+   length protocol encodings.  Invalid protocol encodings include: BER
+   encoding exceptions, format string and UTF-8 encoding exceptions,
+   overflow exceptions, integer value exceptions, and binary mode on/off
+   flag exceptions.  The LDAPv3 PROTOS [PROTOS-LDAP] test suite provides
+   excellent examples of these exceptions and test cases used to
+   discover flaws.
+
+   In the event that a protocol peer senses an attack that in its nature
+   could cause damage due to further communication at any layer in the
+   LDAP session, the protocol peer should abruptly terminate the LDAP
+   session as described in Section 5.3.
+
+7.  Acknowledgements
+
+   This document is based on RFC 2251 by Mark Wahl, Tim Howes, and Steve
+   Kille.  RFC 2251 was a product of the IETF ASID Working Group.
+
+   It is also based on RFC 2830 by Jeff Hodges, RL "Bob" Morgan, and
+   Mark Wahl.  RFC 2830 was a product of the IETF LDAPEXT Working Group.
+
+   It is also based on RFC 3771 by Roger Harrison and Kurt Zeilenga.
+   RFC 3771 was an individual submission to the IETF.
+
+   This document is a product of the IETF LDAPBIS Working Group.
+   Significant contributors of technical review and content include Kurt
+   Zeilenga, Steven Legg, and Hallvard Furuseth.
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 45]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+8.  Normative References
+
+   [ASN.1]       ITU-T Recommendation X.680 (07/2002) | ISO/IEC 8824-
+                 1:2002 "Information Technology - Abstract Syntax
+                 Notation One (ASN.1): Specification of basic notation".
+
+   [BER]         ITU-T Rec. X.690 (07/2002) | ISO/IEC 8825-1:2002,
+                 "Information technology - ASN.1 encoding rules:
+                 Specification of Basic Encoding Rules (BER), Canonical
+                 Encoding Rules (CER) and Distinguished Encoding Rules
+                 (DER)", 2002.
+
+   [ISO10646]    Universal Multiple-Octet Coded Character Set (UCS) -
+                 Architecture and Basic Multilingual Plane, ISO/IEC
+                 10646-1 : 1993.
+
+   [RFC791]      Postel, J., "Internet Protocol", STD 5, RFC 791,
+                 September 1981.
+
+   [RFC793]      Postel, J., "Transmission Control Protocol", STD 7, RFC
+                 793, September 1981.
+
+   [RFC2119]     Bradner, S., "Key words for use in RFCs to Indicate
+                 Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+   [RFC3454]     Hoffman P. and M. Blanchet, "Preparation of
+                 Internationalized Strings ('stringprep')", RFC 3454,
+                 December 2002.
+
+   [RFC3629]     Yergeau, F., "UTF-8, a transformation format of ISO
+                 10646", STD 63, RFC 3629, November 2003.
+
+   [RFC3986]     Berners-Lee, T., Fielding, R., and L. Masinter,
+                 "Uniform Resource Identifier (URI): Generic Syntax",
+                 STD 66, RFC 3986, January 2005.
+
+   [RFC4013]     Zeilenga, K., "SASLprep: Stringprep Profile for User
+                 Names and Passwords", RFC 4013, February 2005.
+
+   [RFC4234]     Crocker, D. and P. Overell, "Augmented BNF for Syntax
+                 Specifications: ABNF", RFC 4234, October 2005.
+
+   [RFC4346]     Dierks, T. and E. Rescorla, "The TLS Protocol Version
+                 1.1", RFC 4346, March 2006.
+
+   [RFC4422]     Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple
+                 Authentication and Security Layer (SASL)", RFC 4422,
+                 June 2006.
+
+
+
+Sermersheim                 Standards Track                    [Page 46]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   [RFC4510]     Zeilenga, K., Ed., "Lightweight Directory Access
+                 Protocol (LDAP): Technical Specification Road Map", RFC
+                 4510, June 2006.
+
+   [RFC4512]     Zeilenga, K., Lightweight Directory Access Protocol
+                 (LDAP): Directory Information Models", RFC 4512, June
+                 2006.
+
+   [RFC4513]     Harrison, R., Ed., "Lightweight Directory Access
+                 Protocol (LDAP): Authentication Methods and Security
+                 Mechanisms", RFC 4513, June 2006.
+
+   [RFC4514]     Zeilenga, K., Ed., "Lightweight Directory Access
+                 Protocol (LDAP): String Representation of Distinguished
+                 Names", RFC 4514, June 2006.
+
+   [RFC4516]     Smith, M., Ed. and T. Howes, "Lightweight Directory
+                 Access Protocol (LDAP): Uniform Resource Locator", RFC
+                 4516, June 2006.
+
+   [RFC4517]     Legg, S., Ed., "Lightweight Directory Access Protocol
+                 (LDAP): Syntaxes and Matching Rules", RFC 4517, June
+                 2006.
+
+   [RFC4520]     Zeilenga, K., "Internet Assigned Numbers Authority
+                 (IANA) Considerations for the Lightweight Directory
+                 Access Protocol (LDAP)", BCP 64, RFC 4520, June 2006.
+
+   [Unicode]     The Unicode Consortium, "The Unicode Standard, Version
+                 3.2.0" is defined by "The Unicode Standard, Version
+                 3.0" (Reading, MA, Addison-Wesley, 2000. ISBN 0-201-
+                 61633-5), as amended by the "Unicode Standard Annex
+                 #27: Unicode 3.1"
+                 (http://www.unicode.org/reports/tr27/) and by the
+                 "Unicode Standard Annex #28: Unicode 3.2"
+                 (http://www.unicode.org/reports/tr28/).
+
+   [X.500]       ITU-T Rec. X.500, "The Directory: Overview of Concepts,
+                 Models and Service", 1993.
+
+   [X.511]       ITU-T Rec. X.511, "The Directory: Abstract Service
+                 Definition", 1993.
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 47]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+9.  Informative References
+
+   [CharModel]   Whistler, K. and M. Davis, "Unicode Technical Report
+                 #17, Character Encoding Model", UTR17,
+                 <http://www.unicode.org/unicode/reports/tr17/>, August
+                 2000.
+
+   [Glossary]    The Unicode Consortium, "Unicode Glossary",
+                 <http://www.unicode.org/glossary/>.
+
+   [PortReg]     IANA, "Port Numbers",
+                 <http://www.iana.org/assignments/port-numbers>.
+
+   [PROTOS-LDAP] University of Oulu, "PROTOS Test-Suite: c06-ldapv3"
+                 <http://www.ee.oulu.fi/research/ouspg/protos/testing/
+                 c06/ldapv3/>.
+
+10.  IANA Considerations
+
+   The Internet Assigned Numbers Authority (IANA) has updated the LDAP
+   result code registry to indicate that this document provides the
+   definitive technical specification for result codes 0-36, 48-54, 64-
+   70, 80-90.  It is also noted that one resultCode value
+   (strongAuthRequired) has been renamed (to strongerAuthRequired).
+
+   The IANA has also updated the LDAP Protocol Mechanism registry to
+   indicate that this document and [RFC4513] provides the definitive
+   technical specification for the StartTLS (1.3.6.1.4.1.1466.20037)
+   Extended operation.
+
+   IANA has assigned LDAP Object Identifier 18 [RFC4520] to identify the
+   ASN.1 module defined in this document.
+
+        Subject: Request for LDAP Object Identifier Registration
+        Person & email address to contact for further information:
+             Jim Sermersheim <jimse@novell.com>
+        Specification: RFC 4511
+        Author/Change Controller: IESG
+        Comments:
+             Identifies the LDAP ASN.1 module
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 48]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+Appendix A.  LDAP Result Codes
+
+   This normative appendix details additional considerations regarding
+   LDAP result codes and provides a brief, general description of each
+   LDAP result code enumerated in Section 4.1.9.
+
+   Additional result codes MAY be defined for use with extensions
+   [RFC4520].  Client implementations SHALL treat any result code that
+   they do not recognize as an unknown error condition.
+
+   The descriptions provided here do not fully account for result code
+   substitutions used to prevent unauthorized disclosures (such as
+   substitution of noSuchObject for insufficientAccessRights, or
+   invalidCredentials for insufficientAccessRights).
+
+A.1.  Non-Error Result Codes
+
+   These result codes (called "non-error" result codes) do not indicate
+   an error condition:
+
+        success (0),
+        compareFalse (5),
+        compareTrue (6),
+        referral (10), and
+        saslBindInProgress (14).
+
+   The success, compareTrue, and compareFalse result codes indicate
+   successful completion (and, hence, are referred to as "successful"
+   result codes).
+
+   The referral and saslBindInProgress result codes indicate the client
+   needs to take additional action to complete the operation.
+
+A.2.  Result Codes
+
+   Existing LDAP result codes are described as follows:
+
+      success (0)
+         Indicates the successful completion of an operation.  Note:
+         this code is not used with the Compare operation.  See
+         compareFalse (5) and compareTrue (6).
+
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 49]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      operationsError (1)
+         Indicates that the operation is not properly sequenced with
+         relation to other operations (of same or different type).
+
+         For example, this code is returned if the client attempts to
+         StartTLS [RFC4346] while there are other uncompleted operations
+         or if a TLS layer was already installed.
+
+      protocolError (2)
+         Indicates the server received data that is not well-formed.
+
+         For Bind operation only, this code is also used to indicate
+         that the server does not support the requested protocol
+         version.
+
+         For Extended operations only, this code is also used to
+         indicate that the server does not support (by design or
+         configuration) the Extended operation associated with the
+         requestName.
+
+         For request operations specifying multiple controls, this may
+         be used to indicate that the server cannot ignore the order
+         of the controls as specified, or that the combination of the
+         specified controls is invalid or unspecified.
+
+      timeLimitExceeded (3)
+         Indicates that the time limit specified by the client was
+         exceeded before the operation could be completed.
+
+      sizeLimitExceeded (4)
+         Indicates that the size limit specified by the client was
+         exceeded before the operation could be completed.
+
+      compareFalse (5)
+         Indicates that the Compare operation has successfully
+         completed and the assertion has evaluated to FALSE or
+         Undefined.
+
+      compareTrue (6)
+         Indicates that the Compare operation has successfully
+         completed and the assertion has evaluated to TRUE.
+
+      authMethodNotSupported (7)
+         Indicates that the authentication method or mechanism is not
+         supported.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 50]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      strongerAuthRequired (8)
+         Indicates the server requires strong(er) authentication in
+         order to complete the operation.
+
+         When used with the Notice of Disconnection operation, this
+         code indicates that the server has detected that an
+         established security association between the client and
+         server has unexpectedly failed or been compromised.
+
+      referral (10)
+         Indicates that a referral needs to be chased to complete the
+         operation (see Section 4.1.10).
+
+      adminLimitExceeded (11)
+         Indicates that an administrative limit has been exceeded.
+
+      unavailableCriticalExtension (12)
+         Indicates a critical control is unrecognized (see Section
+         4.1.11).
+
+      confidentialityRequired (13)
+         Indicates that data confidentiality protections are required.
+
+      saslBindInProgress (14)
+         Indicates the server requires the client to send a new bind
+         request, with the same SASL mechanism, to continue the
+         authentication process (see Section 4.2).
+
+      noSuchAttribute (16)
+         Indicates that the named entry does not contain the specified
+         attribute or attribute value.
+
+      undefinedAttributeType (17)
+         Indicates that a request field contains an unrecognized
+         attribute description.
+
+      inappropriateMatching (18)
+         Indicates that an attempt was made (e.g., in an assertion) to
+         use a matching rule not defined for the attribute type
+         concerned.
+
+      constraintViolation (19)
+         Indicates that the client supplied an attribute value that
+         does not conform to the constraints placed upon it by the
+         data model.
+
+         For example, this code is returned when multiple values are
+         supplied to an attribute that has a SINGLE-VALUE constraint.
+
+
+
+Sermersheim                 Standards Track                    [Page 51]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      attributeOrValueExists (20)
+         Indicates that the client supplied an attribute or value to
+         be added to an entry, but the attribute or value already
+         exists.
+
+      invalidAttributeSyntax (21)
+         Indicates that a purported attribute value does not conform
+         to the syntax of the attribute.
+
+      noSuchObject (32)
+         Indicates that the object does not exist in the DIT.
+
+      aliasProblem (33)
+         Indicates that an alias problem has occurred.  For example,
+         the code may used to indicate an alias has been dereferenced
+         that names no object.
+
+      invalidDNSyntax (34)
+         Indicates that an LDAPDN or RelativeLDAPDN field (e.g., search
+         base, target entry, ModifyDN newrdn, etc.) of a request does
+         not conform to the required syntax or contains attribute
+         values that do not conform to the syntax of the attribute's
+         type.
+
+      aliasDereferencingProblem (36)
+         Indicates that a problem occurred while dereferencing an
+         alias.  Typically, an alias was encountered in a situation
+         where it was not allowed or where access was denied.
+
+      inappropriateAuthentication (48)
+         Indicates the server requires the client that had attempted
+         to bind anonymously or without supplying credentials to
+         provide some form of credentials.
+
+      invalidCredentials (49)
+         Indicates that the provided credentials (e.g., the user's name
+         and password) are invalid.
+
+      insufficientAccessRights (50)
+         Indicates that the client does not have sufficient access
+         rights to perform the operation.
+
+      busy (51)
+         Indicates that the server is too busy to service the
+         operation.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 52]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+      unavailable (52)
+         Indicates that the server is shutting down or a subsystem
+         necessary to complete the operation is offline.
+
+      unwillingToPerform (53)
+         Indicates that the server is unwilling to perform the
+         operation.
+
+      loopDetect (54)
+         Indicates that the server has detected an internal loop (e.g.,
+         while dereferencing aliases or chaining an operation).
+
+      namingViolation (64)
+         Indicates that the entry's name violates naming restrictions.
+
+      objectClassViolation (65)
+         Indicates that the entry violates object class restrictions.
+
+      notAllowedOnNonLeaf (66)
+         Indicates that the operation is inappropriately acting upon a
+         non-leaf entry.
+
+      notAllowedOnRDN (67)
+         Indicates that the operation is inappropriately attempting to
+         remove a value that forms the entry's relative distinguished
+         name.
+
+      entryAlreadyExists (68)
+         Indicates that the request cannot be fulfilled (added, moved,
+         or renamed) as the target entry already exists.
+
+      objectClassModsProhibited (69)
+         Indicates that an attempt to modify the object class(es) of
+         an entry's 'objectClass' attribute is prohibited.
+
+         For example, this code is returned when a client attempts to
+         modify the structural object class of an entry.
+
+      affectsMultipleDSAs (71)
+         Indicates that the operation cannot be performed as it would
+         affect multiple servers (DSAs).
+
+      other (80)
+         Indicates the server has encountered an internal error.
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 53]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+Appendix B.  Complete ASN.1 Definition
+
+   This appendix is normative.
+
+        Lightweight-Directory-Access-Protocol-V3 {1 3 6 1 1 18}
+        -- Copyright (C) The Internet Society (2006).  This version of
+        -- this ASN.1 module is part of RFC 4511; see the RFC itself
+        -- for full legal notices.
+        DEFINITIONS
+        IMPLICIT TAGS
+        EXTENSIBILITY IMPLIED ::=
+
+        BEGIN
+
+        LDAPMessage ::= SEQUENCE {
+             messageID       MessageID,
+             protocolOp      CHOICE {
+                  bindRequest           BindRequest,
+                  bindResponse          BindResponse,
+                  unbindRequest         UnbindRequest,
+                  searchRequest         SearchRequest,
+                  searchResEntry        SearchResultEntry,
+                  searchResDone         SearchResultDone,
+                  searchResRef          SearchResultReference,
+                  modifyRequest         ModifyRequest,
+                  modifyResponse        ModifyResponse,
+                  addRequest            AddRequest,
+                  addResponse           AddResponse,
+                  delRequest            DelRequest,
+                  delResponse           DelResponse,
+                  modDNRequest          ModifyDNRequest,
+                  modDNResponse         ModifyDNResponse,
+                  compareRequest        CompareRequest,
+                  compareResponse       CompareResponse,
+                  abandonRequest        AbandonRequest,
+                  extendedReq           ExtendedRequest,
+                  extendedResp          ExtendedResponse,
+                  ...,
+                  intermediateResponse  IntermediateResponse },
+             controls       [0] Controls OPTIONAL }
+
+        MessageID ::= INTEGER (0 ..  maxInt)
+
+        maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --
+
+        LDAPString ::= OCTET STRING -- UTF-8 encoded,
+                                    -- [ISO10646] characters
+
+
+
+
+Sermersheim                 Standards Track                    [Page 54]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+        LDAPOID ::= OCTET STRING -- Constrained to <numericoid>
+                                 -- [RFC4512]
+
+        LDAPDN ::= LDAPString -- Constrained to <distinguishedName>
+                              -- [RFC4514]
+
+        RelativeLDAPDN ::= LDAPString -- Constrained to <name-component>
+                                      -- [RFC4514]
+
+        AttributeDescription ::= LDAPString
+                                -- Constrained to <attributedescription>
+                                -- [RFC4512]
+
+        AttributeValue ::= OCTET STRING
+
+        AttributeValueAssertion ::= SEQUENCE {
+             attributeDesc   AttributeDescription,
+             assertionValue  AssertionValue }
+
+        AssertionValue ::= OCTET STRING
+
+        PartialAttribute ::= SEQUENCE {
+             type       AttributeDescription,
+             vals       SET OF value AttributeValue }
+
+        Attribute ::= PartialAttribute(WITH COMPONENTS {
+             ...,
+             vals (SIZE(1..MAX))})
+
+        MatchingRuleId ::= LDAPString
+
+        LDAPResult ::= SEQUENCE {
+             resultCode         ENUMERATED {
+                  success                      (0),
+                  operationsError              (1),
+                  protocolError                (2),
+                  timeLimitExceeded            (3),
+                  sizeLimitExceeded            (4),
+                  compareFalse                 (5),
+                  compareTrue                  (6),
+                  authMethodNotSupported       (7),
+                  strongerAuthRequired         (8),
+                       -- 9 reserved --
+                  referral                     (10),
+                  adminLimitExceeded           (11),
+                  unavailableCriticalExtension (12),
+                  confidentialityRequired      (13),
+                  saslBindInProgress           (14),
+
+
+
+Sermersheim                 Standards Track                    [Page 55]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+                  noSuchAttribute              (16),
+                  undefinedAttributeType       (17),
+                  inappropriateMatching        (18),
+                  constraintViolation          (19),
+                  attributeOrValueExists       (20),
+                  invalidAttributeSyntax       (21),
+                       -- 22-31 unused --
+                  noSuchObject                 (32),
+                  aliasProblem                 (33),
+                  invalidDNSyntax              (34),
+                       -- 35 reserved for undefined isLeaf --
+                  aliasDereferencingProblem    (36),
+                       -- 37-47 unused --
+                  inappropriateAuthentication  (48),
+                  invalidCredentials           (49),
+                  insufficientAccessRights     (50),
+                  busy                         (51),
+                  unavailable                  (52),
+                  unwillingToPerform           (53),
+                  loopDetect                   (54),
+                       -- 55-63 unused --
+                  namingViolation              (64),
+                  objectClassViolation         (65),
+                  notAllowedOnNonLeaf          (66),
+                  notAllowedOnRDN              (67),
+                  entryAlreadyExists           (68),
+                  objectClassModsProhibited    (69),
+                       -- 70 reserved for CLDAP --
+                  affectsMultipleDSAs          (71),
+                       -- 72-79 unused --
+                  other                        (80),
+                  ...  },
+             matchedDN          LDAPDN,
+             diagnosticMessage  LDAPString,
+             referral           [3] Referral OPTIONAL }
+
+        Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
+
+        URI ::= LDAPString     -- limited to characters permitted in
+                               -- URIs
+
+        Controls ::= SEQUENCE OF control Control
+
+        Control ::= SEQUENCE {
+             controlType             LDAPOID,
+             criticality             BOOLEAN DEFAULT FALSE,
+             controlValue            OCTET STRING OPTIONAL }
+
+
+
+
+Sermersheim                 Standards Track                    [Page 56]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+        BindRequest ::= [APPLICATION 0] SEQUENCE {
+             version                 INTEGER (1 ..  127),
+             name                    LDAPDN,
+             authentication          AuthenticationChoice }
+
+        AuthenticationChoice ::= CHOICE {
+             simple                  [0] OCTET STRING,
+                                     -- 1 and 2 reserved
+             sasl                    [3] SaslCredentials,
+             ...  }
+
+        SaslCredentials ::= SEQUENCE {
+             mechanism               LDAPString,
+             credentials             OCTET STRING OPTIONAL }
+
+        BindResponse ::= [APPLICATION 1] SEQUENCE {
+             COMPONENTS OF LDAPResult,
+             serverSaslCreds    [7] OCTET STRING OPTIONAL }
+
+        UnbindRequest ::= [APPLICATION 2] NULL
+
+        SearchRequest ::= [APPLICATION 3] SEQUENCE {
+             baseObject      LDAPDN,
+             scope           ENUMERATED {
+                  baseObject              (0),
+                  singleLevel             (1),
+                  wholeSubtree            (2),
+                  ...  },
+             derefAliases    ENUMERATED {
+                  neverDerefAliases       (0),
+                  derefInSearching        (1),
+                  derefFindingBaseObj     (2),
+                  derefAlways             (3) },
+             sizeLimit       INTEGER (0 ..  maxInt),
+             timeLimit       INTEGER (0 ..  maxInt),
+             typesOnly       BOOLEAN,
+             filter          Filter,
+             attributes      AttributeSelection }
+
+        AttributeSelection ::= SEQUENCE OF selector LDAPString
+                       -- The LDAPString is constrained to
+                       -- <attributeSelector> in Section 4.5.1.8
+
+        Filter ::= CHOICE {
+             and             [0] SET SIZE (1..MAX) OF filter Filter,
+             or              [1] SET SIZE (1..MAX) OF filter Filter,
+             not             [2] Filter,
+             equalityMatch   [3] AttributeValueAssertion,
+
+
+
+Sermersheim                 Standards Track                    [Page 57]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+             substrings      [4] SubstringFilter,
+             greaterOrEqual  [5] AttributeValueAssertion,
+             lessOrEqual     [6] AttributeValueAssertion,
+             present         [7] AttributeDescription,
+             approxMatch     [8] AttributeValueAssertion,
+             extensibleMatch [9] MatchingRuleAssertion,
+             ...  }
+
+        SubstringFilter ::= SEQUENCE {
+             type           AttributeDescription,
+             substrings     SEQUENCE SIZE (1..MAX) OF substring CHOICE {
+                  initial [0] AssertionValue,  -- can occur at most once
+                  any     [1] AssertionValue,
+                  final   [2] AssertionValue } -- can occur at most once
+             }
+
+        MatchingRuleAssertion ::= SEQUENCE {
+             matchingRule    [1] MatchingRuleId OPTIONAL,
+             type            [2] AttributeDescription OPTIONAL,
+             matchValue      [3] AssertionValue,
+             dnAttributes    [4] BOOLEAN DEFAULT FALSE }
+
+        SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
+             objectName      LDAPDN,
+             attributes      PartialAttributeList }
+
+        PartialAttributeList ::= SEQUENCE OF
+                             partialAttribute PartialAttribute
+
+        SearchResultReference ::= [APPLICATION 19] SEQUENCE
+                                  SIZE (1..MAX) OF uri URI
+
+        SearchResultDone ::= [APPLICATION 5] LDAPResult
+
+        ModifyRequest ::= [APPLICATION 6] SEQUENCE {
+             object          LDAPDN,
+             changes         SEQUENCE OF change SEQUENCE {
+                  operation       ENUMERATED {
+                       add     (0),
+                       delete  (1),
+                       replace (2),
+                       ...  },
+                  modification    PartialAttribute } }
+
+        ModifyResponse ::= [APPLICATION 7] LDAPResult
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 58]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+        AddRequest ::= [APPLICATION 8] SEQUENCE {
+             entry           LDAPDN,
+             attributes      AttributeList }
+
+        AttributeList ::= SEQUENCE OF attribute Attribute
+
+        AddResponse ::= [APPLICATION 9] LDAPResult
+
+        DelRequest ::= [APPLICATION 10] LDAPDN
+
+        DelResponse ::= [APPLICATION 11] LDAPResult
+
+        ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
+             entry           LDAPDN,
+             newrdn          RelativeLDAPDN,
+             deleteoldrdn    BOOLEAN,
+             newSuperior     [0] LDAPDN OPTIONAL }
+
+        ModifyDNResponse ::= [APPLICATION 13] LDAPResult
+
+        CompareRequest ::= [APPLICATION 14] SEQUENCE {
+             entry           LDAPDN,
+             ava             AttributeValueAssertion }
+
+        CompareResponse ::= [APPLICATION 15] LDAPResult
+
+        AbandonRequest ::= [APPLICATION 16] MessageID
+
+        ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
+             requestName      [0] LDAPOID,
+             requestValue     [1] OCTET STRING OPTIONAL }
+
+        ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
+             COMPONENTS OF LDAPResult,
+             responseName     [10] LDAPOID OPTIONAL,
+             responseValue    [11] OCTET STRING OPTIONAL }
+
+        IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
+             responseName     [0] LDAPOID OPTIONAL,
+             responseValue    [1] OCTET STRING OPTIONAL }
+
+        END
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 59]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+Appendix C.  Changes
+
+   This appendix is non-normative.
+
+   This appendix summarizes substantive changes made to RFC 2251, RFC
+   2830, and RFC 3771.
+
+C.1.  Changes Made to RFC 2251
+
+   This section summarizes the substantive changes made to Sections 1,
+   2, 3.1, and 4, and the remainder of RFC 2251.  Readers should
+   consult [RFC4512] and [RFC4513] for summaries of changes to other
+   sections.
+
+C.1.1.  Section 1 (Status of this Memo)
+
+   - Removed IESG note.  Post publication of RFC 2251, mandatory LDAP
+     authentication mechanisms have been standardized which are
+     sufficient to remove this note.  See [RFC4513] for authentication
+     mechanisms.
+
+C.1.2.  Section 3.1 (Protocol Model) and others
+
+   - Removed notes giving history between LDAP v1, v2, and v3.  Instead,
+     added sufficient language so that this document can stand on its
+     own.
+
+C.1.3.  Section 4 (Elements of Protocol)
+
+   - Clarified where the extensibility features of ASN.1 apply to the
+     protocol.  This change affected various ASN.1 types by the
+     inclusion of ellipses (...) to certain elements.
+   - Removed the requirement that servers that implement version 3 or
+     later MUST provide the 'supportedLDAPVersion' attribute.  This
+     statement provided no interoperability advantages.
+
+C.1.4.  Section 4.1.1 (Message Envelope)
+
+   - There was a mandatory requirement for the server to return a
+     Notice of Disconnection and drop the transport connection when a
+     PDU is malformed in a certain way.  This has been updated such that
+     the server SHOULD return the Notice of Disconnection, and it MUST
+     terminate the LDAP Session.
+
+C.1.5.  Section 4.1.1.1 (Message ID)
+
+   - Required that the messageID of requests MUST be non-zero as the
+     zero is reserved for Notice of Disconnection.
+
+
+
+Sermersheim                 Standards Track                    [Page 60]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - Specified when it is and isn't appropriate to return an already
+     used messageID.  RFC 2251 accidentally imposed synchronous server
+     behavior in its wording of this.
+
+C.1.6.  Section 4.1.2 (String Types)
+
+   - Stated that LDAPOID is constrained to <numericoid> from [RFC4512].
+
+C.1.7.  Section 4.1.5.1 (Binary Option) and others
+
+   - Removed the Binary Option from the specification.  There are
+     numerous interoperability problems associated with this method of
+     alternate attribute type encoding.  Work to specify a suitable
+     replacement is ongoing.
+
+C.1.8.  Section 4.1.8 (Attribute)
+
+   - Combined the definitions of PartialAttribute and Attribute here,
+     and defined Attribute in terms of PartialAttribute.
+
+C.1.9.  Section 4.1.10 (Result Message)
+
+   - Renamed "errorMessage" to "diagnosticMessage" as it is allowed to
+     be sent for non-error results.
+   - Moved some language into Appendix A, and referred the reader there.
+   - Allowed matchedDN to be present for other result codes than those
+     listed in RFC 2251.
+   - Renamed the code "strongAuthRequired" to "strongerAuthRequired" to
+     clarify that this code may often be returned to indicate that a
+     stronger authentication is needed to perform a given operation.
+
+C.1.10.  Section 4.1.11 (Referral)
+
+   - Defined referrals in terms of URIs rather than URLs.
+   - Removed the requirement that all referral URIs MUST be equally
+     capable of progressing the operation.  The statement was ambiguous
+     and provided no instructions on how to carry it out.
+   - Added the requirement that clients MUST NOT loop between servers.
+   - Clarified the instructions for using LDAPURLs in referrals, and in
+     doing so added a recommendation that the scope part be present.
+   - Removed imperatives which required clients to use URLs in specific
+     ways to progress an operation.  These did nothing for
+     interoperability.
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 61]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+C.1.11.  Section 4.1.12 (Controls)
+
+   - Specified how control values defined in terms of ASN.1 are to be
+     encoded.
+   - Noted that the criticality field is only applied to request
+     messages (except UnbindRequest), and must be ignored when present
+     on response messages and UnbindRequest.
+   - Specified that non-critical controls may be ignored at the
+     server's discretion.  There was confusion in the original wording
+     which led some to believe that recognized controls may not be
+     ignored as long as they were associated with a proper request.
+   - Added language regarding combinations of controls and the ordering
+     of controls on a message.
+   - Specified that when the semantics of the combination of controls
+     is undefined or unknown, it results in a protocolError.
+   - Changed "The server MUST be prepared" to "Implementations MUST be
+     prepared" in paragraph 8 to reflect that both client and server
+     implementations must be able to handle this (as both parse
+     controls).
+
+C.1.12.  Section 4.2 (Bind Operation)
+
+   - Mandated that servers return protocolError when the version is not
+     supported.
+   - Disambiguated behavior when the simple authentication is used, the
+     name is empty, and the password is non-empty.
+   - Required servers to not dereference aliases for Bind.  This was
+     added for consistency with other operations and to help ensure
+     data consistency.
+   - Required that textual passwords be transferred as UTF-8 encoded
+     Unicode, and added recommendations on string preparation.  This was
+     to help ensure interoperability of passwords being sent from
+     different clients.
+
+C.1.13.  Section 4.2.1 (Sequencing of the Bind Request)
+
+   - This section was largely reorganized for readability, and language
+     was added to clarify the authentication state of failed and
+     abandoned Bind operations.
+   - Removed: "If a SASL transfer encryption or integrity mechanism has
+     been negotiated, that mechanism does not support the changing of
+     credentials from one identity to another, then the client MUST
+     instead establish a new connection."
+     If there are dependencies between multiple negotiations of a
+     particular SASL mechanism, the technical specification for that
+     SASL mechanism details how applications are to deal with them.
+     LDAP should not require any special handling.
+   - Dropped MUST imperative in paragraph 3 to align with [RFC2119].
+
+
+
+Sermersheim                 Standards Track                    [Page 62]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+   - Mandated that clients not send non-Bind operations while a Bind is
+     in progress, and suggested that servers not process them if they
+     are received.  This is needed to ensure proper sequencing of the
+     Bind in relationship to other operations.
+
+C.1.14.  Section 4.2.3 (Bind Response)
+
+   - Moved most error-related text to Appendix A, and added text
+     regarding certain errors used in conjunction with the Bind
+     operation.
+   - Prohibited the server from specifying serverSaslCreds when not
+     appropriate.
+
+C.1.15.  Section 4.3 (Unbind Operation)
+
+   - Specified that both peers are to cease transmission and terminate
+     the LDAP session for the Unbind operation.
+
+C.1.16.  Section 4.4 (Unsolicited Notification)
+
+   - Added instructions for future specifications of Unsolicited
+     Notifications.
+
+C.1.17.  Section 4.5.1 (Search Request)
+
+   - SearchRequest attributes is now defined as an AttributeSelection
+     type rather than AttributeDescriptionList, and an ABNF is
+     provided.
+   - SearchRequest attributes may contain duplicate attribute
+     descriptions.  This was previously prohibited.  Now servers are
+     instructed to ignore subsequent names when they are duplicated.
+     This was relaxed in order to allow different short names and also
+     OIDs to be requested for an attribute.
+   - The present search filter now evaluates to Undefined when the
+     specified attribute is not known to the server.  It used to
+     evaluate to FALSE, which caused behavior inconsistent with what
+     most would expect, especially when the 'not' operator was used.
+   - The Filter choice SubstringFilter substrings type is now defined
+     with a lower bound of 1.
+   - The SubstringFilter substrings 'initial, 'any', and 'final' types
+     are now AssertionValue rather than LDAPString.  Also, added
+     imperatives stating that 'initial' (if present) must be listed
+     first, and 'final' (if present) must be listed last.
+   - Disambiguated the semantics of the derefAliases choices.  There was
+     question as to whether derefInSearching applied to the base object
+     in a wholeSubtree Search.
+   - Added instructions for equalityMatch, substrings, greaterOrEqual,
+     lessOrEqual, and approxMatch.
+
+
+
+Sermersheim                 Standards Track                    [Page 63]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+
+C.1.18.  Section 4.5.2 (Search Result)
+
+   - Recommended that servers not use attribute short names when it
+     knows they are ambiguous or may cause interoperability problems.
+   - Removed all mention of ExtendedResponse due to lack of
+     implementation.
+
+C.1.19.  Section 4.5.3 (Continuation References in the Search Result)
+
+   - Made changes similar to those made to Section 4.1.11.
+
+C.1.20.  Section 4.5.3.1 (Example)
+
+   - Fixed examples to adhere to changes made to Section 4.5.3.
+
+C.1.21.  Section 4.6 (Modify Operation)
+
+   - Replaced AttributeTypeAndValues with Attribute as they are
+     equivalent.
+   - Specified the types of modification changes that might
+     temporarily violate schema.  Some readers were under the impression
+     that any temporary schema violation was allowed.
+
+C.1.22.  Section 4.7 (Add Operation)
+
+   - Aligned Add operation with X.511 in that the attributes of the RDN
+     are used in conjunction with the listed attributes to create the
+     entry.  Previously, Add required that the distinguished values be
+     present in the listed attributes.
+   - Removed requirement that the objectClass attribute MUST be
+     specified as some DSE types do not require this attribute.
+     Instead, generic wording was added, requiring the added entry to
+     adhere to the data model.
+   - Removed recommendation regarding placement of objects.  This is
+     covered in the data model document.
+
+C.1.23.  Section 4.9 (Modify DN Operation)
+
+   - Required servers to not dereference aliases for Modify DN.  This
+     was added for consistency with other operations and to help ensure
+     data consistency.
+   - Allow Modify DN to fail when moving between naming contexts.
+   - Specified what happens when the attributes of the newrdn are not
+     present on the entry.
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 64]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+C.1.24.  Section 4.10 (Compare Operation)
+
+   - Specified that compareFalse means that the Compare took place and
+     the result is false.  There was confusion that led people to
+     believe that an Undefined match resulted in compareFalse.
+   - Required servers to not dereference aliases for Compare.  This was
+     added for consistency with other operations and to help ensure
+     data consistency.
+
+C.1.25.  Section 4.11 (Abandon Operation)
+
+   - Explained that since Abandon returns no response, clients should
+     not use it if they need to know the outcome.
+   - Specified that Abandon and Unbind cannot be abandoned.
+
+C.1.26.  Section 4.12 (Extended Operation)
+
+   - Specified how values of Extended operations defined in terms of
+     ASN.1 are to be encoded.
+   - Added instructions on what Extended operation specifications
+     consist of.
+   - Added a recommendation that servers advertise supported Extended
+     operations.
+
+C.1.27.  Section 5.2 (Transfer Protocols)
+
+   - Moved referral-specific instructions into referral-related
+     sections.
+
+C.1.28.  Section 7 (Security Considerations)
+
+   - Reworded notes regarding SASL not protecting certain aspects of
+     the LDAP Bind messages.
+   - Noted that Servers are encouraged to prevent directory
+     modifications by clients that have authenticated anonymously
+     [RFC4513].
+   - Added a note regarding the possibility of changes to security
+     factors (authentication, authorization, and data confidentiality).
+   - Warned against following referrals that may have been injected in
+     the data stream.
+   - Noted that servers should protect information equally, whether in
+     an error condition or not, and mentioned matchedDN,
+     diagnosticMessage, and resultCodes specifically.
+   - Added a note regarding malformed and long encodings.
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 65]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+C.1.29.  Appendix A (Complete ASN.1 Definition)
+
+   - Added "EXTENSIBILITY IMPLIED" to ASN.1 definition.
+   - Removed AttributeType.  It is not used.
+
+C.2.  Changes Made to RFC 2830
+
+   This section summarizes the substantive changes made to Sections of
+   RFC 2830.  Readers should consult [RFC4513] for summaries of changes
+   to other sections.
+
+C.2.1.  Section 2.3 (Response other than "success")
+
+   - Removed wording indicating that referrals can be returned from
+     StartTLS.
+   - Removed requirement that only a narrow set of result codes can be
+     returned.  Some result codes are required in certain scenarios, but
+     any other may be returned if appropriate.
+   - Removed requirement that the ExtendedResponse.responseName MUST be
+     present.  There are circumstances where this is impossible, and
+     requiring this is at odds with language in Section 4.12.
+
+C.2.1.  Section 4 (Closing a TLS Connection)
+
+   - Reworded most of this section to align with definitions of the
+     LDAP protocol layers.
+   - Removed instructions on abrupt closure as this is covered in other
+     areas of the document (specifically, Section 5.3)
+
+C.3.  Changes Made to RFC 3771
+
+   - Rewrote to fit into this document.  In general, semantics were
+     preserved.  Supporting and background language seen as redundant
+     due to its presence in this document was omitted.
+
+   - Specified that Intermediate responses to a request may be of
+     different types, and one of the response types may be specified to
+     have no response value.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 66]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+Editor's Address
+
+   Jim Sermersheim
+   Novell, Inc.
+   1800 South Novell Place
+   Provo, Utah 84606, USA
+
+   Phone: +1 801 861-3088
+   EMail: jimse@novell.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 67]
+\f
+RFC 4511                         LDAPv3                        June 2006
+
+
+Full Copyright Statement
+
+   Copyright (C) The Internet Society (2006).
+
+   This document is subject to the rights, licenses and restrictions
+   contained in BCP 78, and except as set forth therein, the authors
+   retain all their rights.
+
+   This document and the information contained herein are provided on an
+   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+   The IETF takes no position regarding the validity or scope of any
+   Intellectual Property Rights or other rights that might be claimed to
+   pertain to the implementation or use of the technology described in
+   this document or the extent to which any license under such rights
+   might or might not be available; nor does it represent that it has
+   made any independent effort to identify any such rights.  Information
+   on the procedures with respect to rights in RFC documents can be
+   found in BCP 78 and BCP 79.
+
+   Copies of IPR disclosures made to the IETF Secretariat and any
+   assurances of licenses to be made available, or the result of an
+   attempt made to obtain a general license or permission for the use of
+   such proprietary rights by implementers or users of this
+   specification can be obtained from the IETF on-line IPR repository at
+   http://www.ietf.org/ipr.
+
+   The IETF invites any interested party to bring to its attention any
+   copyrights, patents or patent applications, or other proprietary
+   rights that may cover technology that may be required to implement
+   this standard.  Please address the information to the IETF at
+   ietf-ipr@ietf.org.
+
+Acknowledgement
+
+   Funding for the RFC Editor function is provided by the IETF
+   Administrative Support Activity (IASA).
+
+
+
+
+
+
+
+Sermersheim                 Standards Track                    [Page 68]
+\f
diff --git a/examples/sample.makefile.regen b/examples/sample.makefile.regen
new file mode 100644 (file)
index 0000000..53c709b
--- /dev/null
@@ -0,0 +1,170 @@
+#!/bin/sh
+#
+# This script attempts to compile the given ASN.1 specification by first
+# building the specialized Makefile.
+#
+# The information which is necessary for this script is passed from the
+# Makefile which is going to be replaced with an updated Makefile.
+#
+
+if test -z "$ASN_PDU"  \
+ -o  -z "$ASN_MODULES" \
+ -o  -z "$ASN_PROGRAM" \
+; then
+    cat <<-NOTE
+       ASN_CMDOPTS="$ASN_CMDOPTS"
+       ASN_MODULES="$ASN_MODULES"
+       ASN_PDU="$ASN_PDU"
+       ASN_PROGRAM="$ASN_PROGRAM"
+       ASN_PDU, ASN_MODULES, and ASN_PROGRAM are mandatory.
+NOTE
+       exit 1
+fi
+
+EFFECTIVE_CMDOPTS="-pdu=${ASN_PDU} ${ASN_CMDOPTS} ${ASN_MODULES}"
+
+if test -x ../../asn1c/asn1c ; then
+  echo "Compiling ${ASN_MODULES} using local compiler"
+  ../../asn1c/asn1c -S ../../skeletons ${EFFECTIVE_CMDOPTS} || exit $?
+else
+  echo "Compiling ${ASN_MODULES} using system compiler"
+  asn1c ${EFFECTIVE_CMDOPTS} || exit $?
+fi
+
+if test ! -f converter-example.mk ; then
+       echo "converter-example.mk is missing"
+       exit 1
+fi
+
+EXTRA_CFLAGS="-DJUNKTEST -D_DEFAULT_SOURCE"
+test -f config.h && EXTRA_CFLAGS="-DHAVE_CONFIG_H ${EXTRA_CFLAGS}"
+test -n "$TITLE" && EXTRA_CFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CFLAGS}"
+
+{
+       echo "ASN_PROGRAM = ${ASN_PROGRAM}"
+       echo "CFLAGS += ${EXTRA_CFLAGS}"
+       echo "begin: ${ASN_PDU}.c maybe-wip-pause all"
+    echo
+       echo "-include converter-example.mk"
+    echo
+       echo "${ASN_PDU}.c: $0 ${ASN_MODULES}"
+       echo "  make regen-makefile"
+       echo "  @touch ${ASN_PDU}.c"
+       echo "  make"
+       echo
+       echo "regen-makefile:"
+       test -n "$TITLE" && echo "      TITLE=\"$TITLE\" \\"
+       echo "  ASN_CMDOPTS=\"${ASN_CMDOPTS}\" \\"
+       echo "  ASN_MODULES=\"${ASN_MODULES}\" \\"
+       echo "  ASN_PDU=${ASN_PDU} \\"
+       echo "  ASN_PROGRAM=${ASN_PROGRAM} \\"
+       echo "  $0"
+       echo
+       echo 'check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per check-aper'
+       echo '  @echo ================'
+       echo '  @echo All tests passed'
+       echo '  @echo ================'
+       echo
+       echo 'check-ber:'
+       echo "  @if test -f sample-${ASN_PDU}-1.[db]er ; then \\"
+       echo "  for f in sample-*-*.[db]er; do \\"
+       echo '  pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
+       echo '  diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \'
+       echo '  rm -f ./.tmp.[12].$$$$; \'
+       echo '  echo "Test junking $$f (please wait)..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \'
+       echo '  done; done; fi'
+       echo
+       echo 'check-xer:'
+       echo "  @if test -f sample-${ASN_PDU}-1.xer ; then \\"
+       echo "  for f in sample-*-*.xer; do \\"
+       echo '  pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
+       echo '  diff $$f ./.tmp.2.$$$$ || exit 4; \'
+       echo '  rm -f ./.tmp.[12].$$$$; \'
+       echo '  echo "Test junking $$f (please wait)..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \'
+       echo '  done; done; fi'
+       echo
+       echo 'check-oer:'
+       echo "  @if test -f sample-${ASN_PDU}-1.*oer ; then \\"
+       echo "  for f in sample-*-*.*oer; do \\"
+       echo '  pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
+       echo '  diff $$f ./.tmp.2.$$$$ || exit 4; \'
+       echo '  rm -f ./.tmp.[12].$$$$; \'
+       echo '  echo "Test junking $$f (please wait) ($$b) ..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \'
+       echo '  done; done; fi'
+       echo
+       echo 'check-per:'
+       echo "  @if test -f sample-${ASN_PDU}-1-nopad.per ; then \\"
+       echo "  for f in sample-*-[1-9]-nopad.per; do \\"
+       echo '  pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \'
+       echo '  diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \'
+       echo '  rm -f ./.tmp.[123].$$$$; \'
+       echo '  echo "Test junking $$f (please wait)..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \'
+       echo '  done; done; fi'
+       echo "  @if test -f sample-${ASN_PDU}-1.per ; then \\"
+       echo "  for f in sample-*-[1-9].per; do \\"
+       echo '  pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \'
+       echo '  diff $$f ./.tmp.1.$$$$ || exit 6; \'
+       echo '  rm -f ./.tmp.[12].$$$$; \'
+       echo '  echo "Test junking $$f (please wait)..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \'
+       echo '  done; done; fi'
+       echo
+       echo 'check-aper:'
+       echo "  @files=\$\$(find . -type f -regex '^.*\/sample-.*-[0-9]+.aper\$\$' | sort -V); \\"
+       echo '  if [ -n "$$files" ]; then \'
+       echo '  for f in $$files; do \'
+       echo '  pdu=`echo $$f | sed -E -e "s/.*sample-([A-Za-z0-9-]+)-[0-9]+.*/\\1/"`; \'
+       echo '  for b in 1 17 33 980 8192; do \'
+       echo '  echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -iaper -oxer $$f > ./.tmp.1.$$$$ || exit 3; \'
+       echo '  ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oaper ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \'
+       echo '  diff $$f ./.tmp.2.$$$$ || exit 6; \'
+       echo '  rm -f ./.tmp.[12].$$$$; \'
+       echo '  echo "Test junking $$f (please wait)..."; \'
+       echo '  ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iaper -onull $$f || exit 7; \'
+       echo '  ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iaper -onull $$f || exit 8; \'
+       echo '  done; done; fi'
+       echo
+       echo "maybe-wip-pause:"
+       echo "  @if [ -f WIP ]; then cat WIP; sleep 2; fi"
+       echo
+       echo "distclean: clean"
+       echo '  rm -f $(ASN_MODULE_SRCS)'
+       echo '  rm -f $(ASN_MODULE_HDRS)'
+       echo '  rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)'
+       echo "  rm -f converter-example.mk"
+} > Makefile
+
+echo
+echo "Makefile generation finished"
diff --git a/examples/sample.source.1609.2/Makefile b/examples/sample.source.1609.2/Makefile
new file mode 100644 (file)
index 0000000..f961604
--- /dev/null
@@ -0,0 +1,107 @@
+ASN_PROGRAM = 1609-2-dump
+CFLAGS += -DASN_CONVERTER_TITLE="IEEE 1609.2-2016 decoder" -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: Certificate.c maybe-wip-pause all
+
+-include converter-example.mk
+
+Certificate.c: ../sample.makefile.regen ../IEEE-1609.2-2016.asn1
+       make regen-makefile
+       @touch Certificate.c
+       make
+
+regen-makefile:
+       TITLE="IEEE 1609.2-2016 decoder" \
+       ASN_CMDOPTS="-pdu=auto -pdu=Ieee1609Dot2Data -fcompound-names" \
+       ASN_MODULES="../IEEE-1609.2-2016.asn1" \
+       ASN_PDU=Certificate \
+       ASN_PROGRAM=1609-2-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-Certificate-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-Certificate-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-Certificate-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-Certificate-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-Certificate-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.1609.2/README b/examples/sample.source.1609.2/README
new file mode 100644 (file)
index 0000000..1886808
--- /dev/null
@@ -0,0 +1,46 @@
+
+GENERAL INFORMATION
+===================
+
+The IEEE 1609.2-2016 "Wireless Access in Vehicular Environments --
+Security Services for Applications and Management Messages" messages decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../IEEE-1609.2-2016.asn1 file.
+
+THERE IS NO IEEE-1609.2-2016.asn1 FILE THERE YET!
+
+OBTAINING THE IEEE 1609.2-2016 SPECIFICATION
+============================================
+
+Download the standard containing the ASN.1 module files from
+https://standards.ieee.org/findstds/standard/1609.2-2016.html
+
+You should extract the ASN.1 modules from there and save it
+into a single ../IEEE-1609.2-2016.asn1 file. This file should start with
+the following line
+
+    IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111)
+
+or
+
+    IEEE1609dot2 {iso(1) identified-organization(3) ieee(111)
+
+(both of these modules should be present in the file; order is unimportant)
+and end with the "END" token.
+Be careful not to copy any non-ASN.1 preambles from that .DOC file.
+
+After obtaining the IEEE-1609.2-2016.asn1, type `make` in the directory
+containing this README file.
+
+1609-2-dump USAGE
+=================
+
+The 1609-2-dump utility may be used to dump the contents of the
+OER-encoded Certificate file:
+
+       ./1609-2-dump 1609cert.oer      # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./1609-2-dump -h
+
diff --git a/examples/sample.source.1609.2/config.h b/examples/sample.source.1609.2/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.1609.2/sample-Certificate-1.coer b/examples/sample.source.1609.2/sample-Certificate-1.coer
new file mode 100644 (file)
index 0000000..3d5c5aa
Binary files /dev/null and b/examples/sample.source.1609.2/sample-Certificate-1.coer differ
diff --git a/examples/sample.source.1609.2/sample-Certificate-1.xer b/examples/sample.source.1609.2/sample-Certificate-1.xer
new file mode 100644 (file)
index 0000000..3bbed36
--- /dev/null
@@ -0,0 +1,95 @@
+<Certificate>
+    <version>3</version>
+    <type><explicit/></type>
+    <issuer>
+        <sha256AndDigest>AF 23 26 18 BE 5E 6F 55</sha256AndDigest>
+    </issuer>
+    <toBeSigned>
+        <id>
+            <name>vehicle-test.example.com</name>
+        </id>
+        <cracaId>5E 6F 5B</cracaId>
+        <crlSeries>2</crlSeries>
+        <validityPeriod>
+            <start>17469212</start>
+            <duration>
+                <years>10</years>
+            </duration>
+        </validityPeriod>
+        <region>
+            <identifiedRegion>
+                    <countryOnly>12</countryOnly>
+                
+                    <countryOnly>34</countryOnly>
+                
+            </identifiedRegion>
+        </region>
+        <appPermissions>
+            <PsidSsp>
+                <psid>35</psid>
+                <ssp>
+                    <opaque>83 00 01</opaque>
+                </ssp>
+            </PsidSsp>
+        </appPermissions>
+        <certIssuePermissions>
+            <PsidGroupPermissions>
+                <subjectPermissions>
+                    <all></all>
+                </subjectPermissions>
+                <minChainDepth>2</minChainDepth>
+                <chainDepthRange>0</chainDepthRange>
+                <eeType>
+                    11000000
+                </eeType>
+            </PsidGroupPermissions>
+            <PsidGroupPermissions>
+                <subjectPermissions>
+                    <explicit>
+                        <PsidSspRange>
+                            <psid>35</psid>
+                            <sspRange>
+                                <all></all>
+                            </sspRange>
+                        </PsidSspRange>
+                        <PsidSspRange>
+                            <psid>256</psid>
+                            <sspRange>
+                                <all></all>
+                            </sspRange>
+                        </PsidSspRange>
+                    </explicit>
+                </subjectPermissions>
+                <minChainDepth>1</minChainDepth>
+                <chainDepthRange>-1</chainDepthRange>
+                <eeType>
+                    11000000
+                </eeType>
+            </PsidGroupPermissions>
+        </certIssuePermissions>
+        <verifyKeyIndicator>
+            <verificationKey>
+                <ecdsaNistP256>
+                    <compressed-y-0>
+                        08 C3 C0 70 B0 40 C0 40 10 80 33 07 0D 05 01 CE 
+                        0C 0A 08 06 01 7B 00 F0 30 D2 03 EA 04 BE 09 03
+                    </compressed-y-0>
+                </ecdsaNistP256>
+            </verificationKey>
+        </verifyKeyIndicator>
+    </toBeSigned>
+    <signature>
+        <ecdsaNistP256Signature>
+            <r>
+                <x-only>
+                    08 B2 03 01 04 02 0A 0D 01 0C 01 05 C0 F8 0B B1 
+                    46 02 39 34 8D 17 40 5C 1A 84 51 51 D4 06 12 00
+                </x-only>
+            </r>
+            <s>
+                26 17 CF 4E 6B 25 09 7F 03 F5 02 AD 0C 6F 2F 12 
+                59 74 70 0D 31 A6 0F D1 EF 12 04 0E 4D 82 31 AB
+            </s>
+        </ecdsaNistP256Signature>
+    </signature>
+</Certificate>
diff --git a/examples/sample.source.1609.2/sample-Certificate-2.coer b/examples/sample.source.1609.2/sample-Certificate-2.coer
new file mode 100644 (file)
index 0000000..3664469
Binary files /dev/null and b/examples/sample.source.1609.2/sample-Certificate-2.coer differ
diff --git a/examples/sample.source.1609.2/sample-Certificate-2.xer b/examples/sample.source.1609.2/sample-Certificate-2.xer
new file mode 100644 (file)
index 0000000..6afaab9
--- /dev/null
@@ -0,0 +1,46 @@
+<Certificate>
+    <version>3</version>
+    <type><implicit/></type>
+    <issuer>
+        <sha256AndDigest>90 E3 08 2D A8 0E 64 01</sha256AndDigest>
+    </issuer>
+    <toBeSigned>
+        <id>
+            <binaryId>90 77 72 1D 06 CB 01 60</binaryId>
+        </id>
+        <cracaId>5E 6F 5B</cracaId>
+        <crlSeries>3</crlSeries>
+        <validityPeriod>
+            <start>20493427</start>
+            <duration>
+                <hours>69</hours>
+            </duration>
+        </validityPeriod>
+        <region>
+            <identifiedRegion>
+                    <countryOnly>12</countryOnly>
+                
+                    <countryOnly>34</countryOnly>
+                
+                    <countryOnly>56</countryOnly>
+                
+            </identifiedRegion>
+        </region>
+        <appPermissions>
+            <PsidSsp>
+                <psid>135</psid>
+                <ssp>
+                    <opaque></opaque>
+                </ssp>
+            </PsidSsp>
+        </appPermissions>
+        <verifyKeyIndicator>
+            <reconstructionValue>
+                <compressed-y-0>
+                    03 10 8D FB BB 7A 77 77 70 76 74 7F 35 3E 56 99 
+                    05 0F 02 02 03 04 03 0B 0E 68 64 6E 65 6B 61 E1
+                </compressed-y-0>
+            </reconstructionValue>
+        </verifyKeyIndicator>
+    </toBeSigned>
+</Certificate>
diff --git a/examples/sample.source.1609.2/sample-Ieee1609Dot2Data-1.coer b/examples/sample.source.1609.2/sample-Ieee1609Dot2Data-1.coer
new file mode 100644 (file)
index 0000000..49907a7
Binary files /dev/null and b/examples/sample.source.1609.2/sample-Ieee1609Dot2Data-1.coer differ
diff --git a/examples/sample.source.J2735/Makefile b/examples/sample.source.J2735/Makefile
new file mode 100644 (file)
index 0000000..0f4ec9b
--- /dev/null
@@ -0,0 +1,107 @@
+ASN_PROGRAM = j2735-dump
+CFLAGS += -DASN_CONVERTER_TITLE="J2735 DSRC decoder" -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: MessageFrame.c maybe-wip-pause all
+
+-include converter-example.mk
+
+MessageFrame.c: ../sample.makefile.regen ../J2735_201603.asn1
+       make regen-makefile
+       @touch MessageFrame.c
+       make
+
+regen-makefile:
+       TITLE="J2735 DSRC decoder" \
+       ASN_CMDOPTS="-fcompound-names -pdu=auto" \
+       ASN_MODULES="../J2735_201603.asn1" \
+       ASN_PDU=MessageFrame \
+       ASN_PROGRAM=j2735-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-MessageFrame-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-MessageFrame-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-MessageFrame-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-MessageFrame-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-MessageFrame-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.J2735/README b/examples/sample.source.J2735/README
new file mode 100644 (file)
index 0000000..1e0697f
--- /dev/null
@@ -0,0 +1,40 @@
+
+GENERAL INFORMATION
+===================
+
+The SAE J2735-201603 Dedicated Short Range Communications (DSRC)
+Message Set Dictionary decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../J2735_201603.asn1 file.
+
+THERE IS NO J2735_201603.asn1 FILE THERE YET!
+
+OBTAINING THE J2735 SPECIFICATION
+=================================
+
+Go to http://standards.sae.org/j2735_201603/ and download the files.
+
+You should extract the ASN.1 module from there and save it
+as the ../J2735_201603.asn1 file. This file should start with
+the following line
+
+       DSRC DEFINITIONS AUTOMATIC TAGS ::=
+
+and end with the "END" token.
+Be careful not to copy any non-ASN.1 preambles from that .DOC file.
+
+After obtaining the J2735_201603.asn1, type `make` in the directory
+containing this README file.
+
+j2735-dump USAGE
+================
+
+The j2735-dump utility may be used to dump the contents of the
+UPER-encoded DSRC message record file:
+
+       ./j2735-dump j2735file.per      # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./j2735-dump -h
+
diff --git a/examples/sample.source.J2735/config.h b/examples/sample.source.J2735/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.J2735/sample-MessageFrame-1.der b/examples/sample.source.J2735/sample-MessageFrame-1.der
new file mode 100644 (file)
index 0000000..fbb27e6
Binary files /dev/null and b/examples/sample.source.J2735/sample-MessageFrame-1.der differ
diff --git a/examples/sample.source.J2735/sample-MessageFrame-1.per b/examples/sample.source.J2735/sample-MessageFrame-1.per
new file mode 100644 (file)
index 0000000..f9b69e3
Binary files /dev/null and b/examples/sample.source.J2735/sample-MessageFrame-1.per differ
diff --git a/examples/sample.source.J2735/sample-MessageFrame-1.xer b/examples/sample.source.J2735/sample-MessageFrame-1.xer
new file mode 100644 (file)
index 0000000..1063d08
--- /dev/null
@@ -0,0 +1,140 @@
+<MessageFrame>
+    <messageId>20</messageId>
+    <value>
+        <BasicSafetyMessage>
+            <coreData>
+                <msgCnt>88</msgCnt>
+                <id>00 00 00 00</id>
+                <secMark>59000</secMark>
+                <lat>511041141</lat>
+                <long>-1341224725</long>
+                <elev>188</elev>
+                <accuracy>
+                    <semiMajor>255</semiMajor>
+                    <semiMinor>255</semiMinor>
+                    <orientation>65535</orientation>
+                </accuracy>
+                <transmission><unavailable/></transmission>
+                <speed>0</speed>
+                <heading>15290</heading>
+                <angle>127</angle>
+                <accelSet>
+                    <long>2001</long>
+                    <lat>2001</lat>
+                    <vert>-127</vert>
+                    <yaw>0</yaw>
+                </accelSet>
+                <brakes>
+                    <wheelBrakes>
+                        10000
+                    </wheelBrakes>
+                    <traction><unavailable/></traction>
+                    <abs><unavailable/></abs>
+                    <scs><unavailable/></scs>
+                    <brakeBoost><unavailable/></brakeBoost>
+                    <auxBrakes><unavailable/></auxBrakes>
+                </brakes>
+                <size>
+                    <width>0</width>
+                    <length>0</length>
+                </size>
+            </coreData>
+            <partII>
+                <PartIIcontent>
+                    <partII-Id>0</partII-Id>
+                    <partII-Value>
+                        <VehicleSafetyExtensions>
+                            <pathHistory>
+                                <crumbData>
+                                    <PathHistoryPoint>
+                                        <latOffset>-131072</latOffset>
+                                        <lonOffset>-131072</lonOffset>
+                                        <elevationOffset>-2048</elevationOffset>
+                                        <timeOffset>1</timeOffset>
+                                    </PathHistoryPoint>
+                                    <PathHistoryPoint>
+                                        <latOffset>131071</latOffset>
+                                        <lonOffset>131071</lonOffset>
+                                        <elevationOffset>2037</elevationOffset>
+                                        <timeOffset>65535</timeOffset>
+                                    </PathHistoryPoint>
+                                </crumbData>
+                            </pathHistory>
+                            <pathPrediction>
+                                <radiusOfCurve>32767</radiusOfCurve>
+                                <confidence>0</confidence>
+                            </pathPrediction>
+                        </VehicleSafetyExtensions>
+                    </partII-Value>
+                </PartIIcontent>
+            </partII>
+        </BasicSafetyMessage>
+    </value>
+</MessageFrame>
+<MessageFrame>
+    <messageId>20</messageId>
+    <value>
+        <BasicSafetyMessage>
+            <coreData>
+                <msgCnt>89</msgCnt>
+                <id>FF 00 00 01</id>
+                <secMark>59000</secMark>
+                <lat>511041141</lat>
+                <long>-1341224725</long>
+                <elev>188</elev>
+                <accuracy>
+                    <semiMajor>255</semiMajor>
+                    <semiMinor>255</semiMinor>
+                    <orientation>65535</orientation>
+                </accuracy>
+                <transmission><unavailable/></transmission>
+                <speed>0</speed>
+                <heading>15290</heading>
+                <angle>127</angle>
+                <accelSet>
+                    <long>2001</long>
+                    <lat>2001</lat>
+                    <vert>-127</vert>
+                    <yaw>0</yaw>
+                </accelSet>
+                <brakes>
+                    <wheelBrakes>
+                        10000
+                    </wheelBrakes>
+                    <traction><unavailable/></traction>
+                    <abs><unavailable/></abs>
+                    <scs><unavailable/></scs>
+                    <brakeBoost><unavailable/></brakeBoost>
+                    <auxBrakes><unavailable/></auxBrakes>
+                </brakes>
+                <size>
+                    <width>0</width>
+                    <length>0</length>
+                </size>
+            </coreData>
+            <partII>
+                <PartIIcontent>
+                    <partII-Id>0</partII-Id>
+                    <partII-Value>
+                        <VehicleSafetyExtensions>
+                            <pathHistory>
+                                <crumbData>
+                                    <PathHistoryPoint>
+                                        <latOffset>0</latOffset>
+                                        <lonOffset>0</lonOffset>
+                                        <elevationOffset>0</elevationOffset>
+                                        <timeOffset>1</timeOffset>
+                                    </PathHistoryPoint>
+                                </crumbData>
+                            </pathHistory>
+                            <pathPrediction>
+                                <radiusOfCurve>0</radiusOfCurve>
+                                <confidence>0</confidence>
+                            </pathPrediction>
+                        </VehicleSafetyExtensions>
+                    </partII-Value>
+                </PartIIcontent>
+            </partII>
+        </BasicSafetyMessage>
+    </value>
+</MessageFrame>
diff --git a/examples/sample.source.LDAP3/Makefile b/examples/sample.source.LDAP3/Makefile
new file mode 100644 (file)
index 0000000..96238fe
--- /dev/null
@@ -0,0 +1,107 @@
+ASN_PROGRAM = ldap3dump
+CFLAGS += -DASN_CONVERTER_TITLE="Lightweight Directory Access Protocol V3 decoder" -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: LDAPMessage.c maybe-wip-pause all
+
+-include converter-example.mk
+
+LDAPMessage.c: ../sample.makefile.regen ../rfc4511-Lightweight-Directory-Access-Protocol-V3.asn1
+       make regen-makefile
+       @touch LDAPMessage.c
+       make
+
+regen-makefile:
+       TITLE="Lightweight Directory Access Protocol V3 decoder" \
+       ASN_CMDOPTS="-fcompound-names" \
+       ASN_MODULES="../rfc4511-Lightweight-Directory-Access-Protocol-V3.asn1" \
+       ASN_PDU=LDAPMessage \
+       ASN_PROGRAM=ldap3dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-LDAPMessage-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-LDAPMessage-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-LDAPMessage-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-LDAPMessage-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-LDAPMessage-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.LDAP3/README b/examples/sample.source.LDAP3/README
new file mode 100644 (file)
index 0000000..c1b08b8
--- /dev/null
@@ -0,0 +1,21 @@
+
+GENERAL INFORMATION
+===================
+
+The LDAPv3 (Lightweight Directory Access Protocol) PDU decoder.
+Invoking `make` will compile the ASN.1 specifications from the rfc4511.txt
+in the above directory.
+
+This LDAP decoder has been successfully tested against the PROTOS c06-ldapv3
+security test suite:
+http://www.ee.oulu.fi/research/ouspg/protos/testing/c06/ldapv3/index.html
+
+ldap3dump USAGE
+==============
+
+       ./ldap3dump LDAPMessage.ber     # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./ldap3dump -h
+
diff --git a/examples/sample.source.LDAP3/config.h b/examples/sample.source.LDAP3/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.LDAP3/sample-LDAPMessage-1.ber b/examples/sample.source.LDAP3/sample-LDAPMessage-1.ber
new file mode 100644 (file)
index 0000000..78b2ab5
--- /dev/null
@@ -0,0 +1 @@
+0 \ 2\ 1\ 1`\e\ 2\ 1\ 3\ 4\fuid=a,dc=com\80\bpassword
\ No newline at end of file
diff --git a/examples/sample.source.LTE-RRC/Makefile b/examples/sample.source.LTE-RRC/Makefile
new file mode 100644 (file)
index 0000000..c61b6b5
--- /dev/null
@@ -0,0 +1,106 @@
+ASN_PROGRAM = rrc-dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: DL-DCCH-Message.c maybe-wip-pause all
+
+-include converter-example.mk
+
+DL-DCCH-Message.c: ../sample.makefile.regen ../lte-rrc-14.4.0.asn1
+       make regen-makefile
+       @touch DL-DCCH-Message.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-pdu=auto -fcompound-names -no-gen-OER" \
+       ASN_MODULES="../lte-rrc-14.4.0.asn1" \
+       ASN_PDU=DL-DCCH-Message \
+       ASN_PROGRAM=rrc-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-DL-DCCH-Message-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-DL-DCCH-Message-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-DL-DCCH-Message-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-DL-DCCH-Message-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-DL-DCCH-Message-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.LTE-RRC/README b/examples/sample.source.LTE-RRC/README
new file mode 100644 (file)
index 0000000..5c73304
--- /dev/null
@@ -0,0 +1,38 @@
+
+GENERAL INFORMATION
+===================
+
+The 3GPP TS 36.331 version 14.2.1 Radio Resource Control (RRC) Unaligned PER decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../lte-rrc-14.2.1.asn1 file. 
+
+Currently only Makefile and binary sample in this directory.
+
+OBTAINING THE LTE-RRC SPECIFICATION
+===================================
+
+To obtain this LTE-RRC ASN.1 specification or other version, you should go to
+       http://www.3gpp.org/ftp/Specs/html-info/36331.htm
+and download any version of LTE-RRC specification you like.
+
+A .ZIP file with a Microsoft Word .DOC files will download shortly.
+
+You should extract the ASN.1 modules from that .DOC file.
+Be careful not to copy any preambles, chapter titles and other non-ASN.1 text.
+
+lte-rrc-dump USAGE
+==================
+
+The lte-rrc-dump utility may be used to dump the contents of a Unaligned PER-encoded
+LTE-RRC protocol data unit. Since LTE-RRC specification contains multiple PDUs,
+a PDU must be selected manually using -p <PDU> command line option:
+
+       ./lte-rrc-dump -iper -p DL-DCCH-Message message.per
+       ./lte-rrc-dump -iper -p PCCH-Message message.per
+
+The list of recognized PDUs may be obtained using `-p list`.
+
+The full list of recognized command line options may be obtained with
+
+       > ./lte-rrc-dump -h
+
diff --git a/examples/sample.source.LTE-RRC/config.h b/examples/sample.source.LTE-RRC/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.LTE-RRC/sample-BCCH-BCH-Message-1.per b/examples/sample.source.LTE-RRC/sample-BCCH-BCH-Message-1.per
new file mode 100644 (file)
index 0000000..03f5790
Binary files /dev/null and b/examples/sample.source.LTE-RRC/sample-BCCH-BCH-Message-1.per differ
diff --git a/examples/sample.source.MEGACO/Makefile b/examples/sample.source.MEGACO/Makefile
new file mode 100644 (file)
index 0000000..069ba99
--- /dev/null
@@ -0,0 +1,106 @@
+ASN_PROGRAM = megaco-dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: MegacoMessage.c maybe-wip-pause all
+
+-include converter-example.mk
+
+MegacoMessage.c: ../sample.makefile.regen ../rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+       make regen-makefile
+       @touch MegacoMessage.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-fcompound-names" \
+       ASN_MODULES="../rfc3525-MEDIA-GATEWAY-CONTROL.asn1" \
+       ASN_PDU=MegacoMessage \
+       ASN_PROGRAM=megaco-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-MegacoMessage-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-MegacoMessage-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-MegacoMessage-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-MegacoMessage-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-MegacoMessage-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.MEGACO/README b/examples/sample.source.MEGACO/README
new file mode 100644 (file)
index 0000000..7f829ed
--- /dev/null
@@ -0,0 +1,17 @@
+
+GENERAL INFORMATION
+===================
+
+The MEGACO (Media Gateway Control Protocol) PDU decoder.
+Invoking `make` will compile the ASN.1 specifications from the rfc3525.txt
+in the above directory.
+
+megaco-dump USAGE
+=================
+
+       ./megaco-dump MegacoMessage.ber # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./megaco-dump -h
+
diff --git a/examples/sample.source.MEGACO/config.h b/examples/sample.source.MEGACO/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.MHEG5/Makefile b/examples/sample.source.MHEG5/Makefile
new file mode 100644 (file)
index 0000000..6229c1d
--- /dev/null
@@ -0,0 +1,553 @@
+ASN_MODULE_SRCS=       \
+       InterchangedObject.c    \
+       RootClass.c     \
+       GroupClass.c    \
+       StandardIdentifier.c    \
+       GroupItem.c     \
+       ApplicationClass.c      \
+       DefaultAttribute.c      \
+       FontBody.c      \
+       SceneClass.c    \
+       SceneCoordinateSystem.c \
+       AspectRatio.c   \
+       NextScene.c     \
+       IngredientClass.c       \
+       ContentBody.c   \
+       ReferencedContent.c     \
+       LinkClass.c     \
+       LinkCondition.c \
+       EventType.c     \
+       EventData.c     \
+       ProgramClass.c  \
+       ResidentProgramClass.c  \
+       RemoteProgramClass.c    \
+       InterchangedProgramClass.c      \
+       PaletteClass.c  \
+       FontClass.c     \
+       CursorShapeClass.c      \
+       VariableClass.c \
+       OriginalValue.c \
+       BooleanVariableClass.c  \
+       IntegerVariableClass.c  \
+       OctetStringVariableClass.c      \
+       ObjectRefVariableClass.c        \
+       ContentRefVariableClass.c       \
+       PresentableClass.c      \
+       TokenManagerClass.c     \
+       Movement.c      \
+       TokenGroupClass.c       \
+       TokenGroupItem.c        \
+       ActionSlot.c    \
+       ListGroupClass.c        \
+       VisibleClass.c  \
+       OriginalBoxSize.c       \
+       BitmapClass.c   \
+       LineArtClass.c  \
+       RectangleClass.c        \
+       DynamicLineArtClass.c   \
+       TextClass.c     \
+       Justification.c \
+       LineOrientation.c       \
+       StartCorner.c   \
+       StreamClass.c   \
+       StreamComponent.c       \
+       Storage.c       \
+       AudioClass.c    \
+       VideoClass.c    \
+       Termination.c   \
+       RTGraphicsClass.c       \
+       InteractibleClass.c     \
+       SliderClass.c   \
+       Orientation.c   \
+       SliderStyle.c   \
+       EntryFieldClass.c       \
+       InputType.c     \
+       HyperTextClass.c        \
+       ButtonClass.c   \
+       HotspotClass.c  \
+       PushButtonClass.c       \
+       SwitchButtonClass.c     \
+       ButtonStyle.c   \
+       ActionClass.c   \
+       ElementaryAction.c      \
+       Add.c   \
+       AddItem.c       \
+       Append.c        \
+       Call.c  \
+       CallActionSlot.c        \
+       Clone.c \
+       CloseConnection.c       \
+       DelItem.c       \
+       DeselectItem.c  \
+       Divide.c        \
+       DrawArc.c       \
+       DrawLine.c      \
+       DrawOval.c      \
+       DrawPolygon.c   \
+       DrawPolyline.c  \
+       DrawRectangle.c \
+       DrawSector.c    \
+       Fork.c  \
+       GetAvailabilityStatus.c \
+       GetBoxSize.c    \
+       GetCellItem.c   \
+       GetCursorPosition.c     \
+       GetEngineSupport.c      \
+       GetEntryPoint.c \
+       GetFillColour.c \
+       GetFirstItem.c  \
+       GetHighlightStatus.c    \
+       GetInteractionStatus.c  \
+       GetItemStatus.c \
+       GetLabel.c      \
+       GetLastAnchorFired.c    \
+       GetLineColour.c \
+       GetLineStyle.c  \
+       GetLineWidth.c  \
+       GetListItem.c   \
+       GetListSize.c   \
+       GetOverwriteMode.c      \
+       GetPortion.c    \
+       GetPosition.c   \
+       GetRunningStatus.c      \
+       GetSelectionStatus.c    \
+       GetSliderValue.c        \
+       GetTextContent.c        \
+       GetTextData.c   \
+       GetTokenPosition.c      \
+       GetVolume.c     \
+       Modulo.c        \
+       Move.c  \
+       MoveTo.c        \
+       Multiply.c      \
+       OpenConnection.c        \
+       PutBefore.c     \
+       PutBehind.c     \
+       ReadPersistent.c        \
+       ScaleBitmap.c   \
+       ScaleVideo.c    \
+       ScrollItems.c   \
+       SelectItem.c    \
+       SendEvent.c     \
+       SetBoxSize.c    \
+       SetCachePriority.c      \
+       SetCounterEndPosition.c \
+       SetCounterPosition.c    \
+       SetCounterTrigger.c     \
+       SetCursorPosition.c     \
+       SetCursorShape.c        \
+       SetData.c       \
+       SetEntryPoint.c \
+       SetFillColour.c \
+       SetFirstItem.c  \
+       SetFontRef.c    \
+       SetHighlightStatus.c    \
+       SetInteractionStatus.c  \
+       SetLabel.c      \
+       SetLineColour.c \
+       SetLineStyle.c  \
+       SetLineWidth.c  \
+       SetOverwriteMode.c      \
+       SetPaletteRef.c \
+       SetPortion.c    \
+       SetPosition.c   \
+       SetSliderValue.c        \
+       SetSpeed.c      \
+       SetTimer.c      \
+       NewTimer.c      \
+       SetTransparency.c       \
+       SetVariable.c   \
+       SetVolume.c     \
+       Step.c  \
+       StorePersistent.c       \
+       Subtract.c      \
+       TestVariable.c  \
+       ToggleItem.c    \
+       TransitionTo.c  \
+       ConnectionTagOrNull.c   \
+       ComparisonValue.c       \
+       EmulatedEventData.c     \
+       NewColour.c     \
+       NewContent.c    \
+       NewFont.c       \
+       NewReferencedContent.c  \
+       NewContentSize.c        \
+       NewVariableValue.c      \
+       Parameter.c     \
+       Point.c \
+       Rational.c      \
+       ObjectReference.c       \
+       ExternalReference.c     \
+       IndirectReference.c     \
+       ContentReference.c      \
+       GenericObjectReference.c        \
+       GenericContentReference.c       \
+       GenericInteger.c        \
+       GenericBoolean.c        \
+       GenericOctetString.c    \
+       Colour.c        \
+       XYPosition.c
+
+ASN_MODULE_HDRS=       \
+       InterchangedObject.h    \
+       RootClass.h     \
+       GroupClass.h    \
+       StandardIdentifier.h    \
+       GroupItem.h     \
+       ApplicationClass.h      \
+       DefaultAttribute.h      \
+       FontBody.h      \
+       SceneClass.h    \
+       SceneCoordinateSystem.h \
+       AspectRatio.h   \
+       NextScene.h     \
+       IngredientClass.h       \
+       ContentBody.h   \
+       ReferencedContent.h     \
+       LinkClass.h     \
+       LinkCondition.h \
+       EventType.h     \
+       EventData.h     \
+       ProgramClass.h  \
+       ResidentProgramClass.h  \
+       RemoteProgramClass.h    \
+       InterchangedProgramClass.h      \
+       PaletteClass.h  \
+       FontClass.h     \
+       CursorShapeClass.h      \
+       VariableClass.h \
+       OriginalValue.h \
+       BooleanVariableClass.h  \
+       IntegerVariableClass.h  \
+       OctetStringVariableClass.h      \
+       ObjectRefVariableClass.h        \
+       ContentRefVariableClass.h       \
+       PresentableClass.h      \
+       TokenManagerClass.h     \
+       Movement.h      \
+       TokenGroupClass.h       \
+       TokenGroupItem.h        \
+       ActionSlot.h    \
+       ListGroupClass.h        \
+       VisibleClass.h  \
+       OriginalBoxSize.h       \
+       BitmapClass.h   \
+       LineArtClass.h  \
+       RectangleClass.h        \
+       DynamicLineArtClass.h   \
+       TextClass.h     \
+       Justification.h \
+       LineOrientation.h       \
+       StartCorner.h   \
+       StreamClass.h   \
+       StreamComponent.h       \
+       Storage.h       \
+       AudioClass.h    \
+       VideoClass.h    \
+       Termination.h   \
+       RTGraphicsClass.h       \
+       InteractibleClass.h     \
+       SliderClass.h   \
+       Orientation.h   \
+       SliderStyle.h   \
+       EntryFieldClass.h       \
+       InputType.h     \
+       HyperTextClass.h        \
+       ButtonClass.h   \
+       HotspotClass.h  \
+       PushButtonClass.h       \
+       SwitchButtonClass.h     \
+       ButtonStyle.h   \
+       ActionClass.h   \
+       ElementaryAction.h      \
+       Add.h   \
+       AddItem.h       \
+       Append.h        \
+       Call.h  \
+       CallActionSlot.h        \
+       Clone.h \
+       CloseConnection.h       \
+       DelItem.h       \
+       DeselectItem.h  \
+       Divide.h        \
+       DrawArc.h       \
+       DrawLine.h      \
+       DrawOval.h      \
+       DrawPolygon.h   \
+       DrawPolyline.h  \
+       DrawRectangle.h \
+       DrawSector.h    \
+       Fork.h  \
+       GetAvailabilityStatus.h \
+       GetBoxSize.h    \
+       GetCellItem.h   \
+       GetCursorPosition.h     \
+       GetEngineSupport.h      \
+       GetEntryPoint.h \
+       GetFillColour.h \
+       GetFirstItem.h  \
+       GetHighlightStatus.h    \
+       GetInteractionStatus.h  \
+       GetItemStatus.h \
+       GetLabel.h      \
+       GetLastAnchorFired.h    \
+       GetLineColour.h \
+       GetLineStyle.h  \
+       GetLineWidth.h  \
+       GetListItem.h   \
+       GetListSize.h   \
+       GetOverwriteMode.h      \
+       GetPortion.h    \
+       GetPosition.h   \
+       GetRunningStatus.h      \
+       GetSelectionStatus.h    \
+       GetSliderValue.h        \
+       GetTextContent.h        \
+       GetTextData.h   \
+       GetTokenPosition.h      \
+       GetVolume.h     \
+       Modulo.h        \
+       Move.h  \
+       MoveTo.h        \
+       Multiply.h      \
+       OpenConnection.h        \
+       PutBefore.h     \
+       PutBehind.h     \
+       ReadPersistent.h        \
+       ScaleBitmap.h   \
+       ScaleVideo.h    \
+       ScrollItems.h   \
+       SelectItem.h    \
+       SendEvent.h     \
+       SetBoxSize.h    \
+       SetCachePriority.h      \
+       SetCounterEndPosition.h \
+       SetCounterPosition.h    \
+       SetCounterTrigger.h     \
+       SetCursorPosition.h     \
+       SetCursorShape.h        \
+       SetData.h       \
+       SetEntryPoint.h \
+       SetFillColour.h \
+       SetFirstItem.h  \
+       SetFontRef.h    \
+       SetHighlightStatus.h    \
+       SetInteractionStatus.h  \
+       SetLabel.h      \
+       SetLineColour.h \
+       SetLineStyle.h  \
+       SetLineWidth.h  \
+       SetOverwriteMode.h      \
+       SetPaletteRef.h \
+       SetPortion.h    \
+       SetPosition.h   \
+       SetSliderValue.h        \
+       SetSpeed.h      \
+       SetTimer.h      \
+       NewTimer.h      \
+       SetTransparency.h       \
+       SetVariable.h   \
+       SetVolume.h     \
+       Step.h  \
+       StorePersistent.h       \
+       Subtract.h      \
+       TestVariable.h  \
+       ToggleItem.h    \
+       TransitionTo.h  \
+       ConnectionTagOrNull.h   \
+       ComparisonValue.h       \
+       EmulatedEventData.h     \
+       NewColour.h     \
+       NewContent.h    \
+       NewFont.h       \
+       NewReferencedContent.h  \
+       NewContentSize.h        \
+       NewVariableValue.h      \
+       Parameter.h     \
+       Point.h \
+       Rational.h      \
+       ObjectReference.h       \
+       ExternalReference.h     \
+       IndirectReference.h     \
+       ContentReference.h      \
+       GenericObjectReference.h        \
+       GenericContentReference.h       \
+       GenericInteger.h        \
+       GenericBoolean.h        \
+       GenericOctetString.h    \
+       Colour.h        \
+       XYPosition.h
+
+ASN_MODULE_HDRS+=BOOLEAN.h
+ASN_MODULE_SRCS+=BOOLEAN.c
+ASN_MODULE_HDRS+=INTEGER.h
+ASN_MODULE_HDRS+=NativeEnumerated.h
+ASN_MODULE_SRCS+=INTEGER.c
+ASN_MODULE_HDRS+=NULL.h
+ASN_MODULE_SRCS+=NULL.c
+ASN_MODULE_SRCS+=NativeEnumerated.c
+ASN_MODULE_HDRS+=NativeInteger.h
+ASN_MODULE_SRCS+=NativeInteger.c
+ASN_MODULE_HDRS+=asn_SEQUENCE_OF.h
+ASN_MODULE_SRCS+=asn_SEQUENCE_OF.c
+ASN_MODULE_HDRS+=asn_SET_OF.h
+ASN_MODULE_SRCS+=asn_SET_OF.c
+ASN_MODULE_HDRS+=constr_CHOICE.h
+ASN_MODULE_SRCS+=constr_CHOICE.c
+ASN_MODULE_HDRS+=constr_SEQUENCE.h
+ASN_MODULE_SRCS+=constr_SEQUENCE.c
+ASN_MODULE_HDRS+=constr_SEQUENCE_OF.h
+ASN_MODULE_SRCS+=constr_SEQUENCE_OF.c
+ASN_MODULE_HDRS+=constr_SET_OF.h
+ASN_MODULE_HDRS+=constr_SET.h
+ASN_MODULE_SRCS+=constr_SET.c
+ASN_MODULE_SRCS+=constr_SET_OF.c
+ASN_MODULE_HDRS+=asn_application.h
+ASN_MODULE_HDRS+=asn_system.h
+ASN_MODULE_HDRS+=asn_codecs.h
+ASN_MODULE_HDRS+=asn_internal.h
+ASN_MODULE_HDRS+=OCTET_STRING.h
+ASN_MODULE_SRCS+=OCTET_STRING.c
+ASN_MODULE_HDRS+=BIT_STRING.h
+ASN_MODULE_SRCS+=BIT_STRING.c
+ASN_MODULE_SRCS+=asn_codecs_prim.c
+ASN_MODULE_HDRS+=asn_codecs_prim.h
+ASN_MODULE_HDRS+=ber_tlv_length.h
+ASN_MODULE_SRCS+=ber_tlv_length.c
+ASN_MODULE_HDRS+=ber_tlv_tag.h
+ASN_MODULE_SRCS+=ber_tlv_tag.c
+ASN_MODULE_HDRS+=ber_decoder.h
+ASN_MODULE_SRCS+=ber_decoder.c
+ASN_MODULE_HDRS+=der_encoder.h
+ASN_MODULE_SRCS+=der_encoder.c
+ASN_MODULE_HDRS+=constr_TYPE.h
+ASN_MODULE_SRCS+=constr_TYPE.c
+ASN_MODULE_HDRS+=constraints.h
+ASN_MODULE_SRCS+=constraints.c
+ASN_MODULE_HDRS+=xer_support.h
+ASN_MODULE_SRCS+=xer_support.c
+ASN_MODULE_HDRS+=xer_decoder.h
+ASN_MODULE_SRCS+=xer_decoder.c
+ASN_MODULE_HDRS+=xer_encoder.h
+ASN_MODULE_SRCS+=xer_encoder.c
+ASN_MODULE_HDRS+=per_support.h
+ASN_MODULE_SRCS+=per_support.c
+ASN_MODULE_HDRS+=per_decoder.h
+ASN_MODULE_SRCS+=per_decoder.c
+ASN_MODULE_HDRS+=per_encoder.h
+ASN_MODULE_SRCS+=per_encoder.c
+ASN_MODULE_HDRS+=per_opentype.h
+ASN_MODULE_SRCS+=per_opentype.c
+ASN_CONVERTER_SOURCES+=converter-sample.c
+
+
+lib_LTLIBRARIES=libsomething.la
+libsomething_la_SOURCES=$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS)
+
+# This file may be used as an input for make(3)
+# Remove the lines below to convert it into a pure .am file
+TARGET = mheg5dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE  -DPDU=InterchangedObject -I.
+OBJS=${ASN_MODULE_SRCS:.c=.o} ${ASN_CONVERTER_SOURCES:.c=.o}
+
+all: InterchangedObject.c $(TARGET)
+
+$(TARGET): ${OBJS}
+       $(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+.c.o:
+       $(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+       rm -f $(TARGET)
+       rm -f $(OBJS)
+
+regen: regenerate-from-asn1-source
+
+regenerate-from-asn1-source:
+       ../../asn1c/asn1c -S ../../skeletons -pdu=InterchangedObject -fcompound-names ../ISO13522-MHEG-5.asn
+
+
+InterchangedObject.c: ../sample.makefile.regen ../ISO13522-MHEG-5.asn
+       make regen-makefile
+       @touch InterchangedObject.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-fcompound-names" \
+       ASN_MODULES="../ISO13522-MHEG-5.asn" \
+       ASN_PDU=InterchangedObject \
+       ASN_PROGRAM=mheg5dump \
+       CFLAGS="" \
+       ../sample.makefile.regen
+
+check: ${TARGET} check-ber check-xer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-InterchangedObject-1.[db]er ; then \
+       for f in sample-InterchangedObject-*.[db]er; do \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f into XER and back ($$b)..."; \
+       ./${TARGET} -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${TARGET} -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${TARGET} -J0.0001 -n 1000 -b $$b -iber -onull $$f || exit 5; \
+       ./${TARGET} -J0.001 -n 1000 -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-InterchangedObject-1.xer ; then \
+       for f in sample-InterchangedObject-*.xer; do \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f into DER and back ($$b)..."; \
+       ./${TARGET} -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${TARGET} -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${TARGET} -J0.0001 -n 1000 -b $$b -ixer -onull $$f || exit 5; \
+       ./${TARGET} -J0.001 -n 1000 -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-InterchangedObject-1-nopad.per ; then \
+       for f in sample-InterchangedObject-[1-9]-nopad.per; do \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f into DER into XER and back ($$b)..."; \
+       ./${TARGET} -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${TARGET} -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${TARGET} -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${TARGET} -J0.0001 -n 1000 -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${TARGET} -J0.001 -n 1000 -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-InterchangedObject-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f into DER into XER and back ($$b)..."; \
+       ./${TARGET} -b $$b -p $$pdu -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${TARGET} -b $$b -p $$pdu -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${TARGET} -b $$b -p $$pdu -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${TARGET} -J0.0001 -n 1000 -b $$b -iper -onull $$f || exit 7; \
+       ./${TARGET} -J0.001 -n 1000 -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_CONVERTER_SOURCES) $(ASN_CONVERTER_HEADERS)
+       rm -f Makefile.am.sample
diff --git a/examples/sample.source.MHEG5/README b/examples/sample.source.MHEG5/README
new file mode 100644 (file)
index 0000000..91127ee
--- /dev/null
@@ -0,0 +1,35 @@
+
+GENERAL INFORMATION
+===================
+
+The ISO MHEG-5 (Multimedia Hypermedia Experts Group,
+Multimedia Presentations) decoder.
+
+Invoking `make` will first attempt compile the ASN.1 specifications from the
+../ISO13522-MHEG-5.asn file. THERE IS NO ISO13522-MHEG-5.asn FILE THERE YET!
+
+OBTAINING THE MHEG-5 SPECIFICATION
+==================================
+
+Due to licensing restrictions, asn1c can not include the MHEG-5 ASN.1 module
+in its distribution.
+
+To obtain the MHEG-5 ASN.1 specification, you should go to
+       http://www.itu.int/ITU-T/asn1/database/itu-t/t/t172
+and select the latest "Text" version of the corresponding ASN.1 module.
+
+After obtaining the ISO13522-MHEG-5.asn, type `make` in the directory
+containing this README file.
+
+mheg5dump USAGE
+===============
+
+The mheg5dump utility may be used to dump the contents of the BER-encoded
+MHEG-5 data record file:
+
+       ./mheg5dump mhegscene.ber       # Print MHEG-5 stream as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       ./mheg5dump -h
+
diff --git a/examples/sample.source.MHEG5/config.h b/examples/sample.source.MHEG5/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.MHEG5/sample-InterchangedObject-1.xer b/examples/sample.source.MHEG5/sample-InterchangedObject-1.xer
new file mode 100644 (file)
index 0000000..cd79a92
--- /dev/null
@@ -0,0 +1,97 @@
+<InterchangedObject>
+    <scene>
+        <rootClass>
+            <external-reference>
+                <group-identifier>smth</group-identifier>
+                <object-number>0</object-number>
+            </external-reference>
+        </rootClass>
+        <items>
+                <octet-string-variable>
+                    <rootClass>
+                        <internal-reference>14</internal-reference>
+                    </rootClass>
+                    <original-value>
+                        <octetstring>ldskfjlsfd</octetstring>
+                    </original-value>
+                </octet-string-variable>
+            
+                <integer-variable>
+                    <rootClass>
+                        <internal-reference>22</internal-reference>
+                    </rootClass>
+                    <original-value>
+                        <integer>3</integer>
+                    </original-value>
+                </integer-variable>
+            
+                <boolean-variable>
+                    <rootClass>
+                        <internal-reference>39</internal-reference>
+                    </rootClass>
+                    <original-value>
+                        <boolean><false/></boolean>
+                    </original-value>
+                </boolean-variable>
+            
+                <integer-variable>
+                    <rootClass>
+                        <internal-reference>42</internal-reference>
+                    </rootClass>
+                    <original-value>
+                        <integer>0</integer>
+                    </original-value>
+                </integer-variable>
+            
+                <resident-program>
+                    <rootClass>
+                        <internal-reference>45</internal-reference>
+                    </rootClass>
+                    <initially-active><false/></initially-active>
+                    <name>xxx</name>
+                </resident-program>
+            
+                <token-group>
+                    <rootClass>
+                        <internal-reference>113</internal-reference>
+                    </rootClass>
+                    <token-group-items>
+                        <TokenGroupItem>
+                            <a-visible>
+                                <external-reference>
+                                    <group-identifier>a</group-identifier>
+                                    <object-number>5</object-number>
+                                </external-reference>
+                            </a-visible>
+                            <action-slots>
+                                    <action-class>
+                                            <set-variable>
+                                                <target>
+                                                    <direct-reference>
+                                                        <internal-reference>103</internal-reference>
+                                                    </direct-reference>
+                                                </target>
+                                                <new-variable-value>
+                                                    <new-generic-integer>
+                                                        <indirect-reference>
+                                                            <internal-reference>31</internal-reference>
+                                                        </indirect-reference>
+                                                    </new-generic-integer>
+                                                </new-variable-value>
+                                            </set-variable>
+                                        
+                                    </action-class>
+                                
+                            </action-slots>
+                        </TokenGroupItem>
+                    </token-group-items>
+                </token-group>
+            
+        </items>
+        <input-event-register>3</input-event-register>
+        <scene-coordinate-system>
+            <x-scene>100</x-scene>
+            <y-scene>100</y-scene>
+        </scene-coordinate-system>
+    </scene>
+</InterchangedObject>
diff --git a/examples/sample.source.PKIX1/Makefile b/examples/sample.source.PKIX1/Makefile
new file mode 100644 (file)
index 0000000..7a39bf3
--- /dev/null
@@ -0,0 +1,106 @@
+ASN_PROGRAM = x509dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: Certificate.c maybe-wip-pause all
+
+-include converter-example.mk
+
+Certificate.c: ../sample.makefile.regen ../rfc3280-*.asn1
+       make regen-makefile
+       @touch Certificate.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-fcompound-names -fwide-types" \
+       ASN_MODULES="../rfc3280-*.asn1" \
+       ASN_PDU=Certificate \
+       ASN_PROGRAM=x509dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-Certificate-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-Certificate-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-Certificate-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-Certificate-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-Certificate-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.PKIX1/README b/examples/sample.source.PKIX1/README
new file mode 100644 (file)
index 0000000..de8e12f
--- /dev/null
@@ -0,0 +1,29 @@
+
+GENERAL INFORMATION
+===================
+
+The X.509 (PKIX1) certificate decoder. Invoking `make` will compile the ASN.1
+specifications from the rfc3280.txt in the above directory.
+
+x509dump USAGE
+==============
+
+To use the x509dump, you'll have to prepare an X.509 certificate
+in DER encoding. The typical X.509 certificate will have a PEM format
+(DER encoded data wrapped in base64, wrapped in PEM "BEGIN" and "END" sections).
+The openssl x509 utility may be used to convert between PEM and DER.
+
+       EXAMPLE: Convert 'certificate.pem' into 'certificate.der':
+
+       openssl x509 -inform PEM -in certificate.pem    \
+                       -outform DER -out certificate.der
+
+After convertsion, the x509dump utility may be used to dump the contents
+of the DER-encoded X.509 certificate:
+
+       ./x509dump certificate.der      # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./x509dump -h
+
diff --git a/examples/sample.source.PKIX1/config.h b/examples/sample.source.PKIX1/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.PKIX1/sample-Certificate-1.der b/examples/sample.source.PKIX1/sample-Certificate-1.der
new file mode 100644 (file)
index 0000000..e82877d
Binary files /dev/null and b/examples/sample.source.PKIX1/sample-Certificate-1.der differ
diff --git a/examples/sample.source.RRC/Makefile b/examples/sample.source.RRC/Makefile
new file mode 100644 (file)
index 0000000..dc0af95
--- /dev/null
@@ -0,0 +1,106 @@
+ASN_PROGRAM = rrc-dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: DL-DCCH-Message.c maybe-wip-pause all
+
+-include converter-example.mk
+
+DL-DCCH-Message.c: ../sample.makefile.regen ../rrc-7.1.0.asn1
+       make regen-makefile
+       @touch DL-DCCH-Message.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-pdu=auto -fcompound-names -no-gen-OER" \
+       ASN_MODULES="../rrc-7.1.0.asn1" \
+       ASN_PDU=DL-DCCH-Message \
+       ASN_PROGRAM=rrc-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-DL-DCCH-Message-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-DL-DCCH-Message-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-DL-DCCH-Message-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-DL-DCCH-Message-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-DL-DCCH-Message-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.RRC/README b/examples/sample.source.RRC/README
new file mode 100644 (file)
index 0000000..6c81a36
--- /dev/null
@@ -0,0 +1,36 @@
+
+GENERAL INFORMATION
+===================
+
+The 3GPP TS 25.331 version 7.1.0 RRC (Radio Resource Control) PER decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../rrc-7.1.0.asn1 file.
+
+OBTAINING THE RRC SPECIFICATION
+================================
+
+To obtain a different version of RRC ASN.1 specification, you should go to
+       http://www.3gpp.org/ftp/Specs/html-info/25331.htm
+and download any version of RRC specification you like.
+
+A .ZIP file with a Microsoft Word .DOC files will download shortly.
+
+You should extract the ASN.1 modules from the chapter 11 of that .DOC file.
+Be careful not to copy any preambles, chapter titles and other non-ASN.1 text.
+
+rrc-dump USAGE
+==============
+
+The rrc-dump utility may be used to dump the contents of a PER-encoded
+RRC protocol data unit. Since RRC specification contains multiple PDUs,
+a PDU must be selected manually using -p <PDU> command line option:
+
+       ./rrc-dump    -p DL-DCCH-Message    message.per
+       ./rrc-dump    -p PCCH-Message    message.per
+
+The list of recognized PDUs may be obtained using `-p list`.
+
+The full list of recognized command line options may be obtained with
+
+       > ./rrc-dump -h
+
diff --git a/examples/sample.source.RRC/config.h b/examples/sample.source.RRC/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.RRC/sample-BCCH-BCH-Message-2.per b/examples/sample.source.RRC/sample-BCCH-BCH-Message-2.per
new file mode 100644 (file)
index 0000000..0d6babc
Binary files /dev/null and b/examples/sample.source.RRC/sample-BCCH-BCH-Message-2.per differ
diff --git a/examples/sample.source.RRC/sample-DL-CCCH-Message-2-nopad.per b/examples/sample.source.RRC/sample-DL-CCCH-Message-2-nopad.per
new file mode 100644 (file)
index 0000000..ac8e881
Binary files /dev/null and b/examples/sample.source.RRC/sample-DL-CCCH-Message-2-nopad.per differ
diff --git a/examples/sample.source.RRC/sample-DL-DCCH-Message-1-nopad.per b/examples/sample.source.RRC/sample-DL-DCCH-Message-1-nopad.per
new file mode 100644 (file)
index 0000000..584e85b
Binary files /dev/null and b/examples/sample.source.RRC/sample-DL-DCCH-Message-1-nopad.per differ
diff --git a/examples/sample.source.RRC/sample-DL-DCCH-Message-1.per b/examples/sample.source.RRC/sample-DL-DCCH-Message-1.per
new file mode 100644 (file)
index 0000000..2ae327a
Binary files /dev/null and b/examples/sample.source.RRC/sample-DL-DCCH-Message-1.per differ
diff --git a/examples/sample.source.S1AP/Makefile b/examples/sample.source.S1AP/Makefile
new file mode 100644 (file)
index 0000000..8a3bcd2
--- /dev/null
@@ -0,0 +1,122 @@
+ASN_PROGRAM = s1ap-dump
+CFLAGS += -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: S1AP-PDU.c maybe-wip-pause all
+
+-include converter-example.mk
+
+S1AP-PDU.c: ../sample.makefile.regen ../s1ap-14.4.0.asn1
+       make regen-makefile
+       @touch S1AP-PDU.c
+       make
+
+regen-makefile:
+       ASN_CMDOPTS="-pdu=all -fcompound-names -findirect-choice -fno-include-deps -flink-skeletons -gen-PER" \
+       ASN_MODULES="../s1ap-14.4.0.asn1" \
+       ASN_PDU=S1AP-PDU \
+       ASN_PROGRAM=s1ap-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per check-aper
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-S1AP-PDU-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-S1AP-PDU-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-S1AP-PDU-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-S1AP-PDU-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-S1AP-PDU-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+check-aper:
+       @files=$$(find . -type f -regex '^.*\/sample-.*-[0-9]+.aper$$' | sort -V); \
+       if [ -n "$$files" ]; then \
+       for f in $$files; do \
+       pdu=`echo $$f | sed -E -e "s/.*sample-([A-Za-z0-9-]+)-[0-9]+.*/\\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iaper -oxer $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oaper ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       diff $$f ./.tmp.2.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iaper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iaper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.S1AP/README b/examples/sample.source.S1AP/README
new file mode 100644 (file)
index 0000000..26fc6ad
--- /dev/null
@@ -0,0 +1,35 @@
+
+GENERAL INFORMATION
+===================
+
+The 3GPP TS 36.413 version 14.4.0 S1 Application Protocol (S1AP) APER decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../s1ap-14.4.0.asn1 file.
+
+OBTAINING THE S1AP SPECIFICATION
+================================
+
+To obtain a different version of S1AP ASN.1 specification, you should go to
+       http://www.3gpp.org/ftp/Specs/html-info/36413.htm
+and download any version of S1AP specification you like.
+
+A .ZIP file with a Microsoft Word .DOC files will download shortly.
+
+You should extract the ASN.1 modules from the chapter 9 of that .DOC file.
+Be careful not to copy any preambles, chapter titles and other non-ASN.1 text.
+
+s1ap-dump USAGE
+===============
+
+The s1ap-dump utility may be used to dump the contents of a APER-encoded
+S1AP protocol data unit. Since S1AP specification contains multiple PDUs,
+a PDU must be selected manually using -p <PDU> command line option:
+
+       ./s1ap-dump -iaper -p S1AP-PDU message.per
+
+The list of recognized PDUs may be obtained using `-p list`.
+
+The full list of recognized command line options may be obtained with
+
+       > ./s1ap-dump -h
+
diff --git a/examples/sample.source.S1AP/config.h b/examples/sample.source.S1AP/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-0.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-0.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-0.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-1.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-1.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-1.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-10.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-10.aper
new file mode 100644 (file)
index 0000000..2ecf8c5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-10.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-100.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-100.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-100.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-101.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-101.aper
new file mode 100644 (file)
index 0000000..579396e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-101.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-102.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-102.aper
new file mode 100644 (file)
index 0000000..a0de0e6
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-102.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-103.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-103.aper
new file mode 100644 (file)
index 0000000..fb2ce84
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-103.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-104.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-104.aper
new file mode 100644 (file)
index 0000000..bdc9e74
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-104.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-105.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-105.aper
new file mode 100644 (file)
index 0000000..de8d7d1
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-105.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-106.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-106.aper
new file mode 100644 (file)
index 0000000..5047dc8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-106.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-107.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-107.aper
new file mode 100644 (file)
index 0000000..3f6a510
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-107.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-108.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-108.aper
new file mode 100644 (file)
index 0000000..c27766c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-108.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-109.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-109.aper
new file mode 100644 (file)
index 0000000..620cc17
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-109.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-11.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-11.aper
new file mode 100644 (file)
index 0000000..d44ae24
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-11.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-110.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-110.aper
new file mode 100644 (file)
index 0000000..90ff3c3
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-110.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-111.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-111.aper
new file mode 100644 (file)
index 0000000..533764b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-111.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-112.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-112.aper
new file mode 100644 (file)
index 0000000..13499a3
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-112.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-113.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-113.aper
new file mode 100644 (file)
index 0000000..361e4a4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-113.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-114.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-114.aper
new file mode 100644 (file)
index 0000000..abedd83
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-114.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-115.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-115.aper
new file mode 100644 (file)
index 0000000..c21c3d8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-115.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-116.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-116.aper
new file mode 100644 (file)
index 0000000..7aca83b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-116.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-117.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-117.aper
new file mode 100644 (file)
index 0000000..4525334
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-117.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-118.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-118.aper
new file mode 100644 (file)
index 0000000..4ecc701
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-118.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-119.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-119.aper
new file mode 100644 (file)
index 0000000..e9dcf5b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-119.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-12.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-12.aper
new file mode 100644 (file)
index 0000000..f0bfbde
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-12.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-120.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-120.aper
new file mode 100644 (file)
index 0000000..2cf44f9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-120.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-121.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-121.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-121.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-122.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-122.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-122.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-123.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-123.aper
new file mode 100644 (file)
index 0000000..a819799
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-123.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-124.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-124.aper
new file mode 100644 (file)
index 0000000..c20930f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-124.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-125.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-125.aper
new file mode 100644 (file)
index 0000000..bdd9dc4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-125.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-126.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-126.aper
new file mode 100644 (file)
index 0000000..a159c8f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-126.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-127.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-127.aper
new file mode 100644 (file)
index 0000000..492929d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-127.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-128.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-128.aper
new file mode 100644 (file)
index 0000000..6ef6efb
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-128.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-129.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-129.aper
new file mode 100644 (file)
index 0000000..5b76f60
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-129.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-13.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-13.aper
new file mode 100644 (file)
index 0000000..7cca3f8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-13.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-130.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-130.aper
new file mode 100644 (file)
index 0000000..109e682
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-130.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-131.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-131.aper
new file mode 100644 (file)
index 0000000..2ecf8c5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-131.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-132.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-132.aper
new file mode 100644 (file)
index 0000000..000b0e5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-132.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-133.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-133.aper
new file mode 100644 (file)
index 0000000..f0bfbde
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-133.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-134.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-134.aper
new file mode 100644 (file)
index 0000000..05e532f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-134.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-135.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-135.aper
new file mode 100644 (file)
index 0000000..6ffd4ec
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-135.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-136.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-136.aper
new file mode 100644 (file)
index 0000000..2bf4d95
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-136.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-137.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-137.aper
new file mode 100644 (file)
index 0000000..0f365fc
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-137.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-138.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-138.aper
new file mode 100644 (file)
index 0000000..23ee7b9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-138.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-139.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-139.aper
new file mode 100644 (file)
index 0000000..b4f05c4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-139.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-14.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-14.aper
new file mode 100644 (file)
index 0000000..399723d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-14.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-140.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-140.aper
new file mode 100644 (file)
index 0000000..89601df
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-140.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-141.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-141.aper
new file mode 100644 (file)
index 0000000..9e4ae36
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-141.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-142.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-142.aper
new file mode 100644 (file)
index 0000000..7327320
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-142.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-143.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-143.aper
new file mode 100644 (file)
index 0000000..7eb8856
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-143.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-144.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-144.aper
new file mode 100644 (file)
index 0000000..e04fdaf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-144.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-145.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-145.aper
new file mode 100644 (file)
index 0000000..afcfefb
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-145.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-146.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-146.aper
new file mode 100644 (file)
index 0000000..6afa380
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-146.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-147.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-147.aper
new file mode 100644 (file)
index 0000000..3344993
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-147.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-148.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-148.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-148.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-149.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-149.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-149.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-15.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-15.aper
new file mode 100644 (file)
index 0000000..378eee8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-15.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-150.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-150.aper
new file mode 100644 (file)
index 0000000..a819799
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-150.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-151.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-151.aper
new file mode 100644 (file)
index 0000000..01c558b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-151.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-152.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-152.aper
new file mode 100644 (file)
index 0000000..bdd9dc4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-152.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-153.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-153.aper
new file mode 100644 (file)
index 0000000..5133104
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-153.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-154.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-154.aper
new file mode 100644 (file)
index 0000000..492929d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-154.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-155.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-155.aper
new file mode 100644 (file)
index 0000000..07c422d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-155.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-156.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-156.aper
new file mode 100644 (file)
index 0000000..5b76f60
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-156.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-157.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-157.aper
new file mode 100644 (file)
index 0000000..9e1e9c9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-157.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-158.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-158.aper
new file mode 100644 (file)
index 0000000..2ecf8c5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-158.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-159.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-159.aper
new file mode 100644 (file)
index 0000000..d44ae24
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-159.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-16.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-16.aper
new file mode 100644 (file)
index 0000000..d9d56c7
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-16.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-160.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-160.aper
new file mode 100644 (file)
index 0000000..f0bfbde
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-160.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-161.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-161.aper
new file mode 100644 (file)
index 0000000..7729538
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-161.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-162.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-162.aper
new file mode 100644 (file)
index 0000000..9b7a727
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-162.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-163.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-163.aper
new file mode 100644 (file)
index 0000000..1156bc8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-163.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-164.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-164.aper
new file mode 100644 (file)
index 0000000..ab76d6f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-164.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-165.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-165.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-165.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-166.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-166.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-166.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-167.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-167.aper
new file mode 100644 (file)
index 0000000..bc2235b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-167.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-168.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-168.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-168.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-169.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-169.aper
new file mode 100644 (file)
index 0000000..679e04c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-169.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-17.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-17.aper
new file mode 100644 (file)
index 0000000..6b59b2d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-17.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-170.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-170.aper
new file mode 100644 (file)
index 0000000..83cabf9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-170.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-171.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-171.aper
new file mode 100644 (file)
index 0000000..d92ef87
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-171.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-172.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-172.aper
new file mode 100644 (file)
index 0000000..6aa4c36
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-172.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-173.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-173.aper
new file mode 100644 (file)
index 0000000..79fd848
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-173.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-174.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-174.aper
new file mode 100644 (file)
index 0000000..6c88d45
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-174.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-175.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-175.aper
new file mode 100644 (file)
index 0000000..23ab256
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-175.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-176.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-176.aper
new file mode 100644 (file)
index 0000000..ce33a73
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-176.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-177.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-177.aper
new file mode 100644 (file)
index 0000000..0ff3426
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-177.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-178.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-178.aper
new file mode 100644 (file)
index 0000000..8998543
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-178.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-179.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-179.aper
new file mode 100644 (file)
index 0000000..7b82c20
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-179.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-18.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-18.aper
new file mode 100644 (file)
index 0000000..4d3cae2
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-18.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-180.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-180.aper
new file mode 100644 (file)
index 0000000..cea2226
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-180.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-181.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-181.aper
new file mode 100644 (file)
index 0000000..6a23070
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-181.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-182.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-182.aper
new file mode 100644 (file)
index 0000000..1156bc8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-182.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-183.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-183.aper
new file mode 100644 (file)
index 0000000..e6b7393
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-183.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-184.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-184.aper
new file mode 100644 (file)
index 0000000..8048c91
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-184.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-185.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-185.aper
new file mode 100644 (file)
index 0000000..232541a
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-185.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-186.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-186.aper
new file mode 100644 (file)
index 0000000..5ca797e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-186.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-187.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-187.aper
new file mode 100644 (file)
index 0000000..080db5c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-187.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-188.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-188.aper
new file mode 100644 (file)
index 0000000..57e8726
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-188.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-189.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-189.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-189.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-19.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-19.aper
new file mode 100644 (file)
index 0000000..09a0b4b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-19.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-190.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-190.aper
new file mode 100644 (file)
index 0000000..b322350
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-190.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-191.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-191.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-191.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-192.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-192.aper
new file mode 100644 (file)
index 0000000..92db434
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-192.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-193.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-193.aper
new file mode 100644 (file)
index 0000000..267e679
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-193.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-194.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-194.aper
new file mode 100644 (file)
index 0000000..6250288
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-194.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-195.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-195.aper
new file mode 100644 (file)
index 0000000..c2f1a18
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-195.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-196.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-196.aper
new file mode 100644 (file)
index 0000000..ca04723
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-196.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-197.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-197.aper
new file mode 100644 (file)
index 0000000..0287fec
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-197.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-198.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-198.aper
new file mode 100644 (file)
index 0000000..9c6d59e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-198.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-199.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-199.aper
new file mode 100644 (file)
index 0000000..1b63c72
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-199.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-2.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-2.aper
new file mode 100644 (file)
index 0000000..a819799
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-2.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-20.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-20.aper
new file mode 100644 (file)
index 0000000..a1debea
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-20.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-200.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-200.aper
new file mode 100644 (file)
index 0000000..c33cc70
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-200.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-201.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-201.aper
new file mode 100644 (file)
index 0000000..0c7fea4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-201.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-202.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-202.aper
new file mode 100644 (file)
index 0000000..9c9db32
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-202.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-203.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-203.aper
new file mode 100644 (file)
index 0000000..8ad6261
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-203.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-204.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-204.aper
new file mode 100644 (file)
index 0000000..c6dfd40
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-204.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-205.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-205.aper
new file mode 100644 (file)
index 0000000..c26656e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-205.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-206.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-206.aper
new file mode 100644 (file)
index 0000000..fe6cffd
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-206.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-207.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-207.aper
new file mode 100644 (file)
index 0000000..d178785
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-207.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-208.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-208.aper
new file mode 100644 (file)
index 0000000..a41917e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-208.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-209.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-209.aper
new file mode 100644 (file)
index 0000000..01b18b6
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-209.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-21.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-21.aper
new file mode 100644 (file)
index 0000000..34eab69
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-21.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-210.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-210.aper
new file mode 100644 (file)
index 0000000..286c197
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-210.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-211.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-211.aper
new file mode 100644 (file)
index 0000000..c306972
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-211.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-212.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-212.aper
new file mode 100644 (file)
index 0000000..e2ad798
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-212.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-213.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-213.aper
new file mode 100644 (file)
index 0000000..9dbc404
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-213.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-214.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-214.aper
new file mode 100644 (file)
index 0000000..51258a4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-214.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-215.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-215.aper
new file mode 100644 (file)
index 0000000..cb380c2
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-215.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-216.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-216.aper
new file mode 100644 (file)
index 0000000..65d0a00
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-216.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-217.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-217.aper
new file mode 100644 (file)
index 0000000..1ee2ae9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-217.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-218.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-218.aper
new file mode 100644 (file)
index 0000000..cec77cc
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-218.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-219.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-219.aper
new file mode 100644 (file)
index 0000000..4d39626
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-219.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-22.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-22.aper
new file mode 100644 (file)
index 0000000..99afea5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-22.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-220.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-220.aper
new file mode 100644 (file)
index 0000000..8ec5c27
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-220.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-221.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-221.aper
new file mode 100644 (file)
index 0000000..fca2191
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-221.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-222.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-222.aper
new file mode 100644 (file)
index 0000000..f602b77
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-222.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-223.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-223.aper
new file mode 100644 (file)
index 0000000..fa0bd1c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-223.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-224.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-224.aper
new file mode 100644 (file)
index 0000000..487494d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-224.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-225.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-225.aper
new file mode 100644 (file)
index 0000000..8427160
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-225.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-226.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-226.aper
new file mode 100644 (file)
index 0000000..eb4aea6
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-226.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-227.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-227.aper
new file mode 100644 (file)
index 0000000..aa71556
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-227.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-228.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-228.aper
new file mode 100644 (file)
index 0000000..a132ebd
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-228.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-229.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-229.aper
new file mode 100644 (file)
index 0000000..9dab468
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-229.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-23.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-23.aper
new file mode 100644 (file)
index 0000000..1c70435
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-23.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-230.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-230.aper
new file mode 100644 (file)
index 0000000..45339dd
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-230.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-231.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-231.aper
new file mode 100644 (file)
index 0000000..fa7b07e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-231.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-232.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-232.aper
new file mode 100644 (file)
index 0000000..9359f78
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-232.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-233.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-233.aper
new file mode 100644 (file)
index 0000000..c2315c4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-233.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-234.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-234.aper
new file mode 100644 (file)
index 0000000..bf5b8e9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-234.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-235.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-235.aper
new file mode 100644 (file)
index 0000000..e7591cc
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-235.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-236.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-236.aper
new file mode 100644 (file)
index 0000000..c58443b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-236.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-24.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-24.aper
new file mode 100644 (file)
index 0000000..5a32454
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-24.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-25.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-25.aper
new file mode 100644 (file)
index 0000000..2ca637d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-25.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-26.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-26.aper
new file mode 100644 (file)
index 0000000..857b21f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-26.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-27.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-27.aper
new file mode 100644 (file)
index 0000000..703fcb3
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-27.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-28.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-28.aper
new file mode 100644 (file)
index 0000000..ba4adc8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-28.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-29.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-29.aper
new file mode 100644 (file)
index 0000000..8437266
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-29.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-3.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-3.aper
new file mode 100644 (file)
index 0000000..60ea9b1
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-3.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-30.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-30.aper
new file mode 100644 (file)
index 0000000..5547ba1
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-30.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-31.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-31.aper
new file mode 100644 (file)
index 0000000..133b33c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-31.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-32.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-32.aper
new file mode 100644 (file)
index 0000000..2593126
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-32.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-33.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-33.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-33.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-34.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-34.aper
new file mode 100644 (file)
index 0000000..dc7507d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-34.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-35.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-35.aper
new file mode 100644 (file)
index 0000000..5c21340
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-35.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-36.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-36.aper
new file mode 100644 (file)
index 0000000..b1da6a2
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-36.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-37.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-37.aper
new file mode 100644 (file)
index 0000000..959269e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-37.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-38.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-38.aper
new file mode 100644 (file)
index 0000000..587cfc4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-38.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-39.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-39.aper
new file mode 100644 (file)
index 0000000..1843a61
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-39.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-4.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-4.aper
new file mode 100644 (file)
index 0000000..bdd9dc4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-4.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-40.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-40.aper
new file mode 100644 (file)
index 0000000..a432058
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-40.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-41.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-41.aper
new file mode 100644 (file)
index 0000000..4352ea8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-41.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-42.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-42.aper
new file mode 100644 (file)
index 0000000..9bface8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-42.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-43.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-43.aper
new file mode 100644 (file)
index 0000000..74a4b12
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-43.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-44.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-44.aper
new file mode 100644 (file)
index 0000000..addfb9d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-44.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-45.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-45.aper
new file mode 100644 (file)
index 0000000..4b4204e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-45.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-46.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-46.aper
new file mode 100644 (file)
index 0000000..cd82f09
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-46.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-47.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-47.aper
new file mode 100644 (file)
index 0000000..25131df
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-47.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-48.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-48.aper
new file mode 100644 (file)
index 0000000..d8f53d3
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-48.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-49.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-49.aper
new file mode 100644 (file)
index 0000000..3122bc3
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-49.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-5.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-5.aper
new file mode 100644 (file)
index 0000000..d5c099a
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-5.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-50.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-50.aper
new file mode 100644 (file)
index 0000000..1951983
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-50.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-51.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-51.aper
new file mode 100644 (file)
index 0000000..e01cc49
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-51.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-52.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-52.aper
new file mode 100644 (file)
index 0000000..7e959f8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-52.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-53.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-53.aper
new file mode 100644 (file)
index 0000000..e5b40a2
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-53.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-54.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-54.aper
new file mode 100644 (file)
index 0000000..024f861
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-54.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-55.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-55.aper
new file mode 100644 (file)
index 0000000..64708da
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-55.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-56.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-56.aper
new file mode 100644 (file)
index 0000000..0813e21
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-56.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-57.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-57.aper
new file mode 100644 (file)
index 0000000..e7e2f0e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-57.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-58.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-58.aper
new file mode 100644 (file)
index 0000000..2666443
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-58.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-59.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-59.aper
new file mode 100644 (file)
index 0000000..6a7afec
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-59.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-6.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-6.aper
new file mode 100644 (file)
index 0000000..492929d
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-6.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-60.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-60.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-60.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-61.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-61.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-61.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-62.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-62.aper
new file mode 100644 (file)
index 0000000..87aae67
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-62.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-63.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-63.aper
new file mode 100644 (file)
index 0000000..c6ae312
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-63.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-64.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-64.aper
new file mode 100644 (file)
index 0000000..07698dc
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-64.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-65.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-65.aper
new file mode 100644 (file)
index 0000000..b4d49fe
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-65.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-66.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-66.aper
new file mode 100644 (file)
index 0000000..63236b1
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-66.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-67.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-67.aper
new file mode 100644 (file)
index 0000000..6053376
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-67.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-68.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-68.aper
new file mode 100644 (file)
index 0000000..c2b59b8
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-68.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-69.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-69.aper
new file mode 100644 (file)
index 0000000..63e8e8c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-69.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-7.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-7.aper
new file mode 100644 (file)
index 0000000..a0c24e5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-7.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-70.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-70.aper
new file mode 100644 (file)
index 0000000..b966b71
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-70.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-71.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-71.aper
new file mode 100644 (file)
index 0000000..f29c7f7
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-71.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-72.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-72.aper
new file mode 100644 (file)
index 0000000..f74a04f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-72.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-73.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-73.aper
new file mode 100644 (file)
index 0000000..5823fda
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-73.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-74.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-74.aper
new file mode 100644 (file)
index 0000000..4a48590
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-74.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-75.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-75.aper
new file mode 100644 (file)
index 0000000..f828276
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-75.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-76.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-76.aper
new file mode 100644 (file)
index 0000000..35ce3c5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-76.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-77.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-77.aper
new file mode 100644 (file)
index 0000000..91e5866
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-77.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-78.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-78.aper
new file mode 100644 (file)
index 0000000..a74b179
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-78.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-79.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-79.aper
new file mode 100644 (file)
index 0000000..c9b10bb
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-79.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-8.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-8.aper
new file mode 100644 (file)
index 0000000..5b76f60
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-8.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-80.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-80.aper
new file mode 100644 (file)
index 0000000..6b931f9
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-80.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-81.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-81.aper
new file mode 100644 (file)
index 0000000..e0a02d5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-81.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-82.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-82.aper
new file mode 100644 (file)
index 0000000..425b01e
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-82.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-83.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-83.aper
new file mode 100644 (file)
index 0000000..73ca1a7
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-83.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-84.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-84.aper
new file mode 100644 (file)
index 0000000..517ea74
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-84.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-85.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-85.aper
new file mode 100644 (file)
index 0000000..377ab47
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-85.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-86.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-86.aper
new file mode 100644 (file)
index 0000000..43ecc8b
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-86.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-87.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-87.aper
new file mode 100644 (file)
index 0000000..65b1ae5
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-87.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-88.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-88.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-88.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-89.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-89.aper
new file mode 100644 (file)
index 0000000..0dbd6bf
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-89.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-9.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-9.aper
new file mode 100644 (file)
index 0000000..6c32ba0
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-9.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-90.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-90.aper
new file mode 100644 (file)
index 0000000..0e3e72f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-90.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-91.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-91.aper
new file mode 100644 (file)
index 0000000..c3a2688
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-91.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-92.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-92.aper
new file mode 100644 (file)
index 0000000..143305f
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-92.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-93.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-93.aper
new file mode 100644 (file)
index 0000000..8931d60
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-93.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-94.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-94.aper
new file mode 100644 (file)
index 0000000..9941421
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-94.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-95.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-95.aper
new file mode 100644 (file)
index 0000000..dd8e552
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-95.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-96.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-96.aper
new file mode 100644 (file)
index 0000000..0ca6b13
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-96.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-97.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-97.aper
new file mode 100644 (file)
index 0000000..970245c
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-97.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-98.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-98.aper
new file mode 100644 (file)
index 0000000..0e801b4
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-98.aper differ
diff --git a/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-99.aper b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-99.aper
new file mode 100644 (file)
index 0000000..f09a57a
Binary files /dev/null and b/examples/sample.source.S1AP/nextepc/sample-S1AP-PDU-99.aper differ
diff --git a/examples/sample.source.S1AP/sample-DownlinkNASTransport-1.aper b/examples/sample.source.S1AP/sample-DownlinkNASTransport-1.aper
new file mode 100644 (file)
index 0000000..8dba884
Binary files /dev/null and b/examples/sample.source.S1AP/sample-DownlinkNASTransport-1.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-1.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-1.aper
new file mode 100644 (file)
index 0000000..a82f5b5
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-1.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-10.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-10.aper
new file mode 100644 (file)
index 0000000..a662583
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-10.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-2.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-2.aper
new file mode 100644 (file)
index 0000000..f5b9ac6
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-2.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-3.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-3.aper
new file mode 100644 (file)
index 0000000..77bff1b
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-3.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-4.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-4.aper
new file mode 100644 (file)
index 0000000..266d47b
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-4.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-5.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-5.aper
new file mode 100644 (file)
index 0000000..d2de17b
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-5.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-7.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-7.aper
new file mode 100644 (file)
index 0000000..5b7d378
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-7.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-8.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-8.aper
new file mode 100644 (file)
index 0000000..a936292
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-8.aper differ
diff --git a/examples/sample.source.S1AP/sample-S1AP-PDU-9.aper b/examples/sample.source.S1AP/sample-S1AP-PDU-9.aper
new file mode 100644 (file)
index 0000000..0260400
Binary files /dev/null and b/examples/sample.source.S1AP/sample-S1AP-PDU-9.aper differ
diff --git a/examples/sample.source.TAP3/Makefile b/examples/sample.source.TAP3/Makefile
new file mode 100644 (file)
index 0000000..91d67c6
--- /dev/null
@@ -0,0 +1,107 @@
+ASN_PROGRAM = tap3dump
+CFLAGS += -DASN_CONVERTER_TITLE="GSM TAP3 (Transferred Account Procedure, Version 3) decoder" -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: DataInterChange.c maybe-wip-pause all
+
+-include converter-example.mk
+
+DataInterChange.c: ../sample.makefile.regen ../tap3.asn1
+       make regen-makefile
+       @touch DataInterChange.c
+       make
+
+regen-makefile:
+       TITLE="GSM TAP3 (Transferred Account Procedure, Version 3) decoder" \
+       ASN_CMDOPTS="" \
+       ASN_MODULES="../tap3.asn1" \
+       ASN_PDU=DataInterChange \
+       ASN_PROGRAM=tap3dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-DataInterChange-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-DataInterChange-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-DataInterChange-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-DataInterChange-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-DataInterChange-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.TAP3/README b/examples/sample.source.TAP3/README
new file mode 100644 (file)
index 0000000..e3f9a1f
--- /dev/null
@@ -0,0 +1,44 @@
+
+GENERAL INFORMATION
+===================
+
+The GSM TAP3 (Transferred Account Procedure, Version 3) decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../tap3.asn1 file.
+
+THERE IS NO tap3.asn1 FILE THERE YET!
+
+OBTAINING THE TAP3 SPECIFICATION
+================================
+
+Due to licensing restrictions, asn1c can not include the TAP3 ASN.1 module
+in its distribution.
+
+To obtain the TAP3 ASN.1 specification, you should go to
+       http://www.gsmworld.com/using/billing/tap3_legal.html
+and agree with their licensing terms by clicking the "I ACCEPT" button.
+
+A .ZIP file with several Microsoft Word .DOC files will download shortly.
+
+You should extract the TAP-0311 ASN.1 module from one of these .DOC files
+and save it as the ../tap3.asn1 file. The ../tap3.asn1 file should start with
+the following line
+       "TAP-0311 DEFINITIONS IMPLICIT TAGS ::="
+and end with the "END" token.
+Be careful not to copy any non-ASN.1 preambles from that .DOC file.
+
+After obtaining the tap3.asn1, type `make` in the directory containing
+this README file.
+
+tap3dump USAGE
+==============
+
+The tap3dump utility may be used to dump the contents of the BER-encoded
+TAP3 data record file:
+
+       ./tap3dump tapfile.ber  # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./tap3dump -h
+
diff --git a/examples/sample.source.TAP3/config.h b/examples/sample.source.TAP3/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.TAP3/sample-DataInterChange-1.ber b/examples/sample.source.TAP3/sample-DataInterChange-1.ber
new file mode 100644 (file)
index 0000000..a47ce5c
Binary files /dev/null and b/examples/sample.source.TAP3/sample-DataInterChange-1.ber differ
diff --git a/examples/sample.source.ULP/Makefile b/examples/sample.source.ULP/Makefile
new file mode 100644 (file)
index 0000000..85c1e59
--- /dev/null
@@ -0,0 +1,107 @@
+ASN_PROGRAM = ulp-dump
+CFLAGS += -DASN_CONVERTER_TITLE="OMA UserPlane Location Protocol decoder" -DHAVE_CONFIG_H -DJUNKTEST -D_DEFAULT_SOURCE
+begin: ULP-PDU.c maybe-wip-pause all
+
+-include converter-example.mk
+
+ULP-PDU.c: ../sample.makefile.regen ../ulp.asn1
+       make regen-makefile
+       @touch ULP-PDU.c
+       make
+
+regen-makefile:
+       TITLE="OMA UserPlane Location Protocol decoder" \
+       ASN_CMDOPTS="-pdu=SUPLINIT -fcompound-names -no-gen-OER" \
+       ASN_MODULES="../ulp.asn1" \
+       ASN_PDU=ULP-PDU \
+       ASN_PROGRAM=ulp-dump \
+       ../sample.makefile.regen
+
+check: ${ASN_PROGRAM} check-ber check-xer check-oer check-per
+       @echo ================
+       @echo All tests passed
+       @echo ================
+
+check-ber:
+       @if test -f sample-ULP-PDU-1.[db]er ; then \
+       for f in sample-*-*.[db]er; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iber -onull $$f || exit 6; \
+       done; done; fi
+
+check-xer:
+       @if test -f sample-ULP-PDU-1.xer ; then \
+       for f in sample-*-*.xer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ixer -onull $$f || exit 6; \
+       done; done; fi
+
+check-oer:
+       @if test -f sample-ULP-PDU-1.*oer ; then \
+       for f in sample-*-*.*oer; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ioer -oxer $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -ooer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       diff $$f ./.tmp.2.$$$$ || exit 4; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait) ($$b) ..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 5; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -ioer -onull $$f || exit 6; \
+       done; done; fi
+
+check-per:
+       @if test -f sample-ULP-PDU-1-nopad.per ; then \
+       for f in sample-*-[1-9]-nopad.per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding non-padded $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \
+       diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \
+       rm -f ./.tmp.[123].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 6; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -per-nopad -iper -onull $$f || exit 7; \
+       done; done; fi
+       @if test -f sample-ULP-PDU-1.per ; then \
+       for f in sample-*-[1-9].per; do \
+       pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z0-9-]+)-[0-9].*/\1/"`; \
+       for b in 1 17 33 980 8192; do \
+       echo "Recoding $$f ($$pdu) into DER into XER and back ($$b)..."; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \
+       ./${ASN_PROGRAM} -p $$pdu -b $$b -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \
+       diff $$f ./.tmp.1.$$$$ || exit 6; \
+       rm -f ./.tmp.[12].$$$$; \
+       echo "Test junking $$f (please wait)..."; \
+       ./${ASN_PROGRAM} -J0.0001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 7; \
+       ./${ASN_PROGRAM} -J0.001 -n 1000 -p $$pdu -b $$b -iper -onull $$f || exit 8; \
+       done; done; fi
+
+maybe-wip-pause:
+       @if [ -f WIP ]; then cat WIP; sleep 2; fi
+
+distclean: clean
+       rm -f $(ASN_MODULE_SRCS)
+       rm -f $(ASN_MODULE_HDRS)
+       rm -f $(ASN_PROGRAM_SRCS) $(ASN_PROGRAM_HDRS)
+       rm -f converter-example.mk
diff --git a/examples/sample.source.ULP/README b/examples/sample.source.ULP/README
new file mode 100644 (file)
index 0000000..0fa919d
--- /dev/null
@@ -0,0 +1,53 @@
+
+GENERAL INFORMATION
+===================
+
+The OMA ULP (UserPlane Location Protocol) decoder.
+Invoking `make` will compile the ASN.1 specifications from the
+../ulp.asn1 file.
+
+THERE IS NO ulp.asn1 FILE THERE YET!
+
+OBTAINING THE ULP SPECIFICATION
+===============================
+
+Due to unclear stanza of Open Mobile Alliance regarding the extraction of
+ASN.1 modules from their documents, and also due to some OMA membership
+concerns, asn1c can not include the ULP ASN.1 module in its distribution.
+
+To obtain the ULP ASN.1 specification, you should go to
+       http://www.openmobilealliance.org/UseAgreement.html
+and agree with their licensing terms by clicking the "I ACCEPT" button.
+
+Then, go to http://member.openmobilealliance.org/ftp/Public_documents/LOC/Permanent_documents/
+and download the necessary specification file. For example, one of these:
+    Version 1.0 specifications (Candidate versions):
+       OMA-TS-ULP-V1_0-20070122-C.zip  (V1.0, 2007 January 22)
+       OMA-TS-ULP-V1_0-20070613-C.zip  (V1.0, 2007 June 13)
+    Version 2.0 specification (Draft version):
+       OMA-TS-ULP-V2_0-20070625-D.zip  (V2.0, 2007 April 25)
+
+A .ZIP file with several Microsoft Word .DOC files will download shortly.
+
+You should extract the ASN.1 module from the section 8 of these .DOC files
+and save it as the ../ulp.asn1 file. The ../ulp.asn1 file should start with
+the following line
+       "ULP DEFINITIONS IMPLICIT TAGS ::="
+and end with the "END" token.
+Be careful not to copy any non-ASN.1 preambles from that .DOC file.
+
+After obtaining the ulp.asn1, type `make` in the directory containing
+this README file.
+
+ulp-dump USAGE
+==============
+
+The ulp-dump utility may be used to dump the contents of the PER-encoded
+ULP message record file:
+
+       ./ulp-dump ulpfile.per  # Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+       > ./ulp-dump -h
+
diff --git a/examples/sample.source.ULP/config.h b/examples/sample.source.ULP/config.h
new file mode 100644 (file)
index 0000000..2dda929
--- /dev/null
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define        ASN_DEBUG(fmt, args...) do {            \
+               if(opt_debug < 2) break;        \
+               fprintf(stderr, fmt, ##args);   \
+               fprintf(stderr, " (%s:%d)\n",   \
+                       __FILE__, __LINE__);    \
+       } while(0)
+
diff --git a/examples/sample.source.ULP/sample-ULP-PDU-1.per b/examples/sample.source.ULP/sample-ULP-PDU-1.per
new file mode 100644 (file)
index 0000000..ed388e0
Binary files /dev/null and b/examples/sample.source.ULP/sample-ULP-PDU-1.per differ
diff --git a/examples/sample.source.ULP/sample-ULP-PDU-1.xer b/examples/sample.source.ULP/sample-ULP-PDU-1.xer
new file mode 100644 (file)
index 0000000..e2b0d78
--- /dev/null
@@ -0,0 +1,53 @@
+<ULP-PDU>
+    <length>29</length>
+    <version>
+        <maj>1</maj>
+        <min>0</min>
+        <servind>0</servind>
+    </version>
+    <sessionID>
+        <setSessionID>
+            <sessionId>1</sessionId>
+            <setId>
+                <msisdn>61 01 08 34 06 04 00 F0</msisdn>
+            </setId>
+        </setSessionID>
+    </sessionID>
+    <message>
+        <msSUPLSTART>
+            <sETCapabilities>
+                <posTechnology>
+                    <agpsSETassisted><false/></agpsSETassisted>
+                    <agpsSETBased><true/></agpsSETBased>
+                    <autonomousGPS><false/></autonomousGPS>
+                    <aFLT><false/></aFLT>
+                    <eCID><false/></eCID>
+                    <eOTD><false/></eOTD>
+                    <oTDOA><false/></oTDOA>
+                </posTechnology>
+                <prefMethod><noPreference/></prefMethod>
+                <posProtocol>
+                    <tia801><false/></tia801>
+                    <rrlp><true/></rrlp>
+                    <rrc><false/></rrc>
+                </posProtocol>
+            </sETCapabilities>
+            <locationId>
+                <cellInfo>
+                    <gsmCell>
+                        <refMCC>310</refMCC>
+                        <refMNC>41</refMNC>
+                        <refLAC>2021</refLAC>
+                        <refCI>12044</refCI>
+                    </gsmCell>
+                </cellInfo>
+                <status><current/></status>
+            </locationId>
+            <qoP>
+                <horacc>4</horacc>
+                <veracc>15</veracc>
+                <delay>7</delay>
+            </qoP>
+        </msSUPLSTART>
+    </message>
+</ULP-PDU>
diff --git a/examples/sample.source.ULP/sample-ULP-PDU-2.per b/examples/sample.source.ULP/sample-ULP-PDU-2.per
new file mode 100644 (file)
index 0000000..4612eda
Binary files /dev/null and b/examples/sample.source.ULP/sample-ULP-PDU-2.per differ
diff --git a/libasn1common/.deps/asn1_buffer.Plo b/libasn1common/.deps/asn1_buffer.Plo
new file mode 100644 (file)
index 0000000..ce1f6cd
--- /dev/null
@@ -0,0 +1,127 @@
+asn1_buffer.lo: asn1_buffer.c /usr/include/stdc-predef.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \
+ /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h /usr/include/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \
+ ../config.h asn1_buffer.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/time.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/assert.h:
+
+../config.h:
+
+asn1_buffer.h:
diff --git a/libasn1common/.deps/asn1_namespace.Plo b/libasn1common/.deps/asn1_namespace.Plo
new file mode 100644 (file)
index 0000000..4ee83c6
--- /dev/null
@@ -0,0 +1,144 @@
+asn1_namespace.lo: asn1_namespace.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1_ref.h asn1_buffer.h asn1_namespace.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1_ref.h:
+
+asn1_buffer.h:
+
+asn1_namespace.h:
diff --git a/libasn1common/.deps/asn1_ref.Plo b/libasn1common/.deps/asn1_ref.Plo
new file mode 100644 (file)
index 0000000..03595be
--- /dev/null
@@ -0,0 +1,139 @@
+asn1_ref.lo: asn1_ref.c /usr/include/stdc-predef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1_ref.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1_ref.h:
diff --git a/libasn1common/.deps/genhash.Plo b/libasn1common/.deps/genhash.Plo
new file mode 100644 (file)
index 0000000..5c7f8b9
--- /dev/null
@@ -0,0 +1,115 @@
+genhash.lo: genhash.c /usr/include/stdc-predef.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ genhash.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/time.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+genhash.h:
diff --git a/libasn1common/Makefile b/libasn1common/Makefile
new file mode 100644 (file)
index 0000000..d996e40
--- /dev/null
@@ -0,0 +1,722 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# libasn1common/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = libasn1common
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1common_la_LIBADD =
+am_libasn1common_la_OBJECTS = asn1_ref.lo asn1_buffer.lo \
+       asn1_namespace.lo genhash.lo
+libasn1common_la_OBJECTS = $(am_libasn1common_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1common_la_SOURCES)
+DIST_SOURCES = $(libasn1common_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/libasn1common
+abs_srcdir = /home/nokia/mouse07410/asn1c/libasn1common
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+noinst_LTLIBRARIES = libasn1common.la
+libasn1common_la_SOURCES = \
+    asn1_ref.c asn1_ref.h               \
+    asn1_buffer.c asn1_buffer.h         \
+    asn1_namespace.c asn1_namespace.h   \
+    genhash.c genhash.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1common/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1common/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1common.la: $(libasn1common_la_OBJECTS) $(libasn1common_la_DEPENDENCIES) $(EXTRA_libasn1common_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1common_la_OBJECTS) $(libasn1common_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1_buffer.Plo
+include ./$(DEPDIR)/asn1_namespace.Plo
+include ./$(DEPDIR)/asn1_ref.Plo
+include ./$(DEPDIR)/genhash.Plo
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+# 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:
diff --git a/libasn1common/Makefile.am b/libasn1common/Makefile.am
new file mode 100644 (file)
index 0000000..78f05fd
--- /dev/null
@@ -0,0 +1,12 @@
+@CODE_COVERAGE_RULES@
+
+AM_CFLAGS = @ADD_CFLAGS@
+
+noinst_LTLIBRARIES = libasn1common.la
+
+libasn1common_la_SOURCES =              \
+    asn1_ref.c asn1_ref.h               \
+    asn1_buffer.c asn1_buffer.h         \
+    asn1_namespace.c asn1_namespace.h   \
+    genhash.c genhash.h
+
diff --git a/libasn1common/Makefile.in b/libasn1common/Makefile.in
new file mode 100644 (file)
index 0000000..379a753
--- /dev/null
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = libasn1common
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1common_la_LIBADD =
+am_libasn1common_la_OBJECTS = asn1_ref.lo asn1_buffer.lo \
+       asn1_namespace.lo genhash.lo
+libasn1common_la_OBJECTS = $(am_libasn1common_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1common_la_SOURCES)
+DIST_SOURCES = $(libasn1common_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+noinst_LTLIBRARIES = libasn1common.la
+libasn1common_la_SOURCES = \
+    asn1_ref.c asn1_ref.h               \
+    asn1_buffer.c asn1_buffer.h         \
+    asn1_namespace.c asn1_namespace.h   \
+    genhash.c genhash.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1common/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1common/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1common.la: $(libasn1common_la_OBJECTS) $(libasn1common_la_DEPENDENCIES) $(EXTRA_libasn1common_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1common_la_OBJECTS) $(libasn1common_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_buffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_namespace.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1_ref.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genhash.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+# 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:
diff --git a/libasn1common/asn1_buffer.c b/libasn1common/asn1_buffer.c
new file mode 100644 (file)
index 0000000..cd67b81
--- /dev/null
@@ -0,0 +1,171 @@
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include "config.h"
+
+#include "asn1_buffer.h"
+
+#if !defined(HAVE_DECL_VASPRINTF) || (HAVE_DECL_VASPRINTF == 0)
+int vasprintf(char **ret, const char *fmt, va_list args);
+#endif
+
+/*
+ * Create and destroy the buffer.
+ */
+abuf *
+abuf_new() {
+    abuf *ab = calloc(1, sizeof(abuf));
+    assert(ab);
+    ab->length = 0;
+    ab->size = 32;
+    ab->buffer = calloc(1, ab->size);
+    assert(ab->buffer);
+    return ab;
+}
+
+void abuf_free(abuf *ab) {
+    if(ab) {
+        union {
+            const char *c_buf;
+            char *nc_buf;
+        } const_cast;
+        const_cast.c_buf = ab->buffer;
+        free(const_cast.nc_buf);
+        free(ab);
+    }
+}
+
+/*
+ * Erase contents of the buffer (without destroying it).
+ */
+void
+abuf_clear(abuf *ab) {
+    union {
+        const char *c_buf;
+        char *nc_buf;
+    } const_cast;
+    if(!ab->buffer) {
+        ab->size = 32;
+        ab->buffer = calloc(1, ab->size);
+        assert(ab->buffer);
+    }
+    const_cast.c_buf = ab->buffer;
+    ab->length = 0;
+    const_cast.nc_buf[0] = '\0';
+}
+
+static void
+abuf_resize_by(abuf *ab, size_t size) {
+    union {
+        const char *c_buf;
+        char *nc_buf;
+    } const_cast;
+    const_cast.c_buf = ab->buffer;
+
+    assert(!ab->buffer || ab->buffer[ab->length] == '\0');
+
+    size_t new_size = ab->length + size;
+    char *p = realloc(const_cast.nc_buf, new_size);
+    assert(p);
+    if(!ab->buffer) {
+        assert(ab->length == 0);
+        *p = '\0';
+    }
+    ab->buffer = p;
+    assert(ab->buffer[ab->length] == '\0');
+    ab->size = new_size;
+}
+
+void abuf_add_bytes(abuf *ab, const char *str, size_t size) {
+    abuf_resize_by(ab, size + 1);
+    union {
+        const char *c_buf;
+        char *nc_buf;
+    } const_cast;
+    const_cast.c_buf = ab->buffer;
+    memcpy(&const_cast.nc_buf[ab->length], str, size);
+    ab->length += size;
+    const_cast.nc_buf[ab->length] = '\0';
+}
+
+void abuf_str(abuf *ab, const char *str) {
+    abuf_add_bytes(ab, str, strlen(str));
+}
+
+void abuf_buf(abuf *ab, const abuf *buf) {
+    abuf_add_bytes(ab, buf->buffer, buf->length);
+}
+
+int abuf_printf(abuf *ab, const char *fmt, ...) {
+    va_list ap;
+
+    for(;;) {
+        union {
+            const char *c_buf;
+            char *nc_buf;
+        } const_cast;
+        const_cast.c_buf = ab->buffer;
+        va_start(ap, fmt);
+        int ret = vsnprintf(&const_cast.nc_buf[ab->length],
+                            ab->size - ab->length, fmt, ap);
+        va_end(ap);
+        assert(ret >= 0);
+        if((size_t)ret < ab->size - ab->length) {
+            ab->length += ret;
+            assert(ab->buffer[ab->length] == '\0');
+            return ret;
+        }
+        const_cast.nc_buf[ab->length] = '\0'; /* Restore order */
+        abuf_resize_by(ab, ret + 1);
+    }
+}
+
+int abuf_vprintf(abuf *ab, const char *fmt, va_list ap) {
+    int ret;
+    char *str = 0;
+
+    ret = vasprintf(&str, fmt, ap);
+    assert(ret >= 0);
+    assert(str != NULL);
+
+    abuf_add_bytes(ab, str, ret);
+
+    free(str);
+
+    return ret;
+}
+
+#if !defined(HAVE_DECL_VASPRINTF) || (HAVE_DECL_VASPRINTF == 0)
+/* Solaris doesn't have vasprintf(3). */
+int
+vasprintf(char **ret, const char *fmt, va_list args) {
+    int actual_length = -1;
+    va_list copy;
+    va_copy(copy, args);
+
+    int suggested = vsnprintf(NULL, 0, fmt, args);
+    if(suggested >= 0) {
+        *ret = malloc(suggested + 1);
+        if(*ret) {
+            int actual_length = vsnprintf(*ret, suggested + 1, fmt, copy);
+            if(actual_length >= 0) {
+                assert(actual_length == suggested);
+                assert((*ret)[actual_length] == '\0');
+            } else {
+                free(*ret);
+                *ret = 0;
+            }
+        }
+    } else {
+        *ret = NULL;
+        assert(suggested >= 0); /* Can't function like this */
+    }
+    va_end(args);
+
+    return actual_length;
+}
+#endif
diff --git a/libasn1common/asn1_buffer.h b/libasn1common/asn1_buffer.h
new file mode 100644 (file)
index 0000000..f5e459f
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef        ASN1_BUFFER_H
+#define        ASN1_BUFFER_H
+
+#include <stdarg.h>
+
+/*
+ * Your typical dynamic character string buffer.
+ */
+typedef struct {
+    const char *buffer;
+    size_t length;
+    size_t size;
+} abuf;
+
+/*
+ * Create and destroy the buffer.
+ */
+abuf *abuf_new(void);
+void abuf_free(abuf *);
+
+/*
+ * Erase contents of the buffer (without destroying it).
+ */
+void abuf_clear(abuf *);
+
+/*
+ * Add characters to the buffer.
+ */
+void abuf_str(abuf *, const char *str);
+void abuf_buf(abuf *, const abuf *);
+void abuf_add_bytes(abuf *, const char *, size_t);
+int abuf_printf(abuf *, const char *fmt, ...)
+    __attribute__((format(printf, 2, 3)));
+int abuf_vprintf(abuf *, const char *fmt, va_list);
+
+#endif /* ASN1_BUFFER_H */
diff --git a/libasn1common/asn1_namespace.c b/libasn1common/asn1_namespace.c
new file mode 100644 (file)
index 0000000..db01072
--- /dev/null
@@ -0,0 +1,148 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1_ref.h"
+#include "asn1_buffer.h"
+#include "asn1_namespace.h"
+
+static void (*_add_standard_namespaces_cb)(asn1_namespace_t *);
+
+void
+asn1_namespace_add_standard_namespaces_callback(
+    void (*cb)(asn1_namespace_t *)) {
+    _add_standard_namespaces_cb = cb;
+}
+
+asn1_namespace_t *
+asn1_namespace_new() {
+    asn1_namespace_t *ns = calloc(1, sizeof(*ns));
+
+    if(_add_standard_namespaces_cb) {
+        _add_standard_namespaces_cb(ns);
+    }
+
+    return ns;
+}
+
+void
+asn1_namespace_free(asn1_namespace_t *ns) {
+    if(ns) {
+        for(size_t i = 0; i < ns->elements_count; i++) {
+            switch(ns->elements[i].selector) {
+            case NAM_SPACE:
+                break;
+            case NAM_SYMBOL:
+                free(ns->elements[i].u.symbol.identifier);
+                break;
+            }
+        }
+        free(ns->elements);
+        free(ns);
+    }
+}
+
+asn1_namespace_t *
+asn1_namespace_clone(const asn1_namespace_t *old_ns) {
+    asn1_namespace_t *new_ns = calloc(1, sizeof(*new_ns));
+
+    for(size_t i = 0; i < old_ns->elements_count; i++) {
+        switch(old_ns->elements[i].selector) {
+        case NAM_SPACE:
+            asn1_namespace_add_module(new_ns,
+                                       old_ns->elements[i].u.space.module,
+                                       old_ns->elements[i].u.space.stop_search);
+            break;
+        case NAM_SYMBOL:
+            asn1_namespace_add_symbol(
+                new_ns, old_ns->elements[i].u.symbol.opt_governor,
+                old_ns->elements[i].u.symbol.identifier,
+                old_ns->elements[i].u.symbol.resolution);
+            break;
+        }
+    }
+
+    return new_ns;
+}
+
+static size_t
+_add_element(asn1_namespace_t *ns) {
+    size_t idx = ns->elements_count;
+
+    if(ns->elements_count >= ns->elements_size) {
+        size_t elc = ns->elements_size ? ns->elements_size * 2 : 4;
+        ns->elements = realloc(ns->elements, sizeof(ns->elements[0]) * elc);
+        ns->elements_size = elc;
+    }
+
+    ns->elements_count++;
+    return idx;
+}
+
+void
+asn1_namespace_add_symbol(asn1_namespace_t *ns,
+                          struct asn1p_ref_s *opt_governor,
+                          const char *identifier,
+                          struct asn1p_expr_s *resolved_argument) {
+    size_t idx = _add_element(ns);
+
+    ns->elements[idx].selector = NAM_SYMBOL;
+    ns->elements[idx].u.symbol.opt_governor = opt_governor;
+    ns->elements[idx].u.symbol.identifier = strdup(identifier);
+    ns->elements[idx].u.symbol.resolution = resolved_argument;
+}
+
+asn1_namespace_t *
+asn1_namespace_new_from_module(struct asn1p_module_s *module, int stop_search) {
+    asn1_namespace_t *ns = asn1_namespace_new();
+    asn1_namespace_add_module(ns, module, stop_search);
+    return ns;
+}
+
+void
+asn1_namespace_add_module(asn1_namespace_t *ns, struct asn1p_module_s *module,
+                          int stop_search) {
+    size_t idx = _add_element(ns);
+
+    ns->elements[idx].selector = NAM_SPACE,
+    ns->elements[idx].u.space.module = module;
+    ns->elements[idx].u.space.stop_search = stop_search;
+}
+
+const char *
+asn1_namespace_string(const asn1_namespace_t *ns) {
+    static abuf ab;
+
+    abuf_clear(&ab);
+
+    if(ns) {
+        abuf_str(&ab, "{");
+        for(size_t i = 0; i < ns->elements_count; i++) {
+            if(i) abuf_str(&ab, ",");
+            switch(ns->elements[i].selector) {
+            case NAM_SPACE:
+                abuf_printf(
+                    &ab, "M:\"%s\"%s",
+                    *(const char *const *)ns->elements[i].u.space.module,
+                    ns->elements[i].u.space.stop_search ? "!" : "");
+                break;
+            case NAM_SYMBOL:
+                abuf_printf(&ab, "S:\"%s%s%s\"",
+                            ns->elements[i].u.symbol.opt_governor
+                                ? asn1p_ref_string(
+                                      ns->elements[i].u.symbol.opt_governor)
+                                : "",
+                            ns->elements[i].u.symbol.opt_governor ? ":" : "",
+                            ns->elements[i].u.symbol.identifier);
+                break;
+            }
+        }
+        abuf_str(&ab, "}");
+        return ab.buffer;
+    } else {
+        return "<no namespace>";
+    }
+}
+
diff --git a/libasn1common/asn1_namespace.h b/libasn1common/asn1_namespace.h
new file mode 100644 (file)
index 0000000..1ae3d7b
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Structures and prototypes related to parameterization
+ */
+#ifndef        ASN1_NAMESPACE_H
+#define        ASN1_NAMESPACE_H
+
+struct asn1p_ref_s;     /* Forward declaration */
+struct asn1p_expr_s;    /* Forward declaration */
+struct asn1p_module_s;  /* Forward declaration */
+
+typedef struct asn1_namespace_s {
+    struct asn1_namespace_element_s {
+        enum {
+            NAM_SPACE,  /* The whole search space (e.g. Module) */
+            NAM_SYMBOL, /* A particular symbol */
+        } selector;
+        union {
+            struct {
+                struct asn1p_module_s *module;
+                int stop_search;    /* This module MUST contain the symbol */
+            } space;
+            struct {
+                struct asn1p_ref_s *opt_governor;   /* optional */
+                char *identifier;
+                struct asn1p_expr_s *resolution;
+            } symbol;
+        } u;
+    } *elements;
+    size_t elements_count;
+    size_t elements_size;
+} asn1_namespace_t;
+
+/*
+ * Set callback used to initialize standard namespaces.
+ */
+void asn1_namespace_add_standard_namespaces_callback(
+    void (*)(asn1_namespace_t *));
+
+asn1_namespace_t *asn1_namespace_new(void);
+void asn1_namespace_free(asn1_namespace_t *);
+
+asn1_namespace_t *asn1_namespace_clone(const asn1_namespace_t *);
+
+asn1_namespace_t *asn1_namespace_new_from_module(struct asn1p_module_s *mod, int stop_search);
+
+void asn1_namespace_add_module(asn1_namespace_t *,
+                               struct asn1p_module_s *module, int stop_search);
+
+void asn1_namespace_add_symbol(asn1_namespace_t *,
+                                struct asn1p_ref_s *opt_governor,
+                                const char *identifier,
+                                struct asn1p_expr_s *resolved_argument);
+
+/*
+ * Human-readable namespace layout.
+ * Returns a reference to a statically allocated string.
+ */
+const char *asn1_namespace_string(const asn1_namespace_t *);
+
+/*
+ * Create a new namespace by cloning (ns1) and adding (ns2) on top.
+ * Destroys (ns2).
+ */
+asn1_namespace_t *asn1_namespace_new_ND(const asn1_namespace_t *ns1,
+                                        asn1_namespace_t *ns2);
+
+/*
+ * Introduce and destroy namespace around the given code.
+ * This aids memory management around dynamic namespaces.
+ */
+#define WITH_MODULE_NAMESPACE(mod, ns_var, code)     \
+    ({                                               \
+        struct asn1_namespace_s *ns_var =           \
+            asn1_namespace_new_from_module(mod, 1); \
+        typeof(code) ret = code;                     \
+        asn1_namespace_free(ns_var);                \
+        ret;                                         \
+    })
+
+#endif /* ASN1_NAMESPACE_H */
diff --git a/libasn1common/asn1_ref.c b/libasn1common/asn1_ref.c
new file mode 100644 (file)
index 0000000..a5ee998
--- /dev/null
@@ -0,0 +1,194 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1_ref.h"
+
+/*
+ * Construct a new empty reference.
+ */
+asn1p_ref_t *
+asn1p_ref_new(int _lineno, struct asn1p_module_s *mod) {
+       asn1p_ref_t *ref;
+
+    ref = calloc(1, sizeof *ref);
+    assert(ref);
+    asn1p_ref_set_source(ref, mod, _lineno);
+
+    return ref;
+}
+
+void
+asn1p_ref_free(asn1p_ref_t *ref) {
+       if(ref) {
+               if(ref->components) {
+                       size_t i = ref->comp_count;
+                       while(i--) {
+                               free(ref->components[i].name);
+                               ref->components[i].name = 0;
+                       }
+                       free(ref->components);
+                       ref->components = 0;
+               }
+
+               free(ref);
+       }
+}
+
+void
+asn1p_ref_set_source(asn1p_ref_t *ref, struct asn1p_module_s *module,
+                     int lineno) {
+    if(ref) {
+        ref->module = module;
+        ref->_lineno = lineno;
+    }
+}
+
+static enum asn1p_ref_lex_type_e
+asn1p_ref_name2lextype(const char *name) {
+       enum asn1p_ref_lex_type_e lex_type;
+       int has_lowercase = 0;
+
+       if(*name == '&') {
+               if(name[1] >= 'A' && name[1] <= 'Z') {
+                       lex_type = RLT_AmpUppercase;
+               } else {
+                       lex_type = RLT_Amplowercase;
+               }
+       } else if(*name >= 'A' && *name <= 'Z') {
+               const char *p;
+
+               for(p = name; *p; p++) {
+                       if(*p >= 'a' && *p <= 'z') {
+                               has_lowercase = 1;
+                               break;
+                       }
+               }
+
+               if(has_lowercase) {
+                       lex_type = RLT_Uppercase;
+               } else {
+                       lex_type = RLT_CAPITALS;
+               }
+       } else if(*name == '@') {
+               if(name[1] == '.')
+                       lex_type = RLT_AtDotlowercase;
+               else
+                       lex_type = RLT_Atlowercase;
+       } else {
+               lex_type = RLT_lowercase;
+       }
+
+       return lex_type;
+}
+
+int
+asn1p_ref_add_component(asn1p_ref_t *ref, const char *name, enum asn1p_ref_lex_type_e lex_type) {
+
+       if(!ref || !name
+       || (int)lex_type < RLT_UNKNOWN || lex_type >= RLT_MAX) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(ref->comp_count == ref->comp_size) {
+               int newsize = ref->comp_size?(ref->comp_size<<2):4;
+               void *p = realloc(ref->components,
+                       newsize * sizeof(ref->components[0]));
+               if(p) {
+                       ref->components = p;
+                       ref->comp_size = newsize;
+               } else {
+                       return -1;
+               }
+
+       }
+
+       if(lex_type == RLT_UNKNOWN) {
+               lex_type = asn1p_ref_name2lextype(name);
+       } else {
+               assert(lex_type == asn1p_ref_name2lextype(name));
+       }
+
+       ref->components[ref->comp_count].name = strdup(name);
+       ref->components[ref->comp_count].lex_type = lex_type;
+       if(ref->components[ref->comp_count].name) {
+               ref->comp_count++;
+               return 0;
+       } else {
+               return -1;
+       }
+}
+
+asn1p_ref_t *
+asn1p_ref_clone(asn1p_ref_t *ref) {
+       asn1p_ref_t *newref;
+
+       newref = asn1p_ref_new(ref->_lineno, ref->module);
+       if(newref) {
+               for(size_t i = 0; i < ref->comp_count; i++) {
+                       if(asn1p_ref_add_component(newref,
+                               ref->components[i].name,
+                               ref->components[i].lex_type
+                       )) {
+                               asn1p_ref_free(newref);
+                               newref = NULL;
+                               break;
+                       }
+               }
+       }
+
+       return newref;
+}
+
+int
+asn1p_ref_compare(const asn1p_ref_t *a, const asn1p_ref_t *b) {
+    if(a->comp_count != b->comp_count)
+        return -1;
+    if(a->module != b->module)
+        return -1;
+
+    for(size_t i = 0; i < a->comp_count; i++) {
+        if(a->components[i].lex_type != b->components[i].lex_type
+           || strcmp(a->components[i].name, b->components[i].name) != 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+const char *
+asn1p_ref_string(const asn1p_ref_t *ref) {
+    static char static_buf[32];
+    static char *buf = static_buf;
+    static size_t buf_size = sizeof(static_buf);
+    char *p = buf;
+
+    if(!ref) return "<no-ref>";
+
+    for(size_t i = 0; i < ref->comp_count; i++) {
+        size_t space = buf_size - (p - buf);
+        int ret =
+            snprintf(p, space, "%s%s", i ? "." : "", ref->components[i].name);
+        if(ret < 0 || (size_t)ret >= space) {
+            i--;
+            char *tmp = malloc(buf_size * 2 + 1);
+            assert(tmp);
+            size_t p_offset = p - buf;
+            memcpy(tmp, buf, (p - buf));
+            if(buf != static_buf) free(buf);
+            buf_size *= 2;
+            buf = tmp;
+            p = tmp + p_offset;
+        } else {
+            p += ret;
+        }
+    }
+
+    *p = '\0';
+    return buf;
+}
+
diff --git a/libasn1common/asn1_ref.h b/libasn1common/asn1_ref.h
new file mode 100644 (file)
index 0000000..dbc8f87
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Generic reference to the yet unknown type defined elsewhere.
+ */
+#ifndef        ASN1_REFERENCE_H
+#define        ASN1_REFERENCE_H
+
+struct asn1p_module_s;
+
+typedef struct asn1p_ref_s {
+
+       /*
+        * A set of reference name components.
+        * A reference name consists of several components separated by dots:
+        * "OBJECT-CLASS.&Algorithm.&id"
+        */
+       struct asn1p_ref_component_s {
+               enum asn1p_ref_lex_type_e {
+                       RLT_UNKNOWN,            /* Invalid? */
+                       /*
+                        * Object class reference "OCLASS1",
+                        * type reference "Type1",
+                        * value reference "id",
+                        * type field reference "&Type1",
+                        * value field reference "&id",
+                        * "OBJECT-CLASS"
+                        */
+                       RLT_CAPITALS,
+                       RLT_Uppercase,
+                       RLT_lowercase,
+                       RLT_AmpUppercase,
+                       RLT_Amplowercase,
+                       RLT_Atlowercase,
+                       RLT_AtDotlowercase,
+                       RLT_MAX
+               } lex_type;     /* Inferred lexical type of the identifier */
+               char *name;     /* An identifier */
+       } *components;
+
+       size_t comp_count;      /* Number of the components in the reference name. */
+       size_t comp_size;       /* Number of allocated structures */
+
+       struct asn1p_module_s *module;  /* Defined in module */
+       int _lineno;    /* Number of line in the file */
+} asn1p_ref_t;
+
+/*
+ * Constructor and destructor.
+ */
+asn1p_ref_t *asn1p_ref_new(int _lineno, struct asn1p_module_s *mod);
+void asn1p_ref_free(asn1p_ref_t *);
+
+asn1p_ref_t *asn1p_ref_clone(asn1p_ref_t *ref);
+
+void asn1p_ref_set_source(asn1p_ref_t *, struct asn1p_module_s *module,
+                          int lineno);
+
+
+/*
+ * Lexicographically compare references.
+ */
+int asn1p_ref_compare(const asn1p_ref_t *, const asn1p_ref_t *);
+
+/*
+ * Return a pointer to a statically allocated buffer representing the
+ * complete reference.
+ */
+const char *asn1p_ref_string(const asn1p_ref_t *);
+
+/*
+ * Add a new reference component to the existing reference structure.
+ *
+ * RETURN VALUES:
+ *  0:         All clear.
+ * -1/EINVAL:  Invalid arguments
+ * -1/ENOMEM:  Memory allocation failed
+ */
+int asn1p_ref_add_component(asn1p_ref_t *,
+       const char *name, enum asn1p_ref_lex_type_e);
+
+#endif /* ASN1_REFERENCE_H */
diff --git a/libasn1common/genhash.c b/libasn1common/genhash.c
new file mode 100644 (file)
index 0000000..5a6d3e4
--- /dev/null
@@ -0,0 +1,812 @@
+/*
+ * Copyright (c) 2002-2005  Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Copyright (c) 2001-2004  Netli, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: genhash.c 447 2005-06-07 06:51:10Z vlm $
+ */
+/*
+ * Implementation of a hash data structure.
+ * This particular implementation is supposed to be space-efficient
+ * particularly in the case of tiny number of hash elements.
+ * It also has an aggressive hash buckets expanding technique, which allows
+ * to deal with increasing number of elements without a loss of search speed.
+ *
+ * Generally, one structure of type genhash_t is allocated per hash set.
+ * This structure is supposed to hold all information related to the current
+ * set, and also holds a tiny number of hash elements, when hash hasn't yet
+ * grown up. When the number of elements reaches some point, part of the
+ * genhash_t structure is reused to contain the pointers to the actual
+ * hash buckets and LRU (Least Recently Used) list's head and tail.
+ * Elements which were held inside genhash_t will be moved to the hash buckets.
+ * 
+ * Said above effectively means two modes of operation: TINY and NORMAL.
+ * They can be distinguished by examining the h->numbuckets value, which
+ * is 0 for TINY and greater for NORMAL mode.
+ * 
+ * In the TINY mode we use a lower part of the genhash_t structure
+ * (lower 32 bytes from 64 bytes of genhash_t) to hold up to IH_VALUE (4)
+ * key/value pairs.
+ * 
+ * In the NORMAL mode we use the lower part of the genhash_t structure
+ * to hold a set of pointers, including a pointer to the hash buckets.
+ * We agressively expand hash buckets size when adding new elements
+ * to lower the number of key comparisons.
+ */
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stddef.h>
+#include <errno.h>
+#include "genhash.h"
+
+/* 1M entries, 4M RAM */
+#define        DEFAULT_MAXIMUM_HASH_BUCKETS_NUMBER     (1024 * 1024)
+static int maximum_hash_buckets_number = DEFAULT_MAXIMUM_HASH_BUCKETS_NUMBER;
+
+/*
+ * A single hash element structure which binds a value to its key.
+ */
+typedef struct genhash_el_s {
+       unsigned int key_hash;          /* Saved hash of the key */
+       void *key;
+       void *value;
+       struct genhash_el_s *hash_next; /* Collision list inside the bucket */
+       struct genhash_el_s *hash_prev;
+       struct genhash_el_s *lru_prev;  /* Per-hash LRU list */
+       struct genhash_el_s *lru_next;
+} genhash_el;
+
+/*
+ * A hash structure with buckets etc.
+ */
+struct genhash_s {
+       int (*keycmpf) (const void *lkey1, const void *rkey2);
+       unsigned int (*keyhashf) (const void *key);     /* hash function */
+       void (*keydestroyf) (void *key);        /* key destructor */
+       void (*valuedestroyf) (void *value);    /* value destructor */
+
+       int numelements;        /* Total number of hash elements */
+       int numbuckets;         /* 0 means "use _TINY" */
+       int lru_limit;          /* Must be initialized explicitly */
+       genhash_iter_t *iters;  /* Active iterators */
+
+       /* 32-byte boundary here */
+
+       union {
+#define        IH_VALUES       4  /* Internally held key/value pairs for TINY mode */
+               struct _internal_tiny_s {
+                       void *keys[IH_VALUES];
+                       void *values[IH_VALUES];
+               } _TINY;        /* 32-byte structure */
+               struct _internal_normal_s {
+                       genhash_el *lru_head;   /* LRU list head */
+                       genhash_el *lru_tail;   /* LRU list tail */
+                       genhash_el **buckets;   /* Hash buckets */
+                       /* void *unused; */
+               } _NORMAL;
+       } un;
+#define        tiny_keys       un._TINY.keys
+#define        tiny_values     un._TINY.values
+#define        lru_head        un._NORMAL.lru_head
+#define        lru_tail        un._NORMAL.lru_tail
+#define        buckets         un._NORMAL.buckets
+};
+
+
+static int
+_genhash_normal_add(genhash_t *h, genhash_el *el, void *key, void *value);
+
+
+genhash_t *
+genhash_new(
+       int (*keycmpf) (const void *key1, const void *key2),
+       unsigned int (*keyhashf) (const void *key),
+       void (*keydestroyf) (void *key),
+       void (*valuedestroyf) (void *value)
+) {
+       genhash_t *h;
+
+       h = (genhash_t *)malloc(sizeof(genhash_t));
+       if (!h)
+               return NULL;
+
+       memset(h, 0, sizeof(genhash_t));
+
+       genhash_reinit(h, keycmpf, keyhashf, keydestroyf, valuedestroyf);
+  
+       return h;
+}
+
+int
+genhash_reinit(
+       genhash_t *h,
+       int (*keycmpf) (const void *key1, const void *key2),
+       unsigned int (*keyhashf) (const void *key),
+       void (*keydestroyf) (void *key),
+       void (*valuedestroyf) (void *value)
+) {
+
+       assert(keycmpf && keyhashf);
+
+       h->keycmpf = keycmpf;
+       h->keyhashf = keyhashf;
+       h->keydestroyf = keydestroyf;
+       h->valuedestroyf = valuedestroyf;
+  
+       return 0;
+}
+
+int
+genhash_count(genhash_t *h) {
+       if(h) {
+               return h->numelements;
+       } else {
+               return 0;
+       }
+}
+
+
+static void
+_remove_normal_hash_el(genhash_t *h, genhash_el *el) {
+       genhash_iter_t *iter;
+       void *kd_arg;
+       void *vd_arg;
+
+       /* Remove from the collision list */
+       if (el->hash_prev) {
+               if((el->hash_prev->hash_next = el->hash_next))
+                       el->hash_next->hash_prev = el->hash_prev;
+               
+       } else {
+               if((h->buckets[el->key_hash % h->numbuckets] = el->hash_next))
+                       el->hash_next->hash_prev = NULL;
+       }
+
+       /* Remove from LRU list */
+       if(el->lru_prev) {
+               if((el->lru_prev->lru_next = el->lru_next))
+                       el->lru_next->lru_prev = el->lru_prev;
+               else
+                       h->lru_tail = el->lru_prev;
+       } else {
+               if(h->lru_head == el) {
+                       if((h->lru_head = el->lru_next) == NULL)
+                               h->lru_tail = NULL;
+                       else
+                               h->lru_head->lru_prev = NULL;
+               }
+       }
+
+       /* Remember key and value */
+       kd_arg = el->key;
+       vd_arg = el->value;
+
+       /* Move iterators off the element being deleted */
+       for(iter = h->iters; iter; iter = iter->iter_next) {
+               assert(iter->hash_ptr == h);
+               if(iter->un.location == el) {
+                       iter->un.location = iter->order_lru_first
+                               ? el->lru_prev : el->lru_next;
+               }
+       }
+
+       free(el);
+       h->numelements--;
+
+       /* Remove key and value */
+       if (h->keydestroyf)   h->keydestroyf(kd_arg);
+       if (h->valuedestroyf) h->valuedestroyf(vd_arg);
+}
+
+static inline void
+_genhash_normal_el_move2top(genhash_t *h, genhash_el *el) {
+
+       /* Disable sorting if iterators are running */
+       if(h->iters) return;
+
+       /* Move to the top of the hash bucket */
+       if(el->hash_prev) {
+               int bucket = el->key_hash % h->numbuckets;
+
+               /* Remove from the current location */
+               if((el->hash_prev->hash_next = el->hash_next))
+                       el->hash_next->hash_prev = el->hash_prev;
+
+               /* Move to the top of the hash bucket */
+               if((el->hash_next = h->buckets[bucket]))
+                       el->hash_next->hash_prev = el;
+               h->buckets[bucket] = el;
+               el->hash_prev = NULL;
+       }
+
+       /* Move to the top of LRU list */
+       if(h->lru_limit && el->lru_prev) {
+
+               /* Remove from current location */
+               if((el->lru_prev->lru_next = el->lru_next))
+                       el->lru_next->lru_prev = el->lru_prev;
+               else
+                       h->lru_tail = el->lru_prev;
+       
+               /* Append to the head */
+               el->lru_prev = NULL;
+               h->lru_head->lru_prev = el;
+               el->lru_next = h->lru_head;
+               h->lru_head = el;
+       }
+}
+
+static int
+_expand_hash(genhash_t *h) {
+       int newbuckets_count;
+       genhash_el **newbuckets;
+
+       /*
+        * Compute a new number of buckets value.
+        */
+       if(h->numbuckets) {
+               newbuckets_count = h->numbuckets << 2;
+               /* Too big hash table */
+               if(newbuckets_count > maximum_hash_buckets_number) {
+                       if(h->numbuckets < maximum_hash_buckets_number) {
+                               newbuckets_count = maximum_hash_buckets_number;
+                       } else {
+                               /* No need to set errno here. */
+                               return -1;
+                       }
+               }
+       } else {
+               /* 8 buckets -> 32 bytes of memory */
+               newbuckets_count = IH_VALUES << 1;
+               if(newbuckets_count > maximum_hash_buckets_number) {
+                       if(maximum_hash_buckets_number) {
+                               newbuckets_count = maximum_hash_buckets_number;
+                       } else {
+                               /* Allowed to store only IH_VALUES elements */
+                               errno = EPERM;
+                               return -1;
+                       }
+               }
+       }
+
+       /*
+        * Allocate a new storage for buckets.
+        */
+       newbuckets = malloc(newbuckets_count * sizeof(*newbuckets));
+       if(newbuckets) {
+               memset(newbuckets, 0, newbuckets_count * sizeof(*newbuckets));
+       } else {
+               return -1;
+       }
+
+       if(h->numbuckets) {
+               genhash_el *el;
+               int bucket;
+
+               /*
+                * Rehash elements from old h->buckets to newbuckets.
+                * No need to touch LRU pointers and other stuff - it is okay.
+                */
+               for(el = h->lru_tail; el; el = el->lru_prev) {
+                       bucket = el->key_hash % newbuckets_count;
+                       el->hash_prev = NULL;
+                       if((el->hash_next = newbuckets[bucket]))
+                               el->hash_next->hash_prev = el;
+                       newbuckets[bucket] = el;
+               }
+
+               free(h->buckets);
+               h->buckets = newbuckets;
+               h->numbuckets = newbuckets_count;
+       } else {
+               /*
+                * Moving from inline tiny storage into buckets.
+                */
+               genhash_el *els[IH_VALUES] = { NULL };
+               struct _internal_tiny_s tiny_substruct;
+               int i;
+               int saved_numelements;
+               int saved_lru_limit;
+               genhash_iter_t *iter;
+
+               /* Pre-allocate hash elements (for "undo") */
+               for(i = 0; i < h->numelements; i++) {
+                       els[i] = (genhash_el *)malloc(sizeof(genhash_el));
+                       if(els[i] == NULL) {
+                               for(i = 0; i < h->numelements; i++)
+                                       if(els[i])
+                                               free(els[i]);
+                               free(newbuckets);
+                               return -1;
+                       }
+               }
+
+               /* Save part of the union */
+               tiny_substruct = h->un._TINY;
+               /* Re-initialize this part in NORMAL model */
+               memset(&h->un._NORMAL, 0, sizeof(h->un._NORMAL));
+
+               /* There was no allocated buckets, when in tiny hash mode. */
+               h->buckets = newbuckets;
+               h->numbuckets = newbuckets_count;
+
+               saved_numelements = h->numelements;
+               saved_lru_limit = h->lru_limit;
+               h->numelements = 0;
+               h->lru_limit = 0;       /* Disable LRU expiration for a while */
+
+               for(i = saved_numelements - 1; i >= 0; --i) {
+                       /*
+                        * genhash_normal_add won't fail, if we supply
+                        * an already allocated genhash_el *.
+                        */
+                       (void)_genhash_normal_add(h, els[i],
+                               tiny_substruct.keys[i],
+                               tiny_substruct.values[i]);
+               }
+
+               /* Now, scan through iterators and convert them TINY->NORMAL */
+               for(iter = h->iters; iter; iter = iter->iter_next) {
+                       assert(iter->hash_ptr == h);
+                       if(iter->un.item_number < 0
+                       || iter->un.item_number >= saved_numelements) {
+                               iter->un.location = 0;
+                       } else {
+                               iter->un.location = els[iter->un.item_number];
+                       }
+               }
+
+               h->lru_limit = saved_lru_limit;
+       }
+
+       return 0;
+}
+
+/*
+ * Won't return with error if el is provided.
+ */
+static int
+_genhash_normal_add(genhash_t *h, genhash_el *el, void *key, void *value) {
+       genhash_el **bucket;
+
+       if(el == NULL) {
+               el = malloc(sizeof (*el));
+               if(el == NULL) {
+                       /* Errno will be set by malloc() */
+                       return -1;
+               }
+       }
+
+       /* Maintain maximum number of entries */
+       if(h->lru_limit) {
+               while(h->numelements >= h->lru_limit)
+                       _remove_normal_hash_el(h, h->lru_tail);
+       }
+
+       memset(el, 0, sizeof(genhash_el));
+
+       /* Compute the index of the collision list */
+       el->key_hash = h->keyhashf(key);
+       bucket = &h->buckets[el->key_hash % h->numbuckets];
+
+       el->key = key;
+       el->value = value;
+
+       /*
+        * Add to the collision list
+        */
+       el->hash_prev = NULL;
+       if((el->hash_next = *bucket))
+               (*bucket)->hash_prev = el;
+       *bucket = el;
+
+       /*
+        * Add to the LRU list.
+        */
+       if(h->lru_head) {
+               el->lru_next = h->lru_head;
+               el->lru_next->lru_prev = el;
+               h->lru_head = el;
+       } else {
+               h->lru_head = el;
+               h->lru_tail = el;
+       }
+
+       h->numelements++;
+
+       return 0;
+}
+
+
+int
+genhash_add(genhash_t *h, void *key, void *value) {
+
+       if(key == NULL) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(h->numbuckets == 0) {
+
+               /* We have a tiny internally-held set of elements */
+               if(h->numelements < IH_VALUES) {
+                       h->tiny_keys[h->numelements] = key;
+                       h->tiny_values[h->numelements] = value;
+                       h->numelements++;
+                       return 0;
+               }
+
+               if(_expand_hash(h) == -1)
+                       return -1;
+
+       } else {
+
+               if((h->numelements / h->numbuckets) > 2)
+                       (void)_expand_hash(h);
+       }
+
+       return _genhash_normal_add(h, NULL, key, value);
+}
+
+int
+genhash_addunique(genhash_t *h, void *key, void *value) {
+       if(genhash_get(h, key)) {
+               errno = EEXIST;
+               return -1;
+       }
+       return genhash_add(h, key, value);
+}
+
+void *
+genhash_get(genhash_t *h, const void *key) {
+
+       if(h->numbuckets) {
+
+               genhash_el *walk;
+               int bucket = h->keyhashf(key) % h->numbuckets;
+
+               for(walk = h->buckets[bucket];
+                       walk; walk = walk->hash_next) {
+       
+                       if (h->keycmpf(walk->key, key) == 0) {
+                               _genhash_normal_el_move2top(h, walk);
+                               return walk->value;
+                       }
+               }
+
+       } else {
+               /* TINY mode */
+               int i;
+
+               assert(h->numelements <= IH_VALUES);
+               for(i = 0; i < h->numelements; i++) {
+                       if(h->keycmpf(h->tiny_keys[i], key) == 0)
+                               /* Don't reorder in TINY mode */
+                               return h->tiny_values[i];
+               }
+
+       }
+
+       errno = ESRCH;
+       return NULL;
+}
+
+int
+genhash_del(genhash_t *h, void *key) {
+
+       if(h->numbuckets) {
+               /* NORMAL mode */
+               genhash_el *walk;
+               int bucket;
+
+               if(h->numelements == 0) {
+                       errno = ESRCH;
+                       return -1;      /* not found */
+               }
+       
+               bucket = h->keyhashf(key) % h->numbuckets;
+       
+               for(walk = h->buckets[bucket]; walk; walk = walk->hash_next)
+                       if(h->keycmpf(walk->key, key) == 0)
+                               break;
+       
+               if(walk) {
+                       _remove_normal_hash_el(h, walk);
+                       return 0;
+               }
+       } else {
+               /* TINY mode */
+               int i;
+
+               /* Look for matching key */
+               for(i = 0; i < h->numelements; i++)
+                       if(h->keycmpf(h->tiny_keys[i], key) == 0)
+                               break;
+
+               if(i < h->numelements)  {
+                       /* Remember values */
+                       void *kd_arg = h->tiny_keys[i];
+                       void *vd_arg = h->tiny_values[i];
+
+                       h->numelements--;
+
+                       if(h->iters) {
+                               /* If iterators are involved, we have to
+                                * shift elements to maintain iteration order
+                                * and avoid duplications */
+                               genhash_iter_t *iter;
+                               memmove(&h->tiny_keys[i],
+                                       &h->tiny_keys[i+1],
+                                       (h->numelements - i)
+                                       * sizeof(h->tiny_keys[0]));
+                               memmove(&h->tiny_values[i],
+                                       &h->tiny_values[i+1],
+                                       (h->numelements - i)
+                                       * sizeof(h->tiny_values[0]));
+                               /* Shift the iterator's indexes */
+                               for(iter = h->iters; iter;
+                                               iter = iter->iter_next) {
+                                       int in = iter->un.item_number;
+                                       if(iter->order_lru_first) {
+                                               if(in > i)
+                                                       iter->un.item_number--;
+                                       } else {
+                                               if(in >= i)
+                                                       iter->un.item_number--;
+                                       }
+                               }
+                       } else {
+                               /* Substitute it with the last one */
+                               /* No harm if overwriting itself */
+                               h->tiny_keys[i] = h->tiny_keys[h->numelements];
+                               h->tiny_values[i] = h->tiny_values[h->numelements];
+                       }
+                       h->tiny_keys[h->numelements] = 0;
+                       h->tiny_values[h->numelements] = 0;
+                       /* Delete for real */
+                       if(h->keydestroyf)   h->keydestroyf(kd_arg);
+                       if(h->valuedestroyf) h->valuedestroyf(vd_arg);
+                       return 0;
+               }
+       }
+
+       errno = ESRCH;
+       return -1;
+}
+
+/*
+ * Initialize a hash iterator.
+ */
+int
+genhash_iter_init(genhash_iter_t *iter, genhash_t *h, int reverse_order) {
+
+       iter->hash_ptr = h;
+       iter->iter_prev = 0;    /* Add itself to the iterators list */
+       iter->iter_next = h->iters;
+       h->iters = iter;
+       iter->order_lru_first = reverse_order;
+
+       if(h->numbuckets) {
+               /* NORMAL mode */
+               if(reverse_order) {
+                       /* Least recent first order */
+                       iter->un.location = h->lru_tail;
+               } else {
+                       /* Most recent first order */
+                       iter->un.location = h->lru_head;
+               }
+       } else {
+               /* TINY mode */
+               if(reverse_order) {
+                       iter->un.item_number = 0;
+               } else {
+                       iter->un.item_number = h->numelements - 1;
+               }
+       }
+
+       return h->numelements;
+}
+
+int
+genhash_iter(genhash_iter_t *iter, void *key_p, void *val_p) {
+       void **key = key_p;
+       void **val = val_p;
+       genhash_t *h = iter->hash_ptr;
+
+       if(h->numbuckets) {
+               /* NORMAL mode */
+               genhash_el *cur_el = iter->un.location;
+               if(!cur_el)
+                       /* Already finished */
+                       return 0;
+
+               if(key) *key = cur_el->key;
+               if(val) *val = cur_el->value;
+
+               /* Move pointer to the next hash element */
+               iter->un.location = iter->order_lru_first
+                       ? cur_el->lru_prev : cur_el->lru_next;
+       } else {
+               /* TINY mode */
+               if(iter->un.item_number < 0
+               || iter->un.item_number >= h->numelements
+               || h->tiny_keys[iter->un.item_number] == 0)
+                       return 0;
+
+               if(key) *key = h->tiny_keys[iter->un.item_number];
+               if(val) *val = h->tiny_values[iter->un.item_number];
+
+               /* Advance to the next element */
+               if(iter->order_lru_first)
+                       iter->un.item_number++;
+               else
+                       iter->un.item_number--;
+       }
+
+
+       return 1;
+}
+
+void
+genhash_iter_done(genhash_iter_t *iter) {
+       assert(iter->hash_ptr->iters);
+       /* Remove itself from the iterators list */
+       if(iter->iter_next)
+               iter->iter_next->iter_prev = iter->iter_prev;
+       if(iter->iter_prev)
+               iter->iter_prev->iter_next = iter->iter_next;
+       else
+               iter->hash_ptr->iters = iter->iter_next; /* Shift the head */
+       iter->hash_ptr = (void *)0xdeadbeef;
+}
+
+int
+genhash_set_lru_limit(genhash_t *h, int value) {
+       if(h) {
+               int prev_limit = h->lru_limit;
+               if(value >= 0)
+                       h->lru_limit = value;
+               return prev_limit;
+       } else {
+               errno = EINVAL;
+               return -1;
+       }
+}
+
+int
+genhash_set_buckets_limit(int value) {
+       int prev_limit = maximum_hash_buckets_number;
+       if(value > 0) {
+               maximum_hash_buckets_number = value;
+       }
+       return prev_limit;
+}
+
+void
+genhash_destroy(genhash_t *h) {
+       if(h) {
+               assert(h->iters == 0);  /* All iterators MUST be _done(). */
+               genhash_empty(h, 1, 1);
+               free(h);
+       }
+}
+
+void
+genhash_empty(genhash_t *h, int freekeys, int freevalues) {
+       genhash_iter_t *iter;
+
+       if(h == NULL) return;
+
+       /*
+        * Don't free what could not be freed.
+        */
+       if(h->keydestroyf == NULL)      freekeys = 0;
+       if(h->valuedestroyf == NULL)    freevalues = 0;
+
+       if(h->numbuckets == 0) {
+               while(h->numelements > 0) {
+                       int n = --h->numelements;
+                       void *kd_arg = h->tiny_keys[n];
+                       void *vd_arg = h->tiny_values[n];
+
+                       if (freekeys) h->keydestroyf(kd_arg);
+                       if (freevalues) h->valuedestroyf(vd_arg);
+               }
+       } else {
+               genhash_el *el, *el_next;
+
+               for(el = h->lru_head; el; el = el_next) {
+                       void *kd_arg = el->key;
+                       void *vd_arg = el->value;
+                       el_next = el->lru_next;
+                       free(el);
+
+                       h->numelements --;
+
+                       if (freekeys) h->keydestroyf(kd_arg);
+                       if (freevalues) h->valuedestroyf(vd_arg);
+               }
+               free(h->buckets);
+               h->numbuckets = 0;      /* Move back to TINY model */
+       }
+       memset(&h->un, 0, sizeof(h->un));
+
+       /* Invalidate iterators in TINY model */
+       for(iter = h->iters; iter; iter = iter->iter_next) {
+               assert(iter->hash_ptr == h);
+               iter->un.item_number = -1;
+       }
+
+       assert(h->numelements == 0);
+}
+
+
+/*----- Simple hash and compare functions for common data types ------*/
+
+unsigned int
+hashf_int (const void *key) {
+       return (*(const ptrdiff_t *)key ^ (*(const ptrdiff_t *)key >> 16));
+}
+
+int
+cmpf_int (const void *key1, const void *key2) {
+       return (*(const int *)key1 != *(const int *)key2);
+}
+
+unsigned int
+hashf_void (const void *key) {
+       return ((ptrdiff_t)key ^ ((ptrdiff_t)key >> 16));
+}
+
+int
+cmpf_void (const void *key1, const void *key2) {
+       return (key1 != key2);
+}
+
+
+/*
+ * Phong's linear congruential hash
+ */
+#define dcharhash(h, c) ((h) = 0x63c63cd9*(h) + 0x9c39c33d + (c))
+
+unsigned int
+hashf_string(const void *keyarg) {
+       register const unsigned char *key;
+       register unsigned int h;
+       register unsigned char c;
+
+       key = keyarg;
+       for (h = 0; (c = *key++);)
+               dcharhash(h, c);
+
+       return (h);
+}
+
+int
+cmpf_string(const void *key1, const void *key2) {
+       return strcmp((const char *)key1, (const char *)key2);
+}
+
diff --git a/libasn1common/genhash.h b/libasn1common/genhash.h
new file mode 100644 (file)
index 0000000..8fff9a6
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2002-2005  Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Copyright (c) 2001-2004  Netli, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: genhash.h 447 2005-06-07 06:51:10Z vlm $
+ */
+#ifndef __GENHASH_H__
+#define __GENHASH_H__
+
+/*
+ * General purpose hashing framework.
+ * Refer to the corresponding .c source file for the detailed description.
+ *
+ * WARNING: Generally, functions don't allow NULL's to be passed
+ * as the genhash_t pointers, if not explicitly stated otherwise.
+ */
+
+typedef struct genhash_s genhash_t;
+
+/*
+ * Create a new hash table 
+ * keycmpf     : function which returns 0 if keys are equal, else !0
+ * keyhashf    : function which computes the hash value of a key
+ * keydestroyf : function for destroying keys, can be NULL for no destructor
+ * valuedestroyf: function for destroying values, can be NULL for no destructor
+ */
+genhash_t *genhash_new(
+       int (*keycmpf) (const void *key1, const void *key2),
+       unsigned int (*keyhashf) (const void *key),
+       void (*keydestroyf) (void *key),
+       void (*valuedestroyf) (void *value));
+
+/*
+ * Re-initialize genhash structure with new callback functions.
+ * (Rarely ever used).
+ */
+int genhash_reinit(
+       genhash_t *hash,
+       int (*keycmpf) (const void *key1, const void *key2),
+       unsigned int (*keyhashf) (const void *key),
+       void (*keydestroyf) (void *key),
+       void (*valuedestroyf) (void *value));
+
+/*
+ * Initialize the LRU-driven elements count limiting
+ * and/or set a new Least Recently Used list size limit.
+ * If a new entry is being added to the hash, the least recently used entry
+ * (one at the bottom of the LRU list) will be automatically deleted.
+ * The deletion may be skipped if the hash is very small
+ * (currently, "small" means no longer than 4 entries).
+ * This function is immune to NULL argument.
+ * 
+ * RETURN VALUES:
+ *     The previous LRU limit, or -1/EINVAL when h is NULL.
+ * EXAMPLE:
+ *     genhash_set_lru_limit(h, 1500); // Maximum 1500 entries in the hash
+ */
+int genhash_set_lru_limit(genhash_t *h, int new_lru_limit);
+
+/*
+ * Set the system-wide (!!!) limit on maximum number of buckets.
+ * If the value is 0, the hash is allowed to store only 4 elements inline
+ * (buckets allocation is suppressed).
+ * If the value is 1, the hash turns out into a linked list.
+ * The default limit is about 1M buckets.
+ * RETURN VALUES:
+ *     The previous buckets number limit.
+ */
+int genhash_set_buckets_limit(int new_max_number_of_buckets);
+
+/*
+ * destroys a hash, freeing each key and/or value.
+ * Keys are always destroyed before values using the destructors
+ * specified upon hash creation.
+ * This function is immune to NULL argument.
+ */
+void genhash_destroy(genhash_t *h);
+
+/*
+ * Delete all elements from the hash, retaining the hash structure itself.
+ * Optionally, it may be told to invoke, or not invoke the corresponding
+ * key/value destructors.
+ * This function is immune to NULL argument.
+ * 
+ * EXAMPLE:
+ *     genhash_empty(h, 1, 1); // Remove all entries, invoking destructors
+ */
+void genhash_empty(genhash_t *h, int freekeys, int freevalues);
+
+/*
+ * Add, returns 0 on success, -1 on failure (ENOMEM). Note, you CAN add
+ * records with duplicate keys. No guarantees about order preservations.
+ *
+ * EXAMPLE:
+ *     char *key_str = strdup("key");
+ *     char *val_str = strdup("arbitrary value");
+ *     if(genhash_add(h, key_str, val_str) != 0) {
+ *             free(key_str);
+ *             free(val_str);
+ *             perror("genhash_add failed");
+ *             exit(EX_SOFTWARE);
+ *     }
+ */
+int genhash_add(genhash_t *h, void *key, void *value);
+
+/*
+ * Add, but only if a mapping is not there already.
+ * RETURN VALUES:
+ * 0:          Element added successfully.
+ * -1/EINVAL:  Invalid arguments (key == NULL).
+ * -1/EEXIST:  Duplicate entry is found.
+ * -1/ENOMEM:  Memory allocation failed
+ */
+int genhash_addunique(genhash_t *h, void *key, void *value);
+
+/*
+ * Fetch - returns pointer to a value, NULL/ESRCH if not found
+ */
+void *genhash_get(genhash_t *h, const void *key);
+
+/*
+ * Delete - returns 0 on success, -1/ESRCH if not found.
+ * Keys are always destroyed before values using the destructors
+ * specified upon hash creation.
+ */
+int genhash_del(genhash_t *h, void *key);
+
+/*
+ * Return the number of elements in a hash.
+ * This function is immune to NULL argument.
+ */
+int genhash_count(genhash_t *h);
+
+/*
+ * External iterator structure for using with iterator-based walking functions.
+ * This declaration is NOT INTENDED TO BE USED BY AN APPLICATION DIRECTLY
+ * The pointer to the already allocated structure must be passed to
+ * genhash_iter*() functions.
+ */
+typedef struct genhash_iter_s {
+       genhash_t *hash_ptr;
+       union {
+               int item_number;
+               void *location;
+       } un;
+       int order_lru_first;
+       struct genhash_iter_s *iter_prev;
+       struct genhash_iter_s *iter_next;
+} genhash_iter_t;
+
+/*
+ * Initialize the iterator for walking through the hash.
+ * The memory block to be used as iterator is provided by the (*iter) pointer.
+ * This memory must be allocated (possibly, on the stack) by the caller.
+ * OWNERSHIP:
+ *     The initialized iterator must be disposed of by calling
+ *     genhash_iter_done().
+ * ORDER:
+ *     By default, the elements are iterated in the "most recent first" order,
+ *     use reverse_order to change that. For very small number of entries
+ *     (currently, 4) the order may be IGNORED.
+ * RETURN VALUES:
+ *     number of entries the hash had at the moment.
+ */
+int genhash_iter_init(genhash_iter_t *iter,
+       genhash_t *hash_to_use, int reverse_order);
+
+/*
+ * Returns the key and value of each element in optional (key) and (value),
+ * which must be passed as the pointers to pointers (hence these ***'s).
+ * OWNERSHIP:
+ *     The key and value are pointers to the internally manageed locations.
+ * RETURN VALUES:
+ *     0 if no more elements will be returned, otherwise 1.
+ * EXAMPLE:
+ *     key_type_t *key;                        // Pointer to key
+ *     value_type_t *val;                      // Pointer to value
+ *     genhash_iter_t iter;                    // Iterator structure
+ *     genhash_iter_init(&iter, hash_ptr, 0);  // Prepare iterator
+ *     while(genhash_iter(&iter, &key, &val))  // Iterate over hash elements
+ *             print_keyval(key, val);         // Use key and value
+ *     genhash_iter_done(&iter);               // Done iterations.
+ */
+int genhash_iter(genhash_iter_t *iter, void */***/key, void */***/val);
+
+/*
+ * Dispose of the iterator.
+ * After this operations, the iterator contents unusable
+ * and shall not be accesed. (genhash_iter_init() is OK).
+ */
+void genhash_iter_done(genhash_iter_t *iter);
+
+\f
+/****************************************************************************/
+
+/*
+ * The following hashing and comparison functions are provided for
+ * you, or you may supply your own.
+ */
+unsigned int hashf_int (const void *key); /* Key is an int * */
+int cmpf_int (const void *key1, const void *key2);
+
+unsigned int hashf_void (const void *key);
+int cmpf_void (const void *key1, const void *key2);
+
+unsigned int hashf_string (const void *key);
+int cmpf_string (const void *key1, const void *key2);
+
+#endif /* __GENHASH_H__ */
diff --git a/libasn1compiler/.deps/asn1c_C.Plo b/libasn1compiler/.deps/asn1c_C.Plo
new file mode 100644 (file)
index 0000000..6e3f819
--- /dev/null
@@ -0,0 +1,278 @@
+asn1c_C.lo: asn1c_C.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_C.h asn1c_lang.h asn1c_constraint.h asn1c_out.h asn1c_misc.h \
+ asn1c_ioc.h ../libasn1parser/asn1p_class.h asn1c_naming.h \
+ ../libasn1print/asn1print.h ../libasn1fix/asn1fix_crange.h \
+ ../libasn1fix/asn1fix_export.h ../libasn1fix/asn1fix_tags.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_C.h:
+
+asn1c_lang.h:
+
+asn1c_constraint.h:
+
+asn1c_out.h:
+
+asn1c_misc.h:
+
+asn1c_ioc.h:
+
+../libasn1parser/asn1p_class.h:
+
+asn1c_naming.h:
+
+../libasn1print/asn1print.h:
+
+../libasn1fix/asn1fix_crange.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
diff --git a/libasn1compiler/.deps/asn1c_compat.Plo b/libasn1compiler/.deps/asn1c_compat.Plo
new file mode 100644 (file)
index 0000000..49ee6f2
--- /dev/null
@@ -0,0 +1,253 @@
+asn1c_compat.lo: asn1c_compat.c /usr/include/stdc-predef.h \
+ asn1c_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_compat.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_compat.h:
diff --git a/libasn1compiler/.deps/asn1c_constraint.Plo b/libasn1compiler/.deps/asn1c_constraint.Plo
new file mode 100644 (file)
index 0000000..53c5855
--- /dev/null
@@ -0,0 +1,267 @@
+asn1c_constraint.lo: asn1c_constraint.c /usr/include/stdc-predef.h \
+ asn1c_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_constraint.h asn1c_misc.h asn1c_out.h asn1c_naming.h \
+ ../libasn1fix/asn1fix_crange.h ../libasn1fix/asn1fix_export.h \
+ ../libasn1fix/asn1fix_tags.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_constraint.h:
+
+asn1c_misc.h:
+
+asn1c_out.h:
+
+asn1c_naming.h:
+
+../libasn1fix/asn1fix_crange.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
diff --git a/libasn1compiler/.deps/asn1c_fdeps.Plo b/libasn1compiler/.deps/asn1c_fdeps.Plo
new file mode 100644 (file)
index 0000000..bf7d32d
--- /dev/null
@@ -0,0 +1,253 @@
+asn1c_fdeps.lo: asn1c_fdeps.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_fdeps.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_fdeps.h:
diff --git a/libasn1compiler/.deps/asn1c_ioc.Plo b/libasn1compiler/.deps/asn1c_ioc.Plo
new file mode 100644 (file)
index 0000000..ba40f5f
--- /dev/null
@@ -0,0 +1,267 @@
+asn1c_ioc.lo: asn1c_ioc.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_ioc.h ../libasn1parser/asn1p_class.h asn1c_out.h asn1c_misc.h \
+ ../libasn1fix/asn1fix_export.h ../libasn1fix/asn1fix_tags.h \
+ ../libasn1print/asn1print.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_ioc.h:
+
+../libasn1parser/asn1p_class.h:
+
+asn1c_out.h:
+
+asn1c_misc.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
+
+../libasn1print/asn1print.h:
diff --git a/libasn1compiler/.deps/asn1c_lang.Plo b/libasn1compiler/.deps/asn1c_lang.Plo
new file mode 100644 (file)
index 0000000..cfb0759
--- /dev/null
@@ -0,0 +1,255 @@
+asn1c_lang.lo: asn1c_lang.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_C.h asn1c_lang.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_C.h:
+
+asn1c_lang.h:
diff --git a/libasn1compiler/.deps/asn1c_misc.Plo b/libasn1compiler/.deps/asn1c_misc.Plo
new file mode 100644 (file)
index 0000000..330e4d0
--- /dev/null
@@ -0,0 +1,260 @@
+asn1c_misc.lo: asn1c_misc.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_misc.h ../libasn1fix/asn1fix_crange.h \
+ ../libasn1fix/asn1fix_export.h ../libasn1fix/asn1fix_tags.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_misc.h:
+
+../libasn1fix/asn1fix_crange.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
diff --git a/libasn1compiler/.deps/asn1c_naming.Plo b/libasn1compiler/.deps/asn1c_naming.Plo
new file mode 100644 (file)
index 0000000..ba4c3e1
--- /dev/null
@@ -0,0 +1,257 @@
+asn1c_naming.lo: asn1c_naming.c /usr/include/stdc-predef.h \
+ asn1c_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_naming.h asn1c_misc.h ../libasn1common/genhash.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_naming.h:
+
+asn1c_misc.h:
+
+../libasn1common/genhash.h:
diff --git a/libasn1compiler/.deps/asn1c_out.Plo b/libasn1compiler/.deps/asn1c_out.Plo
new file mode 100644 (file)
index 0000000..0a920d6
--- /dev/null
@@ -0,0 +1,253 @@
+asn1c_out.lo: asn1c_out.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_out.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_out.h:
diff --git a/libasn1compiler/.deps/asn1c_save.Plo b/libasn1compiler/.deps/asn1c_save.Plo
new file mode 100644 (file)
index 0000000..207fb89
--- /dev/null
@@ -0,0 +1,264 @@
+asn1c_save.lo: asn1c_save.c /usr/include/stdc-predef.h asn1c_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_compat.h asn1c_fdeps.h asn1c_lang.h asn1c_misc.h asn1c_save.h \
+ asn1c_out.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_compat.h:
+
+asn1c_fdeps.h:
+
+asn1c_lang.h:
+
+asn1c_misc.h:
+
+asn1c_save.h:
+
+asn1c_out.h:
diff --git a/libasn1compiler/.deps/asn1compiler.Plo b/libasn1compiler/.deps/asn1compiler.Plo
new file mode 100644 (file)
index 0000000..e660868
--- /dev/null
@@ -0,0 +1,264 @@
+asn1compiler.lo: asn1compiler.c /usr/include/stdc-predef.h \
+ asn1c_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/glob.h \
+ /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \
+ /usr/include/x86_64-linux-gnu/bits/fcntl2.h asn1compiler.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ asn1c_lang.h asn1c_out.h asn1c_save.h asn1c_ioc.h \
+ ../libasn1parser/asn1p_class.h asn1c_naming.h
+
+/usr/include/stdc-predef.h:
+
+asn1c_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/glob.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl-linux.h:
+
+/usr/include/x86_64-linux-gnu/bits/fcntl2.h:
+
+asn1compiler.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+asn1c_lang.h:
+
+asn1c_out.h:
+
+asn1c_save.h:
+
+asn1c_ioc.h:
+
+../libasn1parser/asn1p_class.h:
+
+asn1c_naming.h:
diff --git a/libasn1compiler/Makefile b/libasn1compiler/Makefile
new file mode 100644 (file)
index 0000000..ca626d5
--- /dev/null
@@ -0,0 +1,646 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# libasn1compiler/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = libasn1compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1compiler_la_LIBADD =
+am_libasn1compiler_la_OBJECTS = asn1compiler.lo asn1c_misc.lo \
+       asn1c_out.lo asn1c_lang.lo asn1c_naming.lo asn1c_save.lo \
+       asn1c_C.lo asn1c_constraint.lo asn1c_compat.lo asn1c_ioc.lo \
+       asn1c_fdeps.lo
+libasn1compiler_la_OBJECTS = $(am_libasn1compiler_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1compiler_la_SOURCES)
+DIST_SOURCES = $(libasn1compiler_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/libasn1compiler
+abs_srcdir = /home/nokia/mouse07410/asn1c/libasn1compiler
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1print    \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1compiler.la
+libasn1compiler_la_SOURCES = \
+    asn1compiler.c asn1compiler.h           \
+    asn1c_misc.c asn1c_misc.h               \
+    asn1c_out.c asn1c_out.h                 \
+    asn1c_lang.c asn1c_lang.h               \
+    asn1c_naming.c asn1c_naming.h           \
+    asn1c_save.c asn1c_save.h               \
+    asn1c_C.c asn1c_C.h                     \
+    asn1c_constraint.c asn1c_constraint.h   \
+    asn1c_compat.c asn1c_compat.h           \
+    asn1c_ioc.c asn1c_ioc.h                 \
+    asn1c_fdeps.c asn1c_fdeps.h             \
+    asn1c_internal.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1compiler.la: $(libasn1compiler_la_OBJECTS) $(libasn1compiler_la_DEPENDENCIES) $(EXTRA_libasn1compiler_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1compiler_la_OBJECTS) $(libasn1compiler_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1c_C.Plo
+include ./$(DEPDIR)/asn1c_compat.Plo
+include ./$(DEPDIR)/asn1c_constraint.Plo
+include ./$(DEPDIR)/asn1c_fdeps.Plo
+include ./$(DEPDIR)/asn1c_ioc.Plo
+include ./$(DEPDIR)/asn1c_lang.Plo
+include ./$(DEPDIR)/asn1c_misc.Plo
+include ./$(DEPDIR)/asn1c_naming.Plo
+include ./$(DEPDIR)/asn1c_out.Plo
+include ./$(DEPDIR)/asn1c_save.Plo
+include ./$(DEPDIR)/asn1compiler.Plo
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/libasn1compiler/Makefile.am b/libasn1compiler/Makefile.am
new file mode 100644 (file)
index 0000000..8993de2
--- /dev/null
@@ -0,0 +1,24 @@
+
+AM_CFLAGS = @ADD_CFLAGS@
+
+AM_CPPFLAGS =                       \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1print    \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1compiler.la
+
+libasn1compiler_la_SOURCES =                \
+    asn1compiler.c asn1compiler.h           \
+    asn1c_misc.c asn1c_misc.h               \
+    asn1c_out.c asn1c_out.h                 \
+    asn1c_lang.c asn1c_lang.h               \
+    asn1c_naming.c asn1c_naming.h           \
+    asn1c_save.c asn1c_save.h               \
+    asn1c_C.c asn1c_C.h                     \
+    asn1c_constraint.c asn1c_constraint.h   \
+    asn1c_compat.c asn1c_compat.h           \
+    asn1c_ioc.c asn1c_ioc.h                 \
+    asn1c_fdeps.c asn1c_fdeps.h             \
+    asn1c_internal.h
diff --git a/libasn1compiler/Makefile.in b/libasn1compiler/Makefile.in
new file mode 100644 (file)
index 0000000..292c822
--- /dev/null
@@ -0,0 +1,646 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = libasn1compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1compiler_la_LIBADD =
+am_libasn1compiler_la_OBJECTS = asn1compiler.lo asn1c_misc.lo \
+       asn1c_out.lo asn1c_lang.lo asn1c_naming.lo asn1c_save.lo \
+       asn1c_C.lo asn1c_constraint.lo asn1c_compat.lo asn1c_ioc.lo \
+       asn1c_fdeps.lo
+libasn1compiler_la_OBJECTS = $(am_libasn1compiler_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1compiler_la_SOURCES)
+DIST_SOURCES = $(libasn1compiler_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1print    \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1compiler.la
+libasn1compiler_la_SOURCES = \
+    asn1compiler.c asn1compiler.h           \
+    asn1c_misc.c asn1c_misc.h               \
+    asn1c_out.c asn1c_out.h                 \
+    asn1c_lang.c asn1c_lang.h               \
+    asn1c_naming.c asn1c_naming.h           \
+    asn1c_save.c asn1c_save.h               \
+    asn1c_C.c asn1c_C.h                     \
+    asn1c_constraint.c asn1c_constraint.h   \
+    asn1c_compat.c asn1c_compat.h           \
+    asn1c_ioc.c asn1c_ioc.h                 \
+    asn1c_fdeps.c asn1c_fdeps.h             \
+    asn1c_internal.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1compiler.la: $(libasn1compiler_la_OBJECTS) $(libasn1compiler_la_DEPENDENCIES) $(EXTRA_libasn1compiler_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1compiler_la_OBJECTS) $(libasn1compiler_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_C.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_compat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_constraint.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_fdeps.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_ioc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_lang.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_misc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_naming.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_out.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1c_save.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1compiler.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/libasn1compiler/asn1c_C.c b/libasn1compiler/asn1c_C.c
new file mode 100644 (file)
index 0000000..e3e99c2
--- /dev/null
@@ -0,0 +1,3525 @@
+/*
+ * Don't look into this file. First, because it's a mess, and second, because
+ * it's a brain of the compiler, and you don't wanna mess with brains do you? ;)
+ */
+#include "asn1c_internal.h"
+#include "asn1c_C.h"
+#include "asn1c_constraint.h"
+#include "asn1c_out.h"
+#include "asn1c_misc.h"
+#include "asn1c_ioc.h"
+#include "asn1c_naming.h"
+#include <asn1print.h>
+#include <asn1fix_crange.h>    /* constraint groker from libasn1fix */
+#include <asn1fix_export.h>    /* other exportables from libasn1fix */
+#include <asn1parser.h>
+
+typedef struct tag2el_s {
+       struct asn1p_type_tag_s el_tag;
+       int el_no;
+       int toff_first;
+       int toff_last;
+       asn1p_expr_t *from_expr;
+} tag2el_t;
+
+typedef enum fte {
+       FTE_ALLTAGS,
+       FTE_CANONICAL_XER,
+} fte_e;
+static int _fill_tag2el_map(arg_t *arg, tag2el_t **tag2el, int *count, int el_no, fte_e flags);
+static int _add_tag2el_member(arg_t *arg, tag2el_t **tag2el, int *count, int el_no, fte_e flags);
+
+enum onc_flags {
+       ONC_noflags             = 0x00,
+       ONC_avoid_keywords      = 0x01,
+       ONC_force_compound_name = 0x02,
+};
+static int out_name_chain(arg_t *arg, enum onc_flags);
+static int asn1c_lang_C_type_SEQUENCE_def(
+    arg_t *arg, asn1c_ioc_table_and_objset_t *);
+static int asn1c_lang_C_type_SET_def(arg_t *arg);
+static int asn1c_lang_C_type_CHOICE_def(arg_t *arg);
+static int asn1c_lang_C_type_SEx_OF_def(arg_t *arg, int seq_of);
+static int asn1c_lang_C_OpenType(arg_t *arg, asn1c_ioc_table_and_objset_t *opt_ioc, const char *column_name);
+static int _print_tag(arg_t *arg, struct asn1p_type_tag_s *tag_p);
+static int compute_extensions_start(asn1p_expr_t *expr);
+static int expr_break_recursion(arg_t *arg, asn1p_expr_t *expr);
+static int expr_as_xmlvaluelist(arg_t *arg, asn1p_expr_t *expr);
+static int expr_elements_count(arg_t *arg, asn1p_expr_t *expr);
+static int emit_single_member_OER_constraint_value(arg_t *arg, asn1cnst_range_t *range);
+static int emit_single_member_OER_constraint_size(arg_t *arg, asn1cnst_range_t *range);
+static int emit_single_member_PER_constraint(arg_t *arg, asn1cnst_range_t *range, int juscountvalues, const char *type);
+static int emit_member_OER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx);
+static int emit_member_PER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx);
+static int emit_member_table(arg_t *arg, asn1p_expr_t *expr,
+                             asn1c_ioc_table_and_objset_t *);
+static int emit_tag2member_map(arg_t *arg, tag2el_t *tag2el, int tag2el_count, const char *opt_modifier);
+static int emit_include_dependencies(arg_t *arg);
+static asn1p_expr_t *terminal_structable(arg_t *arg, asn1p_expr_t *expr);
+static int expr_defined_recursively(arg_t *arg, asn1p_expr_t *expr);
+static int asn1c_recurse(arg_t *arg, asn1p_expr_t *expr, int (*callback)(arg_t *arg, void *key), void *key);
+static asn1p_expr_type_e expr_get_type(arg_t *arg, asn1p_expr_t *expr);
+static int try_inline_default(arg_t *arg, asn1p_expr_t *expr, int out);
+static int *compute_canonical_members_order(arg_t *arg, int el_count);
+
+enum tvm_compat {
+       _TVM_SAME       = 0,    /* tags and all_tags are same */
+       _TVM_SUBSET     = 1,    /* tags are subset of all_tags */
+       _TVM_DIFFERENT  = 2,    /* tags and all_tags are different */
+};
+static enum tvm_compat emit_tags_vectors(arg_t *arg, asn1p_expr_t *expr, int *tc, int *atc);
+
+enum etd_spec {
+       ETD_NO_SPECIFICS,
+       ETD_HAS_SPECIFICS
+};
+static int emit_type_DEF(arg_t *arg, asn1p_expr_t *expr, enum tvm_compat tv_mode, int tags_count, int all_tags_count, int elements_count, enum etd_spec);
+
+#define        C99_MODE        (!(arg->flags & A1C_NO_C99))
+#define        UNNAMED_UNIONS  (arg->flags & A1C_UNNAMED_UNIONS)
+#define        HIDE_INNER_DEFS (arg->embed && !(arg->flags & A1C_ALL_DEFS_GLOBAL))
+
+#define        PCTX_DEF INDENTED(              \
+       OUT("\n");                      \
+       OUT("/* Context for parsing across buffer boundaries */\n");    \
+       OUT("asn_struct_ctx_t _asn_ctx;\n"));
+
+
+#define        DEPENDENCIES    do {                                            \
+       emit_include_dependencies(arg);                                 \
+       if(expr->expr_type == ASN_CONSTR_SET_OF)                        \
+               GEN_INCLUDE_STD("asn_SET_OF");                          \
+       if(expr->expr_type == ASN_CONSTR_SEQUENCE_OF)                   \
+               GEN_INCLUDE_STD("asn_SEQUENCE_OF");                     \
+} while(0)
+
+/* MKID_safe() without checking for reserved keywords */
+#define        MKID(expr)      (asn1c_make_identifier(AMI_USE_PREFIX, expr, 0))
+#define        MKID_safe(expr) (asn1c_make_identifier(AMI_CHECK_RESERVED, expr, 0))
+
+int
+asn1c_lang_C_type_REAL(arg_t *arg) {
+       return asn1c_lang_C_type_SIMPLE_TYPE(arg);
+}
+
+struct value2enum {
+       asn1c_integer_t  value;
+       const char      *name;
+       int              idx;
+};
+static int compar_enumMap_byName(const void *ap, const void *bp) {
+       const struct value2enum *a = (const struct value2enum *)ap;
+       const struct value2enum *b = (const struct value2enum *)bp;
+       return strcmp(a->name, b->name);
+}
+static int compar_enumMap_byValue(const void *ap, const void *bp) {
+       const struct value2enum *a = (const struct value2enum *)ap;
+       const struct value2enum *b = (const struct value2enum *)bp;
+       if(a->value < b->value)
+               return -1;
+       else if(a->value == b->value)
+               return 0;
+       return 1;
+}
+
+int
+asn1c_lang_C_type_common_INTEGER(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int el_count = expr_elements_count(arg, expr);
+       struct value2enum *v2e;
+       int map_extensions = (expr->expr_type == ASN_BASIC_INTEGER);
+       int eidx;
+       int saved_target = arg->target->target;
+
+       v2e = calloc(el_count + 1, sizeof(*v2e));
+       assert(v2e);
+
+       /*
+        * For all ENUMERATED types and for those INTEGER types which
+        * have identifiers, print out an enumeration table.
+        */
+       if(expr->expr_type == ASN_BASIC_ENUMERATED || el_count) {
+               eidx = 0;
+               REDIR(OT_DEPS);
+               OUT("typedef %s {\n", c_name(arg).members_enum);
+               TQ_FOR(v, &(expr->members), next) {
+                       switch(v->expr_type) {
+                       case A1TC_UNIVERVAL:
+                               OUT("\t");
+                               OUT("%s", c_member_name(arg, v));
+                               OUT("\t= %s%s\n",
+                                       asn1p_itoa(v->value->value.v_integer),
+                                       (eidx+1 < el_count) ? "," : "");
+                               v2e[eidx].name = v->Identifier;
+                               v2e[eidx].value = v->value->value.v_integer;
+                               eidx++;
+                               break;
+                       case A1TC_EXTENSIBLE:
+                               OUT("\t/*\n");
+                               OUT("\t * Enumeration is extensible\n");
+                               OUT("\t */\n");
+                               if(!map_extensions)
+                                       map_extensions = eidx + 1;
+                               break;
+                       default:
+                               free(v2e);
+                               return -1;
+                       }
+               }
+               OUT("} %s;\n", c_name(arg).members_name);
+               assert(eidx == el_count);
+       }
+
+       /*
+        * For all ENUMERATED types print out a mapping table
+        * between identifiers and associated values.
+        * This is prohibited for INTEGER types by by X.693:8.3.4.
+        */
+       if(expr->expr_type == ASN_BASIC_ENUMERATED) {
+
+               /*
+                * Generate a enumerationName<->value map for XER codec.
+                */
+               REDIR(OT_STAT_DEFS);
+
+               OUT("static const asn_INTEGER_enum_map_t asn_MAP_%s_value2enum_%d[] = {\n",
+                       MKID(expr), expr->_type_unique_index);
+               qsort(v2e, el_count, sizeof(v2e[0]), compar_enumMap_byValue);
+               for(eidx = 0; eidx < el_count; eidx++) {
+                       v2e[eidx].idx = eidx;
+                       OUT("\t{ %s,\t%ld,\t\"%s\" }%s\n",
+                               asn1p_itoa(v2e[eidx].value),
+                               (long)strlen(v2e[eidx].name), v2e[eidx].name,
+                               (eidx + 1 < el_count) ? "," : "");
+               }
+               if(map_extensions)
+                       OUT("\t/* This list is extensible */\n");
+               OUT("};\n");
+
+               OUT("static const unsigned int asn_MAP_%s_enum2value_%d[] = {\n",
+                       MKID(expr), expr->_type_unique_index);
+               qsort(v2e, el_count, sizeof(v2e[0]), compar_enumMap_byName);
+               for(eidx = 0; eidx < el_count; eidx++) {
+                       OUT("\t%d%s\t/* %s(%s) */\n",
+                               v2e[eidx].idx,
+                               (eidx + 1 < el_count) ? "," : "",
+                               v2e[eidx].name, asn1p_itoa(v2e[eidx].value));
+               }
+               if(map_extensions)
+                       OUT("\t/* This list is extensible */\n");
+               OUT("};\n");
+
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("const asn_INTEGER_specifics_t asn_SPC_%s_specs_%d = {\n",
+                       MKID(expr), expr->_type_unique_index);
+               INDENT(+1);
+               OUT("asn_MAP_%s_value2enum_%d,\t"
+                       "/* \"tag\" => N; sorted by tag */\n",
+                       MKID(expr),
+                       expr->_type_unique_index);
+               OUT("asn_MAP_%s_enum2value_%d,\t"
+                       "/* N => \"tag\"; sorted by N */\n",
+                       MKID(expr),
+                       expr->_type_unique_index);
+               OUT("%d,\t/* Number of elements in the maps */\n",
+                       el_count);
+               if(map_extensions) {
+                       OUT("%d,\t/* Extensions before this member */\n",
+                               map_extensions);
+               } else {
+                       OUT("0,\t/* Enumeration is not extensible */\n");
+               }
+               if(expr->expr_type == ASN_BASIC_ENUMERATED)
+                       OUT("1,\t/* Strict enumeration */\n");
+               else
+                       OUT("0,\n");
+               OUT("0,\t/* Native long size */\n");
+               OUT("0\n");
+               INDENT(-1);
+               OUT("};\n");
+       }
+
+       if(expr->expr_type == ASN_BASIC_INTEGER
+       && asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN) {
+               REDIR(OT_STAT_DEFS);
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("const asn_INTEGER_specifics_t asn_SPC_%s_specs_%d = {\n",
+                       MKID(expr), expr->_type_unique_index);
+               INDENT(+1);
+               OUT("0,\t");
+               OUT("0,\t");
+               OUT("0,\t");
+               OUT("0,\t");
+               OUT("0,\n");
+               OUT("0,\t/* Native long size */\n");
+               OUT("1\t/* Unsigned representation */\n");
+               INDENT(-1);
+               OUT("};\n");
+       }
+
+       REDIR(saved_target);
+
+       free(v2e);
+       return asn1c_lang_C_type_SIMPLE_TYPE(arg);
+}
+
+int
+asn1c_lang_C_type_BIT_STRING(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int el_count = expr_elements_count(arg, expr);
+       int saved_target = arg->target->target;
+
+       if(el_count) {
+               int eidx = 0;
+               REDIR(OT_DEPS);
+               OUT("typedef %s {\n", c_name(arg).members_enum);
+               TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type != A1TC_UNIVERVAL) {
+                               OUT("/* Unexpected BIT STRING element: %s */\n",
+                               v->Identifier);
+                               continue;
+                       }
+                       eidx++;
+                       OUT("\t");
+                       OUT("%s", c_member_name(arg, v));
+                       OUT("\t= %s%s\n",
+                               asn1p_itoa(v->value->value.v_integer),
+                               (eidx < el_count) ? "," : "");
+               }
+               OUT("} %s;\n", c_name(arg).members_name);
+               assert(eidx == el_count);
+       }
+
+       REDIR(saved_target);
+
+       return asn1c_lang_C_type_SIMPLE_TYPE(arg);
+}
+
+/*
+ * Check if it is a true open type. That is, type is taken from
+ * the Information Object Set driven constraints.
+ */
+static int
+is_open_type(arg_t *arg, asn1p_expr_t *expr, asn1c_ioc_table_and_objset_t *opt_ioc) {
+
+    (void)arg;
+
+    if(!opt_ioc) {
+        return 0;
+    }
+
+    if(expr->meta_type == AMT_TYPEREF
+       && expr->expr_type == A1TC_REFERENCE
+       && expr->reference->comp_count == 2
+       && expr->reference->components[1].lex_type
+              == RLT_AmpUppercase) {
+        DEBUG("%s is a true open type", MKID(expr));
+        return 1;
+    }
+
+    return 0;
+}
+
+int
+asn1c_lang_C_type_SEQUENCE(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int comp_mode = 0;      /* {root,ext=1,root,root,...} */
+       int saved_target = arg->target->target;
+    asn1c_ioc_table_and_objset_t ioc_tao;
+       int ext_num = 1;
+
+       DEPENDENCIES;
+
+    ioc_tao = asn1c_get_ioc_table(arg);
+    if(ioc_tao.ioct) {
+        if(emit_ioc_table(arg, expr, ioc_tao)) {
+            return -1;
+        }
+    } else if(ioc_tao.fatal_error) {
+        return -1;
+    }
+
+       if(arg->embed) {
+
+               /* Use _anonymous_type field to indicate it's called from
+                * asn1c_lang_C_type_SEx_OF() */
+               if (expr->_anonymous_type) {
+                       REDIR(OT_FWD_DEFS);
+                       OUT("typedef ");
+               }
+               OUT("%s {\n", c_name(arg).full_name);
+       } else {
+               REDIR(OT_TYPE_DECLS);
+               OUT("typedef %s {\n", c_name(arg).full_name);
+       }
+
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type == A1TC_EXTENSIBLE)
+                       if(comp_mode < 3) comp_mode++;
+               if(comp_mode == 1)
+                       v->marker.flags |= EM_OMITABLE | EM_INDIRECT;
+               try_inline_default(arg, v, 1);
+        if(is_open_type(arg, v, ioc_tao.ioct ? &ioc_tao : 0)) {
+            arg_t tmp_arg = *arg;
+            tmp_arg.embed++;
+            INDENT(+1);
+            tmp_arg.expr = v;
+            const char *column_name = v->reference->components[1].name;
+            if(asn1c_lang_C_OpenType(&tmp_arg, &ioc_tao, column_name)) {
+                return -1;
+            }
+            INDENT(-1);
+            tmp_arg.embed--;
+        } else {
+            char ext_name[20];
+
+            if((v->expr_type == ASN_CONSTR_SEQUENCE) &&
+               (v->marker.flags & EM_OPTIONAL) &&
+               (v->Identifier == NULL)) {
+                sprintf(ext_name, "ext%d", ext_num++);
+                v->Identifier = strdup(ext_name);
+            }
+
+            EMBED_WITH_IOCT(v, ioc_tao);
+        }
+       }
+
+       PCTX_DEF;
+
+       if (arg->embed && expr->_anonymous_type) {
+               OUT("} %s%s;\n", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+
+               REDIR(saved_target);
+
+               OUT("%s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+       } else {
+               OUT("} %s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       arg->embed ? c_name(arg).as_member : c_name(arg).short_name);
+               if(!expr->_anonymous_type) OUT(";\n");
+       }
+
+       return asn1c_lang_C_type_SEQUENCE_def(arg, ioc_tao.ioct ? &ioc_tao : 0);
+}
+
+static void
+emit_tag2member_reference(arg_t *arg, asn1p_expr_t *expr,
+                          unsigned tag2el_count) {
+    if(tag2el_count) {
+        if(C99_MODE) OUT(".tag2el = ");
+        OUT("asn_MAP_%s_tag2el_%d,\n", MKID(expr), expr->_type_unique_index);
+        if(C99_MODE) OUT(".tag2el_count = ");
+        OUT("%d,\t/* Count of tags in the map */\n", tag2el_count);
+    } else {
+        OUT("0,\t/* No top level tags */\n");
+        OUT("0,\t/* No tags in the map */\n");
+    }
+}
+
+static int
+asn1c_lang_C_type_SEQUENCE_def(arg_t *arg, asn1c_ioc_table_and_objset_t *opt_ioc) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int elements;   /* Number of elements */
+       int first_extension = -1;
+       tag2el_t *tag2el = NULL;
+       int tag2el_count = 0;
+       int tags_count;
+       int all_tags_count;
+       enum tvm_compat tv_mode;
+       int roms_count;         /* Root optional members */
+       int aoms_count;         /* Additions optional members */
+       int saved_target = arg->target->target;
+
+       /*
+        * Fetch every inner tag from the tag to elements map.
+        */
+       if(_fill_tag2el_map(arg, &tag2el, &tag2el_count, -1, FTE_ALLTAGS)) {
+               if(tag2el) free(tag2el);
+               return -1;
+       }
+
+       GEN_INCLUDE_STD("constr_SEQUENCE");
+       if(!arg->embed)
+               GEN_DECLARE("SEQUENCE", expr);  /* asn_DEF_xxx */
+
+       REDIR(OT_STAT_DEFS);
+
+       /*
+        * Print out the table according to which parsing is performed.
+        */
+       if(expr_elements_count(arg, expr)) {
+               int comp_mode = 0;      /* {root,ext=1,root,root,...} */
+
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
+                       c_name(arg).part_name, expr->_type_unique_index);
+
+               elements = 0;
+               roms_count = 0;
+               aoms_count = 0;
+               INDENTED(TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type == A1TC_EXTENSIBLE) {
+                               if((++comp_mode) == 1)
+                                       first_extension = elements;
+                               continue;
+                       }
+                       if(v->marker.flags & EM_OMITABLE)
+                           comp_mode == 1 ? ++aoms_count : ++roms_count;
+                       if(emit_member_table(arg, v, opt_ioc) < 0)
+                               return -1;
+                       elements++;
+               });
+               OUT("};\n");
+
+               if((roms_count + aoms_count) && (arg->flags & (A1C_GEN_OER|A1C_GEN_PER))) {
+                       int elm = 0;
+                       int comma = 0;
+                       comp_mode = 0;
+                       OUT("static const int asn_MAP_%s_oms_%d[] = {",
+                               MKID(expr),
+                               expr->_type_unique_index);
+                       TQ_FOR(v, &(expr->members), next) {
+                               if(v->expr_type == A1TC_EXTENSIBLE) {
+                                       ++comp_mode;
+                                       continue;
+                               }
+                               if((v->marker.flags & EM_OMITABLE)
+                               && comp_mode != 1) {
+                                       if(!comma) comma++;
+                                       else OUT(",");
+                                       OUT(" %d", elm);
+                               }
+                               ++elm;
+                       }
+                       elm = 0;
+                       comp_mode = 0;
+                       TQ_FOR(v, &(expr->members), next) {
+                               if(v->expr_type == A1TC_EXTENSIBLE) {
+                                       ++comp_mode;
+                                       continue;
+                               }
+                               if((v->marker.flags & EM_OMITABLE)
+                               && comp_mode == 1) {
+                                       if(!comma) comma++;
+                                       else OUT(",");
+                                       OUT(" %d", elm);
+                               }
+                               ++elm;
+                       }
+                       OUT(" };\n");
+                       if(roms_count > 65536) {
+                               FATAL("Too many optional elements in %s "
+                                       "at line %d!",
+                                       arg->expr->Identifier,
+                                       arg->expr->_lineno);
+                return -1;
+            }
+               } else {
+                       roms_count = 0;
+                       aoms_count = 0;
+               }
+       } else {
+               elements = 0;
+               roms_count = 0;
+               aoms_count = 0;
+       }
+
+       /*
+        * Print out asn_DEF_<type>_[all_]tags[] vectors.
+        */
+       tv_mode = emit_tags_vectors(arg, expr, &tags_count, &all_tags_count);
+
+       /*
+        * Tags to elements map.
+        */
+       emit_tag2member_map(arg, tag2el, tag2el_count, 0);
+
+       if(!(expr->_type_referenced)) OUT("static ");
+       OUT("asn_SEQUENCE_specifics_t asn_SPC_%s_specs_%d = {\n",
+               MKID(expr), expr->_type_unique_index);
+       INDENT(+1);
+       OUT("sizeof(%s),\n", c_name(arg).full_name);
+       OUT("offsetof(%s, _asn_ctx),\n", c_name(arg).full_name);
+    emit_tag2member_reference(arg, expr, tag2el_count);
+       if(roms_count + aoms_count) {
+               OUT("asn_MAP_%s_oms_%d,\t/* Optional members */\n",
+                       MKID(expr), expr->_type_unique_index);
+               OUT("%d, %d,\t/* Root/Additions */\n", roms_count, aoms_count);
+       } else {
+               OUT("0, 0, 0,\t/* Optional elements (not needed) */\n");
+       }
+       OUT("%d,\t/* First extension addition */\n", first_extension);
+       INDENT(-1);
+       OUT("};\n");
+
+       /*
+        * Emit asn_DEF_xxx table.
+        */
+       emit_type_DEF(arg, expr, tv_mode, tags_count, all_tags_count, elements,
+                       ETD_HAS_SPECIFICS);
+
+       REDIR(saved_target);
+
+       if(tag2el) free(tag2el);
+
+       return 0;
+} /* _SEQUENCE_def() */
+
+int
+asn1c_lang_C_type_SET(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       long mcount;
+       const char *id;
+       int comp_mode = 0;      /* {root,ext=1,root,root,...} */
+       int saved_target = arg->target->target;
+       int ext_num = 1;
+
+       DEPENDENCIES;
+
+       REDIR(OT_DEPS);
+
+       OUT("\n");
+       OUT("/*\n");
+       OUT(" * Method of determining the components presence\n");
+       OUT(" */\n");
+       mcount = 0;
+       OUT("typedef %s {\n", c_name(arg).presence_enum);
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type == A1TC_EXTENSIBLE) continue;
+               INDENTED(
+                       OUT("%s,", c_presence_name(arg, v));
+                       OUT("\t/* Member %s is present */\n", MKID(v));
+               );
+               mcount++;
+       }
+       OUT("} %s;\n", c_name(arg).presence_name);
+
+       REDIR(saved_target);
+
+       if(arg->embed) {
+               if (expr->_anonymous_type) {
+                       REDIR(OT_FWD_DEFS);
+                       OUT("typedef ");
+               }
+               OUT("%s {\n", c_name(arg).full_name);
+       } else {
+               REDIR(OT_TYPE_DECLS);
+               OUT("typedef %s {\n", c_name(arg).full_name);
+       }
+
+       TQ_FOR(v, &(expr->members), next) {
+               char ext_name[20];
+
+               if(v->expr_type == A1TC_EXTENSIBLE)
+                       if(comp_mode < 3) comp_mode++;
+               if(comp_mode == 1)
+                       v->marker.flags |= EM_OMITABLE | EM_INDIRECT;
+               try_inline_default(arg, v, 1);
+
+               if((v->expr_type == ASN_CONSTR_SEQUENCE) &&
+                  (v->marker.flags & EM_OPTIONAL) &&
+                  (v->Identifier == NULL)) {
+                       sprintf(ext_name, "ext%d", ext_num++);
+                       v->Identifier = strdup(ext_name);
+               }
+               EMBED(v);
+       }
+
+       INDENTED(
+               id = MKID(expr);
+               OUT("\n");
+               OUT("/* Presence bitmask: ASN_SET_ISPRESENT(p%s, %s_PR_x) */\n",
+                       id, id);
+               OUT("unsigned int _presence_map\n");
+               OUT("\t[((%ld+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];\n", mcount);
+       );
+
+       PCTX_DEF;
+
+       if (arg->embed && expr->_anonymous_type) {
+               OUT("} %s%s;\n", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+
+               REDIR(saved_target);
+
+               OUT("%s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+       } else {
+               OUT("} %s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       arg->embed ? c_name(arg).as_member : c_name(arg).short_name);
+               if(!expr->_anonymous_type) OUT(";\n");
+       }
+
+       return asn1c_lang_C_type_SET_def(arg);
+}
+
+static int
+asn1c_lang_C_type_SET_def(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int elements;
+       tag2el_t *tag2el = NULL;
+       int tag2el_count = 0;
+       tag2el_t *tag2el_cxer = NULL;
+       int tag2el_cxer_count = 0;
+       int tags_count;
+       int all_tags_count;
+       enum tvm_compat tv_mode;
+       const char *p;
+       int saved_target = arg->target->target;
+
+       /*
+        * Fetch every inner tag from the tag to elements map.
+        */
+       if(_fill_tag2el_map(arg, &tag2el, &tag2el_count, -1, FTE_ALLTAGS)) {
+               if(tag2el) free(tag2el);
+               return -1;
+       }
+       if(_fill_tag2el_map(arg, &tag2el_cxer, &tag2el_cxer_count, -1, FTE_CANONICAL_XER)) {
+               if(tag2el) free(tag2el);
+               if(tag2el_cxer) free(tag2el_cxer);
+               return -1;
+       }
+       if(tag2el_cxer_count == tag2el_count
+       && memcmp(tag2el, tag2el_cxer, tag2el_count) == 0) {
+               free(tag2el_cxer);
+               tag2el_cxer = 0;
+       }
+
+       GEN_INCLUDE_STD("constr_SET");
+       if(!arg->embed)
+               GEN_DECLARE("SET", expr);       /* asn_DEF_xxx */
+
+       REDIR(OT_STAT_DEFS);
+
+       /*
+        * Print out the table according to which parsing is performed.
+        */
+       if(expr_elements_count(arg, expr)) {
+               int comp_mode = 0;      /* {root,ext=1,root,root,...} */
+
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
+                       c_name(arg).part_name, expr->_type_unique_index);
+
+               elements = 0;
+               INDENTED(TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type == A1TC_EXTENSIBLE) {
+                               if(comp_mode < 3) comp_mode++;
+                       } else {
+                               emit_member_table(arg, v, NULL);
+                               elements++;
+                       }
+               });
+               OUT("};\n");
+       } else {
+               elements = 0;
+       }
+
+       /*
+        * Print out asn_DEF_<type>_[all_]tags[] vectors.
+        */
+       tv_mode = emit_tags_vectors(arg, expr, &tags_count, &all_tags_count);
+
+       /*
+        * Tags to elements map.
+        */
+       emit_tag2member_map(arg, tag2el, tag2el_count, 0);
+       if(tag2el_cxer)
+       emit_tag2member_map(arg, tag2el_cxer, tag2el_cxer_count, "_cxer");
+
+       /*
+        * Emit a map of mandatory elements.
+        */
+       OUT("static const uint8_t asn_MAP_%s_mmap_%d",
+               MKID(expr), expr->_type_unique_index);
+       p = MKID_safe(expr);
+       OUT("[(%d + (8 * sizeof(unsigned int)) - 1) / 8]", elements);
+       OUT(" = {\n");
+       INDENTED(
+       if(elements) {
+               int el = 0;
+               TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type == A1TC_EXTENSIBLE) continue;
+                       if(el) {
+                               if((el % 8) == 0)
+                                       OUT(",\n");
+                               else
+                                       OUT(" | ");
+                       }
+                       OUT("(%d << %d)",
+                               (v->marker.flags & EM_OMITABLE) != EM_OMITABLE,
+                               7 - (el % 8));
+                       el++;
+               }
+       } else {
+               OUT("0");
+       }
+       );
+       OUT("\n");
+       OUT("};\n");
+
+       if(!(expr->_type_referenced)) OUT("static \n");
+       OUT("asn_SET_specifics_t asn_SPC_%s_specs_%d = {\n",
+               MKID(expr), expr->_type_unique_index);
+       INDENTED(
+               OUT("sizeof(%s),\n", c_name(arg).full_name);
+               OUT("offsetof(%s, _asn_ctx),\n", c_name(arg).full_name);
+               OUT("offsetof(%s, _presence_map),\n", c_name(arg).full_name);
+               emit_tag2member_reference(arg, expr, tag2el_count);
+               p = MKID(expr);
+               if(tag2el_cxer)
+                       OUT("asn_MAP_%s_tag2el_cxer_%d,\n",
+                               p, expr->_type_unique_index);
+               else
+                       OUT("asn_MAP_%s_tag2el_%d,\t/* Same as above */\n",
+                               p, expr->_type_unique_index);
+               OUT("%d,\t/* Count of tags in the CXER map */\n",
+                       tag2el_cxer_count);
+               OUT("%d,\t/* Whether extensible */\n",
+                       compute_extensions_start(expr) == -1 ? 0 : 1);
+               OUT("(const unsigned int *)asn_MAP_%s_mmap_%d\t/* Mandatory elements map */\n",
+                       p, expr->_type_unique_index);
+       );
+       OUT("};\n");
+
+       /*
+        * Emit asn_DEF_xxx table.
+        */
+       emit_type_DEF(arg, expr, tv_mode, tags_count, all_tags_count, elements,
+                       ETD_HAS_SPECIFICS);
+
+       REDIR(saved_target);
+
+       if (tag2el) free(tag2el);
+       if (tag2el_cxer) free(tag2el_cxer);
+
+       return 0;
+} /* _SET_def() */
+
+int
+asn1c_lang_C_type_SEx_OF(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *memb = TQ_FIRST(&expr->members);
+       int saved_target = arg->target->target;
+
+       DEPENDENCIES;
+
+       if(arg->embed) {
+               if (expr->_anonymous_type) {
+                       REDIR(OT_FWD_DEFS);
+                       OUT("typedef ");
+               }
+               OUT("%s {\n", c_name(arg).full_name);
+       } else {
+               OUT("typedef %s {\n", c_name(arg).full_name);
+       }
+
+       INDENT(+1);
+       OUT("A_%s_OF(",
+               (arg->expr->expr_type == ASN_CONSTR_SET_OF)
+                       ? "SET" : "SEQUENCE");
+
+       /*
+        * README README
+        * The implementation of the A_SET_OF() macro is already indirect.
+        */
+       memb->marker.flags |= EM_INDIRECT;
+
+       if(memb->expr_type & ASN_CONSTR_MASK
+       || ((memb->expr_type == ASN_BASIC_ENUMERATED
+               || (0 /* -- prohibited by X.693:8.3.4 */
+                       && memb->expr_type == ASN_BASIC_INTEGER))
+               && expr_elements_count(arg, memb))) {
+               arg_t tmp;
+               asn1p_expr_t *tmp_memb = memb;
+               enum asn1p_expr_marker_e flags = memb->marker.flags;
+               arg->embed++;
+                       tmp = *arg;
+                       tmp.expr = tmp_memb;
+                       tmp_memb->marker.flags &= ~EM_INDIRECT;
+                       tmp_memb->_anonymous_type = 1;
+                       if(tmp_memb->Identifier == 0) {
+                               tmp_memb->Identifier = strdup("Member");
+                               if(0)
+                               tmp_memb->Identifier = strdup(
+                                       asn1c_make_identifier(0,
+                                               expr, "Member", 0));
+                               assert(tmp_memb->Identifier);
+                       }
+                       tmp.default_cb(&tmp, NULL);
+                       tmp_memb->marker.flags = flags;
+               arg->embed--;
+               assert(arg->target->target == OT_TYPE_DECLS ||
+                               arg->target->target == OT_FWD_DEFS);
+       } else {
+               OUT("%s", asn1c_type_name(arg, memb,
+                       (memb->marker.flags & EM_UNRECURSE)
+                               ? TNF_RSAFE : TNF_CTYPE));
+       }
+       /* README README (above) */
+       if(0 && (memb->marker.flags & EM_INDIRECT))
+               OUT(" *");
+       OUT(") list;\n");
+       INDENT(-1);
+
+       PCTX_DEF;
+
+       if (arg->embed && expr->_anonymous_type) {
+               OUT("} %s%s;\n", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+
+               REDIR(saved_target);
+
+               OUT("%s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+       } else {
+               OUT("} %s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       arg->embed ? c_name(arg).as_member : c_name(arg).short_name);
+               if(!expr->_anonymous_type) OUT(";\n");
+       }
+
+       /*
+        * SET OF/SEQUENCE OF definition
+        */
+       return asn1c_lang_C_type_SEx_OF_def(arg,
+               (arg->expr->expr_type == ASN_CONSTR_SEQUENCE_OF));
+}
+
+static int
+asn1c_lang_C_type_SEx_OF_def(arg_t *arg, int seq_of) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int tags_count;
+       int all_tags_count;
+       enum tvm_compat tv_mode;
+       int saved_target = arg->target->target;
+
+       /*
+        * Print out the table according to which parsing is performed.
+        */
+       if(seq_of) {
+               GEN_INCLUDE_STD("constr_SEQUENCE_OF");
+       } else {
+               GEN_INCLUDE_STD("constr_SET_OF");
+       }
+       if(!arg->embed)
+               GEN_DECLARE("SET_OF", expr);    /* asn_DEF_xxx */
+
+       REDIR(OT_STAT_DEFS);
+
+       /*
+        * Print out the table according to which parsing is performed.
+        */
+       if(!(expr->_type_referenced)) OUT("static ");
+       OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
+               c_name(arg).part_name, expr->_type_unique_index);
+       INDENT(+1);
+               v = TQ_FIRST(&(expr->members));
+               if(!v->Identifier) {
+                       v->Identifier = strdup("Member");
+                       assert(v->Identifier);
+               }
+               v->_anonymous_type = 1;
+               arg->embed++;
+               emit_member_table(arg, v, NULL);
+               arg->embed--;
+               free(v->Identifier);
+               v->Identifier = (char *)NULL;
+       INDENT(-1);
+       OUT("};\n");
+
+       /*
+        * Print out asn_DEF_<type>_[all_]tags[] vectors.
+        */
+       tv_mode = emit_tags_vectors(arg, expr, &tags_count, &all_tags_count);
+
+       if(!(expr->_type_referenced)) OUT("static ");
+       OUT("asn_SET_OF_specifics_t asn_SPC_%s_specs_%d = {\n",
+               MKID(expr), expr->_type_unique_index);
+       INDENTED(
+               OUT("sizeof(%s),\n", c_name(arg).full_name);
+               OUT("offsetof(%s, _asn_ctx),\n", c_name(arg).full_name);
+               {
+               int as_xvl = expr_as_xmlvaluelist(arg, v);
+               OUT("%d,\t/* XER encoding is %s */\n",
+                       as_xvl,
+                       as_xvl ? "XMLValueList" : "XMLDelimitedItemList");
+               }
+       );
+       OUT("};\n");
+
+       /*
+        * Emit asn_DEF_xxx table.
+        */
+       emit_type_DEF(arg, expr, tv_mode, tags_count, all_tags_count, 1,
+                       ETD_HAS_SPECIFICS);
+
+       REDIR(saved_target);
+
+       return 0;
+} /* _SEx_OF_def() */
+
+int
+asn1c_lang_C_type_CHOICE(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int saved_target = arg->target->target;
+
+       DEPENDENCIES;
+
+       REDIR(OT_DEPS);
+
+       OUT("typedef %s {\n", c_name(arg).presence_enum);
+       INDENTED(
+               int skipComma = 1;
+               OUT("%s", c_presence_name(arg, 0));
+               OUT("%s\t/* No components present */\n", !TQ_FIRST(&(expr->members)) ? "" : ",");
+               TQ_FOR(v, &(expr->members), next) {
+                       if(skipComma) skipComma = 0;
+                       else if (v->expr_type == A1TC_EXTENSIBLE && !TQ_NEXT(v, next)) OUT("\n");
+                       else OUT(",\n");
+                       if(v->expr_type == A1TC_EXTENSIBLE) {
+                               OUT("/* Extensions may appear below */\n");
+                               skipComma = 1;
+                               continue;
+                       }
+            OUT("%s", c_presence_name(arg, v));
+               }
+               OUT("\n");
+       );
+       OUT("} %s;\n", c_name(arg).presence_name);
+
+       REDIR(saved_target);
+
+       if(arg->embed) {
+               if (expr->_anonymous_type) {
+                       REDIR(OT_FWD_DEFS);
+                       OUT("typedef ");
+               }
+               OUT("%s {\n", c_name(arg).full_name);
+       } else {
+               REDIR(OT_TYPE_DECLS);
+               OUT("typedef %s {\n", c_name(arg).full_name);
+       }
+
+       INDENTED(
+               OUT("%s present;\n", c_name(arg).presence_name);
+               OUT("union ");
+               if(UNNAMED_UNIONS == 0) {
+                       out_name_chain(arg, ONC_force_compound_name);
+                       OUT("_u ");
+               }
+               OUT("{\n");
+               TQ_FOR(v, &(expr->members), next) {
+                       EMBED(v);
+               }
+               if(UNNAMED_UNIONS)      OUT("};\n");
+               else                    OUT("} choice;\n");
+       );
+
+       PCTX_DEF;
+
+       if (arg->embed && expr->_anonymous_type) {
+               OUT("} %s%s;\n", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+
+               REDIR(saved_target);
+
+               OUT("%s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       c_name(arg).base_name);
+       } else {
+               OUT("} %s%s", (expr->marker.flags & EM_INDIRECT)?"*":"",
+                       arg->embed ? c_name(arg).as_member : c_name(arg).short_name);
+       }
+       if(!expr->_anonymous_type) OUT(";\n");
+
+       return asn1c_lang_C_type_CHOICE_def(arg);
+}
+
+static ssize_t
+find_column_index(arg_t *arg, asn1c_ioc_table_and_objset_t *opt_ioc, const char *column_name) {
+    (void)arg;
+
+    if(!opt_ioc || !opt_ioc->ioct || !column_name) {
+        return -1;
+    }
+
+    if(opt_ioc->ioct->rows == 0) {
+        return 0;   /* No big deal. Just no data */
+    } else {
+        for(size_t clmn = 0; clmn < opt_ioc->ioct->row[0]->columns; clmn++) {
+            if(strcmp(opt_ioc->ioct->row[0]->column[clmn].field->Identifier,
+                      column_name) == 0) {
+                return clmn;
+            }
+        }
+        return -1;
+    }
+
+}
+
+static int
+asn1c_lang_C_OpenType(arg_t *arg, asn1c_ioc_table_and_objset_t *opt_ioc,
+                      const char *column_name) {
+    arg_t tmp_arg = *arg;
+
+    ssize_t column_index = find_column_index(arg, opt_ioc, column_name);
+    if(column_index < 0) {
+        FATAL("Open type generation attempted for %s, incomplete", column_name);
+        return -1;
+    }
+
+    asn1p_expr_t *open_type_choice =
+        asn1p_expr_new(arg->expr->_lineno, arg->expr->module);
+
+    open_type_choice->Identifier = strdup(arg->expr->Identifier);
+    open_type_choice->meta_type = AMT_TYPE;
+    open_type_choice->expr_type = ASN_CONSTR_OPEN_TYPE;
+    open_type_choice->_type_unique_index = arg->expr->_type_unique_index;
+    open_type_choice->parent_expr = arg->expr->parent_expr;
+
+    for(size_t row = 0; row < opt_ioc->ioct->rows; row++) {
+        struct asn1p_ioc_cell_s *cell =
+            &opt_ioc->ioct->row[row]->column[column_index];
+
+        if(!cell->value) continue;
+
+        if(asn1p_lookup_child(open_type_choice, cell->value->Identifier))
+            continue;
+
+        asn1p_expr_t *m = asn1p_expr_clone(cell->value, 0);
+        asn1p_expr_add(open_type_choice, m);
+    }
+
+    tmp_arg.expr = open_type_choice;
+    GEN_INCLUDE_STD("OPEN_TYPE");
+    asn1c_lang_C_type_CHOICE(&tmp_arg);
+    asn1p_expr_free(tmp_arg.expr);
+    return 0;
+}
+
+static int
+asn1c_lang_C_type_CHOICE_def(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int elements;   /* Number of elements */
+       tag2el_t *tag2el = NULL;
+       int tag2el_count = 0;
+       int tags_count;
+       int all_tags_count;
+       enum tvm_compat tv_mode;
+       int *cmap = 0;
+       int saved_target = arg->target->target;
+
+       /*
+        * Fetch every inner tag from the tag to elements map.
+        */
+       if(_fill_tag2el_map(arg, &tag2el, &tag2el_count, -1, FTE_ALLTAGS)) {
+               if(tag2el) free(tag2el);
+               return -1;
+       }
+
+       GEN_INCLUDE_STD("constr_CHOICE");
+       if(!arg->embed)
+               GEN_DECLARE("CHOICE", expr);    /* asn_DEF_xxx */
+
+       REDIR(OT_STAT_DEFS);
+
+       /*
+        * Print out the table according to which parsing is performed.
+        */
+       if(expr_elements_count(arg, expr)) {
+
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("asn_TYPE_member_t asn_MBR_%s_%d[] = {\n",
+                       c_name(arg).part_name, expr->_type_unique_index);
+
+               elements = 0;
+               INDENTED(TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type == A1TC_EXTENSIBLE)
+                               continue;
+                       emit_member_table(arg, v, NULL);
+                       elements++;
+               });
+               OUT("};\n");
+       } else {
+               elements = 0;
+       }
+
+    /* Create a canonical elements map */
+    if(elements && (arg->flags & A1C_GEN_PER)) {
+        cmap = compute_canonical_members_order(arg, elements);
+        if(cmap) {
+            OUT("static const unsigned asn_MAP_%s_to_canonical_%d[] = {",
+                MKID(expr), expr->_type_unique_index);
+            for(int i = 0; i < elements; i++) {
+                if(i) OUT(",");
+                OUT(" %d", cmap[i]);
+            }
+            OUT(" };\n");
+            OUT("static const unsigned asn_MAP_%s_from_canonical_%d[] = {",
+                MKID(expr), expr->_type_unique_index);
+            for(int i = 0; i < elements; i++) {
+                if(i) OUT(",");
+                int j;
+                for(j = 0; j < elements; j++) {
+                    if(cmap[j] == i) {
+                        OUT(" %d", j);
+                        break;
+                    }
+                }
+                assert(j < elements);
+            }
+            OUT(" };\n");
+            free(cmap);
+        }
+    }
+
+       if(arg->embed) {
+               /*
+                * Our parent structure has already taken this into account.
+                */
+               tv_mode = _TVM_SAME;
+               tags_count = all_tags_count = 0;
+       } else {
+               tv_mode = emit_tags_vectors(arg, expr,
+                       &tags_count, &all_tags_count);
+       }
+
+       /*
+        * Tags to elements map.
+        */
+       emit_tag2member_map(arg, tag2el, tag2el_count, 0);
+
+    if(!(expr->_type_referenced)) OUT("static ");
+    OUT("asn_CHOICE_specifics_t asn_SPC_%s_specs_%d = {\n", MKID(expr),
+        expr->_type_unique_index);
+    INDENTED(
+        OUT("sizeof(%s),\n", c_name(arg).full_name);
+        OUT("offsetof(%s, _asn_ctx),\n", c_name(arg).full_name);
+        OUT("offsetof(%s, present),\n", c_name(arg).full_name);
+        OUT("sizeof(((%s *)0)->present),\n", c_name(arg).full_name);
+        emit_tag2member_reference(arg, expr, tag2el_count);
+        if(cmap) {
+            if(C99_MODE) OUT(".to_canonical_order = ");
+            OUT("asn_MAP_%s_to_canonical_%d,\n", MKID(expr),
+                expr->_type_unique_index);
+            if(C99_MODE) OUT(".from_canonical_order = ");
+            OUT("asn_MAP_%s_from_canonical_%d,\n", MKID(expr),
+                expr->_type_unique_index);
+        } else { OUT("0, 0,\n"); }
+        if(C99_MODE) OUT(".first_extension = ");
+        OUT("%d\t/* Extensions start */\n", compute_extensions_start(expr));
+    );
+    OUT("};\n");
+
+       /*
+        * Emit asn_DEF_xxx table.
+        */
+       emit_type_DEF(arg, expr, tv_mode, tags_count, all_tags_count, elements,
+                       ETD_HAS_SPECIFICS);
+
+       REDIR(saved_target);
+
+       if (tag2el) free(tag2el);
+
+       return 0;
+} /* _CHOICE_def() */
+
+int
+asn1c_lang_C_type_REFERENCE_Value(arg_t *arg) {
+       arg_t tmp = *arg;
+       asn1p_expr_t *expr, *ref_type;
+       int saved_target;
+
+       expr = arg->expr;
+       ref_type = WITH_MODULE_NAMESPACE(
+                       tmp.expr->module, expr_ns,
+                       asn1f_lookup_symbol_ex(tmp.asn, expr_ns, tmp.expr,
+                       arg->expr->reference));
+       if(!ref_type)
+               return 0;
+
+       if(!ref_type->data)
+               asn1c_attach_streams(ref_type);
+
+       arg->target = ref_type->data;
+       saved_target = arg->target->target;
+       REDIR(OT_FUNC_DECLS);
+
+       if((ref_type->expr_type == ASN_BASIC_INTEGER) ||
+               (ref_type->expr_type == ASN_BASIC_ENUMERATED)) {
+               OUT("#define %s_", MKID(ref_type));
+               OUT("%s\t", c_name(arg).base_name);
+               OUT("((%s)", asn1c_type_name(arg, expr, TNF_CTYPE));
+               OUT("%s)\n", asn1p_itoa(expr->value->value.v_integer));
+       }
+
+       REDIR(saved_target);
+       arg->target = tmp.target;
+       return 0;
+}
+
+int
+asn1c_lang_C_type_REFERENCE(arg_t *arg) {
+       asn1p_ref_t *ref;
+
+       ref = arg->expr->reference;
+       if(ref->components[ref->comp_count-1].name[0] == '&') {
+               asn1p_expr_t *extract;
+               arg_t tmp;
+               int ret;
+
+        extract = WITH_MODULE_NAMESPACE(
+            arg->expr->module, expr_ns,
+            asn1f_class_access_ex(arg->asn, arg->expr->module, expr_ns,
+                                  arg->expr, arg->expr->rhs_pspecs, ref));
+        if(extract == NULL)
+                       return -1;
+
+               extract = asn1p_expr_clone(extract, 0);
+               if(extract) {
+                       free(extract->Identifier);
+                       extract->Identifier = strdup(arg->expr->Identifier);
+                       if(extract->Identifier == NULL) {
+                               asn1p_expr_free(extract);
+                               return -1;
+                       }
+               } else {
+                       return -1;
+               }
+
+               tmp = *arg;
+               tmp.asn = arg->asn;
+               tmp.expr = extract;
+
+               ret = arg->default_cb(&tmp, NULL);
+
+               asn1p_expr_free(extract);
+
+               return ret;
+       }
+
+
+       return asn1c_lang_C_type_SIMPLE_TYPE(arg);
+}
+
+int
+asn1c_lang_C_type_SIMPLE_TYPE(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       int tags_count;
+       int all_tags_count;
+       enum tvm_compat tv_mode;
+       enum etd_spec etd_spec;
+       const char *p;
+       int saved_target = arg->target->target;
+
+       if(arg->embed) {
+               enum tnfmt tnfmt = TNF_CTYPE;
+
+               /*
+                * If this is an optional compound type,
+                * refer it using "struct X" convention,
+                * as it may recursively include the current structure.
+                */
+               if(expr->marker.flags & (EM_INDIRECT | EM_UNRECURSE)) {
+                       if(terminal_structable(arg, expr)) {
+                               tnfmt = TNF_RSAFE;
+                               if(saved_target != OT_FWD_DECLS) {
+                                       REDIR(OT_FWD_DECLS);
+                                       OUT("%s;\n",
+                                               asn1c_type_name(arg, arg->expr, tnfmt));
+                               }
+                               REDIR(saved_target);
+                       }
+               }
+
+               OUT("%s", asn1c_type_name(arg, arg->expr, tnfmt));
+
+               if(!expr->_anonymous_type) {
+                       OUT("%s", (expr->marker.flags&EM_INDIRECT)?"\t*":"\t ");
+                       OUT("%s;", MKID_safe(expr));
+                       if((expr->marker.flags & (EM_DEFAULT & ~EM_INDIRECT))
+                                       == (EM_DEFAULT & ~EM_INDIRECT))
+                               OUT("\t/* DEFAULT %s */",
+                                       asn1f_printable_value(
+                                               expr->marker.default_value));
+                       else if((expr->marker.flags & EM_OPTIONAL)
+                                       == EM_OPTIONAL)
+                               OUT("\t/* OPTIONAL */");
+                       OUT("\n");
+               }
+
+       } else {
+               GEN_POS_INCLUDE_BASE(OT_INCLUDES, expr);
+
+               REDIR(OT_TYPE_DECLS);
+
+               OUT("typedef %s\t",
+                       asn1c_type_name(arg, arg->expr, TNF_CTYPE));
+               OUT("%s%s_t%s",
+                       (expr->marker.flags & EM_INDIRECT)?"*":" ",
+                       MKID(expr),
+                       expr->_anonymous_type ? "":";\n");
+       }
+
+       if((expr->expr_type == ASN_BASIC_ENUMERATED)
+       || (0 /* -- prohibited by X.693:8.3.4 */
+               && expr->expr_type == ASN_BASIC_INTEGER
+               && expr_elements_count(arg, expr))
+       || (expr->expr_type == ASN_BASIC_INTEGER
+               && asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN)
+       || asn1c_REAL_fits(arg, expr) == RL_FITS_FLOAT32
+       )
+               etd_spec = ETD_HAS_SPECIFICS;
+       else
+               etd_spec = ETD_NO_SPECIFICS;
+
+       /*
+        * If this type just blindly refers the other type, alias it.
+        *      Type1 ::= Type2
+        */
+       if(arg->embed && etd_spec == ETD_NO_SPECIFICS) {
+               REDIR(saved_target);
+               return 0;
+       }
+
+       REDIR(OT_CODE);
+
+       /*
+        * Constraint checking.
+        */
+       if(!(arg->flags & A1C_NO_CONSTRAINTS) && expr->combined_constraints) {
+               p = MKID(expr);
+               if(HIDE_INNER_DEFS) OUT("static ");
+               OUT("int\n");
+               OUT("%s", p);
+               if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index);
+               OUT("_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,\n");
+               INDENT(+1);
+               OUT("\t\tasn_app_constraint_failed_f *ctfailcb, void *app_key) {");
+               OUT("\n");
+               DEBUG("expr constraint checking code for %s", p);
+               if(asn1c_emit_constraint_checking_code(arg) == 1) {
+                       OUT("return td->encoding_constraints.general_constraints"
+                               "(td, sptr, ctfailcb, app_key);\n");
+               }
+               INDENT(-1);
+               OUT("}\n");
+               OUT("\n");
+       }
+
+       REDIR(OT_STAT_DEFS);
+
+    /*
+     * By default, NativeReal is double. We only override this if
+     * (OER) constraints suggested that we may use float.
+     */
+       if(asn1c_REAL_fits(arg, expr) == RL_FITS_FLOAT32) {
+               if(!(expr->_type_referenced)) OUT("static ");
+               OUT("const asn_NativeReal_specifics_t asn_SPC_%s_specs_%d = {\n",
+                       MKID(expr), expr->_type_unique_index);
+               INDENT(+1);
+               OUT("4\t/* Use 'float' type. */\n");
+               INDENT(-1);
+               OUT("};\n");
+       }
+
+       /*
+        * Print out asn_DEF_<type>_[all_]tags[] vectors.
+        */
+       tv_mode = emit_tags_vectors(arg, expr, &tags_count, &all_tags_count);
+       DEBUG("emit tag vectors for %s %d, %d, %d", expr->Identifier,
+               tv_mode, tags_count, all_tags_count);
+
+       emit_type_DEF(arg, expr, tv_mode, tags_count, all_tags_count,
+               0, etd_spec);
+
+       REDIR(OT_CODE);
+
+       /*
+        * Emit suicidal functions.
+        */
+
+       /*
+        * This function replaces certain fields from the definition
+        * of a type with the corresponding fields from the basic type
+        * (from which the current type is inherited).
+        */
+       OUT("/*\n");
+       OUT(" * This type is implemented using %s,\n", c_name(arg).type.base_name);
+       OUT(" * so here we adjust the DEF accordingly.\n");
+       OUT(" */\n");
+
+       REDIR(OT_FUNC_DECLS);
+
+       p = MKID(expr);
+       if(HIDE_INNER_DEFS) {
+               OUT("/* extern asn_TYPE_descriptor_t asn_DEF_%s_%d;"
+                       "\t// (Use -fall-defs-global to expose) */\n",
+                       p, expr->_type_unique_index);
+       } else {
+               OUT("extern asn_TYPE_descriptor_t asn_DEF_%s;\n", p);
+        if(etd_spec == ETD_HAS_SPECIFICS && expr->_type_referenced) {
+            if((expr->expr_type == ASN_BASIC_ENUMERATED)
+               || (expr->expr_type == ASN_BASIC_INTEGER)) {
+                OUT("extern const asn_INTEGER_specifics_t "
+                    "asn_SPC_%s_specs_%d;\n",
+                    c_name(arg).base_name, expr->_type_unique_index);
+            } else {
+                asn1p_expr_t *terminal = WITH_MODULE_NAMESPACE(
+                    expr->module, expr_ns,
+                    asn1f_find_terminal_type_ex(arg->asn, expr_ns, expr));
+                OUT("extern const asn_%s_specifics_t ",
+                    asn1c_type_name(arg, terminal, TNF_SAFE));
+                OUT("asn_SPC_%s_specs_%d;\n", MKID(expr),
+                    expr->_type_unique_index);
+            }
+        }
+               OUT("asn_struct_free_f %s_free;\n", p);
+               OUT("asn_struct_print_f %s_print;\n", p);
+               OUT("asn_constr_check_f %s_constraint;\n", p);
+               OUT("ber_type_decoder_f %s_decode_ber;\n", p);
+               OUT("der_type_encoder_f %s_encode_der;\n", p);
+               OUT("xer_type_decoder_f %s_decode_xer;\n", p);
+               OUT("xer_type_encoder_f %s_encode_xer;\n", p);
+               if(arg->flags & A1C_GEN_OER) {
+                       OUT("oer_type_decoder_f %s_decode_oer;\n", p);
+                       OUT("oer_type_encoder_f %s_encode_oer;\n", p);
+               }
+               if(arg->flags & A1C_GEN_PER) {
+                       OUT("per_type_decoder_f %s_decode_uper;\n", p);
+                       OUT("per_type_encoder_f %s_encode_uper;\n", p);
+                       OUT("per_type_decoder_f %s_decode_aper;\n", p);
+                       OUT("per_type_encoder_f %s_encode_aper;\n", p);
+               }
+       }
+
+       REDIR(saved_target);
+
+       return 0;
+}
+
+int
+asn1c_lang_C_type_EXTENSIBLE(arg_t *arg) {
+
+       OUT("/*\n");
+       OUT(" * This type is extensible,\n");
+       OUT(" * possible extensions are below.\n");
+       OUT(" */\n");
+
+       return 0;
+}
+
+static int
+compute_extensions_start(asn1p_expr_t *expr) {
+       asn1p_expr_t *v;
+       int eidx = 0;
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type == A1TC_EXTENSIBLE)
+                       return eidx;
+               eidx++;
+       }
+       return -1;
+}
+
+static int
+_print_tag(arg_t *arg, struct asn1p_type_tag_s *tag) {
+
+       OUT("(");
+       switch(tag->tag_class) {
+       case TC_UNIVERSAL:              OUT("ASN_TAG_CLASS_UNIVERSAL"); break;
+       case TC_APPLICATION:            OUT("ASN_TAG_CLASS_APPLICATION"); break;
+       case TC_CONTEXT_SPECIFIC:       OUT("ASN_TAG_CLASS_CONTEXT"); break;
+       case TC_PRIVATE:                OUT("ASN_TAG_CLASS_PRIVATE"); break;
+       case TC_NOCLASS:
+               break;
+       }
+       OUT(" | (%s << 2))", asn1p_itoa(tag->tag_value));
+
+       return 0;
+}
+
+
+static int
+_tag2el_cmp(const void *ap, const void *bp) {
+       const tag2el_t *a = ap;
+       const tag2el_t *b = bp;
+       const struct asn1p_type_tag_s *ta = &a->el_tag;
+       const struct asn1p_type_tag_s *tb = &b->el_tag;
+
+       if(ta->tag_class == tb->tag_class) {
+               if(ta->tag_value == tb->tag_value) {
+                       /*
+                        * Sort by their respective positions.
+                        */
+                       if(a->el_no < b->el_no)
+                               return -1;
+                       else if(a->el_no > b->el_no)
+                               return 1;
+                       return 0;
+               } else if(ta->tag_value < tb->tag_value)
+                       return -1;
+               else
+                       return 1;
+       } else if(ta->tag_class < tb->tag_class) {
+               return -1;
+       } else {
+               return 1;
+       }
+}
+
+/*
+ * For constructed types, number of external tags may be greater than
+ * number of elements in the type because of CHOICE type.
+ * T ::= SET {         -- Three possible tags:
+ *     a INTEGER,      -- One tag is here...
+ *     b Choice1       -- ... and two more tags are there.
+ * }
+ * Choice1 ::= CHOICE {
+ *     s1 IA5String,
+ *     s2 ObjectDescriptor
+ * }
+ */
+static int
+_fill_tag2el_map(arg_t *arg, tag2el_t **tag2el, int *count, int el_no, fte_e flags) {
+       asn1p_expr_t *expr = arg->expr;
+       arg_t tmparg = *arg;
+       asn1p_expr_t *v;
+       int element = 0;
+       int original_count = *count;
+       int sort_until = -1;
+
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type == A1TC_EXTENSIBLE) {
+                       /*
+                        * CXER mandates sorting
+                        * only for the root part.
+                        */
+                       if(flags == FTE_CANONICAL_XER
+                       && sort_until == -1)
+                               sort_until = *count;
+                       continue;
+               }
+
+               tmparg.expr = v;
+
+               if(_add_tag2el_member(&tmparg, tag2el, count,
+                               (el_no==-1)?element:el_no, flags)) {
+                       return -1;
+               }
+
+               element++;
+       }
+
+
+       if(flags == FTE_CANONICAL_XER) {
+               if(sort_until == -1) sort_until = *count;
+               qsort((*tag2el) + original_count,
+                       sort_until - original_count,
+                               sizeof(**tag2el), _tag2el_cmp);
+               if(arg->expr->expr_type == ASN_CONSTR_CHOICE
+               && (sort_until - original_count) >= 1) {
+                       /* Only take in account the root component */
+                       *count = original_count + 1;
+               }
+       } else {
+               /*
+                * Sort the map according to canonical order of their
+                * tags and element numbers.
+                */
+               qsort(*tag2el, *count, sizeof(**tag2el), _tag2el_cmp);
+       }
+
+       /*
+        * Initialize .toff_{first|last} members.
+        */
+       if(*count) {
+               struct asn1p_type_tag_s *cur_tag = 0;
+               tag2el_t *cur = *tag2el;
+               tag2el_t *end = cur + *count;
+               int occur, i;
+               for(occur = 0; cur < end; cur++) {
+                       if(cur_tag == 0
+                       || cur_tag->tag_value != cur->el_tag.tag_value
+                       || cur_tag->tag_class != cur->el_tag.tag_class) {
+                               cur_tag = &cur->el_tag;
+                               occur = 0;
+                       } else {
+                               occur++;
+                       }
+                       cur->toff_first = -occur;
+                       for(i = 0; i >= -occur; i--)
+                               cur[i].toff_last = -i;
+               }
+       }
+
+       return 0;
+}
+
+static int
+_add_tag2el_member(arg_t *arg, tag2el_t **tag2el, int *count, int el_no, fte_e flags) {
+       struct asn1p_type_tag_s tag;
+       int ret;
+
+       assert(el_no >= 0);
+
+    ret = WITH_MODULE_NAMESPACE(
+        arg->expr->module, expr_ns,
+        asn1f_fetch_outmost_tag(arg->asn, expr_ns, arg->expr->module, arg->expr,
+                                &tag, AFT_IMAGINARY_ANY));
+    if(ret == 0) {
+               tag2el_t *te;
+               int new_count = (*count) + 1;
+               void *p;
+
+               if(tag.tag_value == -1) {
+                       /*
+                        * This is an untagged ANY type,
+                        * proceed without adding a tag
+                        */
+                       return 0;
+               }
+
+               p = realloc(*tag2el, new_count * sizeof(tag2el_t));
+               if(p)   *tag2el = p;
+               else    return -1;
+
+               if(0) DEBUG("Found tag for %s: %ld",
+                       arg->expr->Identifier,
+                       (long)tag.tag_value);
+
+               te = &((*tag2el)[*count]);
+               te->el_tag = tag;
+               te->el_no = el_no;
+               te->from_expr = arg->expr;
+               *count = new_count;
+               return 0;
+       }
+
+       DEBUG("Searching tag in complex expression %s:%x at line %d",
+               arg->expr->Identifier,
+               arg->expr->expr_type,
+               arg->expr->_lineno);
+
+       /*
+        * Iterate over members of CHOICE type.
+        */
+       if(arg->expr->expr_type == ASN_CONSTR_CHOICE) {
+               return _fill_tag2el_map(arg, tag2el, count, el_no, flags);
+       }
+
+       if(arg->expr->expr_type == A1TC_REFERENCE) {
+               arg_t tmp = *arg;
+               asn1p_expr_t *expr;
+        expr = WITH_MODULE_NAMESPACE(
+            tmp.expr->module, expr_ns,
+            asn1f_lookup_symbol_ex(tmp.asn, expr_ns, tmp.expr,
+                                   arg->expr->reference));
+        if(expr) {
+                       tmp.expr = expr;
+                       return _add_tag2el_member(&tmp, tag2el, count, el_no, flags);
+               } else {
+                       FATAL("Cannot dereference %s at line %d",
+                               arg->expr->Identifier,
+                               arg->expr->_lineno);
+                       return -1;
+               }
+       }
+
+       DEBUG("No tag for %s at line %d",
+               arg->expr->Identifier,
+               arg->expr->_lineno);
+
+       return -1;
+}
+
+static int
+emit_tag2member_map(arg_t *arg, tag2el_t *tag2el, int tag2el_count, const char *opt_modifier) {
+       asn1p_expr_t *expr = arg->expr;
+       int i;
+
+       if(!tag2el_count) return 0;     /* No top level tags */
+
+       OUT("static const asn_TYPE_tag2member_t asn_MAP_%s_tag2el%s_%d[] = {\n",
+               MKID(expr), opt_modifier?opt_modifier:"",
+               expr->_type_unique_index);
+       for(i = 0; i < tag2el_count; i++) {
+               OUT("    { ");
+               _print_tag(arg, &tag2el[i].el_tag);
+               OUT(", ");
+               OUT("%d, ", tag2el[i].el_no);
+               OUT("%d, ", tag2el[i].toff_first);
+               OUT("%d ", tag2el[i].toff_last);
+               OUT("}%s /* %s",
+                       (i + 1 < tag2el_count) ? "," : "",
+                       tag2el[i].from_expr->Identifier);
+        if(arg->flags & A1C_LINE_REFS)
+            OUT("at %d", tag2el[i].from_expr->_lineno);
+        OUT(" */\n");
+       }
+       OUT("};\n");
+
+       return 0;
+}
+
+static enum tvm_compat
+emit_tags_vectors(arg_t *arg, asn1p_expr_t *expr, int *tags_count_r, int *all_tags_count_r) {
+       struct asn1p_type_tag_s *tags = 0;      /* Effective tags */
+       struct asn1p_type_tag_s *all_tags = 0;  /* The full array */
+       int tags_count = 0;
+       int all_tags_count = 0;
+       enum tvm_compat tv_mode = _TVM_SAME;
+       int i;
+
+       /* Cleanup before proceeding. */
+       *tags_count_r = 0;
+       *all_tags_count_r = 0;
+
+       /* Fetch a chain of tags */
+    tags_count = WITH_MODULE_NAMESPACE(
+        expr->module, expr_ns,
+        asn1f_fetch_tags(arg->asn, expr_ns, expr->module, expr, &tags, 0));
+    if(tags_count < 0) {
+               DEBUG("fail to fetch tags for %s", expr->Identifier);
+               return -1;
+       }
+
+       /* Fetch a chain of tags */
+    all_tags_count = WITH_MODULE_NAMESPACE(
+        expr->module, expr_ns,
+        asn1f_fetch_tags(arg->asn, expr_ns, expr->module, expr, &all_tags,
+                         AFT_FULL_COLLECT));
+    if(all_tags_count < 0) {
+               free(tags);
+               DEBUG("fail to fetch tags chain for %s", expr->Identifier);
+               return -1;
+       }
+
+       assert(tags_count <= all_tags_count);
+       assert((tags_count?0:1) == (all_tags_count?0:1));
+
+       if(tags_count <= all_tags_count) {
+               for(i = 0; i < tags_count; i++) {
+                       if(tags[i].tag_value != all_tags[i].tag_value
+                       || tags[i].tag_class != all_tags[i].tag_class) {
+                               tv_mode = _TVM_DIFFERENT;
+                               break;
+                       }
+               }
+               if(i == tags_count && tags_count < all_tags_count)
+                       tv_mode = _TVM_SUBSET;
+       } else {
+               tv_mode = _TVM_DIFFERENT;
+       }
+
+#define        EMIT_TAGS_TABLE(name, tags, tags_count) do {                    \
+               OUT("static const ber_tlv_tag_t asn_DEF_%s%s_tags_%d[] = {\n",\
+                       MKID(expr), name,                       \
+                       expr->_type_unique_index);                      \
+               INDENT(+1);                                             \
+               /* Print the array of collected tags */                 \
+               for(i = 0; i < tags_count; i++) {                       \
+                       if(i) OUT(",\n");                               \
+                       _print_tag(arg, &tags[i]);                      \
+               }                                                       \
+               OUT("\n");                                              \
+               INDENT(-1);                                             \
+               OUT("};\n");                                            \
+       } while(0)
+
+       if(tags_count) {
+               if(tv_mode == _TVM_SUBSET)
+                       EMIT_TAGS_TABLE("", all_tags, all_tags_count);
+               else
+                       EMIT_TAGS_TABLE("", tags, tags_count);
+       }
+
+       if(all_tags_count) {
+               if(tv_mode == _TVM_DIFFERENT)
+                       EMIT_TAGS_TABLE("_all", all_tags, all_tags_count);
+       }
+
+       free(tags);
+       free(all_tags);
+
+       *tags_count_r = tags_count;
+       *all_tags_count_r = all_tags_count;
+
+       return tv_mode;
+}
+
+static int
+expr_elements_count(arg_t *arg, asn1p_expr_t *expr) {
+       asn1p_expr_t *topmost_parent;
+       asn1p_expr_t *v;
+       int elements = 0;
+
+    topmost_parent = WITH_MODULE_NAMESPACE(
+        expr->module, expr_ns,
+        asn1f_find_terminal_type_ex(arg->asn, expr_ns, expr));
+    if(!topmost_parent) return 0;
+
+       if(!(topmost_parent->expr_type & ASN_CONSTR_MASK)
+       && !(topmost_parent->expr_type == ASN_BASIC_INTEGER)
+       && !(topmost_parent->expr_type == ASN_BASIC_ENUMERATED)
+       && !(topmost_parent->expr_type == ASN_BASIC_BIT_STRING))
+               return 0;
+
+       TQ_FOR(v, &(topmost_parent->members), next) {
+               if(v->expr_type != A1TC_EXTENSIBLE)
+                       elements++;
+       }
+
+       return elements;
+}
+
+static asn1p_expr_type_e
+expr_get_type(arg_t *arg, asn1p_expr_t *expr) {
+       asn1p_expr_t *terminal;
+       terminal = asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
+       if(terminal) return terminal->expr_type;
+       return A1TC_INVALID;
+}
+
+static asn1c_integer_t
+PER_FROM_alphabet_characters(asn1cnst_range_t *range) {
+       asn1c_integer_t numchars = 0;
+       if(range->el_count) {
+               int i;
+               for(i = 0; i < range->el_count; i++)
+                       numchars
+                       += PER_FROM_alphabet_characters(range->elements[i]);
+       } else {
+               assert(range->left.type == ARE_VALUE);
+               assert(range->right.type == ARE_VALUE);
+               numchars = 1 + (range->right.value - range->left.value);
+       }
+       return numchars;
+}
+
+static void
+emit_single_member_OER_constraint_comment(arg_t *arg, asn1cnst_range_t *range, char *type) {
+
+       /*
+        * Print some courtesy debug information.
+        */
+    if(range
+       && (range->left.type == ARE_VALUE || range->right.type == ARE_VALUE)) {
+        OUT("\t/* ");
+               if(type) OUT("(%s", type);
+               OUT("(");
+               if(range->left.type == ARE_VALUE)
+                       OUT("%s", asn1p_itoa(range->left.value));
+               else
+                       OUT("MIN");
+               OUT("..");
+               if(range->right.type == ARE_VALUE)
+                       OUT("%s", asn1p_itoa(range->right.value));
+               else
+                       OUT("MAX");
+               if(range->extensible) OUT(",...");
+               if(type) OUT(")");
+               OUT(") */");
+       }
+}
+
+static int
+emit_single_member_OER_constraint_value(arg_t *arg, asn1cnst_range_t *range) {
+    if(!range) {
+        /* oer_support.h: asn_oer_constraint_s */
+        OUT("{ 0, 0 }");
+        return 0;
+    }
+
+       if(range->incompatible || range->not_OER_visible) {
+               OUT("{ 0, 0 }");
+    } else if(expr_get_type(arg, arg->expr) == ASN_BASIC_REAL) {
+        if(range->narrowing == NARROW_FLOAT32) {
+            OUT("{ sizeof(float), 0 }");
+        } else if(range->narrowing == NARROW_DOUBLE64) {
+            OUT("{ sizeof(double), 0 }");
+        } else {
+            OUT("{ 0, 0 }");
+        }
+    } else if(range->left.type == ARE_VALUE && range->left.value >= 0
+              && range->right.type == ARE_MAX) {
+        OUT("{ 0, 1 }");
+       } else if(range->left.type == ARE_VALUE &&
+            range->right.type == ARE_VALUE) {
+        asn1c_integer_t lb = range->left.value;
+        asn1c_integer_t ub = range->right.value;
+        unsigned width = 0;
+        unsigned positive = 0;
+
+
+        if(lb >= 0) {
+            /* X.969 08/2015 10.2(a) */
+            if(ub <= 255) {
+                width = 1;
+            } else if(ub <= 65535) {
+                width = 2;
+            } else if((unsigned long long)ub <= 4294967295UL) {
+                width = 4;
+            } else if((unsigned long long)ub <= 18446744073709551615ULL) {
+                width = 8;
+            }
+            positive = 1;
+        } else {
+            positive = 0;
+            /* X.969 08/2015 10.2(b) - no lower bound or negative lower bound */
+            if(lb >= -128 && ub <= 127) {
+                width = 1;
+            } else if(lb >= -32768 && ub <= 32767) {
+                width = 2;
+            } else if(lb >= -2147483648L && ub <= 2147483647L) {
+                width = 4;
+            } else if(lb >= (-9223372036854775807LL-1)
+                      && ub <= 9223372036854775807LL) {
+                width = 8;
+            }
+        }
+        OUT("{ %u, %u }", width, positive);
+    } else {
+        OUT("{ 0, 0 }");
+    }
+
+    return 0;
+}
+
+static int
+emit_single_member_OER_constraint_size(arg_t *arg, asn1cnst_range_t *range) {
+    if(!range) {
+        /* oer_support.h: asn_oer_constraint_s */
+               OUT("-1");
+               return 0;
+    }
+
+    if(range->incompatible || range->not_OER_visible) {
+        OUT("-1");
+    } else {
+        if(range->left.type == ARE_VALUE && range->right.type == ARE_VALUE
+           && range->left.value == range->right.value
+           && range->left.value >= 0) {
+            OUT("%s", asn1p_itoa(range->left.value));
+        } else {
+            OUT("-1");
+        }
+    }
+
+       return 0;
+}
+
+static int
+emit_single_member_PER_constraint(arg_t *arg, asn1cnst_range_t *range, int alphabetsize, const char *type) {
+    if(!range || range->incompatible || range->not_PER_visible) {
+        OUT("{ APC_UNCONSTRAINED,\t-1, -1,  0,  0 }");
+               return 0;
+    }
+
+    if(expr_get_type(arg, arg->expr) == ASN_BASIC_REAL) {
+        /* Unsupported */
+        OUT("{ APC_UNCONSTRAINED,\t-1, -1,  0,  0 }");
+        return 0;
+    }
+
+    if(range->left.type == ARE_VALUE) {
+               if(range->right.type == ARE_VALUE) {
+                       asn1c_integer_t cover = 1;
+                       asn1c_integer_t r = 1 + range->right.value
+                                             - range->left.value;
+                       size_t rbits;   /* Value range bits */
+                       ssize_t ebits;  /* Value effective range bits */
+
+                       if(range->empty_constraint)
+                               r = 0;
+
+                       if(alphabetsize) {
+                               /* X.691: 27.5.2 */
+                               r = PER_FROM_alphabet_characters(range);
+                       }
+
+                       /* Compute real constraint */
+                       for(rbits = 0; rbits < (8 * sizeof(r)); rbits++) {
+                               if(r <= cover)
+                                       break;
+                               cover *= 2;     /* Can't do shifting */
+                               if(cover < 0) {
+                                       FATAL("Constraint at line %d too wide "
+                                               "for %d-bits integer type",
+                                               arg->expr->_lineno,
+                                               sizeof(r) * 8);
+                                       rbits = sizeof(r);
+                                       break;
+                               }
+                       }
+
+                       if(alphabetsize) {
+                               ebits = rbits;
+                       } else {
+                               /* X.691, #10.9.4.1 */
+                               for(ebits = 0; ebits <= 16; ebits++)
+                                       if(r <= 1 << ebits) break;
+                               if(ebits == 17
+                               || range->right.value >= 65536)
+                                       ebits = -1;
+                       if(0) {
+                               /* X.691, #10.5.7.1 */
+                               for(ebits = 0; ebits <= 8; ebits++)
+                                       if(r <= 1 << ebits) break;
+                               if(ebits == 9) {
+                                       if(r <= 65536)
+                                               ebits = 16;
+                                       else
+                                               ebits = -1;
+                               }
+                       }
+                       }
+
+                       OUT("{ APC_CONSTRAINED%s,%s% d, % d, ",
+                               range->extensible
+                                       ? " | APC_EXTENSIBLE" : "",
+                               range->extensible ? " " : "\t", (int)rbits, (int)ebits);
+
+                       if(alphabetsize) {
+                               asn1c_integer_t lv = range->left.value;
+                               asn1c_integer_t rv = range->right.value;
+                               int gcmt = 0;
+                               if(lv > 0x7fffffff) { lv = 0x7fffffff; gcmt++; }
+                               if(rv > 0x7fffffff) { rv = 0x7fffffff; gcmt++; }
+                               if(gcmt) {
+                                       OINTS(lv); OUT(", "); OINTS(rv); OUT(" }");
+                                       goto pcmt;
+                               }
+                       }
+               } else {
+                       if(range->extensible) {
+                               OUT("{ APC_SEMI_CONSTRAINED | APC_EXTENSIBLE, "
+                                       "-1, -1, ");
+                       } else {
+                               OUT("{ APC_SEMI_CONSTRAINED,\t-1, -1, ");
+                       }
+               }
+               OINTS(range->left.value); OUT(", ");
+               OINTS(range->right.value); OUT(" }");
+       } else {
+               OUT("{ APC_UNCONSTRAINED,\t-1, -1,  0,  0 }");
+       }
+
+  pcmt:
+
+       /*
+        * Print some courtesy debug information.
+        */
+       if(range->left.type == ARE_VALUE
+       || range->right.type == ARE_VALUE) {
+               OUT("\t/* ");
+               if(type) OUT("(%s", type);
+               OUT("(");
+               if(range->left.type == ARE_VALUE)
+                       OUT("%s", asn1p_itoa(range->left.value));
+               else
+                       OUT("MIN");
+               OUT("..");
+               if(range->right.type == ARE_VALUE)
+                       OUT("%s", asn1p_itoa(range->right.value));
+               else
+                       OUT("MAX");
+               if(range->extensible) OUT(",...");
+               if(type) OUT(")");
+               OUT(") */");
+       }
+
+       return 0;
+}
+
+static int
+emit_member_OER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx) {
+    int save_target = arg->target->target;
+    asn1cnst_range_t *range;
+       asn1p_expr_type_e etype;
+
+    etype = expr_get_type(arg, expr);
+
+    if((arg->flags & A1C_GEN_OER)
+       && (expr->combined_constraints || etype == ASN_BASIC_ENUMERATED
+           || etype == ASN_CONSTR_CHOICE)) {
+        /* Fall through */
+    } else {
+        return 0;
+    }
+
+    REDIR(OT_CTDEFS);
+
+    OUT("static asn_oer_constraints_t "
+        "asn_OER_%s_%s_constr_%d CC_NOTUSED = {\n",
+        pfx, MKID(expr), expr->_type_unique_index);
+
+    INDENT(+1);
+
+    /* .value{.width,.positive} */
+    range = asn1constraint_compute_OER_range(expr->Identifier, etype,
+                                             expr->combined_constraints,
+                                             ACT_EL_RANGE, 0, 0, 0);
+    if(emit_single_member_OER_constraint_value(arg, range)) {
+        return -1;
+    }
+    emit_single_member_OER_constraint_comment(arg, range, 0);
+    asn1constraint_range_free(range);
+
+       OUT(",\n");
+
+    /* .size */
+    range = asn1constraint_compute_OER_range(expr->Identifier, etype,
+                                             expr->combined_constraints,
+                                             ACT_CT_SIZE, 0, 0, 0);
+    if(emit_single_member_OER_constraint_size(arg, range)) {
+        return -1;
+    }
+    emit_single_member_OER_constraint_comment(arg, range, "SIZE");
+    asn1constraint_range_free(range);
+
+    INDENT(-1);
+
+    OUT("};\n");
+
+    REDIR(save_target);
+
+    return 0;
+}
+
+static int
+emit_member_PER_constraints(arg_t *arg, asn1p_expr_t *expr, const char *pfx) {
+       int save_target = arg->target->target;
+       asn1cnst_range_t *range;
+       asn1p_expr_type_e etype;
+
+       etype = expr_get_type(arg, expr);
+
+       if((arg->flags & A1C_GEN_PER)
+       && (expr->combined_constraints
+               || etype == ASN_BASIC_ENUMERATED
+               || etype == ASN_CONSTR_CHOICE
+               || (etype & ASN_STRING_KM_MASK)
+        )
+       ) {
+               /* Fall through */
+       } else {
+               return 0;
+       }
+
+       if(expr->_type_referenced) {
+               REDIR(OT_FUNC_DECLS);
+
+               OUT("extern asn_per_constraints_t "
+                       "asn_PER_%s_%s_constr_%d;\n",
+                       pfx, MKID(expr), expr->_type_unique_index);
+       }
+
+       REDIR(OT_CTDEFS);
+
+       if(!(expr->_type_referenced)) OUT("static ");
+       OUT("asn_per_constraints_t "
+               "asn_PER_%s_%s_constr_%d CC_NOTUSED = {\n",
+               pfx, MKID(expr), expr->_type_unique_index);
+
+       INDENT(+1);
+
+       /*
+        * ENUMERATED and CHOICE are special.
+        */
+       if(etype == ASN_BASIC_ENUMERATED
+       || etype == ASN_CONSTR_CHOICE) {
+               asn1cnst_range_t tmprng;
+               asn1p_expr_t *v;
+               int extensible = 0;
+               int eidx = -1;
+
+               expr = asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
+               assert(expr);
+
+               TQ_FOR(v, &(expr->members), next) {
+                       if(v->expr_type == A1TC_EXTENSIBLE) {
+                               extensible++;
+                               break;
+                       }
+                       eidx++;
+               }
+
+               memset(&tmprng, 0, sizeof (tmprng));
+               tmprng.extensible = extensible;
+               if(eidx < 0) tmprng.empty_constraint = 1;
+               tmprng.left.type = ARE_VALUE;
+               tmprng.left.value = 0;
+               tmprng.right.type = ARE_VALUE;
+               tmprng.right.value = eidx < 0 ? 0 : eidx;
+               if(emit_single_member_PER_constraint(arg, &tmprng, 0, 0))
+                       return -1;
+       } else if(etype & ASN_STRING_KM_MASK) {
+               range = asn1constraint_compute_PER_range(expr->Identifier, etype,
+                               expr->combined_constraints, ACT_CT_FROM,
+                               0, 0, 0);
+               DEBUG("Emitting FROM constraint for %s", expr->Identifier);
+
+               if((range->left.type == ARE_MIN && range->right.type == ARE_MAX)
+               || range->not_PER_visible) {
+                       switch(etype) {
+                       case ASN_STRING_BMPString:
+                               range->left.type = ARE_VALUE;
+                               range->left.value = 0;
+                               range->right.type = ARE_VALUE;
+                               range->right.value = 65535;
+                               range->not_PER_visible = 0;
+                               range->extensible = 0;
+                               break;
+                       case ASN_STRING_UniversalString:
+                               OUT("{ APC_CONSTRAINED,\t32, 32,"
+                                       " 0, 2147483647 }"
+                                       " /* special case 1 */\n");
+                               goto avoid;
+                       default:
+                               break;
+                       }
+               }
+               if(emit_single_member_PER_constraint(arg, range, 1, 0))
+                       return -1;
+               avoid:
+               asn1constraint_range_free(range);
+       } else {
+               range = asn1constraint_compute_PER_range(expr->Identifier, etype,
+                               expr->combined_constraints, ACT_EL_RANGE,
+                               0, 0, 0);
+               if(emit_single_member_PER_constraint(arg, range, 0, 0))
+                       return -1;
+               asn1constraint_range_free(range);
+       }
+       OUT(",\n");
+
+       range = asn1constraint_compute_PER_range(expr->Identifier, etype,
+                       expr->combined_constraints, ACT_CT_SIZE, 0, 0, 0);
+       if(emit_single_member_PER_constraint(arg, range, 0, "SIZE"))
+               return -1;
+       asn1constraint_range_free(range);
+       OUT(",\n");
+
+       if((etype & ASN_STRING_KM_MASK) && (expr->_mark & TM_PERFROMCT)) {
+               int old_target = arg->target->target;
+               REDIR(OT_CODE);
+
+               OUT("static int asn_PER_MAP_%s_%d_v2c(unsigned int value) {\n",
+                       MKID(expr), expr->_type_unique_index);
+               OUT("\tif(value >= sizeof(permitted_alphabet_table_%d)/"
+                       "sizeof(permitted_alphabet_table_%d[0]))\n",
+                       expr->_type_unique_index,
+                       expr->_type_unique_index);
+               OUT("\t\treturn -1;\n");
+               OUT("\treturn permitted_alphabet_table_%d[value] - 1;\n",
+                       expr->_type_unique_index);
+               OUT("}\n");
+
+               OUT("static int asn_PER_MAP_%s_%d_c2v(unsigned int code) {\n",
+                       MKID(expr), expr->_type_unique_index);
+               OUT("\tif(code >= sizeof(permitted_alphabet_code2value_%d)/"
+                       "sizeof(permitted_alphabet_code2value_%d[0]))\n",
+                       expr->_type_unique_index,
+                       expr->_type_unique_index);
+               OUT("\t\treturn -1;\n");
+               OUT("\treturn permitted_alphabet_code2value_%d[code];\n",
+                       expr->_type_unique_index);
+               OUT("}\n");
+
+               REDIR(old_target);
+
+               OUT("asn_PER_MAP_%s_%d_v2c,\t/* Value to PER code map */\n",
+                       MKID(expr), expr->_type_unique_index);
+               OUT("asn_PER_MAP_%s_%d_c2v\t/* PER code to value map */\n",
+                       MKID(expr), expr->_type_unique_index);
+       } else if(etype & ASN_STRING_KM_MASK) {
+               DEBUG("No PER value map necessary for %s", MKID(expr));
+               OUT("0, 0\t/* No PER character map necessary */\n");
+       } else {
+               OUT("0, 0\t/* No PER value map */\n");
+       }
+
+       INDENT(-1);
+
+       OUT("};\n");
+
+       REDIR(save_target);
+
+       return 0;
+}
+
+static int
+safe_string(const uint8_t *buf, int size) {
+       const uint8_t *end = buf + size;
+       for(; buf < end; buf++) {
+               int ch = *buf;
+               if((ch < 0x20 || ch > 0x7e) || ch == '"')
+                       return 0;
+       }
+       return 1;
+}
+
+static void
+emit_default_string_value(arg_t *arg, asn1p_value_t *v) {
+
+       OUT("static const uint8_t defv[] = ");
+       assert(v->type == ATV_STRING);
+
+       if(safe_string(v->value.string.buf, v->value.string.size)) {
+               OUT("\"%s\";\n", v->value.string.buf);
+       } else {
+               uint8_t *b = v->value.string.buf;
+               uint8_t *e = v->value.string.size + b;
+               OUT("{ ");
+               for(;b < e; b++)
+                       OUT("0x%02x, ", *b);
+               OUT("0 };\n");
+       }
+}
+
+static int
+try_inline_default(arg_t *arg, asn1p_expr_t *expr, int out) {
+       int save_target = arg->target->target;
+       asn1p_expr_type_e etype = expr_get_type(arg, expr);
+       int fits_long = 0;
+
+       switch(etype) {
+       case ASN_BASIC_BOOLEAN:
+               fits_long = 1;
+        /* Fall through */
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_ENUMERATED:
+               if(expr->marker.default_value == NULL
+               || (expr->marker.default_value->type != ATV_INTEGER &&
+                   expr->marker.default_value->type != ATV_TRUE &&
+                   expr->marker.default_value->type != ATV_FALSE))
+                       break;
+               if(!fits_long)
+                       fits_long = asn1c_type_fits_long(arg, expr)!=FL_NOTFIT;
+               if(fits_long && !expr->marker.default_value->value.v_integer)
+                       expr->marker.flags &= ~EM_INDIRECT;
+               if(!out) {
+            if(C99_MODE) OUT(".default_value_cmp = ");
+                       OUT("&asn_DFL_%d_cmp_%s,",
+                               expr->_type_unique_index,
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+            OUT("\t/* Compare DEFAULT %s */\n",
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+            if(C99_MODE) OUT(".default_value_set = ");
+                       OUT("&asn_DFL_%d_set_%s,",
+                               expr->_type_unique_index,
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+            OUT("\t/* Set DEFAULT %s */\n",
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+                       return 1;
+               }
+               REDIR(OT_STAT_DEFS);
+
+               OUT("static int asn_DFL_%d_cmp_%s(const void *sptr) {\n",
+                       expr->_type_unique_index,
+                       asn1p_itoa(expr->marker.default_value->value.v_integer));
+               INDENT(+1);
+               OUT("const %s *st = sptr;\n", asn1c_type_name(arg, expr, TNF_CTYPE));
+               OUT("\n");
+               OUT("if(!st) {\n");
+        OUT("\treturn -1; /* No value is not a default value */\n");
+               OUT("}\n");
+               OUT("\n");
+               OUT("/* Test default value %s */\n",
+                       asn1p_itoa(expr->marker.default_value->value.v_integer));
+               if(fits_long) {
+                       OUT("return (*st != %s);\n",
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+               } else {
+                       OUT("long value;\n");
+                       OUT("if(asn_INTEGER2long(st, &value))\n");
+                       OUT("\treturn -1;\n");
+                       OUT("return (value != %s);\n",
+                               asn1p_itoa(expr->marker.default_value->value.v_integer));
+               }
+               INDENT(-1);
+               OUT("}\n");
+
+               OUT("static int asn_DFL_%d_set_%s(void **sptr) {\n",
+                       expr->_type_unique_index,
+                       asn1p_itoa(expr->marker.default_value->value.v_integer));
+               INDENT(+1);
+               OUT("%s *st = *sptr;\n", asn1c_type_name(arg, expr, TNF_CTYPE));
+               OUT("\n");
+               OUT("if(!st) {\n");
+               OUT("\tst = (*sptr = CALLOC(1, sizeof(*st)));\n");
+               OUT("\tif(!st) return -1;\n");
+               OUT("}\n");
+               OUT("\n");
+               OUT("/* Install default value %s */\n",
+                       asn1p_itoa(expr->marker.default_value->value.v_integer));
+               if(fits_long) {
+                       OUT("*st = ");
+                       OINT(expr->marker.default_value->value.v_integer);
+                       OUT(";\n");
+                       OUT("return 0;\n");
+               } else {
+                       OUT("return asn_long2INTEGER(st, ");
+                       OINT(expr->marker.default_value->value.v_integer);
+                       OUT(");\n");
+               }
+               INDENT(-1);
+               OUT("}\n");
+
+               REDIR(save_target);
+               return 1;
+       case ASN_BASIC_NULL:
+               //expr->marker.flags &= ~EM_INDIRECT;
+               return 0;
+       default:
+         if(etype & ASN_STRING_KM_MASK) {
+               if(expr->marker.default_value == NULL
+               || expr->marker.default_value->type != ATV_STRING)
+                       break;
+               if(!out) {
+            if(C99_MODE) OUT(".default_value_cmp = ");
+                       OUT("&asn_DFL_%d_cmp,\t/* Compare DEFAULT \"%s\" */\n",
+                               expr->_type_unique_index,
+                               expr->marker.default_value->value.string.buf);
+            if(C99_MODE) OUT(".default_value_set = ");
+                       OUT("&asn_DFL_%d_set,\t/* Set DEFAULT \"%s\" */\n",
+                               expr->_type_unique_index,
+                               expr->marker.default_value->value.string.buf);
+                       return 1;
+               }
+               REDIR(OT_STAT_DEFS);
+
+        OUT("static int asn_DFL_%d_cmp(const void *sptr) {\n",
+            expr->_type_unique_index);
+        INDENT(+1);
+        emit_default_string_value(arg, expr->marker.default_value);
+        OUT("const %s *st = sptr;\n", asn1c_type_name(arg, expr, TNF_CTYPE));
+        OUT("\n");
+        OUT("if(!st) {\n");
+        OUT("\treturn -1; /* No value is not a default value */\n");
+        OUT("}\n");
+               OUT("\n");
+        OUT("if(st->size == (sizeof(defv) - 1)\n");
+        OUT("&& memcmp(st->buf, &defv, sizeof(defv) - 1) == 0)\n");
+        OUT("\treturn 0;\n");
+        OUT("return 1;\n");
+               INDENT(-1);
+               OUT("}\n");
+
+        OUT("static int asn_DFL_%d_set(void **sptr) {\n",
+            expr->_type_unique_index);
+        INDENT(+1);
+               emit_default_string_value(arg, expr->marker.default_value);
+               OUT("%s *st = *sptr;\n", asn1c_type_name(arg, expr, TNF_CTYPE));
+        OUT("uint8_t *nstr = MALLOC(sizeof(defv));\n");
+               OUT("\n");
+        OUT("if(!nstr) return -1;\n");
+        OUT("memcpy(nstr, defv, sizeof(defv));\n");
+        OUT("\n");
+               OUT("if(st) {\n");
+               OUT("\tFREEMEM(st->buf);\n");
+               OUT("} else {\n");
+               OUT("\tst = (*sptr = CALLOC(1, sizeof(*st)));\n");
+               OUT("\tif(!st) { FREEMEM(nstr); return -1; }\n");
+               OUT("}\n");
+               OUT("st->buf = nstr;\n");
+        OUT("st->size = sizeof(defv) - 1;\n");
+               OUT("\n");
+               OUT("return 0;\n");
+               INDENT(-1);
+               OUT("}\n");
+
+               REDIR(save_target);
+               return 1;
+         }
+         break;
+       }
+       return 0;
+}
+
+static int
+emit_member_type_selector(arg_t *arg, asn1p_expr_t *expr, asn1c_ioc_table_and_objset_t *opt_ioc) {
+       int save_target = arg->target->target;
+    asn1p_expr_t *parent_expr = arg->expr;
+
+    const asn1p_constraint_t *crc =
+        asn1p_get_component_relation_constraint(expr->combined_constraints);
+    if(!crc || crc->el_count <= 1) {
+        /* Not an Open Type, it seems. */
+        OUT("0");
+        return 0;
+    }
+
+    const asn1p_ref_t *objset_ref =
+        asn1c_get_information_object_set_reference_from_constraint(arg, crc);
+
+    if(!objset_ref) {
+        FATAL("Constraint %s does not look like it referst to a set type %s",
+              asn1p_constraint_string(crc),
+              opt_ioc->objset->Identifier);
+        return -1;
+    }
+
+    const char *objset_name;
+    if(objset_ref->comp_count == 1) {
+        objset_name = objset_ref->components[0].name;
+    } else if(objset_ref->comp_count == 2) {
+        if(strcmp(objset_ref->components[0].name,
+                  opt_ioc->objset->module->ModuleName)
+           != 0) {
+            FATAL(
+                "Composite reference %s (from %s) does not look like it refers "
+                "to the same module as %s from an object set type %s",
+                asn1p_ref_string(objset_ref), asn1p_constraint_string(crc),
+                opt_ioc->objset->module->ModuleName,
+                opt_ioc->objset->Identifier);
+            return -1;
+        }
+        objset_name = objset_ref->components[1].name;
+    } else {
+        FATAL("Reference %s (from %s) does not look like an object set type %s",
+              asn1p_ref_string(objset_ref), asn1p_constraint_string(crc),
+              opt_ioc->objset->Identifier);
+        return -1;
+    }
+    if(strcmp(objset_name, opt_ioc->objset->Identifier) != 0) {
+        FATAL("Object Set references do not match: %s != %s", objset_name,
+              opt_ioc->objset->Identifier);
+        return -1;
+    }
+
+    if(crc->el_count != 2 || crc->elements[1]->type != ACT_EL_VALUE
+       || crc->elements[1]->value->type != ATV_REFERENCED
+       || crc->elements[1]->value->value.reference->comp_count != 1) {
+        FATAL(
+            "Do not know how to handle complex IoS constraints (%d components "
+            "of constraint, %d components of reference %s) for %s at line "
+            "%d",
+            crc->el_count,
+            crc->el_count >= 2 && crc->elements[1]->type == ACT_EL_VALUE
+                    && crc->elements[1]->value->type == ATV_REFERENCED
+                ? (signed)crc->elements[1]->value->value.reference->comp_count
+                : -1,
+            crc->el_count >= 2 && crc->elements[1]->type == ACT_EL_VALUE
+                    && crc->elements[1]->value->type == ATV_REFERENCED
+                ? asn1p_ref_string(crc->elements[1]->value->value.reference)
+                : "?",
+            MKID(parent_expr), parent_expr->_lineno);
+        OUT("0");
+        return -1;
+    }
+
+    const asn1p_ref_t *cref = crc->elements[1]->value->value.reference;
+    const char *cname = cref->components[0].name;
+    if(cname[0] == '@' && cname[1] != '.') {
+        cname += 1;
+    } else if(cname[0] == '@' && cname[1] == '.' && cname[2] != '.') {
+        cname += 2;
+    } else {
+        FATAL("Complex IoS reference %s can not be processed",
+              asn1p_ref_string(cref));
+        OUT("0");
+        return -1;
+    }
+
+    assert(opt_ioc != NULL);
+
+    asn1p_expr_t *constraining_memb = NULL;
+    TQ_FOR(constraining_memb, &(parent_expr->members), next) {
+        if(strcmp(constraining_memb->Identifier, cname) == 0) {
+            break;
+        }
+    }
+    if(!constraining_memb) {
+        FATAL("Can not find \"%s\" in %s at line %d", cname, MKID(parent_expr),
+              parent_expr->_lineno);
+        return -1;
+    }
+
+    if(constraining_memb->meta_type != AMT_TYPEREF
+       || constraining_memb->expr_type != A1TC_REFERENCE
+       || constraining_memb->reference->comp_count != 2
+       || constraining_memb->reference->components[1].lex_type
+              != RLT_Amplowercase) {
+        FATAL(
+            "Does not look like %s is a CLASS field reference (%s) on line "
+            "%d",
+            MKID(constraining_memb),
+            constraining_memb->reference
+                ? asn1p_ref_string(constraining_memb->reference)
+                : "<no reference>",
+            constraining_memb->_lineno);
+        return -1;
+    }
+    const char *cfield = constraining_memb->reference->components[1].name;
+
+    ssize_t constraining_column = -1;
+    for(size_t cn = 0; cn < opt_ioc->ioct->rows ? opt_ioc->ioct->row[0]->columns : 0;
+        cn++) {
+        if(strcmp(cfield, opt_ioc->ioct->row[0]->column[cn].field->Identifier)
+           == 0) {
+            constraining_column = cn;
+            break;
+        }
+    }
+    if(constraining_column < 0) {
+        if(opt_ioc->ioct->rows == 0) {
+            OUT("0");
+            return 0;
+        } else {
+            FATAL("Can not find referenced object class %s column %s\n",
+                  asn1p_ref_string(objset_ref), cfield);
+            return -1;
+        }
+    }
+
+    if(expr->meta_type != AMT_TYPEREF
+       || expr->expr_type != A1TC_REFERENCE
+       || expr->reference->comp_count != 2
+       || ((expr->reference->components[1].lex_type
+              != RLT_AmpUppercase)
+            && (expr->reference->components[1].lex_type
+                   != RLT_Amplowercase))) {
+        FATAL(
+            "Does not look like %s is a CLASS field reference (%s) denoting a type on line "
+            "%d",
+            MKID(expr),
+            expr->reference
+                ? asn1p_ref_string(expr->reference)
+                : "<no reference>",
+            expr->_lineno);
+        return -1;
+    }
+    const char *for_field = expr->reference->components[1].name;
+
+    ssize_t for_column = -1;
+    for(size_t cn = 0; cn < (opt_ioc->ioct->rows ? opt_ioc->ioct->row[0]->columns : 0);
+        cn++) {
+        if(strcmp(for_field,
+                  opt_ioc->ioct->row[0]->column[cn].field->Identifier)
+           == 0) {
+            for_column = cn;
+            break;
+        }
+    }
+    if(for_column < 0) {
+        FATAL("Can not find referenced object class column %s\n", for_field);
+        return -1;
+    }
+
+    REDIR(OT_CODE);
+    OUT("static asn_type_selector_result_t\n");
+    OUT("select_%s_", c_name(arg).compound_name);
+    OUT("%s_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {\n", MKID(expr));
+    INDENT(+1);
+
+    OUT("asn_type_selector_result_t result = {0, 0};\n");
+    OUT("const asn_ioc_set_t *itable = asn_IOS_%s_%d;\n", MKID(opt_ioc->objset),
+        opt_ioc->objset->_type_unique_index);
+    OUT("size_t constraining_column = %zu; /* %s */\n", constraining_column, cfield);
+    OUT("size_t for_column = %zu; /* %s */\n", for_column, for_field);
+    OUT("size_t row, presence_index = 0;\n");
+
+    const char *tname = asn1c_type_name(arg, constraining_memb, TNF_SAFE);
+    if(constraining_memb->marker.flags & EM_INDIRECT) {
+        OUT("const void *memb_ptr = *(const void **)");
+        OUT("((const char *)parent_sptr + offsetof(%s", c_name(arg).full_name);
+        OUT(", %s));", MKID_safe(constraining_memb));
+        OUT("if(!memb_ptr) return result;\n");
+        OUT("\n");
+    }
+
+    switch(asn1c_type_fits_long(arg, constraining_memb)) {
+    case FL_NOTFIT:
+        OUT("const %s_t *constraining_value = (const %s_t *)", tname, tname);
+        break;
+    case FL_PRESUMED:
+    case FL_FITS_SIGNED:
+        OUT("const long *constraining_value = (const long *)");
+        break;
+    case FL_FITS_UNSIGN:
+        OUT("const unsigned long *constraining_value = (const unsigned long *)");
+        break;
+    }
+    if(constraining_memb->marker.flags & EM_INDIRECT) {
+        OUT("memb_ptr;\n");
+    } else {
+        OUT("((const char *)parent_sptr + offsetof(%s", c_name(arg).full_name);
+        OUT(", %s));\n", MKID_safe(constraining_memb));
+    }
+    OUT("\n");
+
+    OUT("for(row=0; row < itable->rows_count; row++) {\n");
+    OUT("    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];\n");
+    OUT("    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];\n");
+    OUT("\n");
+    OUT("    if(type_cell->cell_kind == aioc__undefined)\n");
+    OUT("        continue;\n");
+    OUT("\n");
+    OUT("    presence_index++;\n");
+    OUT("    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {\n");
+    OUT("        result.type_descriptor = type_cell->type_descriptor;\n");
+    OUT("        result.presence_index = presence_index;\n");
+    OUT("        break;\n");
+    OUT("    }\n");
+    OUT("}\n");
+
+
+    OUT("\n");
+    OUT("return result;\n");
+    INDENT(-1);
+    OUT("}\n");
+    OUT("\n");
+
+    REDIR(save_target);
+    OUT("select_%s_", c_name(arg).compound_name);
+    OUT("%s_type", MKID(expr));
+
+    return 0;
+}
+
+static int
+emit_member_table(arg_t *arg, asn1p_expr_t *expr, asn1c_ioc_table_and_objset_t *opt_ioc) {
+       int save_target;
+       arg_t tmp_arg;
+       struct asn1p_type_tag_s outmost_tag_s;
+       struct asn1p_type_tag_s *outmost_tag;
+       int complex_contents;
+       const char *p;
+
+    if(WITH_MODULE_NAMESPACE(
+           expr->module, expr_ns,
+           asn1f_fetch_outmost_tag(arg->asn, expr_ns, expr->module, expr,
+                                   &outmost_tag_s, AFT_IMAGINARY_ANY))) {
+        outmost_tag = 0;
+       } else {
+               outmost_tag = &outmost_tag_s;
+       }
+
+       OUT("{ ");
+
+    if(is_open_type(arg, expr, opt_ioc)) {
+        OUT("ATF_OPEN_TYPE | ");
+    } else if(outmost_tag && outmost_tag->tag_value == -1) {
+        OUT("ATF_ANY_TYPE | ");
+    }
+    OUT("%s, ",
+               (expr->marker.flags & EM_INDIRECT)?"ATF_POINTER":"ATF_NOFLAGS");
+       if((expr->marker.flags & EM_OMITABLE) == EM_OMITABLE) {
+               asn1p_expr_t *tv;
+               int opts = 0;
+               for(tv = expr;
+                       tv && (tv->marker.flags & EM_OMITABLE) == EM_OMITABLE;
+                       tv = TQ_NEXT(tv, next), opts++) {
+                       if(tv->expr_type == A1TC_EXTENSIBLE)
+                               opts--;
+               }
+               OUT("%d, ", opts);
+       } else {
+               OUT("0, ");
+       }
+    if(expr->_anonymous_type) {
+        assert(arg->expr->expr_type == ASN_CONSTR_SET_OF
+               || arg->expr->expr_type == ASN_CONSTR_SEQUENCE_OF);
+        OUT("0,\n");
+    } else {
+        OUT("offsetof(%s, ", c_name(arg).full_name);
+        if((arg->expr->expr_type == ASN_CONSTR_CHOICE
+            || arg->expr->expr_type == ASN_CONSTR_OPEN_TYPE)
+           && (!UNNAMED_UNIONS))
+            OUT("choice.");
+        OUT("%s),\n", MKID_safe(expr));
+    }
+
+    INDENT(+1);
+       if(C99_MODE) OUT(".tag = ");
+       if(outmost_tag) {
+               if(outmost_tag->tag_value == -1)
+                       OUT("-1 /* Ambiguous tag (ANY?) */");
+               else
+                       _print_tag(arg, outmost_tag);
+       } else {
+               OUT("-1 /* Ambiguous tag (CHOICE?) */");
+       }
+
+       OUT(",\n");
+       if(C99_MODE) OUT(".tag_mode = ");
+       if((!(expr->expr_type &  ASN_CONSTR_MASK)
+          || expr->expr_type == ASN_CONSTR_CHOICE)
+       && expr->tag.tag_class) {
+               if(expr->tag.tag_mode == TM_IMPLICIT)
+               OUT("-1,\t/* IMPLICIT tag at current level */\n");
+               else
+               OUT("+1,\t/* EXPLICIT tag at current level */\n");
+       } else {
+               OUT("0,\n");
+       }
+
+       complex_contents =
+               is_open_type(arg, expr, opt_ioc)
+               || (expr->expr_type & ASN_CONSTR_MASK)
+               || expr->expr_type == ASN_BASIC_ENUMERATED
+               || (0 /* -- prohibited by X.693:8.3.4 */
+                       && expr->expr_type == ASN_BASIC_INTEGER
+                       && expr_elements_count(arg, expr))
+               || (expr->expr_type == ASN_BASIC_INTEGER
+                       && asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN);
+       if(C99_MODE) OUT(".type = ");
+
+    OUT("&asn_DEF_");
+    if(complex_contents) {
+        OUT("%s", MKID(expr));
+        if(!(arg->flags & A1C_ALL_DEFS_GLOBAL))
+            OUT("_%d", expr->_type_unique_index);
+    } else {
+        OUT("%s", asn1c_type_name(arg, expr, TNF_SAFE));
+    }
+    OUT(",\n");
+
+
+    if(C99_MODE) OUT(".type_selector = ");
+    if(opt_ioc) {
+        if(emit_member_type_selector(arg, expr, opt_ioc) < 0)
+            return -1;
+    } else {
+        OUT("0");
+    }
+       OUT(",\n");
+
+    OUT("{ ");
+       if(C99_MODE) OUT(".oer_constraints = ");
+       if(arg->flags & A1C_GEN_OER) {
+               if(expr->constraints) {
+                       OUT("&asn_OER_memb_%s_constr_%d",
+                               MKID(expr),
+                               expr->_type_unique_index);
+               } else {
+                       OUT("0");
+               }
+       } else {
+        OUT("0");
+       }
+    OUT(", ");
+       if(C99_MODE) OUT(".per_constraints = ");
+       if(arg->flags & A1C_GEN_PER) {
+               if(expr->constraints) {
+                       OUT("&asn_PER_memb_%s_constr_%d",
+                               MKID(expr),
+                               expr->_type_unique_index);
+               } else {
+                       OUT("0");
+               }
+       } else {
+               OUT("0");
+       }
+    OUT(", ");
+       if(C99_MODE) OUT(".general_constraints = ");
+       if(expr->constraints) {
+               if(arg->flags & A1C_NO_CONSTRAINTS) {
+                       OUT("0");
+               } else {
+                       const char *id = MKID(expr);
+                       if(expr->_anonymous_type
+                                       && !strcmp(expr->Identifier, "Member"))
+                               id = asn1c_type_name(arg, expr, TNF_SAFE);
+                       OUT(" memb_%s_constraint_%d", id,
+                               arg->expr->_type_unique_index);
+               }
+       } else {
+               OUT("0");
+       }
+    OUT(" },\n");
+
+       if(try_inline_default(arg, expr, 0)) {
+       } else {
+               OUT("0, 0, /* No default value */\n");
+       }
+       if(C99_MODE) OUT(".name = ");
+       if(expr->_anonymous_type && !strcmp(expr->Identifier, "Member")) {
+               OUT("\"\"\n");
+       } else {
+               OUT("\"%s\"\n", expr->Identifier);
+       }
+       OUT("},\n");
+       INDENT(-1);
+
+       if(!expr->constraints || (arg->flags & A1C_NO_CONSTRAINTS))
+               return 0;
+
+       save_target = arg->target->target;
+       REDIR(OT_CODE);
+
+       if(expr->_anonymous_type && !strcmp(expr->Identifier, "Member"))
+               p = asn1c_type_name(arg, expr, TNF_SAFE);
+       else
+               p = MKID(expr);
+       OUT("static int\n");
+       OUT("memb_%s_constraint_%d(const asn_TYPE_descriptor_t *td, const void *sptr,\n", p, arg->expr->_type_unique_index);
+       INDENT(+1);
+       OUT("\t\tasn_app_constraint_failed_f *ctfailcb, void *app_key) {\n");
+       tmp_arg = *arg;
+       tmp_arg.expr = expr;
+       DEBUG("member constraint checking code for %s", p);
+       if(asn1c_emit_constraint_checking_code(&tmp_arg) == 1) {
+               OUT("return td->encoding_constraints.general_constraints"
+                       "(td, sptr, ctfailcb, app_key);\n");
+       }
+       INDENT(-1);
+       OUT("}\n");
+       OUT("\n");
+
+       if(emit_member_OER_constraints(arg, expr, "memb"))
+               return -1;
+
+       if(emit_member_PER_constraints(arg, expr, "memb"))
+               return -1;
+
+       REDIR(save_target);
+
+       return 0;
+}
+
+/*
+ * Generate "asn_DEF_XXX" type definition.
+ */
+static int
+emit_type_DEF(arg_t *arg, asn1p_expr_t *expr, enum tvm_compat tv_mode, int tags_count, int all_tags_count, int elements_count, enum etd_spec spec) {
+       asn1p_expr_t *terminal;
+       int using_type_name = 0;
+       char *expr_id = strdup(MKID(expr));
+       char *p = expr_id;
+       char *p2 = (char *)0;
+
+       terminal = asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
+
+       if(emit_member_OER_constraints(arg, expr, "type"))
+               return -1;
+
+       if(emit_member_PER_constraints(arg, expr, "type"))
+               return -1;
+
+       if(HIDE_INNER_DEFS)
+               OUT("static /* Use -fall-defs-global to expose */\n");
+       OUT("asn_TYPE_descriptor_t asn_DEF_%s", p);
+    if(HIDE_INNER_DEFS || (arg->flags & A1C_ALL_DEFS_GLOBAL))
+        OUT("_%d", expr->_type_unique_index);
+    OUT(" = {\n");
+       INDENT(+1);
+
+               if(expr->_anonymous_type) {
+                       p = strdup(ASN_EXPR_TYPE2STR(expr->expr_type));
+                       OUT("\"%s\",\n", p?p:"");
+                       OUT("\"%s\",\n",
+                               p ? asn1c_make_identifier(AMI_CHECK_RESERVED,
+                                       0, p, 0) : "");
+               } else {
+                       OUT("\"%s\",\n", expr->Identifier);
+                       OUT("\"%s\",\n", expr->Identifier);
+               }
+
+               if(expr->expr_type & ASN_CONSTR_MASK) {
+                       using_type_name = 1;
+                       p = strdup(asn1c_type_name(arg, arg->expr, TNF_SAFE));
+               } else {
+                       if (expr->expr_type == A1TC_REFERENCE) {
+                               p2 = strdup(asn1c_type_name(arg, terminal, TNF_SAFE));
+                       } else {
+                               p2 = strdup(asn1c_type_name(arg, expr, TNF_SAFE));
+                       }
+                       p = strdup(expr_id);
+               }
+               if (!p2)
+                       p2 = strdup(p);
+
+        OUT("&asn_OP_%s,\n", p2);
+
+               if(tags_count) {
+                       OUT("asn_DEF_%s_tags_%d,\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("sizeof(asn_DEF_%s_tags_%d)\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("\t/sizeof(asn_DEF_%s_tags_%d[0])",
+                               expr_id, expr->_type_unique_index);
+                       if(tv_mode == _TVM_SUBSET
+                       && tags_count != all_tags_count)
+                               OUT(" - %d", all_tags_count - tags_count);
+                       OUT(", /* %d */\n", tags_count);
+               } else {
+                       OUT("0,\t/* No effective tags (pointer) */\n");
+                       OUT("0,\t/* No effective tags (count) */\n");
+               }
+
+               if(all_tags_count && tv_mode == _TVM_DIFFERENT) {
+                       OUT("asn_DEF_%s_all_tags_%d,\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("sizeof(asn_DEF_%s_all_tags_%d)\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("\t/sizeof(asn_DEF_%s_all_tags_%d[0]), /* %d */\n",
+                               expr_id, expr->_type_unique_index, all_tags_count);
+               } else if(all_tags_count) {
+                       OUT("asn_DEF_%s_tags_%d,\t/* Same as above */\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("sizeof(asn_DEF_%s_tags_%d)\n",
+                               expr_id, expr->_type_unique_index);
+                       OUT("\t/sizeof(asn_DEF_%s_tags_%d[0]), /* %d */\n",
+                               expr_id, expr->_type_unique_index, all_tags_count);
+               } else {
+                       OUT("0,\t/* No tags (pointer) */\n");
+                       OUT("0,\t/* No tags (count) */\n");
+               }
+
+               OUT("{ ");
+               if(arg->flags & A1C_GEN_OER) {
+                       if(expr->combined_constraints
+                       || expr->expr_type == ASN_BASIC_ENUMERATED
+                       || expr->expr_type == ASN_CONSTR_CHOICE) {
+                               OUT("&asn_OER_type_%s_constr_%d",
+                                       expr_id, expr->_type_unique_index);
+                       } else {
+                               OUT("0");
+                       }
+               } else {
+                       OUT("0");
+               }
+        OUT(", ");
+
+               if(arg->flags & A1C_GEN_PER) {
+            if(expr->combined_constraints
+               || expr->expr_type == ASN_BASIC_ENUMERATED
+               || expr->expr_type == ASN_CONSTR_CHOICE
+               || (expr->expr_type & ASN_STRING_KM_MASK)) {
+                OUT("&asn_PER_type_%s_constr_%d",
+                                       expr_id, expr->_type_unique_index);
+                       } else {
+                               OUT("0");
+                       }
+               } else {
+                       OUT("0");
+               }
+               OUT(", ");
+#define FUNCREF(foo)                              \
+    do {                                          \
+        OUT("%s", p);                             \
+        if(HIDE_INNER_DEFS && !using_type_name)   \
+            OUT("_%d", expr->_type_unique_index); \
+        OUT("_" #foo "");                         \
+    } while(0)
+
+#define FUNCREF2(foo)  \
+    do {               \
+        OUT("%s", p2); \
+        OUT("_" #foo); \
+    } while(0)
+
+        if (arg->flags & A1C_NO_CONSTRAINTS) {
+                       OUT("0");
+               } else {
+                       if (!expr->combined_constraints)
+                               FUNCREF2(constraint);
+                       else
+                               FUNCREF(constraint);
+               }
+        OUT(" },\n");
+
+        free(p);
+        p = NULL;
+        free(p2);
+        p2 = NULL;
+        free(expr_id);
+        expr_id = NULL;
+
+               if(elements_count ||
+                       ((expr->expr_type == A1TC_REFERENCE) &&
+                               (terminal->expr_type & ASN_CONSTR_MASK) &&
+                               expr_elements_count(arg, terminal))) {
+
+                       if (expr->expr_type == A1TC_REFERENCE) {
+                               OUT("asn_MBR_%s_%d,\n", MKID(terminal), terminal->_type_unique_index);
+
+                               if(terminal->expr_type == ASN_CONSTR_SEQUENCE_OF
+                               || terminal->expr_type == ASN_CONSTR_SET_OF) {
+                                       OUT("%d,\t/* Single element */\n",
+                                               expr_elements_count(arg, terminal));
+                                       assert(expr_elements_count(arg, terminal) == 1);
+                               } else {
+                                       OUT("%d,\t/* Elements count */\n",
+                                               expr_elements_count(arg, terminal));
+                               }
+                       } else {
+                OUT("asn_MBR_%s_%d,\n", c_name(arg).part_name,
+                    expr->_type_unique_index);
+
+                if(expr->expr_type == ASN_CONSTR_SEQUENCE_OF
+                               || expr->expr_type == ASN_CONSTR_SET_OF) {
+                                       OUT("%d,\t/* Single element */\n",
+                                               elements_count);
+                                       assert(elements_count == 1);
+                               } else {
+                                       OUT("%d,\t/* Elements count */\n",
+                                               elements_count);
+                               }
+                       }
+               } else {
+                       if(expr_elements_count(arg, expr))
+                               OUT("0, 0,\t/* Defined elsewhere */\n");
+                       else
+                               OUT("0, 0,\t/* No members */\n");
+               }
+
+               switch(spec) {
+               case ETD_NO_SPECIFICS:
+                       if ((expr->expr_type == A1TC_REFERENCE) &&
+                               ((terminal->expr_type & ASN_CONSTR_MASK) ||
+                               (terminal->expr_type == ASN_BASIC_ENUMERATED) ||
+                               ((terminal->expr_type == ASN_BASIC_INTEGER) &&
+                               (asn1c_type_fits_long(arg, terminal) == FL_FITS_UNSIGN)))) {
+                OUT("&asn_SPC_%s_specs_%d\t/* Additional specs */\n",
+                    c_expr_name(arg, terminal).part_name,
+                    terminal->_type_unique_index);
+            } else if ((expr->expr_type == ASN_TYPE_ANY) ||
+                                       (expr->expr_type == ASN_BASIC_BIT_STRING) ||
+                                       (expr->expr_type == ASN_STRING_BMPString) ||
+                                       (expr->expr_type == ASN_BASIC_OCTET_STRING) ||
+                                       (expr->expr_type == ASN_STRING_UniversalString)) {
+                OUT("&asn_SPC_%s_specs\t/* Additional specs */\n",
+                    c_name(arg).type.part_name);
+            } else if ((expr->expr_type == A1TC_REFERENCE) &&
+                                       ((terminal->expr_type == ASN_TYPE_ANY) ||
+                                       (terminal->expr_type == ASN_BASIC_BIT_STRING) ||
+                                       (terminal->expr_type == ASN_STRING_BMPString) ||
+                                       (terminal->expr_type == ASN_BASIC_OCTET_STRING) ||
+                                       (terminal->expr_type == ASN_STRING_UniversalString))) {
+                OUT("&asn_SPC_%s_specs\t/* Additional specs */\n",
+                    c_expr_name(arg, terminal).type.part_name);
+            } else {
+                               OUT("0\t/* No specifics */\n");
+                       }
+                       break;
+               case ETD_HAS_SPECIFICS:
+                       OUT("&asn_SPC_%s_specs_%d\t/* Additional specs */\n",
+                               c_name(arg).part_name, expr->_type_unique_index);
+               }
+       INDENT(-1);
+       OUT("};\n");
+       OUT("\n");
+
+       return 0;
+}
+
+static int
+expr_as_xmlvaluelist(arg_t *arg, asn1p_expr_t *expr) {
+       /*
+        * X.680, 25.5, Table 5
+        */
+       switch(expr_get_type(arg, expr)) {
+       case ASN_BASIC_BOOLEAN:
+       case ASN_BASIC_ENUMERATED:
+       case ASN_BASIC_NULL:
+               return 1;
+       case ASN_CONSTR_CHOICE:
+               return 2;
+       default:
+               return 0;
+       }
+}
+
+static int
+out_name_chain(arg_t *arg, enum onc_flags onc_flags) {
+       asn1p_expr_t *expr = arg->expr;
+       const char *id;
+
+       if((arg->flags & A1C_COMPOUND_NAMES
+          || onc_flags & ONC_force_compound_name
+          || (0 && arg->embed /* Not yet */))
+       && ((expr->expr_type & ASN_CONSTR_MASK)
+          || expr->expr_type == ASN_BASIC_ENUMERATED
+          || ((expr->expr_type == ASN_BASIC_INTEGER
+               || expr->expr_type == ASN_BASIC_BIT_STRING)
+               && expr_elements_count(arg, expr))
+          )
+       && expr->parent_expr) {
+
+               arg_t tmparg = *arg;
+
+               tmparg.expr = expr->parent_expr;
+               if(0) tmparg.flags &= ~A1C_COMPOUND_NAMES;
+
+               out_name_chain(&tmparg, onc_flags);
+
+               if(expr->parent_expr->Identifier) OUT("__");    /* a separator between id components */
+
+               /* Fall through */
+       }
+
+       if(onc_flags & ONC_avoid_keywords)
+               id = MKID_safe(expr);
+       else
+               id = MKID(expr);
+       OUT("%s", id);
+
+       return 0;
+}
+
+static int
+emit_include_dependencies(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *memb;
+
+       /* Avoid recursive definitions. */
+       TQ_FOR(memb, &(expr->members), next) {
+               expr_break_recursion(arg, memb);
+       }
+
+       TQ_FOR(memb, &(expr->members), next) {
+
+               if(memb->marker.flags & (EM_INDIRECT | EM_UNRECURSE)) {
+                       if(terminal_structable(arg, memb)) {
+                               int saved_target = arg->target->target;
+                               if(saved_target != OT_FWD_DECLS) {
+                                       REDIR(OT_FWD_DECLS);
+                                       OUT("%s;\n",
+                                               asn1c_type_name(arg, memb, TNF_RSAFE));
+                               }
+                               REDIR(saved_target);
+                       }
+               }
+
+               if((!(memb->expr_type & ASN_CONSTR_MASK)
+                       && memb->expr_type > ASN_CONSTR_MASK)
+               || memb->meta_type == AMT_TYPEREF) {
+                       GEN_POS_INCLUDE_BASE((memb->marker.flags & EM_UNRECURSE) ?
+                                       OT_POST_INCLUDE : OT_INCLUDES, memb);
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * Check if it is better to make this type indirectly accessed via
+ * a pointer.
+ * This may be the case for the following recursive definition:
+ * Type ::= CHOICE { member Type };
+ */
+static int
+expr_break_recursion(arg_t *arg, asn1p_expr_t *expr) {
+       int ret;
+
+       if(expr->marker.flags & EM_UNRECURSE)
+               return 1;       /* Already broken */
+
+       /* -findirect-choice compiles members of CHOICE as indirect pointers */
+       if((arg->flags & A1C_INDIRECT_CHOICE)
+        && arg->expr->expr_type == ASN_CONSTR_CHOICE
+        && (expr_get_type(arg, expr) & ASN_CONSTR_MASK)
+       ) {
+               /* Break cross-reference */
+               expr->marker.flags |= EM_INDIRECT | EM_UNRECURSE;
+               return 1;
+       }
+
+       if((expr->marker.flags & EM_INDIRECT)
+       || arg->expr->expr_type == ASN_CONSTR_SET_OF
+       || arg->expr->expr_type == ASN_CONSTR_SEQUENCE_OF) {
+               if(terminal_structable(arg, expr)) {
+                       expr->marker.flags |= EM_UNRECURSE;
+
+                       if(arg->expr->expr_type == ASN_CONSTR_SET_OF
+                       || arg->expr->expr_type == ASN_CONSTR_SEQUENCE_OF) {
+                               /* Don't put EM_INDIRECT even if recursion */
+                               return 1;
+                       }
+
+                       /* Fall through */
+               }
+       }
+
+       /* Look for recursive back-references */
+       ret = expr_defined_recursively(arg, expr);
+       switch(ret) {
+       case 2: /* Explicitly break the recursion */
+       case 1: /* Use safer typing */
+               expr->marker.flags |= EM_INDIRECT;
+               expr->marker.flags |= EM_UNRECURSE;
+               break;
+       }
+
+       return 0;
+}
+
+/*
+ * Check if the type can be represented using simple `struct TYPE`.
+ */
+static asn1p_expr_t *
+terminal_structable(arg_t *arg, asn1p_expr_t *expr) {
+    asn1p_expr_t *terminal =
+        asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
+    if(terminal
+       && !terminal->parent_expr
+       && (terminal->expr_type & ASN_CONSTR_MASK)) {
+               return terminal;
+       }
+       return 0;
+}
+
+static int
+asn1c_recurse(arg_t *arg, asn1p_expr_t *expr, int (*callback)(arg_t *arg, void *key), void *key) {
+       arg_t tmp = *arg;
+       int maxret = 0;
+       int ret;
+
+       if(expr->_mark & TM_RECURSION) return 0;
+       expr->_mark |= TM_RECURSION;
+
+       /* Invoke callback for every type going into recursion */
+       tmp.expr = expr;
+       maxret = callback(&tmp, key);
+       if(maxret <= 1) {
+               /*
+                * Recursively invoke myself and the callbacks.
+                */
+               TQ_FOR(tmp.expr, &(expr->members), next) {
+                       ret = asn1c_recurse(&tmp, tmp.expr, callback, key);
+                       if(ret > maxret)
+                               maxret = ret;
+                       if(maxret > 1) break;
+               }
+       }
+
+       expr->_mark &= ~TM_RECURSION;
+       return maxret;
+}
+
+static int
+check_is_refer_to(arg_t *arg, void *key) {
+       asn1p_expr_t *terminal = terminal_structable(arg, arg->expr);
+       if(terminal == key) {
+               if(arg->expr->marker.flags & EM_INDIRECT)
+                       return 1; /* This is almost safe indirection */
+               return 2;
+       } else if(terminal) {
+               /* This might be N-step circular loop. Dive into it. */
+               return asn1c_recurse(arg, terminal, check_is_refer_to, key);
+       }
+       return 0;
+}
+
+/*
+ * Check if the possibly inner expression defined recursively.
+ */
+static int
+expr_defined_recursively(arg_t *arg, asn1p_expr_t *expr) {
+       asn1p_expr_t *terminal;
+       asn1p_expr_t *topmost;
+
+       /* If expression is top-level, there's no way it can be recursive. */
+       if(expr->parent_expr == 0) return 0;
+       if(expr->expr_type != A1TC_REFERENCE)
+               return 0;       /* Basic types are never recursive */
+
+       terminal = terminal_structable(arg, expr);
+       if(!terminal) return 0; /* Terminal cannot be indirected */
+
+       /* Search for the parent container for the given expression */
+       topmost = expr;
+       while(topmost->parent_expr)
+               topmost = topmost->parent_expr;
+
+       /* Look inside the terminal type if it mentions the parent expression */
+       return asn1c_recurse(arg, terminal, check_is_refer_to, topmost);
+}
+
+struct canonical_map_element {
+       int eidx;
+       asn1p_expr_t *expr;
+};
+static int compar_cameo(const void *ap, const void *bp);
+static arg_t *cameo_arg;
+static int *
+compute_canonical_members_order(arg_t *arg, int el_count) {
+       struct canonical_map_element *cmap;
+       int *rmap;
+       asn1p_expr_t *v;
+       int eidx = 0;
+       int first_extension = -1;
+       int nextmax = -1;
+       int already_sorted = 1;
+
+       cmap = calloc(el_count, sizeof *cmap);
+       assert(cmap);
+
+       TQ_FOR(v, &(arg->expr->members), next) {
+               if(v->expr_type != A1TC_EXTENSIBLE) {
+                       cmap[eidx].eidx = eidx;
+                       cmap[eidx].expr = v;
+                       eidx++;
+               } else if(first_extension == -1)
+                       first_extension = eidx;
+       }
+
+       cameo_arg = arg;
+       if(first_extension == -1) {
+               /* Sort the whole thing */
+               qsort(cmap, el_count, sizeof(*cmap), compar_cameo);
+       } else {
+               /* Sort root and extensions independently */
+               qsort(cmap, first_extension, sizeof(*cmap), compar_cameo);
+               qsort(cmap + first_extension, el_count - first_extension,
+                       sizeof(*cmap), compar_cameo);
+       }
+
+       /* move data back to a simpler map */
+       rmap = calloc(el_count, sizeof *rmap);
+       assert(rmap);
+       for(eidx = 0; eidx < el_count; eidx++) {
+               rmap[eidx] = cmap[eidx].eidx;
+               if(rmap[eidx] <= nextmax)
+                       already_sorted = 0;
+               else
+                       nextmax = rmap[eidx];
+       }
+       free(cmap);
+
+       if(already_sorted) { free(rmap); rmap = 0; }
+       return rmap;
+}
+static int compar_cameo(const void *ap, const void *bp) {
+       const struct canonical_map_element *a = (const void *)ap;
+       const struct canonical_map_element *b = (const void *)bp;
+       struct asn1p_type_tag_s atag, btag;
+       arg_t *arg = cameo_arg;
+
+    if(WITH_MODULE_NAMESPACE(a->expr->module, expr_ns,
+                             asn1f_fetch_outmost_tag(
+                                 arg->asn, expr_ns, a->expr->module, a->expr,
+                                 &atag, AFT_IMAGINARY_ANY | AFT_CANON_CHOICE)))
+        return 1;
+
+    if(WITH_MODULE_NAMESPACE(
+           b->expr->module, expr_ns,
+           asn1f_fetch_outmost_tag(arg->asn, expr_ns, b->expr->module, b->expr,
+                                   &btag,
+                                   AFT_IMAGINARY_ANY | AFT_CANON_CHOICE))) {
+        return -1;
+    }
+
+    if(atag.tag_class < btag.tag_class)
+               return -1;
+       if(atag.tag_class > btag.tag_class)
+               return 1;
+       if(atag.tag_value < btag.tag_value)
+               return -1;
+       if(atag.tag_value > btag.tag_value)
+               return 1;
+       return 0;
+
+}
diff --git a/libasn1compiler/asn1c_C.h b/libasn1compiler/asn1c_C.h
new file mode 100644 (file)
index 0000000..26c2940
--- /dev/null
@@ -0,0 +1,76 @@
+#ifndef        ASN1_COMPILER_LANGUAGE_C_H
+#define        ASN1_COMPILER_LANGUAGE_C_H
+
+#include "asn1c_lang.h"
+
+int asn1c_lang_C_type_REFERENCE(arg_t *);
+int asn1c_lang_C_type_EXTENSIBLE(arg_t *);
+
+int asn1c_lang_C_type_SEQUENCE(arg_t *);
+int asn1c_lang_C_type_SET(arg_t *);
+int asn1c_lang_C_type_SEx_OF(arg_t *); /* SET OF or  SEQUENCE OF */
+int asn1c_lang_C_type_CHOICE(arg_t *);
+
+int asn1c_lang_C_type_common_INTEGER(arg_t *);
+int asn1c_lang_C_type_BIT_STRING(arg_t *);
+int asn1c_lang_C_type_REAL(arg_t *);
+int asn1c_lang_C_type_SIMPLE_TYPE(arg_t *);
+int asn1c_lang_C_type_REFERENCE_Value(arg_t *);
+
+static asn1_language_map_t asn1_lang_C[] __attribute__ ((unused)) = {
+       { AMT_VALUE, A1TC_REFERENCE,    asn1c_lang_C_type_REFERENCE_Value },
+
+       { AMT_TYPE, A1TC_REFERENCE,     asn1c_lang_C_type_REFERENCE },
+       { AMT_TYPEREF, A1TC_REFERENCE,  asn1c_lang_C_type_REFERENCE },
+       { AMT_TYPE, A1TC_EXTENSIBLE,    asn1c_lang_C_type_EXTENSIBLE },
+       /*
+        * Constructed types
+        */
+       { AMT_TYPE, ASN_CONSTR_SEQUENCE,        asn1c_lang_C_type_SEQUENCE },
+       { AMT_TYPE, ASN_CONSTR_SEQUENCE_OF,     asn1c_lang_C_type_SEx_OF, },
+       { AMT_TYPEREF, ASN_CONSTR_SEQUENCE_OF,  asn1c_lang_C_type_SEx_OF },
+       { AMT_TYPE, ASN_CONSTR_SET,             asn1c_lang_C_type_SET },
+       { AMT_TYPE, ASN_CONSTR_SET_OF,          asn1c_lang_C_type_SEx_OF },
+       { AMT_TYPEREF, ASN_CONSTR_SET_OF,       asn1c_lang_C_type_SEx_OF },
+       { AMT_TYPE, ASN_CONSTR_CHOICE,          asn1c_lang_C_type_CHOICE },
+       /*
+        * ANY type (deprecated)
+        */
+        { AMT_TYPE, ASN_TYPE_ANY,      asn1c_lang_C_type_SIMPLE_TYPE },
+       /*
+        * Basic types
+        */
+       { AMT_TYPE, ASN_BASIC_BOOLEAN,  asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_NULL,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_INTEGER,  asn1c_lang_C_type_common_INTEGER },
+       { AMT_TYPE, ASN_BASIC_REAL,     asn1c_lang_C_type_REAL },
+       { AMT_TYPE, ASN_BASIC_ENUMERATED,  asn1c_lang_C_type_common_INTEGER },
+       { AMT_TYPE, ASN_BASIC_BIT_STRING,       asn1c_lang_C_type_BIT_STRING },
+       { AMT_TYPE, ASN_BASIC_OCTET_STRING,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_OBJECT_IDENTIFIER,asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_RELATIVE_OID,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_CHARACTER_STRING, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_UTCTime,          asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_BASIC_GeneralizedTime,  asn1c_lang_C_type_SIMPLE_TYPE },
+       /*
+        * String types
+        */
+       { AMT_TYPE, ASN_STRING_BMPString,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_GeneralString, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_GraphicString, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_IA5String,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_ISO646String,  asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_NumericString, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_PrintableString,asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_TeletexString, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_T61String,     asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_UniversalString,asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_UTF8String,    asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_VideotexString,asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_VisibleString, asn1c_lang_C_type_SIMPLE_TYPE },
+       { AMT_TYPE, ASN_STRING_ObjectDescriptor,asn1c_lang_C_type_SIMPLE_TYPE },
+       { 0, 0, 0 }
+};
+
+
+#endif /* ASN1_COMPILER_LANGUAGE_C_H */
diff --git a/libasn1compiler/asn1c_compat.c b/libasn1compiler/asn1c_compat.c
new file mode 100644 (file)
index 0000000..6c47d02
--- /dev/null
@@ -0,0 +1,219 @@
+#include "asn1c_internal.h"
+#include "asn1c_compat.h"
+
+/* Normally file permissions are (DEFFILEMODE & ~umask(2)) */
+#ifndef        DEFFILEMODE     /* Normally in <sys/stat.h> */
+
+#ifdef _WIN32
+#define        DEFFILEMODE     (S_IREAD|S_IWRITE)
+#define REASONABLE_FILE_MODE    DEFFILEMODE
+#else
+#define        DEFFILEMODE     (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+#define REASONABLE_FILE_MODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
+#endif
+#else   /* !DEFFILEMODE */
+#ifdef _WIN32
+#define REASONABLE_FILE_MODE    DEFFILEMODE
+#else
+#define REASONABLE_FILE_MODE    (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
+#endif
+#endif
+
+#ifdef _WIN32
+int mkstemp(char *template) {
+       char *tmpFN = _mktemp(template);
+       if(tmpFN)
+               return open(tmpFN, O_CREAT | O_EXCL | O_WRONLY, DEFFILEMODE);
+       else
+               return -1;
+}
+#undef HAVE_MKSTEMPS
+#endif
+
+#ifdef HAVE_MKSTEMPS
+#undef mkstemp
+#define        mkstemp(foo)    mkstemps(foo, 0)
+#endif
+
+FILE *
+asn1c_open_file(const char *destdir, const char *name, const char *ext,
+                char **opt_tmpname) {
+    char fname[PATH_MAX];
+       int created = 1;
+#ifndef        _WIN32
+       struct stat sb;
+#endif
+       FILE *fp;
+       int ret;
+       int fd;
+
+       /*
+        * Compute filenames.
+        */
+    ret = snprintf(fname, sizeof(fname), "%s%s%s%s", destdir ? destdir : "",
+                   name, ext, opt_tmpname ? ".XXXXXX" : "");
+    assert(ret > 0 && ret < (ssize_t)sizeof(fname));
+
+    if(opt_tmpname) {
+               /*
+                * Create temporary file.
+                */
+               fd = mkstemp(fname);
+#ifndef        _WIN32
+        if(fd != -1) {
+            /* fchmod() does not respect umask */
+            (void)fchmod(fd, REASONABLE_FILE_MODE);
+        }
+#endif
+       } else {
+               /*
+                * Create specified file, or open the old one.
+                */
+               fd = open(fname, O_CREAT | O_EXCL | O_WRONLY, DEFFILEMODE);
+               if(fd == -1 && errno == EEXIST) {
+                       fd = open(fname, O_WRONLY, DEFFILEMODE);
+                       created = 0;
+               }
+       }
+       if(fd == -1) {
+        struct stat st;
+        if(destdir && stat(destdir, &st) == -1) {
+            fprintf(stderr, "%s: No such directory\n", destdir);
+            return NULL;
+        } else {
+            perror(fname);
+            return NULL;
+        }
+       }
+
+#ifndef        _WIN32
+       /*
+        * Check sanity.
+        */
+       if(fstat(fd, &sb) || !S_ISREG(sb.st_mode)) {
+               fprintf(stderr, "%s: Not a regular file\n", fname);
+               if(created) unlink(fname);
+               close(fd);
+               return NULL;
+       }
+
+       if(ftruncate(fd, 0) == -1) {
+               fprintf(stderr, "%s: ftruncate failed: %s\n",
+                        fname, strerror(errno));
+               if(created) unlink(fname);
+        return NULL;
+    }
+#else
+       _chsize(fd, 0);
+#endif /* _WIN32 */
+
+       /*
+        * Convert file descriptor into file pointer.
+        */
+       fp = fdopen(fd, "w");
+       if(fp == NULL) {
+               if(created) unlink(fname);
+               close(fd);
+               return NULL;
+       }
+
+       /* Return the temporary file name */
+       if(opt_tmpname) {
+               *opt_tmpname = strdup(fname);
+               if(*opt_tmpname) {
+                       /* Successfull */
+               } else {
+                       if(created) unlink(fname);
+                       fclose(fp);
+                       return NULL;
+               }
+       }
+
+       return fp;
+}
+
+const char *
+a1c_basename(const char *path, const char *destdir) {
+       static char strbuf[PATH_MAX];
+       const char *pend;
+       const char *name;
+       char *sbuf = strbuf;
+
+       if(destdir) {
+               strncpy(strbuf, destdir, PATH_MAX - 1);
+               strbuf[PATH_MAX - 1] = '\0';
+               sbuf = strbuf + strlen(strbuf);
+       }
+       pend = path + strlen(path);
+       if(pend == path) {
+               strcpy(sbuf, ".");
+               return strbuf;
+       }
+
+       /* Skip tailing slashes */
+       for(pend--; pend > path && *pend == '/'; pend--);
+
+       if(pend == path && *path == '/') {
+               strcpy(sbuf, "/");
+               return strbuf;
+       }
+
+       for(name = pend; name > path && name[-1] != '/'; name--);
+
+       if((pend - name) >= (int)sizeof(strbuf) - 1) {
+               errno = ENAMETOOLONG;
+               return 0;
+       }
+
+       memcpy(sbuf, name, pend - name + 1);
+       sbuf[pend - name + 1] = '\0';
+
+       return strbuf;
+}
+
+
+const char *
+a1c_dirname(const char *path) {
+       static char strbuf[PATH_MAX];
+       const char *pend;
+       const char *last = 0;
+       int in_slash = 0;
+
+       /* One-pass determination of the last char of the pathname */
+       for(pend = path; ; pend++) {
+               switch(*pend) {
+               case '\0': break;
+               case '/':
+                       if(!in_slash) {
+                               last = pend;
+                               in_slash = 1;
+                       }
+                       continue;
+               default:
+                       if(in_slash) in_slash = 0;
+                       continue;
+               }
+               break;
+       }
+
+       if(last <= path) {
+               strcpy(strbuf, *path == '/' ? "/" : ".");
+               return strbuf;
+       }
+
+       if(!last) {
+               strcpy(strbuf, "/");
+               return strbuf;
+       }
+
+       if((last - path) >= (int)sizeof(strbuf)) {
+               errno = ENAMETOOLONG;
+               return 0;
+       }
+
+       memcpy(strbuf, path, last - path);
+       strbuf[last - path] = '\0';
+
+       return strbuf;
+}
+
diff --git a/libasn1compiler/asn1c_compat.h b/libasn1compiler/asn1c_compat.h
new file mode 100644 (file)
index 0000000..0248567
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef        ASN1C_COMPAT_H
+#define        ASN1C_COMPAT_H
+
+/*
+ * Open the arbitrary file by its base name and extension.
+ * If opt_tmpname is given, a temporary file will be created and
+ * its name returned in (*opt_tmpname).
+ * The (*opt_tmpname) should then be subsequently freed by free(3).
+ */
+FILE *asn1c_open_file(const char *destdir, const char *base_part, const char *extension,
+       char **opt_tmpname);
+
+/*
+ * Obtain base name and directory name of a path.
+ * Some systems have them in <libgen.h> as dirname(3) and basename(3).
+ */
+const char *a1c_basename(const char *path, const char* destdir);
+const char *a1c_dirname(const char *path);
+
+#endif /* ASN1C_COMPAT_H */
diff --git a/libasn1compiler/asn1c_constraint.c b/libasn1compiler/asn1c_constraint.c
new file mode 100644 (file)
index 0000000..0242321
--- /dev/null
@@ -0,0 +1,765 @@
+#include "asn1c_internal.h"
+#include "asn1c_constraint.h"
+#include "asn1c_misc.h"
+#include "asn1c_out.h"
+#include "asn1c_naming.h"
+
+#include <asn1fix_crange.h>    /* constraint groker from libasn1fix */
+#include <asn1fix_export.h>    /* other exportables from libasn1fix */
+
+static int asn1c_emit_constraint_tables(arg_t *arg, int got_size);
+static int emit_alphabet_check_loop(arg_t *arg, asn1cnst_range_t *range);
+static int emit_value_determination_code(arg_t *arg, asn1p_expr_type_e etype, asn1cnst_range_t *r_value);
+static int emit_size_determination_code(arg_t *arg, asn1p_expr_type_e etype);
+static asn1p_expr_type_e _find_terminal_type(arg_t *arg);
+static abuf *emit_range_comparison_code(asn1cnst_range_t *range,
+                                          const char *varname,
+                                          asn1c_integer_t natural_start,
+                                          asn1c_integer_t natural_stop);
+static int native_long_sign(arg_t *arg, asn1cnst_range_t *r);  /* -1, 0, 1 */
+
+static int
+ulong_optimization(arg_t *arg, asn1p_expr_type_e etype, asn1cnst_range_t *r_size,
+                                               asn1cnst_range_t *r_value)
+{
+       return (!r_size && r_value
+               && (etype == ASN_BASIC_INTEGER
+               || etype == ASN_BASIC_ENUMERATED)
+               && native_long_sign(arg, r_value) == 0);
+}
+
+int
+asn1c_emit_constraint_checking_code(arg_t *arg) {
+       asn1cnst_range_t *r_size;
+       asn1cnst_range_t *r_value;
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_type_e etype;
+       asn1p_constraint_t *ct;
+       int alphabet_table_compiled;
+       int produce_st = 0;
+       int ulong_optimize = 0;
+       int value_unsigned = 0;
+       int ret = 0;
+
+       ct = expr->combined_constraints;
+       if(ct == NULL)
+               return 1;       /* No additional constraints defined */
+
+       etype = _find_terminal_type(arg);
+
+       r_value=asn1constraint_compute_constraint_range(expr->Identifier, etype, ct, ACT_EL_RANGE,0,0,0);
+       r_size =asn1constraint_compute_constraint_range(expr->Identifier, etype, ct, ACT_CT_SIZE, 0,0,0);
+       if(r_value) {
+               if(r_value->incompatible
+               || r_value->empty_constraint
+               || (r_value->left.type == ARE_MIN
+                       && r_value->right.type == ARE_MAX)
+               || (etype == ASN_BASIC_BOOLEAN
+                       && r_value->left.value == 0
+                       && r_value->right.value == 1)
+               ) {
+                       asn1constraint_range_free(r_value);
+                       r_value = 0;
+               }
+       }
+       if(r_size) {
+               if(r_size->incompatible
+               || r_size->empty_constraint
+               || (r_size->left.value == 0     /* or .type == MIN */
+                       && r_size->right.type == ARE_MAX)
+               ) {
+                       asn1constraint_range_free(r_size);
+                       r_size = 0;
+               }
+       }
+
+       /*
+        * Do we really need an "*st = sptr" pointer?
+        */
+       switch(etype) {
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_ENUMERATED:
+               if(asn1c_type_fits_long(arg, arg->expr) == FL_NOTFIT)
+                       produce_st = 1;
+               break;
+       case ASN_BASIC_REAL:
+        if((arg->flags & A1C_USE_WIDE_TYPES)
+           && asn1c_REAL_fits(arg, arg->expr) == RL_NOTFIT)
+            produce_st = 1;
+               break;
+       case ASN_BASIC_BIT_STRING:
+       case ASN_BASIC_OCTET_STRING:
+               produce_st = 1;
+               break;
+       default:
+               if(etype & ASN_STRING_MASK)
+                       produce_st = 1;
+               break;
+       }
+       if(produce_st) {
+               const char *tname = asn1c_type_name(arg, arg->expr, TNF_SAFE);
+               OUT("const %s_t *st = (const %s_t *)sptr;\n", tname, tname);
+       }
+
+       if(r_size || r_value) {
+               if(r_size) {
+                       OUT("size_t size;\n");
+               }
+               if(r_value)
+                       switch(etype) {
+                       case ASN_BASIC_INTEGER:
+                       case ASN_BASIC_ENUMERATED:
+                               if(native_long_sign(arg, r_value) >= 0) {
+                                       ulong_optimize = ulong_optimization(arg, etype, r_size, r_value);
+                                       if(!ulong_optimize) {
+                                               value_unsigned = 1;
+                                               OUT("unsigned long value;\n");
+                                       }
+                               } else {
+                                       OUT("long value;\n");
+                               }
+                               break;
+                       case ASN_BASIC_REAL:
+                               OUT("%s value;\n", c_name(arg).type.constrained_c_name);
+                               break;
+                       case ASN_BASIC_BOOLEAN:
+                               OUT("BOOLEAN_t value;\n");
+                               break;
+                       default:
+                               break;
+               }
+       }
+
+       OUT("\n");
+
+       /*
+        * Protection against null input.
+        */
+       OUT("if(!sptr) {\n");
+               INDENT(+1);
+               OUT("ASN__CTFAIL(app_key, td, sptr,\n");
+               OUT("\t\"%%s: value not given (%%s:%%d)\",\n");
+               OUT("\ttd->name, __FILE__, __LINE__);\n");
+               OUT("return -1;\n");
+               INDENT(-1);
+       OUT("}\n");
+       OUT("\n");
+
+       if((r_value) && (!ulong_optimize))
+               emit_value_determination_code(arg, etype, r_value);
+       if(r_size)
+               emit_size_determination_code(arg, etype);
+
+       INDENT(-1);
+       REDIR(OT_CTABLES);
+       /* Emit FROM() tables */
+       alphabet_table_compiled =
+               (asn1c_emit_constraint_tables(arg, r_size?1:0) == 1);
+       REDIR(OT_CODE);
+       INDENT(+1);
+
+       /*
+        * Optimization for unsigned longs.
+        */
+       if(ulong_optimize) {
+               OUT("\n");
+               OUT("/* Constraint check succeeded */\n");
+               OUT("return 0;\n");
+               goto end;
+       }
+
+       /*
+        * Here is an if() {} else {} consrtaint checking code.
+        */
+       int got_something = 0;
+    int value_unused = 0;
+       OUT("\n");
+       OUT("if(");
+       INDENT(+1);
+               if(r_size) {
+            abuf *ab = emit_range_comparison_code(r_size, "size", 0, -1);
+            if(ab->length)  {
+                OUT("(%s)", ab->buffer);
+                got_something++;
+            }
+            abuf_free(ab);
+               }
+               if(r_value) {
+                       if(got_something) { OUT("\n"); OUT(" && "); }
+            abuf *ab;
+            if(etype == ASN_BASIC_BOOLEAN)
+                ab = emit_range_comparison_code(r_value, "value", 0, 1);
+            else
+                ab = emit_range_comparison_code(r_value, "value",
+                                                value_unsigned ? 0 : -1, -1);
+            if(ab->length)  {
+                OUT("(%s)", ab->buffer);
+                got_something++;
+            } else {
+                value_unused = 1;
+            }
+            abuf_free(ab);
+               }
+               if(alphabet_table_compiled) {
+                       if(got_something) { OUT("\n"); OUT(" && "); }
+                       OUT("!check_permitted_alphabet_%d(%s)",
+                               arg->expr->_type_unique_index,
+                               produce_st ? "st" : "sptr");
+            got_something++;
+        }
+               if(!got_something) {
+                       OUT("1 /* No applicable constraints whatsoever */");
+                       OUT(") {\n");
+                       INDENT(-1);
+                       if(produce_st) {
+                               INDENTED(OUT("(void)st; /* Unused variable */\n"));
+                       }
+                       if(value_unused) {
+                               INDENTED(OUT("(void)value; /* Unused variable */\n"));
+                       }
+                       INDENTED(OUT("/* Nothing is here. See below */\n"));
+                       OUT("}\n");
+                       OUT("\n");
+                       ret = 1;
+                       goto end;
+               }
+       INDENT(-1);
+       OUT(") {\n");
+               INDENT(+1);
+               switch(etype) {
+               case ASN_CONSTR_SEQUENCE_OF:
+               case ASN_CONSTR_SET_OF:
+                       OUT("/* Perform validation of the inner elements */\n");
+                       OUT("return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);\n");
+                       break;
+               default:
+                       OUT("/* Constraint check succeeded */\n");
+                       OUT("return 0;\n");
+               }
+               INDENT(-1);
+       OUT("} else {\n");
+               INDENT(+1);
+                       OUT("ASN__CTFAIL(app_key, td, sptr,\n");
+                       OUT("\t\"%%s: constraint failed (%%s:%%d)\",\n");
+                       OUT("\ttd->name, __FILE__, __LINE__);\n");
+                       OUT("return -1;\n");
+               INDENT(-1);
+       OUT("}\n");
+
+end:
+       if (r_value) asn1constraint_range_free(r_value);
+       if (r_size) asn1constraint_range_free(r_size);
+
+       return ret;
+}
+
+static int
+asn1c_emit_constraint_tables(arg_t *arg, int got_size) {
+       asn1c_integer_t range_start;
+       asn1c_integer_t range_stop;
+       asn1p_expr_type_e etype;
+       asn1cnst_range_t *range;
+       asn1p_constraint_t *ct;
+       int utf8_full_alphabet_check = 0;
+       int max_table_size = 256;
+       int table[256];
+       int use_table;
+
+       ct = arg->expr->combined_constraints;
+       if(!ct) return 0;
+
+       etype = _find_terminal_type(arg);
+
+       range = asn1constraint_compute_constraint_range(arg->expr->Identifier, etype, ct, ACT_CT_FROM, 0,0,0);
+       if(!range) return 0;
+
+       if(range->incompatible
+       || range->empty_constraint) {
+               asn1constraint_range_free(range);
+               return 0;
+       }
+
+       if(range->left.type == ARE_MIN
+       && range->right.type == ARE_MAX) {
+               /*
+                * The permitted alphabet constraint checker code guarantees
+                * that either both bounds (left/right) are present, or
+                * they're absent simultaneously. Thus, this assertion
+                * legitimately holds true.
+                */
+               assert(range->el_count == 0);
+               /* The full range is specified. Ignore it. */
+               asn1constraint_range_free(range);
+               return 0;
+       }
+
+       range_start = range->left.value;
+       range_stop = range->right.value;
+       assert(range->left.type == ARE_VALUE);
+       assert(range->right.type == ARE_VALUE);
+       assert(range_start <= range_stop);
+
+       range_start = 0;        /* Force old behavior */
+
+       /*
+        * Check if we need a test table to check the alphabet.
+        */
+       use_table = 1;
+       if(range->el_count == 0) {
+               /*
+                * It's better to have a short if() check
+                * than waste 1k of table space
+                */
+               use_table = 0;
+       }
+       if((range_stop - range_start) > 255)
+               use_table = 0;
+       if(etype == ASN_STRING_UTF8String) {
+               if(range_stop >= 0x80)
+                       use_table = 0;
+               else
+                       max_table_size = 128;
+       }
+
+       if(use_table) {
+               int cardinal = 0;
+               int i, n = 0;
+               int untl;
+               memset(table, 0, sizeof(table));
+               for(i = -1; i < range->el_count; i++) {
+                       asn1cnst_range_t *r;
+                       asn1c_integer_t v;
+                       if(i == -1) {
+                               if(range->el_count) continue;
+                               r = range;
+                       } else {
+                               r = range->elements[i];
+                       }
+                       for(v = r->left.value; v <= r->right.value; v++) {
+                               assert((v - range_start) >= 0);
+                               assert((v - range_start) < max_table_size);
+                               table[v - range_start] = ++n;
+                       }
+               }
+
+               untl = (range_stop - range_start) + 1;
+               untl += (untl % 16)?16 - (untl % 16):0;
+               OUT("static const int permitted_alphabet_table_%d[%d] = {\n",
+                       arg->expr->_type_unique_index, max_table_size);
+               for(n = 0; n < untl; n++) {
+                       cardinal += table[n] ? 1 : 0;
+                       OUT("%2d,", table[n]);
+                       if(!((n+1) % 16)) {
+                               int c;
+                               if(!n || (n-15) + range_start >= 0x80) {
+                                       OUT("\n");
+                                       continue;
+                               }
+                               OUT("\t/* ");
+                               for(c = n - 15; c <= n; c++) {
+                                       if(table[c]) {
+                                               int a = c + range_start;
+                                               if(a > 0x20 && a < 0x80)
+                                                       OUT("%c", a);
+                                               else
+                                                       OUT(".");
+                                       } else {
+                                               OUT(" ");
+                                       }
+                               }
+                               OUT(" */");
+                               OUT("\n");
+                       }
+               }
+               OUT("};\n");
+
+               if((arg->flags & A1C_GEN_PER)
+               && (etype & ASN_STRING_KM_MASK)) {
+                   int c;
+                   OUT("static const int permitted_alphabet_code2value_%d[%d] = {\n",
+                       arg->expr->_type_unique_index, cardinal);
+                   for(n = c = 0; c < max_table_size; c++) {
+                       if(table[c]) {
+                               OUT("%d,", c);
+                               if(!((++n) % 16)) OUT("\n");
+                       }
+                   }
+                   OUT("};\n");
+                   OUT("\n");
+                   DEBUG("code2value map gen for %s", arg->expr->Identifier);
+                   arg->expr->_mark |= TM_PERFROMCT;
+               }
+
+               OUT("\n");
+       } else if(etype == ASN_STRING_UTF8String) {
+               /*
+                * UTF8String type is a special case in many respects.
+                */
+               if(got_size) {
+                       /*
+                        * Size has been already determined.
+                        * The UTF8String length checker also checks
+                        * for the syntax validity, so we don't have
+                        * to repeat this process twice.
+                        */
+                       asn1constraint_range_free(range);
+                       return 0;
+               } else {
+                       utf8_full_alphabet_check = 1;
+               }
+       } else {
+               /*
+                * This permitted alphabet check will be
+                * expressed using conditional statements
+                * instead of table lookups. Table would be
+                * to large or otherwise inappropriate (too sparse?).
+                */
+       }
+
+       OUT("static int check_permitted_alphabet_%d(const void *sptr) {\n",
+                       arg->expr->_type_unique_index);
+       INDENT(+1);
+       if(utf8_full_alphabet_check) {
+               OUT("if(UTF8String_length((const UTF8String_t *)sptr) < 0)\n");
+               OUT("\treturn -1; /* Alphabet (sic!) test failed. */\n");
+               OUT("\n");
+       } else {
+               if(use_table) {
+                       OUT("const int *table = permitted_alphabet_table_%d;\n",
+                               arg->expr->_type_unique_index);
+                       emit_alphabet_check_loop(arg, 0);
+               } else {
+                       emit_alphabet_check_loop(arg, range);
+               }
+       }
+       OUT("return 0;\n");
+       INDENT(-1);
+       OUT("}\n");
+       OUT("\n");
+
+       asn1constraint_range_free(range);
+
+       return 1;
+}
+
+static int
+emit_alphabet_check_loop(arg_t *arg, asn1cnst_range_t *range) {
+       asn1c_integer_t natural_stop;
+       asn1p_expr_t *terminal;
+       const char *tname;
+
+       terminal = asn1f_find_terminal_type_ex(arg->asn, arg->ns, arg->expr);
+       if(terminal) {
+               OUT("/* The underlying type is %s */\n",
+                       ASN_EXPR_TYPE2STR(terminal->expr_type));
+       } else {
+               terminal = arg->expr;
+       }
+       tname = asn1c_type_name(arg, terminal, TNF_SAFE);
+       OUT("const %s_t *st = (const %s_t *)sptr;\n", tname, tname);
+
+       switch(terminal->expr_type) {
+       case ASN_STRING_UTF8String:
+               OUT("const uint8_t *ch = st->buf;\n");
+               OUT("const uint8_t *end = ch + st->size;\n");
+               OUT("\n");
+               OUT("for(; ch < end; ch++) {\n");
+                       INDENT(+1);
+                       OUT("uint8_t cv = *ch;\n");
+                       if(!range) OUT("if(cv >= 0x80) return -1;\n");
+               natural_stop = 0xffffffffUL;
+               break;
+       case ASN_STRING_UniversalString:
+               OUT("const uint8_t *ch = st->buf;\n");
+               OUT("const uint8_t *end = ch + st->size;\n");
+               OUT("\n");
+               OUT("if(st->size %% 4) return -1; /* (size%%4)! */\n");
+               OUT("for(; ch < end; ch += 4) {\n");
+                       INDENT(+1);
+                       OUT("uint32_t cv = (ch[0] << 24)\n");
+                       OUT("\t\t| (ch[1] << 16)\n");
+                       OUT("\t\t| (ch[2] << 8)\n");
+                       OUT("\t\t|  ch[3];\n");
+                       if(!range) OUT("if(cv > 255) return -1;\n");
+               natural_stop = 0xffffffffUL;
+               break;
+       case ASN_STRING_BMPString:
+               OUT("const uint8_t *ch = st->buf;\n");
+               OUT("const uint8_t *end = ch + st->size;\n");
+               OUT("\n");
+               OUT("if(st->size %% 2) return -1; /* (size%%2)! */\n");
+               OUT("for(; ch < end; ch += 2) {\n");
+                       INDENT(+1);
+                       OUT("uint16_t cv = (ch[0] << 8)\n");
+                       OUT("\t\t| ch[1];\n");
+                       if(!range) OUT("if(cv > 255) return -1;\n");
+               natural_stop = 0xffff;
+               break;
+       case ASN_BASIC_OCTET_STRING:
+       default:
+               OUT("const uint8_t *ch = st->buf;\n");
+               OUT("const uint8_t *end = ch + st->size;\n");
+               OUT("\n");
+               OUT("for(; ch < end; ch++) {\n");
+                       INDENT(+1);
+                       OUT("uint8_t cv = *ch;\n");
+               natural_stop = 0xff;
+               break;
+       }
+
+       if(range) {
+        abuf *ab = emit_range_comparison_code(range, "cv", 0, natural_stop);
+        if(ab->length) {
+            OUT("if(!(%s)) return -1;\n", ab->buffer);
+        } else {
+            OUT("(void)cv; /* Unused variable */\n");
+        }
+       } else {
+               OUT("if(!table[cv]) return -1;\n");
+       }
+
+       INDENT(-1);
+       OUT("}\n");
+
+       return 0;
+}
+
+static void
+abuf_oint(abuf *ab, asn1c_integer_t v) {
+    if(v == (-2147483647L - 1)) {
+        abuf_printf(ab, "(-2147483647L - 1)");
+    } else {
+        abuf_printf(ab, "%s", asn1p_itoa(v));
+    }
+}
+
+static abuf *
+emit_range_comparison_code(asn1cnst_range_t *range, const char *varname,
+                           asn1c_integer_t natural_start,
+                           asn1c_integer_t natural_stop) {
+    abuf *ab = abuf_new();
+
+    if(range->el_count == 0) {
+        int ignore_left =
+            (range->left.type == ARE_MIN)
+            || (natural_start != -1 && range->left.value <= natural_start);
+        int ignore_right =
+            (range->right.type == ARE_MAX)
+            || (natural_stop != -1 && range->right.value >= natural_stop);
+
+        if(ignore_left && ignore_right) {
+            /* Empty constraint comparison */
+        } else if(ignore_left) {
+            abuf_printf(ab, "%s <= ", varname);
+            abuf_oint(ab, range->right.value);
+        } else if(ignore_right) {
+            abuf_printf(ab, "%s >= ", varname);
+            abuf_oint(ab, range->left.value);
+        } else if(range->left.value == range->right.value) {
+            abuf_printf(ab, "%s == ", varname);
+            abuf_oint(ab, range->right.value);
+        } else {
+            abuf_printf(ab, "%s >= ", varname);
+            abuf_oint(ab, range->left.value);
+            abuf_printf(ab, " && ");
+            abuf_printf(ab, "%s <= ", varname);
+            abuf_oint(ab, range->right.value);
+        }
+    } else {
+        for(int i = 0; i < range->el_count; i++) {
+            asn1cnst_range_t *r = range->elements[i];
+
+            abuf *rec = emit_range_comparison_code(r, varname, natural_start,
+                                                   natural_stop);
+            if(rec->length) {
+                if(ab->length) {
+                    abuf_str(ab, " || ");
+                }
+                abuf_str(ab, "(");
+                abuf_buf(ab, rec);
+                abuf_str(ab, ")");
+            } else {
+                /* Ignore this part */
+            }
+            abuf_free(rec);
+        }
+    }
+
+    return ab;
+}
+
+static int
+emit_size_determination_code(arg_t *arg, asn1p_expr_type_e etype) {
+
+       switch(etype) {
+       case ASN_BASIC_BIT_STRING:
+               OUT("if(st->size > 0) {\n");
+               OUT("\t/* Size in bits */\n");
+               OUT("\tsize = 8 * st->size - (st->bits_unused & 0x07);\n");
+               OUT("} else {\n");
+               OUT("\tsize = 0;\n");
+               OUT("}\n");
+               break;
+       case ASN_STRING_UniversalString:
+               OUT("size = st->size >> 2;\t/* 4 byte per character */\n");
+               break;
+       case ASN_STRING_BMPString:
+               OUT("size = st->size >> 1;\t/* 2 byte per character */\n");
+               break;
+       case ASN_STRING_UTF8String:
+               OUT("size = UTF8String_length(st);\n");
+               OUT("if((ssize_t)size < 0) {\n");
+               OUT("\tASN__CTFAIL(app_key, td, sptr,\n");
+               OUT("\t\t\"%%s: UTF-8: broken encoding (%%s:%%d)\",\n");
+               OUT("\t\ttd->name, __FILE__, __LINE__);\n");
+               OUT("\treturn -1;\n");
+               OUT("}\n");
+               break;
+       case ASN_CONSTR_SET_OF:
+       case ASN_CONSTR_SEQUENCE_OF:
+               OUT("/* Determine the number of elements */\n");
+               OUT("size = _A_C%s_FROM_VOID(sptr)->count;\n",
+                       etype==ASN_CONSTR_SET_OF?"SET":"SEQUENCE");
+               break;
+       case ASN_BASIC_OCTET_STRING:
+               OUT("size = st->size;\n");
+               break;
+       default:
+               if(etype & ASN_STRING_MASK) {
+                       OUT("size = st->size;\n");
+                       break;
+               } else {
+                       const char *type_name = ASN_EXPR_TYPE2STR(etype);
+                       if(!type_name) type_name = arg->expr->Identifier;
+                       WARNING("SizeConstraint is not defined for %s",
+                               type_name);
+                       OUT_NOINDENT("#warning SizeConstraint "
+                               "is not defined for %s!\n", type_name);
+                       OUT("size = st->size;\n");
+               }
+               return -1;
+       }
+
+       return 0;
+}
+
+static int
+emit_value_determination_code(arg_t *arg, asn1p_expr_type_e etype, asn1cnst_range_t *r_value) {
+
+       switch(etype) {
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_ENUMERATED:
+               if(asn1c_type_fits_long(arg, arg->expr) == FL_FITS_UNSIGN) {
+                       OUT("value = *(const unsigned long *)sptr;\n");
+               } else if(asn1c_type_fits_long(arg, arg->expr) != FL_NOTFIT) {
+                       OUT("value = *(const long *)sptr;\n");
+               } else {
+                       /*
+                        * In some cases we can explore our knowledge of
+                        * underlying INTEGER_t->buf format.
+                        */
+                       if(r_value->el_count == 0
+                       && (
+                               /* Speed-up common case: (0..MAX) */
+                               (r_value->left.type == ARE_VALUE
+                               && r_value->left.value == 0
+                               && r_value->right.type == ARE_MAX)
+                           ||
+                               /* Speed-up common case: (MIN..-1) */
+                               (r_value->left.type == ARE_MIN
+                               && r_value->right.type == ARE_VALUE
+                               && r_value->right.value == -1)
+                       )) {
+                               OUT("/* Check if the sign bit is present */\n");
+                               OUT("value = st->buf ? ((st->buf[0] & 0x80) ? -1 : 1) : 0;\n");
+                               break;
+                       }
+
+                       if(native_long_sign(arg, r_value) >= 0) {
+                               /* Special case for treating unsigned longs */
+                               OUT("if(asn_INTEGER2ulong(st, &value)) {\n");
+                               INDENT(+1);
+                               OUT("ASN__CTFAIL(app_key, td, sptr,\n");
+                               OUT("\t\"%%s: value too large (%%s:%%d)\",\n");
+                               OUT("\ttd->name, __FILE__, __LINE__);\n");
+                               OUT("return -1;\n");
+                               INDENT(-1);
+                               OUT("}\n");
+                       } else {
+                               OUT("if(asn_INTEGER2long(st, &value)) {\n");
+                               INDENT(+1);
+                               OUT("ASN__CTFAIL(app_key, td, sptr,\n");
+                               OUT("\t\"%%s: value too large (%%s:%%d)\",\n");
+                               OUT("\ttd->name, __FILE__, __LINE__);\n");
+                               OUT("return -1;\n");
+                               INDENT(-1);
+                               OUT("}\n");
+                       }
+               }
+               break;
+       case ASN_BASIC_REAL:
+               if(arg->flags & A1C_USE_WIDE_TYPES) {
+                       OUT("if(asn_REAL2double(st, &value)) {\n");
+                               INDENT(+1);
+                               OUT("ASN__CTFAIL(app_key, td, sptr,\n");
+                               OUT("\t\"%%s: value too large (%%s:%%d)\",\n");
+                               OUT("\ttd->name, __FILE__, __LINE__);\n");
+                               OUT("return -1;\n");
+                               INDENT(-1);
+                       OUT("}\n");
+               } else {
+                       OUT("value = *(const %s *)sptr;\n", c_name(arg).type.c_name);
+               }
+               break;
+       case ASN_BASIC_BOOLEAN:
+               OUT("value = (*(const long *)sptr) ? 1 : 0;\n");
+               break;
+       default:
+               WARNING("%s:%d: Value cannot be determined "
+                       "for constraint check for %s",
+                       arg->expr->module->source_file_name,
+                       arg->expr->_lineno,
+                       arg->expr->Identifier
+               );
+               OUT_NOINDENT(
+                       "#error %s:%d: Value of %s cannot be determined\n",
+                       arg->expr->module->source_file_name,
+                       arg->expr->_lineno,
+                       arg->expr->Identifier
+               );
+               break;
+       }
+
+       return 0;
+}
+
+static asn1p_expr_type_e
+_find_terminal_type(arg_t *arg) {
+       asn1p_expr_t *expr;
+       expr = asn1f_find_terminal_type_ex(arg->asn, arg->ns, arg->expr);
+       if(expr) return expr->expr_type;
+       return A1TC_INVALID;
+}
+
+static int
+native_long_sign(arg_t *arg, asn1cnst_range_t *r) {
+    if(!(arg->flags & A1C_USE_WIDE_TYPES) && r->left.type == ARE_VALUE
+       && r->left.value >= 0 && r->left.value <= 2147483647
+        && r->right.type == ARE_MAX) {
+        return 1;
+    }
+       if(r->left.type == ARE_VALUE
+       && r->left.value >= 0
+       && r->right.type == ARE_VALUE
+       && r->right.value > 2147483647
+       && r->right.value <= (asn1c_integer_t)(4294967295UL)) {
+               if(r->el_count == 0
+               && r->left.value == 0
+               && r->right.value == 4294967295UL)
+                       return 0;
+               else
+                       return 1;
+       } else {
+               return -1;
+       }
+}
diff --git a/libasn1compiler/asn1c_constraint.h b/libasn1compiler/asn1c_constraint.h
new file mode 100644 (file)
index 0000000..66a7970
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1C_CONSTRAINT_H
+#define        ASN1C_CONSTRAINT_H
+
+int asn1c_emit_constraint_checking_code(arg_t *arg);
+
+#endif /* ASN1C_CONSTRAINT_H */
diff --git a/libasn1compiler/asn1c_fdeps.c b/libasn1compiler/asn1c_fdeps.c
new file mode 100644 (file)
index 0000000..60a52cb
--- /dev/null
@@ -0,0 +1,251 @@
+#include "asn1c_internal.h"
+#include "asn1c_fdeps.h"
+
+static asn1c_dep_filename *asn1c_dep_filename_new(const char *filename);
+static void asn1c_dep_add(asn1c_dep_chain *dlist, const char *filename,
+                         int lineno, int column);
+static asn1c_dep_chain *asn1c_dep_chain_new(void);
+
+static asn1c_dep_chain *
+asn1c_dep_chains_add_new(asn1c_dep_chainset *deps,
+                         enum asn1c_dep_section section, int active) {
+    asn1c_dep_chain *dc = asn1c_dep_chain_new();
+    asn1c_tagged_dep_chain *tc = calloc(1, sizeof(*tc));
+    tc->chain = dc;
+    tc->section = section;
+    tc->activated.active = active;
+
+    deps->chains = realloc(deps->chains,
+                           sizeof(deps->chains[0]) * (deps->chains_count + 1));
+    assert(deps->chains);
+    deps->chains[deps->chains_count] = tc;
+    deps->chains_count++;
+
+    return dc;
+}
+
+void
+asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data,
+                          const char *by) {
+    char fname_scratch[PATH_MAX];
+
+    if(!deps || !data || !*data) {
+        return;
+    }
+
+    assert(deps->chains_count);
+
+    const char *fname = data;
+    if(*data == '#') {
+        const char *start = data;
+        const char *end = 0;
+
+        start = strchr(data, '<');
+        if(start) {
+            start++;
+            end = strchr(start, '>');
+        } else if((start = strchr(data, '\"'))) {
+            start++;
+            end = strchr(start, '\"');
+        }
+        if(end) {
+            assert((end-start) + 1 < (ssize_t)sizeof(fname_scratch));
+            memcpy(fname_scratch, start, end - start);
+            fname_scratch[end-start] = '\0';
+            fname = fname_scratch;
+        } else {
+            return;
+        }
+    }
+
+    for(size_t i = 0; i < deps->chains_count; i++) {
+        asn1c_tagged_dep_chain *ch = deps->chains[i];
+        if(!ch->activated.active && ch->chain->deps_count > 0
+           && strcmp(ch->chain->deps[0]->filename, fname) == 0) {
+            ch->activated.by = strdup(by);
+            ch->activated.active = 1;
+
+            for(size_t j = 0; j < ch->chain->deps_count; j++) {
+                asn1c_activate_dependency(deps, ch->chain->deps[j]->filename,
+                                          by);
+            }
+        }
+    }
+}
+
+asn1c_dep_chainset *
+asn1c_read_file_dependencies(arg_t *arg, const char *datadir) {
+       char buf[4096];
+       asn1c_dep_chainset *deps;
+       FILE *f;
+    int lineno = 0;
+
+       if(!datadir || strlen(datadir) > sizeof(buf) / 2) {
+               errno = EINVAL;
+               return NULL;
+       } else {
+               sprintf(buf, "%s/file-dependencies", datadir);
+       }
+
+       f = fopen(buf, "r");
+       if(!f) return NULL;
+
+       deps = calloc(1, sizeof(*deps));
+       assert(deps);
+    enum asn1c_dep_section section = FDEP_COMMON_FILES;
+    int activate = 0;
+
+    while(fgets(buf, sizeof(buf), f)) {
+               char *p = strchr(buf, '#');
+               if(p) *p = '\0';        /* Remove comments */
+
+        lineno++;
+
+        asn1c_dep_chain *dc = asn1c_dep_chains_add_new(deps, section, activate);
+
+        for(p = strtok(buf, " \t\r\n"); p;
+                               p = strtok(NULL, " \t\r\n")) {
+
+                       /*
+                        * Special "prefix" section.
+                        */
+                       if(strchr(p, ':')) {
+                               if(strcmp(p, "COMMON-FILES:") == 0) {
+                                       section = FDEP_COMMON_FILES;
+                    activate = 1;
+                               } else if(strcmp(p, "CONVERTER:") == 0) {
+                    activate = 1;
+                                       section = FDEP_CONVERTER;
+                               } else if((arg->flags & A1C_GEN_OER)
+                                         && strcmp(p, "CODEC-OER:") == 0) {
+                    activate = 0;
+                                       section = FDEP_CODEC_OER;
+                               } else if((arg->flags & A1C_GEN_PER)
+                                         && strcmp(p, "CODEC-PER:") == 0) {
+                    activate = 0;
+                                       section = FDEP_CODEC_PER;
+                               } else {
+                                       section = FDEP_IGNORE;
+                    activate = 0;
+                }
+                break;
+                       }
+
+            asn1c_dep_add(dc, p, lineno, p - buf);
+        }
+       }
+
+       fclose(f);
+
+    /* A single filename by itself means that we should include that */
+    for(size_t i = 0; i < deps->chains_count; i++) {
+        asn1c_tagged_dep_chain *ch = deps->chains[i];
+        if(!ch->activated.active && ch->chain->deps_count == 1) {
+            asn1c_activate_dependency(deps, ch->chain->deps[0]->filename,
+                                      "implicit");
+        }
+    }
+
+       return deps;
+}
+
+static asn1c_dep_filename *
+asn1c_dep_filename_new(const char *filename) {
+    asn1c_dep_filename *d;
+
+    assert(filename);
+
+    d = calloc(1, sizeof(*d));
+    assert(d);
+    d->filename = strdup(filename);
+    assert(d->filename);
+
+       return d;
+}
+
+static asn1c_dep_chain *
+asn1c_dep_chain_new() {
+    return calloc(1, sizeof(asn1c_dep_chain));
+}
+
+static void
+asn1c_dep_add(asn1c_dep_chain *dlist, const char *filename, int lineno, int column) {
+    asn1c_dep_filename *df = asn1c_dep_filename_new(filename);
+    df->lineno = lineno;
+    df->column = column;
+
+    dlist->deps =
+        realloc(dlist->deps, (dlist->deps_count + 1) * sizeof(dlist->deps[0]));
+    assert(dlist->deps);
+    dlist->deps[dlist->deps_count] = df;
+    dlist->deps_count += 1;
+}
+
+static int
+asn1c_dep_has_filename(const asn1c_dep_chain *dlist, const char *filename) {
+    for(size_t i = 0; i < dlist->deps_count; i++) {
+        if(strcmp(dlist->deps[i]->filename, filename) == 0) {
+            return 1;
+        }
+    }
+    return 0;
+}
+
+asn1c_dep_chain *
+asn1c_deps_flatten(const asn1c_dep_chainset *deps,
+                   enum asn1c_dep_section include_section) {
+    asn1c_dep_chain *dlist;
+
+       if(!deps) {
+               errno = EINVAL;
+               return 0;
+       }
+
+       dlist = asn1c_dep_chain_new();
+
+       for(size_t i = 0; i < deps->chains_count; i++) {
+        asn1c_tagged_dep_chain *tc = deps->chains[i];
+        asn1c_dep_chain *dc = tc->chain;
+
+        if(!tc->activated.active) {
+            continue;
+        }
+        if((tc->section & include_section) == 0) {
+            continue;
+        }
+
+        for(size_t j = 0; j < dc->deps_count; j++) {
+            if(!asn1c_dep_has_filename(dlist, dc->deps[j]->filename))  {
+                asn1c_dep_add(dlist, dc->deps[j]->filename, dc->deps[j]->lineno,
+                              dc->deps[j]->column);
+            }
+        }
+    }
+
+       return dlist;
+}
+
+void
+asn1c_dep_chain_free(asn1c_dep_chain *dc) {
+    if(dc) {
+        for(size_t i = 0; i < dc->deps_count; i++) {
+            asn1c_dep_filename *df = dc->deps[i];
+            free(df->filename);
+            free(df);
+        }
+        free(dc->deps);
+    }
+}
+
+void
+asn1c_dep_chainset_free(asn1c_dep_chainset *deps) {
+       if(deps) {
+        for(size_t i = 0; i < deps->chains_count; i++) {
+            asn1c_dep_chain_free(deps->chains[i]->chain);
+            free(deps->chains[i]->activated.by);
+            free(deps->chains[i]);
+        }
+        free(deps->chains);
+        free(deps);
+    }
+}
diff --git a/libasn1compiler/asn1c_fdeps.h b/libasn1compiler/asn1c_fdeps.h
new file mode 100644 (file)
index 0000000..7b025ba
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef        ASN1C_FDEPS_H
+#define        ASN1C_FDEPS_H
+
+typedef struct {
+    char *filename;
+    int lineno;
+    int column;
+} asn1c_dep_filename;
+
+
+/*
+ * Format:
+ * <observed-name> [<dependent-name> ...]
+ */
+typedef struct {
+    asn1c_dep_filename **deps;
+    size_t deps_count;
+} asn1c_dep_chain;
+
+/*
+ * A single dependency chain, marked with the usage tag and activation tag.
+ */
+typedef struct {
+    enum asn1c_dep_section {
+        FDEP_IGNORE = 0,              /* Section is not used */
+        FDEP_DEFAULT = (1 << 1),      /* Default dependency list */
+        FDEP_REFERRED = (1 << 2),     /* Dynamic list of dependencies */
+        FDEP_CONVERTER = (1 << 3),    /* Name of the file with int main() */
+        FDEP_COMMON_FILES = (1 << 4), /* Section for mandatory dependencies */
+        FDEP_CODEC_OER = (1 << 5),    /* Use contents only if -gen-OER */
+        FDEP_CODEC_PER = (1 << 6),    /* Use contents only if -gen-PER */
+    } section;                        /* Some file refers to it */
+
+    /* Whether this chain is alive and has to be present in the output */
+    struct {
+        int active;
+        char *by;
+    } activated;
+
+    asn1c_dep_chain *chain;
+} asn1c_tagged_dep_chain;
+
+typedef struct {
+    asn1c_tagged_dep_chain **chains;
+    size_t chains_count;
+} asn1c_dep_chainset;
+
+asn1c_dep_chainset *asn1c_read_file_dependencies(arg_t *arg,
+                                                 const char *datadir);
+
+/* Data may be a filename or an "#include <>" string. */
+void asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data,
+                               const char *by);
+
+asn1c_dep_chain *asn1c_deps_flatten(const asn1c_dep_chainset *deps,
+                                    enum asn1c_dep_section);
+
+void asn1c_dep_chain_free(asn1c_dep_chain *);
+void asn1c_dep_chainset_free(asn1c_dep_chainset *);
+
+#endif /* ASN1C_FDEPS_H */
diff --git a/libasn1compiler/asn1c_internal.h b/libasn1compiler/asn1c_internal.h
new file mode 100644 (file)
index 0000000..7a07e35
--- /dev/null
@@ -0,0 +1,78 @@
+#ifndef        ASN1_COMPILER_INTERNAL_H
+#define        ASN1_COMPILER_INTERNAL_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>            /* for strlen(3) and memset(3) */
+#include <ctype.h>             /* for isalnum(3) */
+#include <sys/types.h>         /* for fstat(2) */
+#include <limits.h>            /* for PATH_MAX */
+#include <stdarg.h>
+#include <errno.h>
+#include <assert.h>
+
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>          /* for fstat(2) */
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>            /* for unlink(2) */
+#endif
+
+#ifndef PATH_MAX
+#define PATH_MAX    1024
+#endif
+
+#ifdef _WIN32
+#include <io.h>
+#include <malloc.h>
+#include <fcntl.h>
+#define        open    _open
+#define        close   _close
+#define        snprintf        _snprintf
+#define        vsnprintf       _vsnprintf
+#else
+#include <glob.h>              /* for glob(3) */
+#endif
+#include <fcntl.h>             /* for open(2) */
+
+#include "asn1compiler.h"
+#include "asn1_namespace.h"
+
+struct asn1c_ioc_table_and_objset_s;
+
+typedef struct arg_s {
+
+       enum asn1c_flags flags;
+
+       void (*logger_cb)(int _severity, const char *fmt, ...);
+
+       int (*default_cb)(struct arg_s *, const struct asn1c_ioc_table_and_objset_s *opt);
+
+       struct compiler_streams *target;
+
+    asn1p_t *asn;
+    asn1_namespace_t *ns;
+    asn1p_expr_t *expr;
+
+    int embed;
+} arg_t;
+
+/*
+ * Logging.
+ */
+#define        LOG(ll, fmt, args...)   do {                    \
+               arg->logger_cb(ll, fmt, ##args);        \
+       } while(0)
+#define        DEBUG(fmt, args...)     do {            \
+               if(arg->flags & A1C_DEBUG)      \
+                       LOG(-1, fmt, ##args);   \
+       } while(0)
+#define        WARNING(fmt, args...)   LOG(0, fmt, ##args);
+#define        FATAL(fmt, args...)     LOG(1, fmt, ##args);
+
+#endif /* ASN1_COMPILER_INTERNAL_H */
diff --git a/libasn1compiler/asn1c_ioc.c b/libasn1compiler/asn1c_ioc.c
new file mode 100644 (file)
index 0000000..005088d
--- /dev/null
@@ -0,0 +1,298 @@
+#include "asn1c_internal.h"
+#include "asn1c_ioc.h"
+#include "asn1c_out.h"
+#include "asn1c_misc.h"
+#include <asn1fix_export.h>
+#include <asn1print.h>
+
+#define MKID(expr) asn1c_make_identifier(AMI_USE_PREFIX, (expr), 0)
+
+/*
+ * Given the table constraint or component relation constraint
+ * ({ObjectSetName}{...}) returns "ObjectSetName" as a reference.
+ */
+const asn1p_ref_t *
+asn1c_get_information_object_set_reference_from_constraint(arg_t *arg,
+    const asn1p_constraint_t *ct) {
+
+    if(!ct) return NULL;
+    assert(ct->type == ACT_CA_CRC);
+    assert(ct->el_count >= 1);
+
+    DEBUG("Component Relation Constraint: %s", asn1p_constraint_string(ct));
+
+    assert(ct->elements[0]->type == ACT_EL_VALUE);
+
+    asn1p_value_t *val = ct->elements[0]->value;
+    if(val->type == ATV_VALUESET && val->value.constraint->type == ACT_EL_TYPE) {
+        asn1p_value_t *csub = val->value.constraint->containedSubtype;
+        if(!csub) {
+            /* Ignore */
+        } else if(csub->type == ATV_REFERENCED) {
+            return csub->value.reference;
+        } else if(csub->type == ATV_TYPE) {
+            if(csub->value.v_type->expr_type == A1TC_REFERENCE) {
+                assert(csub->value.v_type->reference);
+                return csub->value.v_type->reference;
+            }
+        }
+    }
+    if(val->type != ATV_REFERENCED) {
+        FATAL("Set reference: %s", asn1f_printable_value(val));
+        assert(val->type == ATV_REFERENCED);
+    }
+
+    return val->value.reference;
+}
+
+static asn1c_ioc_table_and_objset_t
+asn1c_get_ioc_table_from_objset(arg_t *arg, const asn1p_ref_t *objset_ref, asn1p_expr_t *objset) {
+    asn1c_ioc_table_and_objset_t ioc_tao = { 0, 0, 1 };
+
+    (void)objset_ref;
+
+    if(objset->ioc_table) {
+        ioc_tao.ioct = objset->ioc_table;
+        ioc_tao.objset = objset;
+        ioc_tao.fatal_error = 0;
+    } else {
+        FATAL("Information Object Set %s contains no objects at line %d",
+              objset->Identifier, objset->_lineno);
+    }
+
+    return ioc_tao;
+}
+
+asn1c_ioc_table_and_objset_t
+asn1c_get_ioc_table(arg_t *arg) {
+    asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *memb;
+    asn1p_expr_t *objset = 0;
+    const asn1p_ref_t *objset_ref = NULL;
+    asn1c_ioc_table_and_objset_t safe_ioc_tao = {0, 0, 0};
+    asn1c_ioc_table_and_objset_t failed_ioc_tao = { 0, 0, 1 };
+
+    TQ_FOR(memb, &(expr->members), next) {
+        const asn1p_constraint_t *cr_ct =
+            asn1p_get_component_relation_constraint(memb->constraints);
+        const asn1p_ref_t *tmpref =
+            asn1c_get_information_object_set_reference_from_constraint(arg,
+                                                                       cr_ct);
+        if(tmpref) {
+            if(objset_ref && asn1p_ref_compare(objset_ref, tmpref) != 0) {
+                FATAL(
+                    "Object set reference on line %d differs from object set "
+                    "reference on line %d",
+                    objset_ref->_lineno, tmpref->_lineno);
+                return failed_ioc_tao;
+            }
+            objset_ref = tmpref;
+        }
+
+    }
+
+    if(!objset_ref) {
+        return safe_ioc_tao;
+    }
+
+    objset = WITH_MODULE_NAMESPACE(
+        arg->expr->module, expr_ns,
+        asn1f_lookup_symbol_ex(arg->asn, expr_ns, arg->expr, objset_ref));
+    if(!objset) {
+        FATAL("Cannot found %s", asn1p_ref_string(objset_ref));
+        return failed_ioc_tao;
+    }
+
+    return asn1c_get_ioc_table_from_objset(arg, objset_ref, objset);
+}
+
+static int
+emit_ioc_value(arg_t *arg, struct asn1p_ioc_cell_s *cell) {
+
+    if(cell->value && cell->value->meta_type == AMT_VALUE) {
+        const char *prim_type = NULL;
+        int primitive_representation = 0;
+
+        asn1p_expr_t *cv_type =
+            asn1f_find_terminal_type_ex(arg->asn, arg->ns, cell->value);
+
+        switch(cv_type->expr_type) {
+        case ASN_BASIC_INTEGER:
+        case ASN_BASIC_ENUMERATED:
+            switch(asn1c_type_fits_long(arg, cell->value /* sic */)) {
+            case FL_NOTFIT:
+                GEN_INCLUDE_STD("INTEGER");
+                prim_type = "INTEGER_t";
+                break;
+            case FL_PRESUMED:
+            case FL_FITS_SIGNED:
+                primitive_representation = 1;
+                prim_type = "long";
+                break;
+            case FL_FITS_UNSIGN:
+                prim_type = "unsigned long";
+                primitive_representation = 1;
+                break;
+            }
+            break;
+        case ASN_BASIC_OBJECT_IDENTIFIER:
+            prim_type = "OBJECT_IDENTIFIER_t";
+            break;
+        case ASN_BASIC_RELATIVE_OID:
+            prim_type = "RELATIVE_OID_t";
+            break;
+        default: {
+            char *p = strdup(MKID(cell->value));
+            FATAL("Unsupported type %s for value %s",
+                  asn1c_type_name(arg, cell->value, TNF_UNMODIFIED), p);
+            free(p);
+            return -1;
+        }
+        }
+        OUT("static const %s asn_VAL_%d_%s = ", prim_type,
+            cell->value->_type_unique_index, MKID(cell->value));
+
+        asn1p_expr_t *expr_value = cell->value;
+        while(expr_value->value->type == ATV_REFERENCED) {
+            expr_value = WITH_MODULE_NAMESPACE(
+                expr_value->module, expr_ns,
+                asn1f_lookup_symbol_ex(arg->asn, expr_ns, expr_value,
+                                       expr_value->value->value.reference));
+            if(!expr_value) {
+                FATAL("Unrecognized value type for %s", MKID(cell->value));
+                return -1;
+            }
+        }
+
+        if(!primitive_representation) OUT("{ ");
+
+        switch(expr_value->value->type) {
+        case ATV_INTEGER:
+            if(primitive_representation) {
+                OUT("%s", asn1p_itoa(expr_value->value->value.v_integer));
+                break;
+            } else {
+                asn1c_integer_t v = expr_value->value->value.v_integer;
+                if(v >= 0) {
+                    if(v <= 127) {
+                        OUT("\"\\x%02x\", 1", (int)v);
+                        break;
+                    } else if(v <= 32767) {
+                        OUT("\"\\x%02x\\x%02x\", 2", (int)(v >> 8), (int)(v & 0xff));
+                        break;
+                    }
+                }
+                FATAL("Unsupported value %s range for type %s",
+                      asn1f_printable_value(expr_value->value),
+                      MKID(cell->value));
+                return -1;
+            }
+        case ATV_UNPARSED:
+            OUT("\"not supported\", 0 };\n");
+            FATAL("Inappropriate value %s for type %s",
+                  asn1f_printable_value(expr_value->value), MKID(cell->value));
+            return 0;   /* TEMPORARY FIXME FIXME */
+        default:
+            FATAL("Inappropriate value %s for type %s",
+                  asn1f_printable_value(expr_value->value), MKID(cell->value));
+            return -1;
+        }
+
+        if(primitive_representation) {
+            OUT(";\n");
+        } else {
+            OUT(" };");
+            OUT(" /* %s */\n", asn1f_printable_value(expr_value->value));
+        }
+    }
+
+    return 0;
+}
+
+static int
+emit_ioc_cell(arg_t *arg, struct asn1p_ioc_cell_s *cell) {
+    OUT("{ \"%s\", ", cell->field->Identifier);
+
+    if(!cell->value) {
+        /* Ignore */
+    } else if(cell->value->meta_type == AMT_VALUE) {
+        GEN_INCLUDE(asn1c_type_name(arg, cell->value, TNF_INCLUDE));
+        OUT("aioc__value, ");
+        OUT("&asn_DEF_%s, ", asn1c_type_name(arg, cell->value, TNF_SAFE));
+        OUT("&asn_VAL_%d_%s", cell->value->_type_unique_index,
+            MKID(cell->value));
+
+    } else if(cell->value->meta_type == AMT_TYPEREF) {
+        GEN_INCLUDE(asn1c_type_name(arg, cell->value, TNF_INCLUDE));
+        OUT("aioc__type, &asn_DEF_%s", MKID(cell->value));
+    } else if(cell->value->meta_type == AMT_TYPE) {
+        GEN_INCLUDE(asn1c_type_name(arg, cell->value, TNF_INCLUDE));
+        OUT("aioc__type, &asn_DEF_%s", asn1c_type_name(arg, cell->value, TNF_SAFE));
+    } else {
+        return -1;
+    }
+
+    OUT(" }");
+
+    return 0;
+}
+
+/*
+ * Refer to skeletons/asn_ioc.h
+ */
+int
+emit_ioc_table(arg_t *arg, asn1p_expr_t *context, asn1c_ioc_table_and_objset_t ioc_tao) {
+    size_t columns = 0;
+
+    (void)context;
+    GEN_INCLUDE_STD("asn_ioc");
+
+    REDIR(OT_IOC_TABLES);
+
+    /* Emit values that are used in the Information Object Set table first */
+    for(size_t rn = 0; rn < ioc_tao.ioct->rows; rn++) {
+        asn1p_ioc_row_t *row = ioc_tao.ioct->row[rn];
+        for(size_t cn = 0; cn < row->columns; cn++) {
+            if(emit_ioc_value(arg, &row->column[cn])) {
+                return -1;
+            }
+        }
+    }
+
+    if(ioc_tao.ioct->rows == 0)
+        return 0;
+
+    /* Emit the Information Object Set */
+    OUT("static const asn_ioc_cell_t asn_IOS_%s_%d_rows[] = {\n",
+        MKID(ioc_tao.objset), ioc_tao.objset->_type_unique_index);
+    INDENT(+1);
+
+    for(size_t rn = 0; rn < ioc_tao.ioct->rows; rn++) {
+        asn1p_ioc_row_t *row = ioc_tao.ioct->row[rn];
+        columns = columns ? columns : row->columns;
+        if(columns != row->columns) {
+            FATAL("Information Object Set %s row column mismatch on line %d",
+                  ioc_tao.objset->Identifier, ioc_tao.objset->_lineno);
+            return -1;
+        }
+        for(size_t cn = 0; cn < row->columns; cn++) {
+            if(rn || cn) OUT(",\n");
+            emit_ioc_cell(arg, &row->column[cn]);
+        }
+    }
+    OUT("\n");
+
+    INDENT(-1);
+    OUT("};\n");
+
+    OUT("static const asn_ioc_set_t asn_IOS_%s_%d[] = {\n",
+        MKID(ioc_tao.objset), ioc_tao.objset->_type_unique_index);
+    INDENT(+1);
+    OUT("{ %zu, %zu, asn_IOS_%s_%d_rows }\n", ioc_tao.ioct->rows, columns,
+        MKID(ioc_tao.objset), ioc_tao.objset->_type_unique_index);
+    INDENT(-1);
+    OUT("};\n");
+
+    return 0;
+}
+
diff --git a/libasn1compiler/asn1c_ioc.h b/libasn1compiler/asn1c_ioc.h
new file mode 100644 (file)
index 0000000..d1a4b4c
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef        ASN1_IOC_H
+#define        ASN1_IOC_H
+
+#include "asn1compiler.h"
+#include "asn1p_class.h"
+
+typedef struct asn1c_ioc_table_and_objset_s {
+    asn1p_ioc_table_t *ioct;
+    asn1p_expr_t *objset;
+    int fatal_error; /* if ioct == NULL then specifies error or 0. */
+} asn1c_ioc_table_and_objset_t;
+
+asn1c_ioc_table_and_objset_t asn1c_get_ioc_table(arg_t *arg);
+
+int emit_ioc_table(arg_t *arg, asn1p_expr_t *context,
+                    asn1c_ioc_table_and_objset_t);
+
+const asn1p_ref_t *asn1c_get_information_object_set_reference_from_constraint(
+    arg_t *arg, const asn1p_constraint_t *ct);
+
+
+#endif /* ASN1_IOC_H */
diff --git a/libasn1compiler/asn1c_lang.c b/libasn1compiler/asn1c_lang.c
new file mode 100644 (file)
index 0000000..fa07540
--- /dev/null
@@ -0,0 +1,32 @@
+#include "asn1c_internal.h"
+#include "asn1c_C.h"
+
+asn1_language_map_t asn1_lang_map[AMT_EXPR_META_MAX][ASN_EXPR_TYPE_MAX];
+
+int
+asn1c_with_language(asn1c_target_language_e lang) {
+       asn1_language_map_t *lptr;
+       int lsize;
+       if(lang != ASN1C_LANGUAGE_C) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       lptr = asn1_lang_C;
+       lsize = sizeof(asn1_lang_C)/sizeof(asn1_lang_C[0]);
+
+       memset(asn1_lang_map, 0, sizeof(asn1_lang_map));
+
+       for(; lsize && lptr->expr_match; lsize--, lptr++) {
+               assert(lptr->meta_match > 0);
+               assert(lptr->meta_match < AMT_EXPR_META_MAX);
+               assert(lptr->expr_match > 0);
+               assert(lptr->expr_match < ASN_EXPR_TYPE_MAX);
+
+               asn1_lang_map[lptr->meta_match][lptr->expr_match]
+                       = *lptr;
+       }
+
+       return 0;
+}
+
diff --git a/libasn1compiler/asn1c_lang.h b/libasn1compiler/asn1c_lang.h
new file mode 100644 (file)
index 0000000..8c9a6ea
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef        ASN1_COMPILER_LANGUAGE_H
+#define        ASN1_COMPILER_LANGUAGE_H
+
+struct arg_s;
+
+typedef struct asn1_language_map_s {
+       asn1p_expr_meta_e meta_match;           /* meta_type */
+       asn1p_expr_type_e expr_match;           /* expr_type */
+       /*
+        * A callback that would create a language-specific type declaration.
+        */
+       int (*type_cb)(struct arg_s *arg);
+} asn1_language_map_t;
+
+
+extern asn1_language_map_t asn1_lang_map[AMT_EXPR_META_MAX][ASN_EXPR_TYPE_MAX];
+
+
+typedef enum asn1c_target_language {
+       ASN1C_LANGUAGE_C,
+} asn1c_target_language_e;
+
+/*
+ * Initialize the compiler to generate specified target language.
+ */
+int asn1c_with_language(asn1c_target_language_e lang);
+
+#endif /* ASN1_COMPILER_LANGUAGE_H */
diff --git a/libasn1compiler/asn1c_misc.c b/libasn1compiler/asn1c_misc.c
new file mode 100644 (file)
index 0000000..efadd28
--- /dev/null
@@ -0,0 +1,529 @@
+#include "asn1c_internal.h"
+#include "asn1c_misc.h"
+
+#include <asn1fix_crange.h>    /* constraint groker from libasn1fix */
+#include <asn1fix_export.h>    /* other exportable stuff from libasn1fix */
+
+/*
+ * Checks that the given string is not a reserved C/C++ keyword [1],[2].
+ * _* keywords not included, since asn1 identifiers cannot begin with hyphen [3]
+ * [1] ISO/IEC 9899:2011 (C11), 6.4.1
+ * [2] ISO/IEC 14882:2014 (C++14), 2.12
+ * [3] ISO/IEC 8824-1:2003 (asn1) 11.3
+ */
+static char *res_kwd[] = {
+               /* C */
+       "auto", "break", "case", "char", "const", "continue", "default", "do",
+       "double", "else", "enum", "extern", "float", "for", "goto", "if",
+       "inline", "int", "long", "register", "restrict", "return", "short",
+       "signed", "sizeof", "static", "struct", "switch", "typedef", "union",
+       "unsigned", "void", "volatile", "while",
+               /* C++ */
+       "alignas", "alignof", "and", "and_eq", "asm", "bitand", "bitor", "bool",
+       "catch", "char16_t", "char32_t", "class", "compl", "const_cast",
+       "constexpr", "decltype", "delete", "delete", "dynamic_cast",
+       "explicit", "export", "false", "friend", "mutable", "namespace", "new",
+       "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq",
+       "private", "protected", "public", "reinterpret_cast", "static_assert",
+       "static_cast", "template", "this", "thread_local", "throw", "true", "try",
+       "typeid", "typename", "using", "virtual", "wchar_t", "xor", "xor_eq"
+};
+static int
+reserved_keyword(const char *str) {
+       size_t i;
+       for(i = 0 ; i < sizeof(res_kwd)/sizeof(res_kwd[0]); i++) {
+               if(strcmp(str, res_kwd[i]) == 0)
+                       return 1;
+       }
+       return 0;
+}
+
+const char *
+asn1c_prefix()
+{
+       const char *prefix = getenv("ASN1C_PREFIX");
+
+       if(!prefix) prefix = "";
+
+       return prefix;
+}
+
+/*
+ * Construct identifier from multiple parts.
+ * Convert unsafe characters to underscores.
+ */
+const char *
+asn1c_make_identifier(enum ami_flags_e flags, asn1p_expr_t *expr, ...) {
+       static char *storage;
+       static int storage_size;
+       int nodelimiter = 0;
+       va_list ap;
+       char *str;
+       char *nextstr;
+       char *first = 0;
+       ssize_t size = 0;
+       char *p;
+       const char *prefix = NULL;
+       char *sptr[4], **psptr = &sptr[0];
+       int sptr_cnt = 0;
+
+       if(flags & AMI_USE_PREFIX)
+               prefix = asn1c_prefix();
+
+       if(expr) {
+               /*
+                * Estimate the necessary storage size
+                */
+               if(expr->Identifier == NULL)
+                       return "Member";
+               /*
+                * Add MODULE name to resolve clash
+                */
+               if(expr->_mark & TM_NAMECLASH) {
+                       size += strlen(expr->module->ModuleName) + 2;
+                       sptr[sptr_cnt++] = expr->module->ModuleName;
+               }
+               sptr[sptr_cnt++] = expr->Identifier;
+
+               size += strlen(expr->Identifier);
+               if(expr->spec_index != -1 && expr->_lineno) {
+                       static char buf[32];
+                       size += 1 + snprintf(buf, sizeof buf, "%dP%d",
+                               expr->_lineno, expr->spec_index);
+                       sptr[sptr_cnt++] = (char *)&buf;
+               }
+       } else {
+               size = -1;
+       }
+       sptr[sptr_cnt++] = (char *)0;
+
+       va_start(ap, expr);
+       while((str = va_arg(ap, char *)))
+               size += 1 + strlen(str);
+       va_end(ap);
+       if(size == -1) return NULL;
+
+       if(prefix)
+               size += 1 + strlen(prefix);
+       /*
+        * Make sure we have the required amount of storage.
+        */
+       if(storage_size <= size) {
+        char *tmp = malloc(size + 1);
+        if(tmp) {
+            free(storage);
+            storage = tmp;
+            storage_size = size + 1;
+        } else {
+            return NULL;
+        }
+       }
+
+       /*
+        * Fill-in the storage.
+        */
+       va_start(ap, expr);
+       p = storage;
+       if(prefix) {
+               strcpy(storage, prefix);
+               p += strlen(prefix);
+               nodelimiter = 1;
+       }
+       nextstr = "";
+       for(str = 0; str || nextstr; str = nextstr) {
+               int subst_made = 0;
+               nextstr = *(psptr) ? *(psptr++) : va_arg(ap, char *);
+
+               if(str == 0) {
+                       str = first = nextstr;
+                       nextstr = *(psptr) ? *(psptr++) : va_arg(ap, char *);
+                       if (!first) continue;
+               }
+
+               if(str[0] == '\0') {
+                       nodelimiter = 1;        /* No delimiter */
+                       continue;
+               }
+
+               if(str[0] == ' ' && str[1] == '\0') {
+                       *p++ = ' ';
+                       nodelimiter = 1;        /* No delimiter */
+                       continue;
+               }
+
+               if(str != first && !nodelimiter && !(flags & AMI_NODELIMITER))
+                       *p++ = '_';     /* Delimiter between tokens */
+               nodelimiter = 0;
+
+               /*
+                * If it is a single argument, check that it does not clash
+                * with C/C++ language keywords.
+                */
+               if((flags & AMI_CHECK_RESERVED)
+               && str == first && !nextstr && reserved_keyword(str)) {
+                       *p++ = toupper(*str++);
+                       /* Fall through */
+               }
+
+               for(; *str; str++) {
+                       if(isalnum(*str)) {
+                               *p++ = *str;
+                               subst_made = 0;
+                       } else if(!subst_made++) {
+                               if((flags & AMI_MASK_ONLY_SPACES)
+                                               && !isspace(*str)) {
+                                       *p ++ = *str;
+                               } else {
+                                       *p++ = '_';
+                               }
+                       }
+               }
+       }
+       va_end(ap);
+       *p = '\0';
+
+       assert((p - storage) <= storage_size);
+
+       return storage;
+}
+
+const char *
+asn1c_type_name(arg_t *arg, asn1p_expr_t *expr, enum tnfmt _format) {
+       asn1p_expr_t *exprid = 0;
+       asn1p_expr_t *top_parent;
+       asn1p_expr_t *terminal = 0;
+       int stdname = 0;
+       const char *typename;
+       const char *prefix;
+
+       /* Rewind to the topmost parent expression */
+       if((top_parent = expr->parent_expr))
+               while(top_parent->parent_expr)
+                       top_parent = top_parent->parent_expr;
+
+       if(0) DEBUG("asn1c_type_name(%s: 0x%x)",
+               expr->Identifier, expr->expr_type);
+
+       switch(expr->expr_type) {
+       case A1TC_REFERENCE:
+               typename = expr->reference->components[
+                       expr->reference->comp_count-1].name;
+               if(typename[0] == '&') {
+                       arg_t tmp = *arg;
+
+                       /*
+                        * This is a reference to a type defined in a class.
+                        * Resolve it and use instead.
+                        */
+            tmp.expr = WITH_MODULE_NAMESPACE(
+                arg->expr->module, expr_ns,
+                asn1f_class_access_ex(arg->asn, arg->expr->module, expr_ns,
+                                      arg->expr, expr->rhs_pspecs,
+                                      expr->reference));
+            if(!tmp.expr) return NULL;
+
+                       return asn1c_type_name(&tmp, tmp.expr, _format);
+               }
+
+        terminal = WITH_MODULE_NAMESPACE(
+            expr->module, expr_ns,
+            (expr->meta_type == AMT_TYPEREF) ? 
+                asn1f_lookup_symbol_ex(arg->asn, expr_ns, expr, expr->reference) :
+                asn1f_find_terminal_type_ex(arg->asn, expr_ns, expr));
+
+        if(_format == TNF_RSAFE) {
+                       if(terminal && terminal->expr_type & ASN_CONSTR_MASK) {
+                               typename = terminal->Identifier;
+                       }
+               }
+
+               if(_format == TNF_CTYPE || _format == TNF_CONSTYPE) {
+                       /*
+                        * If the component references the type itself,
+                        * switch to a recursion-safe type naming
+                        * ("struct foo" instead of "foo_t").
+                        */
+                       if(terminal && terminal == top_parent) {
+                               _format = TNF_RSAFE;
+                       }
+               }
+
+               if(_format != TNF_RSAFE  && terminal && ((terminal->spec_index != -1) || (terminal->_mark & TM_NAMECLASH))) {
+                       exprid = terminal;
+                       typename = 0;
+               }
+
+               break;
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_ENUMERATED:
+       case ASN_BASIC_REAL:
+        if((expr->expr_type == ASN_BASIC_REAL
+            && (_format == TNF_CONSTYPE || !(arg->flags & A1C_USE_WIDE_TYPES)
+                || asn1c_REAL_fits(arg, expr) != RL_NOTFIT))
+           || asn1c_type_fits_long(arg, expr)) {
+            switch(_format) {
+                       case TNF_CONSTYPE:
+                               if(expr->expr_type == ASN_BASIC_REAL) {
+                    return "double";
+                } else if(asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN) {
+                    return "unsigned long";
+                } else {
+                    return "long";
+                }
+            case TNF_CTYPE:
+            case TNF_RSAFE:
+                if(expr->expr_type == ASN_BASIC_REAL) {
+                    asn1cnst_range_t *range = asn1constraint_compute_OER_range(
+                        expr->Identifier, ASN_BASIC_REAL,
+                        expr->combined_constraints, ACT_EL_RANGE, 0, 0, 0);
+                    if(range->narrowing == NARROW_FLOAT32) {
+                        asn1constraint_range_free(range);
+                        return "float";
+                    } else {
+                        asn1constraint_range_free(range);
+                        return "double";
+                    }
+                } else if(asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN) {
+                    return "unsigned long";
+                } else {
+                    return "long";
+                }
+            default:
+                               typename = 0;
+                               switch(expr->expr_type) {
+                               case ASN_BASIC_INTEGER:
+                                       typename = "NativeInteger"; break;
+                               case ASN_BASIC_ENUMERATED:
+                                       typename = "NativeEnumerated"; break;
+                               case ASN_BASIC_REAL:
+                                       typename = "NativeReal"; break;
+                               default:
+                                       break;
+                               }
+                               break;
+                       }
+                       if(typename) {
+                               if(_format != TNF_INCLUDE)
+                                       return typename;
+                               stdname = 1;
+                               break;
+                       }
+               }
+               /* Fall through */
+       default:
+               if(expr->expr_type
+               & (ASN_CONSTR_MASK | ASN_BASIC_MASK | ASN_STRING_MASK)) {
+                       if(_format == TNF_RSAFE)
+                               _format = TNF_CTYPE;
+                       stdname = 1;
+                       typename = ASN_EXPR_TYPE2STR(expr->expr_type);
+                       if(_format == TNF_INCLUDE) {
+                               if(expr->expr_type == ASN_CONSTR_SEQUENCE)
+                                       typename = "constr_SEQUENCE";
+                               else if(expr->expr_type == ASN_CONSTR_CHOICE)
+                                       typename = "constr_CHOICE";
+                               else if(expr->expr_type == ASN_CONSTR_SET)
+                                       typename = "constr_SET";
+                               else if(expr->expr_type == ASN_CONSTR_SEQUENCE_OF)
+                                       typename = "constr_SEQUENCE_OF";
+                               else if(expr->expr_type == ASN_CONSTR_SET_OF)
+                                       typename = "constr_SET_OF";
+                               else if(expr->expr_type == ASN_CONSTR_OPEN_TYPE)
+                                       typename = "OPEN_TYPE";
+                       }
+               } else {
+                       _format = TNF_RSAFE;
+                       typename = expr->Identifier;
+               }
+       }
+
+       prefix = stdname ? "" : asn1c_prefix();
+
+       switch(_format) {
+       case TNF_UNMODIFIED:
+               return asn1c_make_identifier(AMI_MASK_ONLY_SPACES | AMI_NODELIMITER | (stdname ? 0 : AMI_USE_PREFIX),
+                       0, prefix, MODULE_NAME_OF(exprid), exprid ? exprid->Identifier : typename, (char*)0);
+       case TNF_INCLUDE:
+               return asn1c_make_identifier(
+                       AMI_MASK_ONLY_SPACES | AMI_NODELIMITER,
+                       0, ((!stdname || (arg->flags & A1C_INCLUDES_QUOTED))
+                               ? "\"" : "<"),
+                       prefix, MODULE_NAME_OF(exprid),
+                       exprid ? exprid->Identifier : typename,
+                       ((!stdname || (arg->flags & A1C_INCLUDES_QUOTED))
+                               ? ".h\"" : ".h>"), (char*)0);
+       case TNF_SAFE:
+               return asn1c_make_identifier(stdname ? 0 : AMI_USE_PREFIX, exprid, typename, (char*)0);
+       case TNF_CTYPE: /* C type */
+       case TNF_CONSTYPE:      /* C type */
+               return asn1c_make_identifier(stdname ? 0 : AMI_USE_PREFIX, exprid,
+                               exprid?"t":typename, exprid?0:"t", (char*)0);
+       case TNF_RSAFE: /* Recursion-safe type */
+               return asn1c_make_identifier(AMI_CHECK_RESERVED | AMI_NODELIMITER, 0,
+                       "struct", " ", prefix, MODULE_NAME_OF(exprid), typename, (char*)0);
+       }
+
+       assert(!"unreachable");
+       return typename;
+}
+
+static asn1p_expr_type_e
+expr_get_type(arg_t *arg, asn1p_expr_t *expr) {
+        asn1p_expr_t *terminal;
+        terminal = asn1f_find_terminal_type_ex(arg->asn, arg->ns, expr);
+        if(terminal) return terminal->expr_type;
+        return A1TC_INVALID;
+}
+
+enum asn1c_fitsfloat_e
+asn1c_REAL_fits(arg_t *arg, asn1p_expr_t *expr) {
+    asn1p_expr_type_e etype = expr_get_type(arg, arg->expr);
+    if(etype == ASN_BASIC_REAL) {
+        asn1cnst_range_t *range = asn1constraint_compute_OER_range(
+            expr->Identifier, etype, expr->combined_constraints, ACT_EL_RANGE,
+            0, 0, 0);
+        enum asn1c_fitsfloat_e fits;
+        switch(range->narrowing) {
+        case NARROW_FLOAT32:
+            fits = RL_FITS_FLOAT32;
+            break;
+        case NARROW_DOUBLE64:
+            fits = RL_FITS_DOUBLE64;
+            break;
+        default:
+            fits = RL_NOTFIT;
+            break;
+        }
+        asn1constraint_range_free(range);
+        return fits;
+    } else {
+        return 0;
+    }
+}
+
+/*
+ * Check whether the specified INTEGER or ENUMERATED type can be represented
+ * using the generic 'long' or 'unsigned long' type.
+ */
+enum asn1c_fitslong_e
+asn1c_type_fits_long(arg_t *arg, asn1p_expr_t *expr) {
+       asn1cnst_range_t *range = 0;
+       asn1cnst_edge_t left;
+       asn1cnst_edge_t right;
+       asn1p_expr_t *v;
+
+/*
+ * Since we don't know the sizeof(long) on the possible target platform
+ * which will be compiling the code generated by asn1c, let's play it
+ * simple: long's range is equal to or greater than int32_t.
+ * NOTE: the most negative integer cannot be written in C, as the C99
+ * standard will give it an unsigned type.
+ * It is defined here as a constant expression.
+ */
+#define        RIGHTMAX        2147483647      /* of 32-bit integer type */
+#define        LEFTMIN         (-RIGHTMAX-1)   /* of 32-bit integer type */
+
+       /* Descend to the terminal type */
+    expr = WITH_MODULE_NAMESPACE(
+        expr->module, expr_ns,
+        asn1f_find_terminal_type_ex(arg->asn, expr_ns, expr));
+    if(expr == 0) return FL_NOTFIT;
+
+       /* The "fits into long" operation is relevant only for integer types */
+       switch(expr->expr_type) {
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_ENUMERATED:
+               break;
+       default:
+               return FL_NOTFIT;
+       }
+
+       /*
+        * First, evaluate the range of explicitly given identifiers.
+        */
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type != A1TC_UNIVERVAL)
+                       continue;
+               if(v->value->value.v_integer < LEFTMIN
+               || v->value->value.v_integer > RIGHTMAX)
+                       return FL_NOTFIT;
+       }
+
+       if(!expr->combined_constraints) 
+               return (arg->flags & A1C_USE_WIDE_TYPES)
+                       ? FL_NOTFIT : FL_PRESUMED;
+
+       /*
+        * Second, if -fbless-SIZE is given, the (SIZE()) constraint may be
+        * applied (non-standard! but we can deal with this) to the type.
+        * Check the range.
+        */
+       range = asn1constraint_compute_constraint_range(expr->Identifier,
+               expr->expr_type,
+               expr->combined_constraints, ACT_CT_SIZE, 0, 0,
+               CPR_simulate_fbless_SIZE);
+       if(range) {
+               if(!range->incompatible) {
+                       right = range->right;
+                       /* Use 4 instead of sizeof(long) is justified! */
+                       if(right.type == ARE_VALUE && right.value <= 4)
+                               return FL_FITS_SIGNED;
+               }
+               asn1constraint_range_free(range);
+       }
+
+       /*
+        * Third, pull up the PER visible range of the INTEGER.
+        */
+       range = asn1constraint_compute_PER_range(expr->Identifier, expr->expr_type,
+               expr->combined_constraints, ACT_EL_RANGE, 0, 0, 0);
+
+       if(!range
+       /* Commenting out
+    || range->extensible
+     * because this may or may not indicate wide type.
+     */
+    || (range->extensible && (arg->flags & A1C_USE_WIDE_TYPES))
+       || range->empty_constraint
+       || range->incompatible
+       || range->not_PER_visible
+       ) {
+               asn1constraint_range_free(range);
+               return (arg->flags & A1C_USE_WIDE_TYPES)
+                       ? FL_NOTFIT : FL_PRESUMED;
+       }
+
+       left = range->left;
+       right = range->right;
+       asn1constraint_range_free(range);
+
+       /* Special case for unsigned */
+    if(!(arg->flags & A1C_USE_WIDE_TYPES) && left.type == ARE_VALUE
+       && left.value >= 0 && left.value <= 2147483647
+       && right.type == ARE_MAX) {
+        return FL_FITS_UNSIGN;
+    }
+    if(left.type == ARE_VALUE
+               && left.value >= 0
+       && right.type == ARE_VALUE
+               && right.value > 2147483647
+               && right.value <= (asn1c_integer_t)(4294967295UL))
+               return FL_FITS_UNSIGN;
+               
+
+       /* If some fixed value is outside of target range, not fit */
+       if(left.type == ARE_VALUE
+                       && (left.value < LEFTMIN || left.value > RIGHTMAX))
+               return FL_NOTFIT;
+       if(right.type == ARE_VALUE
+                       && (right.value > RIGHTMAX || right.value < LEFTMIN))
+               return FL_NOTFIT;
+
+       /* If the range is open, fits only unless -fwide-types is given */
+       if(left.type != ARE_VALUE || right.type != ARE_VALUE) {
+               return (arg->flags & A1C_USE_WIDE_TYPES)
+                       ? FL_NOTFIT : FL_PRESUMED;
+       }
+
+       return FL_FITS_SIGNED;
+}
diff --git a/libasn1compiler/asn1c_misc.h b/libasn1compiler/asn1c_misc.h
new file mode 100644 (file)
index 0000000..89ce98b
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef        ASN1_COMPILER_MISC_H
+#define        ASN1_COMPILER_MISC_H
+
+/*
+ * Make the target language identifier out of one or more names.
+ * The function will concatenate the names and replace unsafe characters
+ * with safe ones.
+ */
+enum ami_flags_e {
+       AMI_MASK_ONLY_SPACES    = 1,    /* Mask only spaces, everything else's safe */
+       AMI_CHECK_RESERVED      = 2,    /* Check against reserved keywords */
+       AMI_NODELIMITER       = 4,      /* Do not put delimiter, just concatenate */
+       AMI_USE_PREFIX        = 8,      /* Use Prefix when generating identifier */
+};
+const char *asn1c_make_identifier(enum ami_flags_e, asn1p_expr_t *expr, ...);
+
+/*
+ * Return the type name of the specified expression.
+ * The returned string is a pointer to a statically allocated buffer which is
+ * going to be clobbered by the subsequent invocation of this function.
+ */
+enum tnfmt {
+       TNF_UNMODIFIED  = 0x10, /* Return unmodified type name */
+       TNF_INCLUDE     = 0x20, /* Format for #include <> */
+       TNF_CTYPE       = 0x30, /* Format as normal C-ish type (append "_t") */
+       TNF_CONSTYPE = 0x40, /* Replace unsafe characters with _ */
+       TNF_SAFE        = 0x50, /* Replace unsafe characters with _ */
+       TNF_RSAFE       = 0x60, /* Recursion-safe C type format */
+};
+const char *asn1c_type_name(arg_t *arg, asn1p_expr_t *expr, enum tnfmt _format);
+
+/*
+ * Check whether the specified INTEGER or ENUMERATED type can be represented
+ * using the generic 'long' type.
+ * Return values:
+ *     FL_NOTFIT:      No, it cannot be represented using long.
+ *     FL_FITS_SIGNED: It can be represented using signed long.
+ *     FL_FITS_UNSIGN: It can be represented using unsigned long.
+ *     FL_PRESUMED:    Probably can't, but -fwide-types is not in effect.
+ */
+enum asn1c_fitslong_e {
+       FL_NOTFIT,
+       FL_FITS_SIGNED,
+       FL_FITS_UNSIGN,
+       FL_PRESUMED,
+};
+enum asn1c_fitslong_e asn1c_type_fits_long(arg_t *arg, asn1p_expr_t *expr);
+
+enum asn1c_fitsfloat_e {
+    RL_NOTFIT,
+    RL_FITS_FLOAT32,
+    RL_FITS_DOUBLE64
+};
+enum asn1c_fitsfloat_e asn1c_REAL_fits(arg_t *arg, asn1p_expr_t *expr);
+const char *asn1c_prefix(void);
+
+#endif /* ASN1_COMPILER_MISC_H */
diff --git a/libasn1compiler/asn1c_naming.c b/libasn1compiler/asn1c_naming.c
new file mode 100644 (file)
index 0000000..c892fcf
--- /dev/null
@@ -0,0 +1,327 @@
+#include "asn1c_internal.h"
+#include "asn1c_naming.h"
+#include "asn1c_misc.h"
+#include <asn1_buffer.h>
+#include <genhash.h>
+
+struct intl_name {
+    asn1p_expr_t *expr;
+    asn1p_expr_t *clashes_with;
+    const char *name;
+    TQ_ENTRY(struct intl_name) next;
+};
+
+genhash_t *used_names_hash;
+
+static void
+name_entry_destroy(void *np) {
+    struct intl_name *n = np;
+
+    union {
+        const char *c_buf;
+        char *nc_buf;
+    } const_cast;
+
+    asn1p_expr_free(n->expr);
+    asn1p_expr_free(n->clashes_with);
+    const_cast.c_buf = n->name;
+    free(const_cast.nc_buf);
+    free(n);
+}
+
+void
+c_name_clash_finder_init() {
+    assert(used_names_hash == NULL);
+    used_names_hash =
+        genhash_new(cmpf_string, hashf_string, NULL, name_entry_destroy);
+    assert(used_names_hash);
+}
+
+void
+c_name_clash_finder_destroy() {
+    genhash_destroy(used_names_hash);
+    used_names_hash = NULL;
+}
+
+static void
+register_global_name(asn1p_expr_t *expr, const char *name) {
+    struct intl_name *n;
+
+    n = genhash_get(used_names_hash, (const void *)name);
+    if(n) {
+        if(!(expr->_mark & TM_NAMEGIVEN) && (expr != n->expr)) {
+            n->clashes_with = expr;
+            expr->ref_cnt++;
+            return;
+        }
+    }
+
+    if(expr->_mark & TM_NAMEGIVEN)
+        return;
+
+    char *name_copy = strdup(name);
+
+    n = calloc(1, sizeof(*n));
+    assert(n);
+    n->expr = expr;
+    expr->ref_cnt++;
+    n->name = name_copy;
+    int ret = genhash_add(used_names_hash, name_copy, n);
+    assert(ret == 0);
+}
+
+int
+c_name_clash(arg_t *arg) {
+    struct intl_name *n;
+    size_t n_clashes = 0;
+    const size_t max_clashes = 5;
+
+    genhash_iter_t iter;
+
+    genhash_iter_init(&iter, used_names_hash, 0);
+    while(genhash_iter(&iter, NULL, (void *)&n)) {
+        if(n->clashes_with) {
+            if(n_clashes++ > max_clashes) continue;
+            FATAL(
+                "Name \"%s\" is generated by %s.%s at line %s:%d and "
+                "%s.%s at line %s:%d",
+                n->name, n->expr->module->ModuleName, n->expr->Identifier,
+                n->expr->module->source_file_name, n->expr->_lineno,
+                n->clashes_with->module->ModuleName,
+                n->clashes_with->Identifier,
+                n->clashes_with->module->source_file_name,
+                n->clashes_with->_lineno);
+        }
+    }
+
+    genhash_iter_done(&iter);
+
+    if(n_clashes > max_clashes) {
+        FATAL("... %zu more name clashes not shown", n_clashes - max_clashes);
+    }
+
+    return n_clashes > 0;
+}
+
+
+static abuf *
+construct_base_name(abuf *buf, asn1p_expr_t *expr, int compound_names,
+                    int avoid_keywords, enum ami_flags_e flag) {
+    const char *id;
+
+    assert(buf);
+
+    if(compound_names && expr->parent_expr) {
+        construct_base_name(buf, expr->parent_expr, compound_names, 0, flag);
+        if(buf->length) {
+            abuf_str(buf, "__"); /* component separator */
+        }
+    }
+
+    id = asn1c_make_identifier(
+        ((avoid_keywords && !buf->length) ? AMI_CHECK_RESERVED : 0) | flag, expr, 0);
+
+    abuf_str(buf, id);
+
+    return buf;
+}
+
+static struct c_names
+c_name_impl(arg_t *arg, asn1p_expr_t *expr, int avoid_keywords) {
+    asn1p_expr_type_e expr_type = expr->expr_type;
+    struct c_names names;
+    int compound_names = 0;
+
+    static abuf b_type_asn_name;
+    static abuf b_type_part_name;
+    static abuf b_type_base_name;
+    static abuf b_type_c_name;
+    static abuf b_type_constrained_c_name;
+    static abuf b_asn_name;
+    static abuf b_part_name;
+    static abuf b_base_name;
+    static abuf b_short_name;
+    static abuf b_full_name;
+    static abuf b_as_member;
+    static abuf b_presence_enum;
+    static abuf b_presence_name;
+    static abuf b_members_enum;
+    static abuf b_members_name;
+
+    abuf_clear(&b_type_asn_name);
+    abuf_clear(&b_type_part_name);
+    abuf_clear(&b_type_base_name);
+    abuf_clear(&b_type_c_name);
+    abuf_clear(&b_type_constrained_c_name);
+    abuf_clear(&b_asn_name);
+    abuf_clear(&b_base_name);
+    abuf_clear(&b_part_name);
+    abuf_clear(&b_short_name);
+    abuf_clear(&b_full_name);
+    abuf_clear(&b_as_member);
+    abuf_clear(&b_presence_enum);
+    abuf_clear(&b_presence_name);
+    abuf_clear(&b_members_enum);
+    abuf_clear(&b_members_name);
+
+    abuf_str(&b_type_asn_name, asn1c_type_name(arg, expr, TNF_UNMODIFIED));
+    abuf_str(&b_type_part_name, asn1c_type_name(arg, expr, TNF_SAFE));
+    abuf_str(&b_type_base_name, asn1c_type_name(arg, expr, TNF_SAFE));
+    abuf_str(&b_type_c_name, asn1c_type_name(arg, expr, TNF_CTYPE));
+    abuf_str(&b_type_constrained_c_name,
+             asn1c_type_name(arg, expr, TNF_CONSTYPE));
+
+
+    if((arg->flags & A1C_COMPOUND_NAMES)) {
+        if((expr_type & ASN_CONSTR_MASK)
+           || expr_type == ASN_BASIC_ENUMERATED
+           || ((expr_type == ASN_BASIC_INTEGER
+                || expr_type == ASN_BASIC_BIT_STRING))) {
+            compound_names = 1;
+        }
+    }
+
+    construct_base_name(&b_asn_name, expr, 0, 0, 0);
+    construct_base_name(&b_part_name, expr, 0, 0, AMI_USE_PREFIX);
+    construct_base_name(&b_base_name, expr, compound_names, avoid_keywords, 0);
+    construct_base_name(&b_as_member, expr, 0, 1, 0);
+
+    static abuf tmp_compoundable_part_name;
+    static abuf compound_part_name;
+    abuf_clear(&tmp_compoundable_part_name);
+    abuf_clear(&compound_part_name);
+    construct_base_name(&tmp_compoundable_part_name, expr, compound_names, 0, 0);
+    construct_base_name(&compound_part_name, expr, 1, 0, 0);
+
+    if(strlen(asn1c_prefix()) == 0) {
+        if(!expr->_anonymous_type) {
+            if(arg->embed) {
+                abuf_printf(&b_short_name, "%s", b_as_member.buffer);
+            } else {
+                abuf_printf(&b_short_name, "%s_t", b_as_member.buffer);
+            }
+        }
+        abuf_printf(&b_full_name, "struct %s", b_base_name.buffer);
+        abuf_printf(&b_presence_enum, "enum %s_PR", tmp_compoundable_part_name.buffer);
+        abuf_printf(&b_presence_name, "%s_PR", tmp_compoundable_part_name.buffer);
+        abuf_printf(&b_members_enum, "enum %s", b_base_name.buffer);
+        abuf_printf(&b_members_name, "e_%s", tmp_compoundable_part_name.buffer);
+   } else {
+        if(!expr->_anonymous_type) {
+            if(arg->embed) {
+                abuf_printf(&b_short_name, "%s%s", asn1c_prefix(), b_as_member.buffer);
+            } else {
+                abuf_printf(&b_short_name, "%s%s_t", asn1c_prefix(), b_as_member.buffer);
+            }
+        }
+        abuf_printf(&b_full_name, "struct %s%s", asn1c_prefix(), b_base_name.buffer);
+        abuf_printf(&b_presence_enum, "enum %s%s_PR", asn1c_prefix(), tmp_compoundable_part_name.buffer);
+        abuf_printf(&b_presence_name, "%s%s_PR", asn1c_prefix(), tmp_compoundable_part_name.buffer);
+        abuf_printf(&b_members_enum, "enum %s%s", asn1c_prefix(), b_base_name.buffer);
+        abuf_printf(&b_members_name, "e_%s%s", asn1c_prefix(), tmp_compoundable_part_name.buffer);
+    }
+
+    names.type.asn_name = b_type_asn_name.buffer;
+    names.type.base_name = b_type_base_name.buffer;
+    names.type.part_name = b_type_part_name.buffer;
+    names.type.c_name = b_type_c_name.buffer;
+    names.type.constrained_c_name = b_type_constrained_c_name.buffer;
+    names.asn_name = b_asn_name.buffer;
+    names.part_name = b_part_name.buffer;
+    names.base_name = b_base_name.buffer;
+    names.short_name = b_short_name.buffer;
+    names.full_name = b_full_name.buffer;
+    names.as_member = b_as_member.buffer;
+    names.presence_enum = b_presence_enum.buffer;
+    names.presence_name = b_presence_name.buffer;
+    names.members_enum = b_members_enum.buffer;
+    names.members_name = b_members_name.buffer;
+    names.compound_name = compound_part_name.buffer;
+
+    /* A _subset_ of names is checked against being globally unique */
+    register_global_name(expr, names.base_name);
+    register_global_name(expr, names.full_name);
+    register_global_name(expr, names.presence_enum);
+    register_global_name(expr, names.presence_name);
+    register_global_name(expr, names.members_enum);
+    register_global_name(expr, names.members_name);
+
+    expr->_mark |= TM_NAMEGIVEN;
+
+    return names;
+}
+
+struct c_names
+c_name(arg_t *arg) {
+    return c_name_impl(arg, arg->expr, 1);
+}
+
+struct c_names
+c_expr_name(arg_t *arg, asn1p_expr_t *expr) {
+    return c_name_impl(arg, expr, 1);
+}
+
+const char *
+c_member_name(arg_t *arg, asn1p_expr_t *expr) {
+    static abuf ab;
+
+    abuf_clear(&ab);
+
+    /* NB: do not use part_name, doesn't work for -fcompound-names */
+    abuf_str(&ab, asn1c_prefix());
+    abuf_str(&ab, c_name_impl(arg, arg->expr, 0).base_name);
+    abuf_str(&ab, "_");
+    abuf_str(&ab, asn1c_make_identifier(0, expr, 0));
+
+    return ab.buffer;
+}
+
+
+const char *
+c_presence_name(arg_t *arg, asn1p_expr_t *expr) {
+    static abuf ab;
+
+    abuf_clear(&ab);
+
+    abuf_str(&ab, asn1c_prefix());
+    if(expr) {
+        /* NB: do not use part_name, doesn't work for -fcompound-names */
+        abuf_str(&ab, c_name_impl(arg, arg->expr, 0).base_name);
+        abuf_str(&ab, "_PR_");
+        abuf_str(&ab, asn1c_make_identifier(0, expr, 0));
+    } else {
+        abuf_printf(&ab, "%s_PR_NOTHING",
+                    c_name_impl(arg, arg->expr, 0).base_name);
+    }
+
+    return ab.buffer;
+}
+
+const char *
+c_names_format(struct c_names ns) {
+    static abuf nbuf;
+    abuf_clear(&nbuf);
+
+#define FMT_COMPONENT(x) abuf_printf(&nbuf, " ." #x "=\"%s\",", ns.x);
+
+    abuf_str(&nbuf, "{");
+    FMT_COMPONENT(type.asn_name);
+    FMT_COMPONENT(type.part_name);
+    FMT_COMPONENT(type.base_name);
+    FMT_COMPONENT(type.c_name);
+    FMT_COMPONENT(type.constrained_c_name);
+    FMT_COMPONENT(asn_name);
+    FMT_COMPONENT(part_name);
+    FMT_COMPONENT(base_name);
+    FMT_COMPONENT(full_name);
+    FMT_COMPONENT(short_name);
+    FMT_COMPONENT(full_name);
+    FMT_COMPONENT(as_member);
+    FMT_COMPONENT(presence_enum);
+    FMT_COMPONENT(presence_name);
+    FMT_COMPONENT(members_enum);
+    FMT_COMPONENT(members_name);
+    abuf_printf(&nbuf, " .members_name=\"%s\" }", ns.members_name);
+    return nbuf.buffer;
+}
+
diff --git a/libasn1compiler/asn1c_naming.h b/libasn1compiler/asn1c_naming.h
new file mode 100644 (file)
index 0000000..c2b94c9
--- /dev/null
@@ -0,0 +1,47 @@
+#ifndef        ASN1_COMPILER_NAMING_H
+#define        ASN1_COMPILER_NAMING_H
+
+
+/*
+ * A member or a field name.
+ */
+struct c_names {
+    struct {
+        const char *asn_name;       /* "T-Rex" */
+        const char *part_name;      /* "T_Rex" */
+        const char *base_name;      /* "T_Rex" */
+        const char *c_name;         /* "T_Rex_t" */
+        const char *constrained_c_name; /* "long" */
+    } type;
+    const char *asn_name;      /* "foo" */
+    const char *part_name;     /* "foo", "signed" */
+    const char *base_name;     /* "foo" if not, "parent_foo" if compound */
+    const char *short_name;    /* "foo_t", "e_foo" */
+    const char *full_name;     /* "struct foo", "enum foo" */
+    const char *as_member;     /* "foo" (not compounded) */
+    const char *presence_enum; /* "enum foo_PR" */
+    const char *presence_name; /* "foo_PR" */
+    const char *members_enum;  /* "enum foo" */
+    const char *members_name;  /* "e_foo" */
+    const char *compound_name; /* always contain "parent_foo" */
+};
+
+struct c_names c_name(arg_t *);
+struct c_names c_expr_name(arg_t *, asn1p_expr_t *);
+const char *c_member_name(arg_t *, asn1p_expr_t *);     /* %s_%s */
+const char *c_presence_name(arg_t *, asn1p_expr_t *);   /* %s_PR_%s */
+
+const char *c_names_format(struct c_names); /* For debugging */
+
+/*
+ * Returns 0 if no C name clashes have been encountered.
+ * Returns 1 if C name clashes have been encountered.
+ * Prints out the clashing items and suggests -fcompound-names.
+ */
+int c_name_clash(arg_t *arg);
+
+void c_name_clash_finder_init(void);
+
+void c_name_clash_finder_destroy(void);
+
+#endif /* ASN1_COMPILER_NAMING_H */
diff --git a/libasn1compiler/asn1c_out.c b/libasn1compiler/asn1c_out.c
new file mode 100644 (file)
index 0000000..b381e21
--- /dev/null
@@ -0,0 +1,116 @@
+#include "asn1c_internal.h"
+#include "asn1c_out.h"
+
+/*
+ * Add an elementary chunk of target language text
+ * into appropriate output stream.
+ */
+int
+asn1c_compiled_output(arg_t *arg, const char *source, int lineno, const char *func, const char *fmt,
+                      ...) {
+       struct compiler_stream_destination_s *dst;
+       const char *p;
+       int lf_found;
+       va_list ap;
+       out_chunk_t *m;
+       int ret;
+
+       switch(arg->target->target) {
+       case OT_IGNORE:
+               return 0;
+       default:
+               dst = &arg->target->destination[arg->target->target];
+               break;
+       }
+
+       /*
+        * Make sure the output has a single LF and only at the end.
+        */
+       for(lf_found = 0, p = fmt; *p; p++) {
+               if(*p == '\n') {
+                       lf_found++;
+                       assert(p[1] == '\0');
+               }
+       }
+       assert(lf_found <= 1);
+
+       /*
+        * Print out the indentation.
+        */
+       if(dst->indented == 0) {
+               int i = dst->indent_level;
+               if (i < 0) {
+                       /* fatal error */
+                       fprintf(stderr, "target %d : Indent level %d ?!\n", arg->target->target, i);
+                       exit(1);
+               }
+               dst->indented = 1;
+               while(i--) {
+                       ret = asn1c_compiled_output(arg, source, lineno, func, "\t");
+                       if(ret == -1) return -1;
+               }
+       }
+       if(lf_found)
+               dst->indented = 0;
+
+    size_t debug_reserve_size = 0;
+    if(lf_found && (arg->flags & A1C_DEBUG_OUTPUT_ORIGIN_LINES)) {
+        debug_reserve_size =
+            sizeof("\t// :100000 ()") + strlen(source) + strlen(func);
+    }
+
+       /*
+        * Allocate buffer.
+        */
+       m = calloc(1, sizeof(out_chunk_t));
+       if(m == NULL) return -1;
+
+       m->len = 16;
+       do {
+               void *tmp;
+               m->len <<= 2;
+               tmp = realloc(m->buf, m->len + debug_reserve_size);
+               if(tmp) {
+                       m->buf = (char *)tmp;
+               } else {
+                       free(m->buf);
+                       free(m);
+                       return -1;
+               }
+               va_start(ap, fmt);
+               ret = vsnprintf(m->buf, m->len, fmt, ap);
+               va_end(ap);
+       } while(ret >= (m->len - 1) || ret < 0);
+
+       m->len = ret;
+
+    /* Print out the origin of the lines */
+    if(lf_found && (arg->flags & A1C_DEBUG_OUTPUT_ORIGIN_LINES)) {
+        assert(m->buf[m->len - 1] == '\n');
+        ret = snprintf(m->buf + m->len - 1, debug_reserve_size,
+                       "\t// %s:%03d %s()\n", source, lineno, func);
+        assert(ret > 0 && (size_t)ret < debug_reserve_size);
+        m->len = m->len - 1 + ret;
+    }
+
+       if(arg->target->target == OT_INCLUDES
+       || arg->target->target == OT_FWD_DECLS
+       || arg->target->target == OT_POST_INCLUDE) {
+               out_chunk_t *v;
+               TQ_FOR(v, &dst->chunks, next) {
+                       if(m->len == v->len
+                       && !memcmp(m->buf, v->buf, m->len))
+                               break;
+               }
+               if(v) {
+                       /* Entry is already present. Skip it. */
+                       free(m->buf);
+                       free(m);
+                       return 0;
+               }
+       }
+
+       TQ_ADD(&dst->chunks, m, next);
+
+       return 0;
+}
diff --git a/libasn1compiler/asn1c_out.h b/libasn1compiler/asn1c_out.h
new file mode 100644 (file)
index 0000000..e999fc9
--- /dev/null
@@ -0,0 +1,162 @@
+#ifndef        ASN1_COMPILED_OUTPUT_H
+#define        ASN1_COMPILED_OUTPUT_H
+
+/*
+ * An elementary chunk of target language text.
+ */
+typedef struct out_chunk {
+       char *buf;
+       int len;
+
+       TQ_ENTRY(struct out_chunk) next;
+} out_chunk_t;
+
+typedef struct compiler_streams {
+       enum {
+               OT_IGNORE,      /* Ignore this output */
+               OT_INCLUDES,    /* #include files */
+               OT_DEPS,        /* Dependencies (other than #includes) */
+               OT_FWD_DECLS,   /* Forward declarations */
+               OT_FWD_DEFS,    /* Forward definitions */
+               OT_TYPE_DECLS,  /* Type declarations */
+               OT_FUNC_DECLS,  /* Function declarations */
+               OT_POST_INCLUDE,/* #include after type definition */
+               OT_IOC_TABLES,  /* Information Object Class tables */
+               OT_CTABLES,     /* Constraint tables */
+               OT_CODE,        /* Some code */
+               OT_CTDEFS,      /* Constraint definitions */
+               OT_STAT_DEFS,   /* Static definitions */
+               OT_MAX
+       } target;
+
+       struct compiler_stream_destination_s {
+               TQ_HEAD(out_chunk_t) chunks;
+               int indent_level;
+               int indented;
+       } destination[OT_MAX];
+} compiler_streams_t;
+
+static char *_compiler_stream2str[] __attribute__ ((unused))
+    = { "IGNORE", "INCLUDES", "DEPS", "FWD-DECLS", "FWD-DEFS", "TYPE-DECLS", "FUNC-DECLS", "POST-INCLUDE", "IOC-TABLES", "CTABLES", "CODE", "CTDEFS", "STAT-DEFS" };
+
+int asn1c_compiled_output(arg_t *arg, const char *file, int lineno,
+                          const char *func, const char *fmt, ...)
+    __attribute__((format(printf, 5, 6)));
+
+\f
+/*****************************************************************
+ * Useful macros for invoking asn1c_compiled_output() and friends.
+ */
+
+/* Redirect output to a different stream. */
+#define        REDIR(foo)      do { arg->target->target = foo; } while(0)
+#define INDENT_LEVEL   \
+               arg->target->destination[arg->target->target].indent_level
+#define        INDENT(val)     INDENT_LEVEL += (val)
+#define        INDENTED(code)  do {                                    \
+               INDENT(+1);                                     \
+               do { code; } while(0);                          \
+               INDENT(-1);                                     \
+       } while(0)
+
+#define EMBED(ev)                                        \
+    do {                                                 \
+        arg->embed++;                                    \
+        INDENTED(arg_t _tmp = *arg; _tmp.expr = ev;      \
+                 _tmp.default_cb(&_tmp, NULL););         \
+        arg->embed--;                                    \
+        assert(arg->target->target == OT_TYPE_DECLS      \
+               || arg->target->target == OT_FWD_DEFS);   \
+    } while(0)
+
+#define EMBED_WITH_IOCT(ev, ioc)                                   \
+    do {                                                           \
+        arg->embed++;                                              \
+        INDENTED(arg_t _tmp = *arg; _tmp.expr = ev;                \
+                 _tmp.default_cb(&_tmp, ((ioc).ioct ? &ioc : 0));); \
+        arg->embed--;                                              \
+        assert(arg->target->target == OT_TYPE_DECLS                \
+               || arg->target->target == OT_FWD_DEFS);             \
+    } while(0)
+
+/* Output a piece of text into a default stream */
+#define OUT(fmt, args...) \
+    asn1c_compiled_output(arg, __FILE__, __LINE__, __func__, fmt, ##args)
+#define        OUT_NOINDENT(fmt, args...)      do {                    \
+       int _saved_indent = INDENT_LEVEL;                       \
+       INDENT_LEVEL = 0;                                       \
+       OUT(fmt, ##args);                                       \
+       INDENT_LEVEL = _saved_indent;                           \
+} while(0)
+#define        OUT_DEBUG(fmt, args...) do {                            \
+               if(arg->flags & A1C_DEBUG) OUT(fmt, ##args);    \
+       } while(0)
+
+/* Generate #include line */
+#define GEN_INCLUDE_STD(typename)      do {                    \
+       if((arg->flags & A1C_INCLUDES_QUOTED)) {                \
+               GEN_INCLUDE("\"" typename ".h\"");              \
+       } else {                                                \
+               GEN_INCLUDE("<" typename ".h>");                \
+       } } while(0)
+#define GEN_INCLUDE(filename)                                  \
+       GEN_POS_INCLUDE(OT_INCLUDES, filename)
+#define GEN_POSTINCLUDE(filename)                              \
+       GEN_POS_INCLUDE(OT_POST_INCLUDE, filename)
+#define GEN_POS_INCLUDE(pos, filename) do {                    \
+       int saved_target = arg->target->target;                 \
+       if(!filename) break;                                    \
+       REDIR(pos);                                             \
+       OUT_NOINDENT("#include %s\n", filename);                \
+       REDIR(saved_target);                                    \
+} while(0)
+#define GEN_POS_INCLUDE_BASE(pos, expr) do {                   \
+       asn1p_expr_t *rhs_pspecs = expr->rhs_pspecs;            \
+       expr->rhs_pspecs = (asn1p_expr_t *)0;                   \
+       int saved_target = arg->target->target;                 \
+       REDIR(pos);                                             \
+       OUT_NOINDENT("#include %s\n",                           \
+               asn1c_type_name(arg, expr, TNF_INCLUDE));       \
+       expr->rhs_pspecs = rhs_pspecs;                          \
+       REDIR(saved_target);                                    \
+} while(0)
+
+/* Generate ASN.1 type declaration */
+#define        GEN_DECLARE(type_name, expr)    do {                            \
+       int saved_target = arg->target->target;                         \
+       REDIR(OT_FUNC_DECLS);                                           \
+       OUT_NOINDENT("extern asn_TYPE_descriptor_t "                    \
+                       "asn_DEF_%s;\n", MKID(expr));                   \
+       if (expr->_type_referenced) {                                   \
+               OUT_NOINDENT("extern asn_%s_specifics_t "               \
+                               "asn_SPC_%s_specs_%d;\n", type_name,    \
+                               MKID(expr), expr->_type_unique_index);  \
+               if(expr_elements_count(arg, expr))                      \
+                       OUT_NOINDENT("extern asn_TYPE_member_t "        \
+                               "asn_MBR_%s_%d[%d];\n",                 \
+                               MKID(expr), expr->_type_unique_index,   \
+                               expr_elements_count(arg, expr));        \
+       }                                                               \
+       REDIR(saved_target);                                            \
+} while(0)
+
+/*
+ * Format LONG_MIN according to C90 rules.
+ */
+#define OINT(iv)                       \
+    do {                               \
+        if(iv == (-2147483647L - 1))   \
+            OUT("(-2147483647L - 1)"); \
+        else                           \
+            OUT("%s", asn1p_itoa(iv)); \
+    } while(0)
+
+#define OINTS(iv)                                              \
+    do {                                                       \
+        if(iv == (-2147483647L - 1))                           \
+            OUT("(-2147483647L - 1)");                         \
+        else                                                   \
+            OUT("%s%s", (iv >= 0) ? " " : "", asn1p_itoa(iv)); \
+    } while(0)
+
+#endif /* ASN1_COMPILED_OUTPUT_H */
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
new file mode 100644 (file)
index 0000000..79d82c7
--- /dev/null
@@ -0,0 +1,1021 @@
+#include "asn1c_internal.h"
+#include "asn1c_compat.h"
+#include "asn1c_fdeps.h"
+#include "asn1c_lang.h"
+#include "asn1c_misc.h"
+#include "asn1c_save.h"
+#include "asn1c_out.h"
+
+#ifndef HAVE_SYMLINK
+#define symlink(a,b) (errno=ENOSYS, -1)
+#endif
+
+/* Pedantically check fprintf's return value. */
+static int safe_fprintf(FILE *fp, const char *fmt, ...) {
+    va_list ap;
+    va_start(ap, fmt);
+    int ret = vfprintf(fp, fmt, ap);
+    va_end(ap);
+    assert(ret >= 0);
+    return ret;
+}
+
+/* Pedantically check fwrite's return value. */
+static size_t safe_fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream) {
+    size_t ret = fwrite(ptr, 1, size * nitems, stream);
+    assert(ret == size * nitems);
+    return ret;
+}
+
+#define        HINCLUDE(s)                                             \
+       ((arg->flags & A1C_INCLUDES_QUOTED)                     \
+               ? safe_fprintf(fp_h, "#include \"%s\"\n", s)            \
+               : safe_fprintf(fp_h, "#include <%s>\n", s))             \
+
+enum include_type_result {
+    TI_NOT_INCLUDED,
+    TI_INCLUDED_FROM_BULK,
+    TI_INCLUDED_FROM_CMDLINE
+};
+
+static int asn1c_dump_streams(arg_t *arg, asn1c_dep_chainset *, const char *, int, char **);
+static int asn1c_print_streams(arg_t *arg);
+static int asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *, const char *,
+                              int, char **);
+static int asn1c_copy_over(arg_t *arg, const char *destdir, const char *path,
+                           const char *msg);
+static int identical_files(const char *fname1, const char *fname2);
+static int need_to_generate_pdu_collection(arg_t *arg);
+static abuf *generate_pdu_collection(arg_t *arg);
+static int generate_pdu_collection_file(arg_t *arg, const char *destdir);
+static int generate_preamble(arg_t *, FILE *, int optc, char **argv);
+static enum include_type_result include_type_to_pdu_collection(arg_t *arg);
+static int pdu_collection_has_unused_types(arg_t *arg);
+static const char *generate_pdu_C_definition(void);
+static void asn1c__cleanup_pdu_type(void);
+static int asn1c__pdu_type_lookup(const char *typename);
+static int generate_constant_file(arg_t *arg, const char *destdir);
+
+static int
+asn1c__save_library_makefile(arg_t *arg, const asn1c_dep_chainset *deps,
+                             const char *datadir, const char *destdir,
+                             const char *makefile_name) {
+    asn1p_module_t *mod;
+    FILE *mkf;
+
+       mkf = asn1c_open_file(destdir, makefile_name, "", 0);
+       if(mkf == NULL) {
+               perror(makefile_name);
+               return -1;
+       }
+
+       safe_fprintf(mkf, "ASN_MODULE_SRCS=");
+       TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+               TQ_FOR(arg->expr, &(mod->members), next) {
+                       if(asn1_lang_map[arg->expr->meta_type]
+                               [arg->expr->expr_type].type_cb &&
+                               (arg->expr->meta_type != AMT_VALUE)) {
+                               safe_fprintf(mkf, "\t\\\n\t%s%s.c", destdir,
+                               asn1c_make_identifier(AMI_MASK_ONLY_SPACES | AMI_USE_PREFIX, arg->expr, 0));
+                       }
+               }
+       }
+       safe_fprintf(mkf, "\n\nASN_MODULE_HDRS=");
+       TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+               TQ_FOR(arg->expr, &(mod->members), next) {
+                       if(asn1_lang_map[arg->expr->meta_type]
+                               [arg->expr->expr_type].type_cb &&
+                               (arg->expr->meta_type != AMT_VALUE)) {
+                safe_fprintf(
+                    mkf, "\t\\\n\t%s%s.h", destdir,
+                    asn1c_make_identifier(AMI_MASK_ONLY_SPACES | AMI_USE_PREFIX, arg->expr, 0));
+            }
+               }
+       }
+       safe_fprintf(mkf, "\n\n");
+
+       /*
+        * Move necessary skeleton files and add them to Makefile.am.targets.
+        */
+    asn1c_dep_chain *dlist = asn1c_deps_flatten(deps, ~FDEP_CONVERTER);
+    if(dlist) {
+               char dstpath[PATH_MAX];
+               char *dir_end;
+               size_t dlen = strlen(datadir);
+
+               assert(dlen < (sizeof(dstpath) / 2 - 2));
+               memcpy(dstpath, datadir, dlen);
+               dir_end = dstpath + dlen;
+               *dir_end++ = '/';
+
+               for(size_t i = 0; i < dlist->deps_count; i++) {
+                       char where[32]; /* Location of the */
+                       char *what_kind;        /* HDRS or SRCS */
+                       const asn1c_dep_filename *dep_file = dlist->deps[i];
+                       char *fname = dep_file->filename;
+                       char *dotH;
+
+                       assert(strlen(fname) < (sizeof(dstpath) / 2));
+                       strcpy(dir_end, fname);
+
+                       if(arg->flags & A1C_DEBUG) {
+                               snprintf(where, sizeof(where), "(line %d col %d)",
+                               dep_file->lineno, dep_file->column);
+                       } else {
+                               where[0] = '\0';
+                       }
+
+            if(asn1c_copy_over(arg, destdir, dstpath, where) == -1) {
+                safe_fprintf(mkf, ">>>ABORTED<<<");
+                               fclose(mkf);
+                               return -1;
+                       }
+
+                       /* HDRS versus SRCS */
+                       dotH = strrchr(fname, 'h');
+                       if(dotH && fname < dotH && dotH[-1] == '.' && !dotH[1]) {
+                               what_kind = "HDRS";
+                       } else {
+                               what_kind = "SRCS";
+                       }
+            safe_fprintf(mkf, "ASN_MODULE_%s+=%s%s\n", what_kind, destdir,
+                         fname);
+        }
+
+               asn1c_dep_chain_free(dlist);
+       }
+
+       safe_fprintf(
+               mkf,
+               "\n"
+               "ASN_MODULE_CFLAGS=%s%s",
+               (arg->flags & A1C_GEN_OER) ? "" : "-DASN_DISABLE_OER_SUPPORT ",
+               (arg->flags & A1C_GEN_PER) ? "" : "-DASN_DISABLE_PER_SUPPORT ");
+
+       safe_fprintf(
+               mkf,
+               "\n\n"
+               "lib_LTLIBRARIES+=libasncodec.la\n"
+               "libasncodec_la_SOURCES="
+               "$(ASN_MODULE_SRCS) $(ASN_MODULE_HDRS)\n"
+               "libasncodec_la_CPPFLAGS=-I$(top_srcdir)/%s\n"
+               "libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS)\n"
+               "libasncodec_la_LDFLAGS=-lm\n", destdir);
+       fclose(mkf);
+    safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
+
+    return 0;
+}
+
+static int
+asn1c__save_example_mk_makefile(arg_t *arg, const asn1c_dep_chainset *deps,
+                                const char *datadir, const char *destdir,
+                                const char *makefile_name,
+                                const char *library_makefile_name, int argc,
+                                char **argv) {
+    FILE *mkf;
+    asn1c_dep_chain *dlist = asn1c_deps_flatten(deps, FDEP_CONVERTER);
+
+    /* Generate converter-example.mk snippet */
+    mkf = asn1c_open_file(destdir, makefile_name, "", 0);
+    if(mkf == NULL) {
+        perror(makefile_name);
+        return -1;
+    }
+    safe_fprintf(
+        mkf,
+        "include %s%s\n\n"
+        "LIBS += -lm\n"
+        "CFLAGS += $(ASN_MODULE_CFLAGS) %s%s-I.\n"
+        "ASN_LIBRARY ?= libasncodec.a\n"
+        "ASN_PROGRAM ?= converter-example\n"
+        "ASN_PROGRAM_SRCS ?= ",
+        destdir, library_makefile_name,
+        (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
+        need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "");
+
+    if(dlist) {
+        for(size_t i = 0; i < dlist->deps_count; i++) {
+            char dstpath[PATH_MAX];
+            int ret = snprintf(dstpath, sizeof(dstpath), "%s/%s", datadir,
+                               dlist->deps[i]->filename);
+            assert(ret > 0 && (size_t)ret < sizeof(dstpath));
+            if(asn1c_copy_over(arg, destdir, dstpath, "implicit") == -1) {
+                safe_fprintf(mkf, ">>>ABORTED<<<");
+                fclose(mkf);
+                return -1;
+                       }
+            safe_fprintf(mkf, "\\\n\t%s%s", destdir, dlist->deps[i]->filename);
+        }
+        asn1c_dep_chain_free(dlist);
+    }
+
+    if(need_to_generate_pdu_collection(arg)) {
+        safe_fprintf(mkf, "\\\n\t%spdu_collection.c", destdir);
+        if(generate_pdu_collection_file(arg, destdir)) {
+            return -1;
+        }
+    }
+
+    safe_fprintf(
+        mkf,
+        "\n\nall: $(ASN_PROGRAM)\n"
+        "\n$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o)"
+        "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) "
+        "$(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS)\n"
+        "\n$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o)"
+        "\n\t$(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o)\n"
+        "\n.SUFFIXES:"
+        "\n.SUFFIXES: .c .o\n"
+        "\n.c.o:"
+        "\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
+        "\nclean:"
+        "\n\trm -f $(ASN_PROGRAM) $(ASN_LIBRARY)"
+        "\n\trm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o)\n"
+        "\nregen: regenerate-from-asn1-source\n"
+        "\nregenerate-from-asn1-source:\n\t");
+
+    for(int i = 0; i < argc; i++) {
+        safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
+    }
+    safe_fprintf(mkf, "\n\n");
+
+    fclose(mkf);
+    safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
+
+       return 0;
+}
+
+static int
+asn1c__save_example_am_makefile(arg_t *arg, const asn1c_dep_chainset *deps, const char *datadir,
+                                const char *destdir, const char *makefile_name,
+                                const char *library_makefile_name, int argc,
+                                char **argv) {
+       FILE *mkf;
+       asn1c_dep_chain *dlist = asn1c_deps_flatten(deps, FDEP_CONVERTER);
+
+       /* Generate example.am snippet */
+       mkf = asn1c_open_file(destdir, makefile_name, "", 0);
+       if(mkf == NULL) {
+               return -1;
+       }
+       safe_fprintf(mkf,
+                    "include %s%s\n\n"
+                    "bin_PROGRAMS += asn1convert\n"
+                    "asn1convert_CFLAGS = $(ASN_MODULE_CFLAGS) %s%s\n"
+                    "asn1convert_CPPFLAGS = -I$(top_srcdir)/%s\n"
+                    "asn1convert_LDADD = libasncodec.la\n"
+                    "asn1convert_SOURCES = ",
+                    destdir, library_makefile_name,
+                    (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
+                    need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "", destdir);
+
+       if(dlist) {
+               for(size_t i = 0; i < dlist->deps_count; i++) {
+                       char dstpath[PATH_MAX];
+                       int ret = snprintf(dstpath, sizeof(dstpath), "%s/%s", datadir,
+                                          dlist->deps[i]->filename);
+                       assert(ret > 0 && (size_t)ret < sizeof(dstpath));
+                       if(asn1c_copy_over(arg, destdir, dstpath, "implicit") == -1) {
+                               safe_fprintf(mkf, ">>>ABORTED<<<");
+                               fclose(mkf);
+                               return -1;
+                       }
+                       safe_fprintf(mkf, "\\\n\t%s%s", destdir, dlist->deps[i]->filename);
+               }
+               asn1c_dep_chain_free(dlist);
+       }
+
+       if(need_to_generate_pdu_collection(arg)) {
+               safe_fprintf(mkf, "\\\n\t%spdu_collection.c", destdir);
+               if(generate_pdu_collection_file(arg, destdir))
+                       return -1;
+       }
+
+       safe_fprintf(mkf,
+                    "\nregen: regenerate-from-asn1-source\n"
+                    "\nregenerate-from-asn1-source:\n\t");
+
+       for(int i = 0; i < argc; i++)
+               safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
+       safe_fprintf(mkf, "\n\n");
+
+       fclose(mkf);
+       safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
+
+       return 0;
+}
+
+static int
+asn1c__save_autotools_example(const char *destdir,
+                              const char *program_makefile_name) {
+       FILE *fd;
+       const char* confac = "configure.ac";
+       const char* makeam = "Makefile.am";
+
+       if ((access(confac, F_OK) != -1)
+           || (access(makeam, F_OK) != -1))
+       {
+               safe_fprintf(stderr, "Refusing to overwrite existing '%s' or '%s'\n", confac, makeam);
+               return -1;
+       }
+
+       fd = asn1c_open_file("", confac, "", 0);
+       if(fd == NULL) {
+               perror(confac);
+               return -1;
+       }
+
+       safe_fprintf(fd,
+                    "AC_INIT([asn1convert],[0.1])\n"
+                    "AM_INIT_AUTOMAKE([-Werror foreign subdir-objects])\n"
+                    "AC_PREREQ([2.62])\n"
+                    "AC_PROG_CC\n"
+                    "LT_INIT\n"
+                    "AM_SILENT_RULES([yes])\n"
+                    "AC_CONFIG_FILES([Makefile])\n"
+                    "AC_OUTPUT\n");
+       fclose(fd);
+       safe_fprintf(stderr, "Generated minimal example %s\n", confac);
+
+       fd = asn1c_open_file("", makeam, "", 0);
+       if(fd == NULL) {
+               perror(makeam);
+               return -1;
+       }
+
+       safe_fprintf(fd,
+                    "bin_PROGRAMS =\n"
+                    "lib_LTLIBRARIES =\n"
+                    "include %s%s\n\n",
+                    destdir, program_makefile_name);
+
+       fclose(fd);
+       safe_fprintf(stderr, "Generated minimal example %s\n", makeam);
+       safe_fprintf(stderr, "\nRun the following to generate a configure script:\n");
+       safe_fprintf(stderr, "$ autoreconf --force --install\n");
+       return 0;
+}
+
+static int
+can_generate_pdu_collection(arg_t *arg) {
+    abuf *buf = generate_pdu_collection(arg);
+    if(!buf) {
+        return -1;
+    }
+    abuf_free(buf);
+    return 0;
+}
+
+int
+asn1c_save_compiled_output(arg_t *arg, const char *datadir, const char *destdir,
+                           int argc, int optc, char **argv) {
+    int ret = -1;
+
+    const char* example_am_makefile = "Makefile.am.asn1convert";
+    const char* program_makefile = "converter-example.mk";
+    const char* library_makefile = "Makefile.am.libasncodec";
+
+    /*
+     * Early check that we can properly generate PDU collection.
+     */
+    if(can_generate_pdu_collection(arg) == -1) {
+        return -1;
+    }
+
+    asn1c_dep_chainset *deps;
+    do {
+        asn1p_module_t *mod;
+
+        deps = asn1c_read_file_dependencies(arg, datadir);
+        if(!deps && datadir) {
+            WARNING(
+                "Cannot read file-dependencies information "
+                "from %s\n",
+                datadir);
+        }
+
+        TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+            TQ_FOR(arg->expr, &(mod->members), next) {
+                if(asn1_lang_map[arg->expr->meta_type][arg->expr->expr_type]
+                       .type_cb &&
+                   (arg->expr->meta_type != AMT_VALUE)) {
+                    ret = asn1c_dump_streams(arg, deps, destdir, optc, argv);
+                    if(ret) break;
+                }
+            }
+        }
+
+        /*
+         * Dump out the Makefile template and the rest of the support code.
+         */
+        if((arg->flags & A1C_PRINT_COMPILED)
+           || (arg->flags & A1C_OMIT_SUPPORT_CODE)) {
+            ret = 0;    /* Success */
+            break;
+        }
+
+        if(ret) break;
+
+        ret = asn1c__save_library_makefile(arg, deps, datadir, destdir,
+                                           library_makefile);
+        if(ret) break;
+
+        if(arg->flags & A1C_GEN_EXAMPLE) {
+            ret = asn1c__save_example_mk_makefile(arg, deps, datadir, destdir,
+                                                  program_makefile,
+                                                  library_makefile, argc, argv);
+            if(ret) break;
+            ret = asn1c__save_example_am_makefile(arg, deps, datadir, destdir,
+                                                  example_am_makefile,
+                                                  library_makefile, argc, argv);
+            if(ret) break;
+
+            if(arg->flags & A1C_GEN_AUTOTOOLS_EXAMPLE) {
+                ret = asn1c__save_autotools_example(destdir, example_am_makefile);
+                if(ret) break;
+            }
+        }
+    } while(0);
+
+    asn1c_dep_chainset_free(deps);
+    asn1c__cleanup_pdu_type();
+
+    generate_constant_file(arg, destdir);
+
+    return ret;
+}
+
+/*
+ * Dump the streams.
+ */
+static int
+asn1c_dump_streams(arg_t *arg, asn1c_dep_chainset *deps, const char *destdir,
+                   int optc, char **argv) {
+    if(arg->flags & A1C_PRINT_COMPILED) {
+               return asn1c_print_streams(arg);
+       } else {
+               return asn1c_save_streams(arg, deps, destdir, optc, argv);
+       }
+}
+
+static int
+asn1c_print_streams(arg_t *arg)  {
+       compiler_streams_t *cs = arg->expr->data;
+       asn1p_expr_t *expr = arg->expr;
+       int i;
+
+       for(i = 1; i < OT_MAX; i++) {
+               out_chunk_t *ot;
+               if(TQ_FIRST(&cs->destination[i].chunks) == NULL)
+                       continue;
+
+               printf("\n/*** <<< %s [%s] >>> ***/\n\n",
+                       _compiler_stream2str[i],
+                       expr->Identifier);
+
+               TQ_FOR(ot, &(cs->destination[i].chunks), next) {
+                       safe_fwrite(ot->buf, ot->len, 1, stdout);
+               }
+       }
+
+       return 0;
+}
+
+static int
+asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *deps, const char *destdir,
+                   int optc, char **argv) {
+    asn1p_expr_t *expr = arg->expr;
+       compiler_streams_t *cs = expr->data;
+       out_chunk_t *ot;
+       FILE *fp_c, *fp_h;
+       char *tmpname_c, *tmpname_h;
+       char name_buf[FILENAME_MAX];
+       const char *header_id;
+       const char *c_retained = "";
+       const char *h_retained = "";
+       char *filename;
+
+       if(cs == NULL) {
+               safe_fprintf(stderr, "Cannot compile %s at line %d\n",
+                       expr->Identifier, expr->_lineno);
+               return -1;
+       }
+
+       filename = strdup(asn1c_make_identifier(AMI_MASK_ONLY_SPACES | AMI_USE_PREFIX,
+                                               expr, (char*)0));
+       fp_c = asn1c_open_file(destdir, filename, ".c", &tmpname_c);
+    if(fp_c == NULL) {
+        return -1;
+    }
+    fp_h = asn1c_open_file(destdir, filename, ".h", &tmpname_h);
+    if(fp_h == NULL) {
+        unlink(tmpname_c);
+        free(tmpname_c);
+        fclose(fp_c);
+        return -1;
+    }
+
+       generate_preamble(arg, fp_c, optc, argv);
+       generate_preamble(arg, fp_h, optc, argv);
+
+       header_id = asn1c_make_identifier(AMI_USE_PREFIX, expr, NULL);
+       safe_fprintf(fp_h,
+               "#ifndef\t_%s_H_\n"
+               "#define\t_%s_H_\n"
+               "\n", header_id, header_id);
+
+       safe_fprintf(fp_h, "\n");
+       HINCLUDE("asn_application.h");
+
+#define        SAVE_STREAM(fp, idx, msg, actdep)       do {                    \
+       if(TQ_FIRST(&(cs->destination[idx].chunks)) && *msg)            \
+               safe_fprintf(fp, "\n/* %s */\n", msg);                  \
+       TQ_FOR(ot, &(cs->destination[idx].chunks), next) {              \
+               if(actdep) asn1c_activate_dependency(deps, ot->buf, header_id); \
+               safe_fwrite(ot->buf, ot->len, 1, fp);                   \
+       }                                                               \
+} while(0)
+
+       SAVE_STREAM(fp_h, OT_INCLUDES,  "Including external dependencies", 1);
+
+       safe_fprintf(fp_h, "\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n");
+       SAVE_STREAM(fp_h, OT_DEPS,      "Dependencies", 0);
+       SAVE_STREAM(fp_h, OT_FWD_DECLS, "Forward declarations", 0);
+       SAVE_STREAM(fp_h, OT_FWD_DEFS,  "Forward definitions", 0);
+       SAVE_STREAM(fp_h, OT_TYPE_DECLS, filename, 0);
+       SAVE_STREAM(fp_h, OT_FUNC_DECLS,"Implementation", 0);
+       safe_fprintf(fp_h, "\n#ifdef __cplusplus\n}\n#endif\n");
+
+       if(!(arg->flags & A1C_NO_INCLUDE_DEPS))
+       SAVE_STREAM(fp_h, OT_POST_INCLUDE, "Referred external types", 1);
+
+       safe_fprintf(fp_h, "\n#endif\t/* _%s_H_ */\n", header_id);
+
+       HINCLUDE("asn_internal.h");
+       safe_fprintf(fp_c, "#include \"%s.h\"\n\n", filename);
+       if(arg->flags & A1C_NO_INCLUDE_DEPS)
+               SAVE_STREAM(fp_c, OT_POST_INCLUDE, "", 1);
+       TQ_FOR(ot, &(cs->destination[OT_IOC_TABLES].chunks), next)
+               safe_fwrite(ot->buf, ot->len, 1, fp_c);
+       TQ_FOR(ot, &(cs->destination[OT_CTABLES].chunks), next)
+               safe_fwrite(ot->buf, ot->len, 1, fp_c);
+       TQ_FOR(ot, &(cs->destination[OT_CODE].chunks), next)
+               safe_fwrite(ot->buf, ot->len, 1, fp_c);
+       TQ_FOR(ot, &(cs->destination[OT_CTDEFS].chunks), next)
+               safe_fwrite(ot->buf, ot->len, 1, fp_c);
+       TQ_FOR(ot, &(cs->destination[OT_STAT_DEFS].chunks), next)
+               safe_fwrite(ot->buf, ot->len, 1, fp_c);
+
+       assert(OT_MAX == 13);   /* Protection from reckless changes */
+
+       fclose(fp_c);
+       fclose(fp_h);
+
+    int ret = snprintf(name_buf, sizeof(name_buf), "%s%s.c", destdir, filename);
+    assert(ret > 0 && ret < (ssize_t)sizeof(name_buf));
+
+       if(identical_files(name_buf, tmpname_c)) {
+               c_retained = " (contents unchanged)";
+               unlink(tmpname_c);
+       } else {
+               if(rename(tmpname_c, name_buf)) {
+                       unlink(tmpname_c);
+                       perror(tmpname_c);
+                       free(tmpname_c);
+                       free(tmpname_h);
+                       return -1;
+               }
+       }
+
+       sprintf(name_buf, "%s%s.h", destdir, filename);
+       if(identical_files(name_buf, tmpname_h)) {
+               h_retained = " (contents unchanged)";
+               unlink(tmpname_h);
+       } else {
+               if(rename(tmpname_h, name_buf)) {
+                       unlink(tmpname_h);
+                       perror(tmpname_h);
+                       free(tmpname_c);
+                       free(tmpname_h);
+                       return -1;
+               }
+       }
+
+       free(tmpname_c);
+       free(tmpname_h);
+
+       safe_fprintf(stderr, "Compiled %s%s.c%s\n",
+               destdir, filename, c_retained);
+       safe_fprintf(stderr, "Compiled %s%s.h%s\n",
+               destdir, filename, h_retained);
+       free(filename);
+       return 0;
+}
+
+static int
+generate_preamble(arg_t *arg, FILE *fp, int optc, char **argv) {
+       safe_fprintf(fp,
+       "/*\n"
+       " * Generated by asn1c-" VERSION " (http://lionet.info/asn1c)\n"
+       " * From ASN.1 module \"%s\"\n"
+       " * \tfound in \"%s\"\n",
+               arg->expr->module->ModuleName,
+               arg->expr->module->source_file_name);
+       if(optc > 1) {
+               int i;
+               safe_fprintf(fp, " * \t`asn1c ");
+               for(i = 1; i < optc; i++)
+                       safe_fprintf(fp, "%s%s", i>1?" ":"", argv[i]);
+               safe_fprintf(fp, "`\n");
+       }
+       safe_fprintf(fp, " */\n\n");
+       return 0;
+}
+
+static int
+identical_files(const char *fname1, const char *fname2) {
+       char buf[2][4096];
+       FILE *fp1, *fp2;
+       size_t olen, nlen;
+       int retval = 1; /* Files are identical */
+
+#ifndef        _WIN32
+       struct stat sb;
+
+       if(lstat(fname1, &sb) || !S_ISREG(sb.st_mode)
+       || lstat(fname2, &sb) || !S_ISREG(sb.st_mode)) {
+               return 0;       /* Files are not identical */
+       }
+#endif
+
+       fp1 = fopen(fname1, "r");
+       if(!fp1) { return 0; }
+       fp2 = fopen(fname2, "r");
+       if(!fp2) { fclose(fp1); return 0; }
+
+       while((olen = fread(buf[0], 1, sizeof(buf[0]), fp1))) {
+               nlen = fread(buf[1], 1, olen, fp2);
+               if(nlen != olen || memcmp(buf[0], buf[1], nlen)) {
+                       retval = 0;
+                       break;
+               }
+       }
+       nlen = fread(buf[1], 1, 1, fp2);
+       if(nlen) retval = 0;
+
+       fclose(fp1);
+       fclose(fp2);
+       return retval;
+}
+
+/*
+ * Copy file for real.
+ */
+static int
+real_copy(const char *src, const char *dst) {
+       unsigned char buf[4096];
+       char *tmpname;
+       FILE *fpsrc, *fpdst;
+       size_t len;
+       int retval = 0;
+
+       if(identical_files(src, dst))
+               return retval;  /* Success, no need to copy for real. */
+
+       fpsrc = fopen(src, "r");
+       if(!fpsrc) { errno = EIO; return -1; }
+       fpdst = asn1c_open_file(NULL, dst, "", &tmpname);
+       if(!fpdst) { fclose(fpsrc); errno = EIO; return -1; }
+
+       while(!feof(fpsrc)) {
+               len = fread(buf, 1, sizeof(buf), fpsrc);
+               if(safe_fwrite(buf, 1, len, fpdst) != len) {
+                       perror(tmpname);
+                       errno = EIO;
+                       retval = -1;
+                       break;
+               }
+       }
+       fclose(fpsrc);
+       fclose(fpdst);
+
+       /* Check if copied correctly, and rename into a permanent name */
+       if(retval) {
+               unlink(tmpname);
+       } else if(rename(tmpname, dst)) {
+               unlink(tmpname);
+               perror(tmpname);
+               retval = -1;
+       }
+       free(tmpname);
+       return retval;
+}
+
+static int
+asn1c_copy_over(arg_t *arg, const char *destdir, const char *path,
+                const char *msg) {
+#ifdef _WIN32
+       int use_real_copy = 1;
+#else
+       int use_real_copy = !(arg->flags & A1C_LINK_SKELETONS);
+#endif
+
+       const char *fname = a1c_basename(path, destdir);
+       if(!fname
+       || (use_real_copy ? real_copy(path, fname) : symlink(path, fname))
+       ) {
+               if(errno == EEXIST) {
+                       struct stat sb1, sb2;
+                       if(stat(path, &sb1) == 0
+                       && stat(fname, &sb2) == 0
+                       && sb1.st_dev == sb2.st_dev
+                       && sb1.st_ino == sb2.st_ino) {
+                               /*
+                                * Nothing to do.
+                                */
+                               safe_fprintf(stderr,
+                                       "File %s is already here as %s\n",
+                                       path, fname);
+                               return 1;
+                       } else {
+                               safe_fprintf(stderr,
+                                       "Retaining local %s (%s suggested)\n",
+                                       fname, path);
+                               return 1;
+                       }
+               } else if(errno == ENOENT) {
+                       /* Ignore this */
+                       return 0;
+               } else {
+                       safe_fprintf(stderr, "%s %s -> %s failed: %s\n",
+                               use_real_copy ? "Copy" : "Symlink",
+                               path, fname, strerror(errno));
+                       return -1;
+               }
+       }
+
+    const int has_msg = msg && *msg;
+    safe_fprintf(stderr, "%s %s\t-> %s%s%s\n",
+                 use_real_copy ? "Copied" : "Symlinked", path, fname,
+                 has_msg ? " " : "", has_msg ? msg : "");
+
+    return 1;
+}
+
+
+static int
+generate_pdu_collection_file(arg_t *arg, const char *destdir) {
+    abuf *buf = generate_pdu_collection(arg);
+    assert(buf);
+
+    FILE *fp = asn1c_open_file(destdir, "pdu_collection", ".c", 0);
+       if(fp == NULL) {
+               perror("pdu_collection.c");
+               return -1;
+       }
+    safe_fwrite(buf->buffer, buf->length, 1, fp);
+    fclose(fp);
+
+       safe_fprintf(stderr, "Generated pdu_collection.c\n");
+    return 0;
+}
+
+static abuf *
+generate_pdu_collection(arg_t *arg) {
+       asn1p_module_t *mod;
+    abuf *buf = abuf_new();
+
+    abuf_printf(buf, "/*\n * Generated by asn1c-" VERSION
+                     " (http://lionet.info/asn1c)\n */\n\n");
+    abuf_printf(buf,
+                "struct asn_TYPE_descriptor_s;\t"
+                "/* Forward declaration */\n\n");
+
+
+    TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+        TQ_FOR(arg->expr, &(mod->members), next) {
+            if(include_type_to_pdu_collection(arg) == TI_NOT_INCLUDED) continue;
+            abuf_printf(buf,
+                        "extern struct asn_TYPE_descriptor_s "
+                        "asn_DEF_%s;\n",
+                        asn1c_make_identifier(AMI_USE_PREFIX, arg->expr, NULL));
+        }
+    }
+
+    abuf_printf(buf, "\n\n");
+       abuf_printf(buf, "struct asn_TYPE_descriptor_s *asn_pdu_collection[] = {\n");
+    TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+        int mod_printed = 0;
+        TQ_FOR(arg->expr, &(mod->members), next) {
+            switch(include_type_to_pdu_collection(arg)) {
+            case TI_NOT_INCLUDED:
+                continue;
+            case TI_INCLUDED_FROM_BULK:
+                /* Increment */
+                asn1c__pdu_type_lookup(arg->expr->Identifier);
+                break;
+            case TI_INCLUDED_FROM_CMDLINE:
+                break;
+            }
+            if(!mod_printed++) {
+                abuf_printf(buf, "\t/* From module %s in %s */\n",
+                             arg->expr->module->ModuleName,
+                             arg->expr->module->source_file_name);
+            }
+            abuf_printf(buf, "\t&asn_DEF_%s,\t\n",
+                         asn1c_make_identifier(AMI_USE_PREFIX, arg->expr, NULL));
+        }
+    }
+
+    abuf_printf(buf, "\t0\n};\n\n");
+
+    if(pdu_collection_has_unused_types(arg)) {
+        abuf_free(buf);
+        return NULL;
+    }
+
+       return buf;
+}
+
+static struct PDUType {
+       char *typename;
+       int used;
+} *pduType;
+static size_t pduTypes;
+
+static const char *
+generate_pdu_C_definition(void) {
+    const char *src;
+    char *def;
+       char *dst;
+    if(pduTypes == 0) return "";
+    def = malloc(strlen(pduType[0].typename) + 20);
+    assert(def);
+    strcpy(def, "-DPDU=");
+       for(src = pduType[0].typename, dst = def + 6; *src; src++, dst++) {
+        if((*dst = *src) == '-') {
+            *dst = '_';
+        }
+    }
+    *dst++ = ' ';
+    *dst = 0;
+    return def;
+}
+
+void
+asn1c__add_pdu_type(const char *ctypename) {
+       char *typename = strdup(ctypename);
+       assert(typename && *typename);
+
+       pduType = realloc(pduType, sizeof(pduType[0]) * (pduTypes + 1));
+       assert(pduType);
+       pduType[pduTypes].used = 0;
+       pduType[pduTypes].typename = typename;
+       pduTypes++;
+}
+
+static void
+asn1c__cleanup_pdu_type() {
+    for(size_t i = 0; i < pduTypes; i++) {
+        free(pduType[i].typename);
+    }
+    free(pduType);
+       pduType = NULL;
+    pduTypes = 0;
+}
+
+static int
+asn1c__pdu_type_lookup(const char *typename) {
+    for(size_t i = 0; i < pduTypes; i++) {
+        struct PDUType *pt = &pduType[i];
+        if(strcmp(pt->typename, typename) == 0) {
+            pt->used++;
+            return 1;
+        }
+    }
+    return 0;
+}
+
+static int
+need_to_generate_pdu_collection(arg_t *arg) {
+    /* If -pdu=all or -pdu=auto are given, we need to generate one. */
+       if(arg->flags & (A1C_PDU_ALL|A1C_PDU_AUTO))
+               return 1;
+
+    /*
+     * If no -pdu=... flags were given, need to do it, too,
+     * effectively producing -pdu=auto.
+     */
+    if(!(arg->flags & (A1C_PDU_ALL | A1C_PDU_AUTO | A1C_PDU_TYPE))) return 1;
+
+    if(arg->flags & A1C_PDU_TYPE) {
+        return (pduTypes > 1) ? 1 : 0;
+    }
+       return 0;
+}
+
+static int
+pdu_collection_has_unused_types(arg_t *arg) {
+    int ret = 0;
+
+    for(size_t i = 0; i < pduTypes; i++) {
+        struct PDUType *pt = &pduType[i];
+        if(!pt->used) {
+            FATAL("Unknown ASN.1 type specified in -pdu=%s", pt->typename);
+            ret = -1;
+        }
+    }
+
+    return ret;
+}
+
+static enum include_type_result
+include_type_to_pdu_collection(arg_t *arg) {
+    if(!asn1_lang_map[arg->expr->meta_type][arg->expr->expr_type].type_cb ||
+        (arg->expr->meta_type == AMT_VALUE))
+        return 0;
+
+    /* Parameterized types can't serve as PDU's without instantiation. */
+    if(arg->expr->lhs_params) {
+        return 0;
+    }
+
+    if((arg->flags & A1C_PDU_ALL)
+       /* -pdu=auto */
+       || ((arg->flags & A1C_PDU_AUTO) && !arg->expr->_type_referenced)
+       /* No -pdu=... whatsoever, act as if -pdu=auto */
+       || (!(arg->flags & (A1C_PDU_ALL | A1C_PDU_AUTO | A1C_PDU_TYPE))
+           && !arg->expr->_type_referenced)
+       || asn1c__pdu_type_lookup(arg->expr->Identifier)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+static abuf *
+generate_constant_collection(arg_t *arg) {
+    asn1p_module_t *mod;
+    abuf *buf = abuf_new();
+    int empty_file = 1;
+
+    abuf_printf(buf, "/*\n * Generated by asn1c-" VERSION
+                     " (http://lionet.info/asn1c)\n */\n\n");
+    abuf_printf(buf, "#ifndef _%sASN_CONSTANT_H\n#define _%sASN_CONSTANT_H\n\n", asn1c_prefix(), asn1c_prefix());
+
+    abuf_printf(buf, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n");
+
+    TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+        TQ_FOR(arg->expr, &(mod->members), next) {
+            if(arg->expr->meta_type != AMT_VALUE)
+                continue;
+
+            if(arg->expr->expr_type == ASN_BASIC_INTEGER) {
+                abuf_printf(buf, "#define %s (%s)\n",
+                            asn1c_make_identifier(AMI_USE_PREFIX, arg->expr, 0),
+                            asn1p_itoa(arg->expr->value->value.v_integer));
+                empty_file = 0;
+            }
+        }
+    }
+
+    abuf_printf(buf, "\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _%sASN_CONSTANT_H */\n", asn1c_prefix());
+
+    if(empty_file) {
+        abuf_free(buf);
+        return 0;
+    }
+    return buf;
+}
+
+static int
+generate_constant_file(arg_t *arg, const char *destdir) {
+    abuf *buf = generate_constant_collection(arg);
+    char *filename;
+    int filename_len;
+
+    if(!buf) return 0;
+
+    filename_len = strlen(asn1c_prefix()) + strlen("asn_constant");
+    filename = calloc(filename_len + 1, 1);
+    snprintf(filename, filename_len + 1, "%sasn_constant", asn1c_prefix());
+
+    if(arg->flags & A1C_PRINT_COMPILED) {
+        printf("\n/*** <<< asn_constant.h >>> ***/\n\n");
+        safe_fwrite(buf->buffer, buf->length, 1, stdout);
+    } else {
+
+        FILE *fp = asn1c_open_file(destdir, filename, ".h", 0);
+        if(fp == NULL) {
+            perror("asn_constant.h");
+            return -1;
+        }
+        safe_fwrite(buf->buffer, buf->length, 1, fp);
+        fclose(fp);
+    }
+    safe_fprintf(stderr, "Generated %s.h\n", filename);
+    free(filename);
+    abuf_free(buf);
+    return 0;
+}
diff --git a/libasn1compiler/asn1c_save.h b/libasn1compiler/asn1c_save.h
new file mode 100644 (file)
index 0000000..0420657
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef        ASN1C_SAVE_H
+#define        ASN1C_SAVE_H
+
+int asn1c_save_compiled_output(arg_t *arg, const char *datadir, const char* destdir,
+       int argc, int optc, char **argv);
+
+#endif /* ASN1C_SAVE_H */
diff --git a/libasn1compiler/asn1compiler.c b/libasn1compiler/asn1compiler.c
new file mode 100644 (file)
index 0000000..c3741bc
--- /dev/null
@@ -0,0 +1,282 @@
+#include "asn1c_internal.h"
+#include "asn1c_lang.h"
+#include "asn1c_out.h"
+#include "asn1c_save.h"
+#include "asn1c_ioc.h"
+#include "asn1c_naming.h"
+
+static void default_logger_cb(int, const char *fmt, ...);
+static int asn1c_compile_expr(arg_t *arg, const asn1c_ioc_table_and_objset_t *);
+static int asn1c_detach_streams(asn1p_expr_t *expr);
+
+int
+asn1_compile(asn1p_t *asn, const char *datadir, const char *destdir, enum asn1c_flags flags,
+               int argc, int optc, char **argv) {
+       arg_t arg_s;
+       arg_t *arg = &arg_s;
+       asn1p_module_t *mod;
+       int ret;
+
+       c_name_clash_finder_init();
+
+       /*
+        * Initialize target language.
+        */
+       ret = asn1c_with_language(ASN1C_LANGUAGE_C);
+       assert(ret == 0);
+
+       memset(arg, 0, sizeof(*arg));
+       arg->default_cb = asn1c_compile_expr;
+       arg->logger_cb = default_logger_cb;
+       arg->flags = flags;
+       arg->asn = asn;
+
+       /*
+        * Compile each individual top level structure.
+        */
+       TQ_FOR(mod, &(asn->modules), mod_next) {
+               TQ_FOR(arg->expr, &(mod->members), next) {
+                       arg->ns = asn1_namespace_new_from_module(mod, 0);
+
+                       compiler_streams_t *cs = NULL;
+
+                       if(asn1c_attach_streams(arg->expr))
+                               return -1;
+
+                       cs = arg->expr->data;
+                       cs->target = OT_TYPE_DECLS;
+                       arg->target = cs;
+
+                       ret = asn1c_compile_expr(arg, NULL);
+                       if(ret) {
+                               FATAL("Cannot compile \"%s\" (%x:%x) at line %d",
+                                       arg->expr->Identifier,
+                                       arg->expr->expr_type,
+                                       arg->expr->meta_type,
+                                       arg->expr->_lineno);
+                               return ret;
+                       }
+
+                       asn1_namespace_free(arg->ns);
+                       arg->ns = 0;
+               }
+       }
+
+       if(c_name_clash(arg)) {
+               if(arg->flags & A1C_COMPOUND_NAMES) {
+                       FATAL("Name clashes encountered even with -fcompound-names flag");
+                       /* Proceed further for better debugging. */
+               } else {
+                       FATAL("Use \"-fcompound-names\" flag to asn1c to resolve name clashes");
+                       if(arg->flags & A1C_PRINT_COMPILED) {
+                               /* Proceed further for better debugging. */
+                       } else {
+                               return -1;
+                       }
+               }
+       }
+
+       DEBUG("Saving compiled data");
+
+       c_name_clash_finder_destroy();
+
+       /*
+        * Save or print out the compiled result.
+        */
+       if(asn1c_save_compiled_output(arg, datadir, destdir, argc, optc, argv))
+               return -1;
+
+       TQ_FOR(mod, &(asn->modules), mod_next) {
+               TQ_FOR(arg->expr, &(mod->members), next) {
+                       asn1c_detach_streams(arg->expr);
+               }
+       }
+
+       return 0;
+}
+
+static int
+asn1c_compile_expr(arg_t *arg, const asn1c_ioc_table_and_objset_t *opt_ioc) {
+       asn1p_expr_t *expr = arg->expr;
+       int (*type_cb)(arg_t *);
+       int ret;
+
+       assert((int)expr->meta_type >= AMT_INVALID);
+       assert(expr->meta_type < AMT_EXPR_META_MAX);
+       assert((int)expr->expr_type >= A1TC_INVALID);
+       assert(expr->expr_type < ASN_EXPR_TYPE_MAX);
+
+       type_cb = asn1_lang_map[expr->meta_type][expr->expr_type].type_cb;
+       if(type_cb) {
+
+               DEBUG("Compiling %s at line %d",
+                       expr->Identifier,
+                       expr->_lineno);
+
+               if(expr->lhs_params && expr->spec_index == -1) {
+                       int i;
+                       ret = 0;
+                       DEBUG("Parameterized type %s at line %d: %s (%d)",
+                               expr->Identifier, expr->_lineno,
+                               expr->specializations.pspecs_count
+                               ? "compiling" : "unused, skipping",
+                               expr->specializations.pspecs_count);
+                       for(i = 0; i<expr->specializations.pspecs_count; i++) {
+                               arg->expr = expr->specializations
+                                               .pspec[i].my_clone;
+                               ret = asn1c_compile_expr(arg, opt_ioc);
+                               if(ret) break;
+                       }
+                       arg->expr = expr;       /* Restore */
+               } else {
+                       ret = type_cb(arg);
+               }
+       } else {
+               ret = -1;
+               /*
+                * Even if the target language compiler does not know
+                * how to compile the given expression, we know that
+                * certain expressions need not to be compiled at all.
+                */
+               switch(expr->meta_type) {
+               case AMT_OBJECT:
+               case AMT_OBJECTCLASS:
+               case AMT_OBJECTFIELD:
+               case AMT_VALUE:
+               case AMT_VALUESET:
+                       ret = 0;
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       if(ret == -1) {
+               FATAL("Cannot compile \"%s\" (%x:%x) at line %d",
+                       arg->expr->Identifier,
+                       arg->expr->expr_type,
+                       arg->expr->meta_type,
+                       arg->expr->_lineno);
+               OUT("#error Cannot compile \"%s\" (%x/%x) at line %d\n",
+                       arg->expr->Identifier,
+                       arg->expr->meta_type,
+                       arg->expr->expr_type,
+                       arg->expr->_lineno
+               );
+       }
+
+       return ret;
+}
+
+int
+asn1c_attach_streams(asn1p_expr_t *expr) {
+       compiler_streams_t *cs;
+       int i;
+
+       if(expr->data)
+               return 0;       /* Already attached? */
+
+       expr->data = calloc(1, sizeof(compiler_streams_t));
+       if(expr->data == NULL)
+               return -1;
+
+       cs = expr->data;
+       for(i = 0; i < OT_MAX; i++) {
+               TQ_INIT(&(cs->destination[i].chunks));
+       }
+
+       return 0;
+}
+
+int
+asn1c_detach_streams(asn1p_expr_t *expr) {
+       compiler_streams_t *cs;
+       out_chunk_t *m;
+       int i;
+
+       if(!expr->data)
+               return 0;       /* Already detached? */
+
+       cs = expr->data;
+       for(i = 0; i < OT_MAX; i++) {
+               while((m = TQ_REMOVE(&(cs->destination[i].chunks), next))) {
+                       free(m->buf);
+                       free(m);
+               }
+       }
+       free(expr->data);
+       expr->data = (void *)NULL;
+
+       return 0;
+}
+
+static void
+default_logger_cb(int _severity, const char *fmt, ...) {
+       va_list ap;
+       char *pfx = "";
+
+       switch(_severity) {
+       case -1: pfx = "DEBUG: "; break;
+       case 0: pfx = "WARNING: "; break;
+       case 1: pfx = "FATAL: "; break;
+       }
+
+       fprintf(stderr, "%s", pfx);
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+}
+
+static void
+asn1c_debug_expr_naming(arg_t *arg) {
+    asn1p_expr_t *expr = arg->expr;
+
+    printf("%s: ", expr->Identifier);
+    printf("%s\n", c_names_format(c_name(arg)));
+
+    printf("\n");
+
+}
+
+void
+asn1c_debug_type_naming(asn1p_t *asn, enum asn1c_flags flags,
+                        char **asn_type_names) {
+    arg_t arg_s;
+    arg_t *arg = &arg_s;
+       asn1p_module_t *mod;
+
+    memset(arg, 0, sizeof(*arg));
+       arg->logger_cb = default_logger_cb;
+       arg->flags = flags;
+       arg->asn = asn;
+
+       c_name_clash_finder_init();
+
+       /*
+        * Compile each individual top level structure.
+        */
+       TQ_FOR(mod, &(asn->modules), mod_next) {
+        int namespace_shown = 0;
+               TQ_FOR(arg->expr, &(mod->members), next) {
+                       arg->ns = asn1_namespace_new_from_module(mod, 0);
+
+            for(char **t = asn_type_names; *t; t++) {
+                if(strcmp(*t, arg->expr->Identifier) == 0) {
+                    if(!namespace_shown) {
+                        namespace_shown = 1;
+                        printf("Namespace %s\n",
+                               asn1_namespace_string(arg->ns));
+                    }
+                    asn1c_debug_expr_naming(arg);
+                }
+            }
+
+            asn1_namespace_free(arg->ns);
+                       arg->ns = 0;
+               }
+       }
+
+       c_name_clash_finder_destroy();
+}
+
diff --git a/libasn1compiler/asn1compiler.h b/libasn1compiler/asn1compiler.h
new file mode 100644 (file)
index 0000000..78cf07f
--- /dev/null
@@ -0,0 +1,115 @@
+#ifndef        ASN1_COMPILER_H
+#define        ASN1_COMPILER_H
+
+#include <asn1parser.h>
+
+enum asn1c_flags {
+       A1C_NOFLAGS,
+       /*
+        * Debug the compiler.
+        */
+       A1C_DEBUG               = 0x0001,
+       /*
+        * Do not split the target output in several files, just print it.
+        * (Note: the output is not likely to be compilable in this case).
+        */
+       A1C_PRINT_COMPILED      = 0x0002,
+       /*
+        * Generate only the tables for ASN.1 types,
+        * do not emit ASN.1 parsing support code.
+        */
+       A1C_OMIT_SUPPORT_CODE   = 0x0004,
+       /*
+        * Use wide types by default (INTEGER_t etc) instead of native/long.
+        */
+       A1C_USE_WIDE_TYPES      = 0x0008,
+       /*
+        * Do not use C99 extensions.
+        */
+       A1C_NO_C99              = 0x0010,
+       /*
+        * Enable use of unnamed unions (non-portable feature).
+        */
+       A1C_UNNAMED_UNIONS      = 0x0020,
+       /*
+        * Don't make the asn1_DEF_'s of structure members "static".
+        */
+       A1C_ALL_DEFS_GLOBAL     = 0x0040,
+       /*
+        * Do not generate constraint checking code.
+        */
+       A1C_NO_CONSTRAINTS      = 0x0080,
+       /*
+        * Generate type_id_PR_member things identifiers of id_PR_member.
+        */
+       A1C_COMPOUND_NAMES      = 0x0100,
+       /*
+        * Do not generate courtesy #includes for external dependencies.
+        */
+       A1C_NO_INCLUDE_DEPS     = 0x0200,
+       /*
+        * Compile members of CHOICE as indirect pointers.
+        */
+       A1C_INDIRECT_CHOICE     = 0x0400,
+       /*
+        * -flink-skeletons
+        * Symlink support files rather than copy them.
+        */
+       A1C_LINK_SKELETONS      = 0x0800,
+
+       /*
+        * -pdu={all|auto|Type}
+        * Generate PDU table
+        */
+       A1C_PDU_ALL                     = 0x2000,
+       A1C_PDU_AUTO            = 0x4000,
+       A1C_PDU_TYPE            = 0x8000,
+       /*
+        * -fincludes-quoted
+        * Avoid generating #include <foo>, generate "foo" instead.
+        */
+       A1C_INCLUDES_QUOTED     = 0x10000,
+       /*
+        * -fline-refs
+        * Include ASN.1 module's line numbers in comments.
+        */
+       A1C_LINE_REFS       = 0x20000,
+       /*
+        * -gen-OER
+        * Generate Octet Encoding Rules support code
+        */
+       A1C_GEN_OER                     = 0x40000,
+       /*
+        * -gen-PER
+        * Generate Packed Encoding Rules support code
+        */
+       A1C_GEN_PER                     = 0x80000,
+       /*
+        * Generate converter-example.c and converter-example.mk
+        */
+       A1C_GEN_EXAMPLE                 = 0x100000,
+       /*
+        * Generate top-level configure.ac and Makefile.am
+        */
+       A1C_GEN_AUTOTOOLS_EXAMPLE       = 0x200000,
+       /*
+        * Print the source of generated lines.
+        * -debug-output-origin-lines
+        */
+       A1C_DEBUG_OUTPUT_ORIGIN_LINES = 0x400000,
+};
+
+/*
+ * Compile the ASN.1 specification.
+ */
+int asn1_compile(asn1p_t *asn, const char *datadir, const char *destdir, enum asn1c_flags,
+       int argc, int optc, char **argv);
+
+void asn1c_debug_type_naming(asn1p_t *asn, enum asn1c_flags,
+                             char **asn_type_names);
+
+void asn1c__add_pdu_type(const char *typename);
+
+int asn1c_attach_streams(asn1p_expr_t *expr);
+
+#endif /* ASN1_COMPILER_H */
diff --git a/libasn1compiler/check_compiler.c b/libasn1compiler/check_compiler.c
new file mode 100644 (file)
index 0000000..1da6902
--- /dev/null
@@ -0,0 +1,7 @@
+#include "asn1compiler.h"
+
+int
+main(int ac, char **av) {
+       return 0;
+}
+
diff --git a/libasn1fix/.deps/asn1fix.Plo b/libasn1fix/.deps/asn1fix.Plo
new file mode 100644 (file)
index 0000000..0167e51
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix.lo: asn1fix.c /usr/include/stdc-predef.h asn1fix_internal.h \
+ ../config.h /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_bitstring.Plo b/libasn1fix/.deps/asn1fix_bitstring.Plo
new file mode 100644 (file)
index 0000000..53ed2d7
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_bitstring.lo: asn1fix_bitstring.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_class.Plo b/libasn1fix/.deps/asn1fix_class.Plo
new file mode 100644 (file)
index 0000000..704c8d3
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_class.lo: asn1fix_class.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_compat.Plo b/libasn1fix/.deps/asn1fix_compat.Plo
new file mode 100644 (file)
index 0000000..5b2cbf7
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_compat.lo: asn1fix_compat.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_constr.Plo b/libasn1fix/.deps/asn1fix_constr.Plo
new file mode 100644 (file)
index 0000000..dc1edb2
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_constr.lo: asn1fix_constr.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_constraint.Plo b/libasn1fix/.deps/asn1fix_constraint.Plo
new file mode 100644 (file)
index 0000000..01a00ad
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_constraint.lo: asn1fix_constraint.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_constraint_compat.Plo b/libasn1fix/.deps/asn1fix_constraint_compat.Plo
new file mode 100644 (file)
index 0000000..307cd76
--- /dev/null
@@ -0,0 +1,256 @@
+asn1fix_constraint_compat.lo: asn1fix_constraint_compat.c \
+ /usr/include/stdc-predef.h asn1fix_internal.h ../config.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_crange.Plo b/libasn1fix/.deps/asn1fix_crange.Plo
new file mode 100644 (file)
index 0000000..73e3eb8
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_crange.lo: asn1fix_crange.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_cstring.Plo b/libasn1fix/.deps/asn1fix_cstring.Plo
new file mode 100644 (file)
index 0000000..647a063
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_cstring.lo: asn1fix_cstring.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_cws.Plo b/libasn1fix/.deps/asn1fix_cws.Plo
new file mode 100644 (file)
index 0000000..dcc18ca
--- /dev/null
@@ -0,0 +1,256 @@
+asn1fix_cws.lo: asn1fix_cws.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h asn1fix_internal.h \
+ ../config.h /usr/include/string.h /usr/include/xlocale.h \
+ /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_dereft.Plo b/libasn1fix/.deps/asn1fix_dereft.Plo
new file mode 100644 (file)
index 0000000..14b0043
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_dereft.lo: asn1fix_dereft.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_derefv.Plo b/libasn1fix/.deps/asn1fix_derefv.Plo
new file mode 100644 (file)
index 0000000..a79fb7e
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_derefv.lo: asn1fix_derefv.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_enum.Plo b/libasn1fix/.deps/asn1fix_enum.Plo
new file mode 100644 (file)
index 0000000..8224eed
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_enum.lo: asn1fix_enum.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_export.Plo b/libasn1fix/.deps/asn1fix_export.Plo
new file mode 100644 (file)
index 0000000..f159f49
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_export.lo: asn1fix_export.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_integer.Plo b/libasn1fix/.deps/asn1fix_integer.Plo
new file mode 100644 (file)
index 0000000..b23fc76
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_integer.lo: asn1fix_integer.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_misc.Plo b/libasn1fix/.deps/asn1fix_misc.Plo
new file mode 100644 (file)
index 0000000..105230e
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_misc.lo: asn1fix_misc.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_param.Plo b/libasn1fix/.deps/asn1fix_param.Plo
new file mode 100644 (file)
index 0000000..b34e61b
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_param.lo: asn1fix_param.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_retrieve.Plo b/libasn1fix/.deps/asn1fix_retrieve.Plo
new file mode 100644 (file)
index 0000000..25ebb6a
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_retrieve.lo: asn1fix_retrieve.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_tags.Plo b/libasn1fix/.deps/asn1fix_tags.Plo
new file mode 100644 (file)
index 0000000..545af9b
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_tags.lo: asn1fix_tags.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/asn1fix_value.Plo b/libasn1fix/.deps/asn1fix_value.Plo
new file mode 100644 (file)
index 0000000..b50226a
--- /dev/null
@@ -0,0 +1,255 @@
+asn1fix_value.lo: asn1fix_value.c /usr/include/stdc-predef.h \
+ asn1fix_internal.h ../config.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/ctype.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ ../libasn1parser/asn1parser.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ ../libasn1parser/asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h ../libasn1parser/asn1p_list.h \
+ ../libasn1parser/asn1p_oid.h ../libasn1parser/asn1p_module.h \
+ ../libasn1parser/asn1p_value.h ../libasn1parser/asn1p_param.h \
+ ../libasn1parser/asn1p_constr.h ../libasn1parser/asn1p_xports.h \
+ ../libasn1parser/asn1p_class.h ../libasn1parser/asn1p_expr.h \
+ ../libasn1parser/asn1p_expr_str.h ../libasn1parser/asn1p_expr2uclass.h \
+ ../libasn1common/genhash.h asn1fix.h asn1fix_misc.h asn1fix_value.h \
+ asn1fix_cstring.h asn1fix_compat.h asn1fix_constr.h asn1fix_class.h \
+ asn1fix_cws.h asn1fix_param.h asn1fix_retrieve.h asn1fix_enum.h \
+ asn1fix_integer.h asn1fix_bitstring.h asn1fix_dereft.h asn1fix_derefv.h \
+ asn1fix_tags.h asn1fix_constraint.h asn1fix_crange.h asn1fix_export.h
+
+/usr/include/stdc-predef.h:
+
+asn1fix_internal.h:
+
+../config.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/ctype.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+../libasn1parser/asn1parser.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1common/genhash.h:
+
+asn1fix.h:
+
+asn1fix_misc.h:
+
+asn1fix_value.h:
+
+asn1fix_cstring.h:
+
+asn1fix_compat.h:
+
+asn1fix_constr.h:
+
+asn1fix_class.h:
+
+asn1fix_cws.h:
+
+asn1fix_param.h:
+
+asn1fix_retrieve.h:
+
+asn1fix_enum.h:
+
+asn1fix_integer.h:
+
+asn1fix_bitstring.h:
+
+asn1fix_dereft.h:
+
+asn1fix_derefv.h:
+
+asn1fix_tags.h:
+
+asn1fix_constraint.h:
+
+asn1fix_crange.h:
+
+asn1fix_export.h:
diff --git a/libasn1fix/.deps/check_crange-asn1fix_constraint_compat.Po b/libasn1fix/.deps/check_crange-asn1fix_constraint_compat.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/libasn1fix/.deps/check_crange-asn1fix_crange.Po b/libasn1fix/.deps/check_crange-asn1fix_crange.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/libasn1fix/.deps/check_fixer-check_fixer.Po b/libasn1fix/.deps/check_fixer-check_fixer.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/libasn1fix/Makefile b/libasn1fix/Makefile
new file mode 100644 (file)
index 0000000..fa8cb74
--- /dev/null
@@ -0,0 +1,1232 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# libasn1fix/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+check_PROGRAMS = check_crange$(EXEEXT) check_fixer$(EXEEXT)
+TESTS = $(check_PROGRAMS)
+subdir = libasn1fix
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1fix_la_LIBADD =
+am_libasn1fix_la_OBJECTS = asn1fix.lo asn1fix_misc.lo asn1fix_value.lo \
+       asn1fix_compat.lo asn1fix_constr.lo asn1fix_cstring.lo \
+       asn1fix_retrieve.lo asn1fix_bitstring.lo asn1fix_constraint.lo \
+       asn1fix_integer.lo asn1fix_crange.lo asn1fix_dereft.lo \
+       asn1fix_derefv.lo asn1fix_export.lo asn1fix_param.lo \
+       asn1fix_class.lo asn1fix_tags.lo asn1fix_enum.lo \
+       asn1fix_cws.lo asn1fix_constraint_compat.lo
+libasn1fix_la_OBJECTS = $(am_libasn1fix_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+am_check_crange_OBJECTS = check_crange-asn1fix_crange.$(OBJEXT) \
+       check_crange-asn1fix_constraint_compat.$(OBJEXT)
+check_crange_OBJECTS = $(am_check_crange_OBJECTS)
+check_crange_LDADD = $(LDADD)
+check_crange_DEPENDENCIES = $(noinst_LTLIBRARIES) \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1common/libasn1common.la
+check_fixer_SOURCES = check_fixer.c
+check_fixer_OBJECTS = check_fixer-check_fixer.$(OBJEXT)
+check_fixer_LDADD = $(LDADD)
+check_fixer_DEPENDENCIES = $(noinst_LTLIBRARIES) \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1common/libasn1common.la
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1fix_la_SOURCES) $(check_crange_SOURCES) \
+       check_fixer.c
+DIST_SOURCES = $(libasn1fix_la_SOURCES) $(check_crange_SOURCES) \
+       check_fixer.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/libasn1fix
+abs_srcdir = /home/nokia/mouse07410/asn1c/libasn1fix
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser
+
+noinst_LTLIBRARIES = libasn1fix.la
+libasn1fix_la_SOURCES = \
+    asn1fix.c asn1fix.h                         \
+    asn1fix_internal.h                          \
+    asn1fix_misc.c asn1fix_misc.h               \
+    asn1fix_value.c asn1fix_value.h             \
+    asn1fix_compat.c asn1fix_compat.h           \
+    asn1fix_constr.c asn1fix_constr.h           \
+    asn1fix_cstring.c asn1fix_cstring.h         \
+    asn1fix_retrieve.c asn1fix_retrieve.h       \
+    asn1fix_bitstring.c asn1fix_bitstring.h     \
+    asn1fix_constraint.c asn1fix_constraint.h   \
+    asn1fix_integer.c asn1fix_integer.h         \
+    asn1fix_crange.c asn1fix_crange.h           \
+    asn1fix_dereft.c asn1fix_dereft.h           \
+    asn1fix_derefv.c asn1fix_derefv.h           \
+    asn1fix_export.c asn1fix_export.h           \
+    asn1fix_param.c asn1fix_param.h             \
+    asn1fix_class.c asn1fix_class.h             \
+    asn1fix_tags.c asn1fix_tags.h               \
+    asn1fix_enum.c asn1fix_enum.h               \
+    asn1fix_cws.c asn1fix_cws.h                 \
+    asn1fix_constraint_compat.c
+
+check_fixer_CPPFLAGS = -DTOP_SRCDIR=${top_srcdir} $(AM_CPPFLAGS)
+check_crange_SOURCES = asn1fix_crange.c asn1fix_constraint_compat.c
+check_crange_CPPFLAGS = -DUNIT_TEST $(AM_CPPFLAGS)
+LDADD = $(noinst_LTLIBRARIES)   \
+    $(top_builddir)/libasn1parser/libasn1parser.la  \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir}
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1fix/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1fix/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1fix.la: $(libasn1fix_la_OBJECTS) $(libasn1fix_la_DEPENDENCIES) $(EXTRA_libasn1fix_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1fix_la_OBJECTS) $(libasn1fix_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check_crange$(EXEEXT): $(check_crange_OBJECTS) $(check_crange_DEPENDENCIES) $(EXTRA_check_crange_DEPENDENCIES) 
+       @rm -f check_crange$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_crange_OBJECTS) $(check_crange_LDADD) $(LIBS)
+
+check_fixer$(EXEEXT): $(check_fixer_OBJECTS) $(check_fixer_DEPENDENCIES) $(EXTRA_check_fixer_DEPENDENCIES) 
+       @rm -f check_fixer$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_fixer_OBJECTS) $(check_fixer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1fix.Plo
+include ./$(DEPDIR)/asn1fix_bitstring.Plo
+include ./$(DEPDIR)/asn1fix_class.Plo
+include ./$(DEPDIR)/asn1fix_compat.Plo
+include ./$(DEPDIR)/asn1fix_constr.Plo
+include ./$(DEPDIR)/asn1fix_constraint.Plo
+include ./$(DEPDIR)/asn1fix_constraint_compat.Plo
+include ./$(DEPDIR)/asn1fix_crange.Plo
+include ./$(DEPDIR)/asn1fix_cstring.Plo
+include ./$(DEPDIR)/asn1fix_cws.Plo
+include ./$(DEPDIR)/asn1fix_dereft.Plo
+include ./$(DEPDIR)/asn1fix_derefv.Plo
+include ./$(DEPDIR)/asn1fix_enum.Plo
+include ./$(DEPDIR)/asn1fix_export.Plo
+include ./$(DEPDIR)/asn1fix_integer.Plo
+include ./$(DEPDIR)/asn1fix_misc.Plo
+include ./$(DEPDIR)/asn1fix_param.Plo
+include ./$(DEPDIR)/asn1fix_retrieve.Plo
+include ./$(DEPDIR)/asn1fix_tags.Plo
+include ./$(DEPDIR)/asn1fix_value.Plo
+include ./$(DEPDIR)/check_crange-asn1fix_constraint_compat.Po
+include ./$(DEPDIR)/check_crange-asn1fix_crange.Po
+include ./$(DEPDIR)/check_fixer-check_fixer.Po
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+check_crange-asn1fix_crange.o: asn1fix_crange.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_crange.o -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_crange.Tpo -c -o check_crange-asn1fix_crange.o `test -f 'asn1fix_crange.c' || echo '$(srcdir)/'`asn1fix_crange.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_crange.Tpo $(DEPDIR)/check_crange-asn1fix_crange.Po
+#      $(AM_V_CC)source='asn1fix_crange.c' object='check_crange-asn1fix_crange.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_crange.o `test -f 'asn1fix_crange.c' || echo '$(srcdir)/'`asn1fix_crange.c
+
+check_crange-asn1fix_crange.obj: asn1fix_crange.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_crange.obj -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_crange.Tpo -c -o check_crange-asn1fix_crange.obj `if test -f 'asn1fix_crange.c'; then $(CYGPATH_W) 'asn1fix_crange.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_crange.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_crange.Tpo $(DEPDIR)/check_crange-asn1fix_crange.Po
+#      $(AM_V_CC)source='asn1fix_crange.c' object='check_crange-asn1fix_crange.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_crange.obj `if test -f 'asn1fix_crange.c'; then $(CYGPATH_W) 'asn1fix_crange.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_crange.c'; fi`
+
+check_crange-asn1fix_constraint_compat.o: asn1fix_constraint_compat.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_constraint_compat.o -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo -c -o check_crange-asn1fix_constraint_compat.o `test -f 'asn1fix_constraint_compat.c' || echo '$(srcdir)/'`asn1fix_constraint_compat.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo $(DEPDIR)/check_crange-asn1fix_constraint_compat.Po
+#      $(AM_V_CC)source='asn1fix_constraint_compat.c' object='check_crange-asn1fix_constraint_compat.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_constraint_compat.o `test -f 'asn1fix_constraint_compat.c' || echo '$(srcdir)/'`asn1fix_constraint_compat.c
+
+check_crange-asn1fix_constraint_compat.obj: asn1fix_constraint_compat.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_constraint_compat.obj -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo -c -o check_crange-asn1fix_constraint_compat.obj `if test -f 'asn1fix_constraint_compat.c'; then $(CYGPATH_W) 'asn1fix_constraint_compat.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_constraint_compat.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo $(DEPDIR)/check_crange-asn1fix_constraint_compat.Po
+#      $(AM_V_CC)source='asn1fix_constraint_compat.c' object='check_crange-asn1fix_constraint_compat.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_constraint_compat.obj `if test -f 'asn1fix_constraint_compat.c'; then $(CYGPATH_W) 'asn1fix_constraint_compat.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_constraint_compat.c'; fi`
+
+check_fixer-check_fixer.o: check_fixer.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_fixer-check_fixer.o -MD -MP -MF $(DEPDIR)/check_fixer-check_fixer.Tpo -c -o check_fixer-check_fixer.o `test -f 'check_fixer.c' || echo '$(srcdir)/'`check_fixer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_fixer-check_fixer.Tpo $(DEPDIR)/check_fixer-check_fixer.Po
+#      $(AM_V_CC)source='check_fixer.c' object='check_fixer-check_fixer.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_fixer-check_fixer.o `test -f 'check_fixer.c' || echo '$(srcdir)/'`check_fixer.c
+
+check_fixer-check_fixer.obj: check_fixer.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_fixer-check_fixer.obj -MD -MP -MF $(DEPDIR)/check_fixer-check_fixer.Tpo -c -o check_fixer-check_fixer.obj `if test -f 'check_fixer.c'; then $(CYGPATH_W) 'check_fixer.c'; else $(CYGPATH_W) '$(srcdir)/check_fixer.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_fixer-check_fixer.Tpo $(DEPDIR)/check_fixer-check_fixer.Po
+#      $(AM_V_CC)source='check_fixer.c' object='check_fixer-check_fixer.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_fixer-check_fixer.obj `if test -f 'check_fixer.c'; then $(CYGPATH_W) 'check_fixer.c'; else $(CYGPATH_W) '$(srcdir)/check_fixer.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check_crange.log: check_crange$(EXEEXT)
+       @p='check_crange$(EXEEXT)'; \
+       b='check_crange'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check_fixer.log: check_fixer$(EXEEXT)
+       @p='check_fixer$(EXEEXT)'; \
+       b='check_fixer'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+       uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+# 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:
diff --git a/libasn1fix/Makefile.am b/libasn1fix/Makefile.am
new file mode 100644 (file)
index 0000000..645c2f4
--- /dev/null
@@ -0,0 +1,46 @@
+@CODE_COVERAGE_RULES@
+
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS =                       \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser
+
+noinst_LTLIBRARIES = libasn1fix.la
+
+libasn1fix_la_SOURCES =                         \
+    asn1fix.c asn1fix.h                         \
+    asn1fix_internal.h                          \
+    asn1fix_misc.c asn1fix_misc.h               \
+    asn1fix_value.c asn1fix_value.h             \
+    asn1fix_compat.c asn1fix_compat.h           \
+    asn1fix_constr.c asn1fix_constr.h           \
+    asn1fix_cstring.c asn1fix_cstring.h         \
+    asn1fix_retrieve.c asn1fix_retrieve.h       \
+    asn1fix_bitstring.c asn1fix_bitstring.h     \
+    asn1fix_constraint.c asn1fix_constraint.h   \
+    asn1fix_integer.c asn1fix_integer.h         \
+    asn1fix_crange.c asn1fix_crange.h           \
+    asn1fix_dereft.c asn1fix_dereft.h           \
+    asn1fix_derefv.c asn1fix_derefv.h           \
+    asn1fix_export.c asn1fix_export.h           \
+    asn1fix_param.c asn1fix_param.h             \
+    asn1fix_class.c asn1fix_class.h             \
+    asn1fix_tags.c asn1fix_tags.h               \
+    asn1fix_enum.c asn1fix_enum.h               \
+    asn1fix_cws.c asn1fix_cws.h                 \
+    asn1fix_constraint_compat.c
+
+check_fixer_CPPFLAGS = -DTOP_SRCDIR=${top_srcdir} $(AM_CPPFLAGS)
+
+check_crange_SOURCES = asn1fix_crange.c asn1fix_constraint_compat.c
+check_crange_CPPFLAGS = -DUNIT_TEST $(AM_CPPFLAGS)
+
+LDADD = $(noinst_LTLIBRARIES)   \
+    $(top_builddir)/libasn1parser/libasn1parser.la  \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+check_PROGRAMS = check_crange check_fixer
+
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir}
+TESTS = ${check_PROGRAMS}
+
diff --git a/libasn1fix/Makefile.in b/libasn1fix/Makefile.in
new file mode 100644 (file)
index 0000000..98646b8
--- /dev/null
@@ -0,0 +1,1134 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+check_PROGRAMS = check_crange$(EXEEXT) check_fixer$(EXEEXT)
+TESTS = $(check_PROGRAMS)
+subdir = libasn1fix
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1fix_la_LIBADD =
+am_libasn1fix_la_OBJECTS = asn1fix.lo asn1fix_misc.lo asn1fix_value.lo \
+       asn1fix_compat.lo asn1fix_constr.lo asn1fix_cstring.lo \
+       asn1fix_retrieve.lo asn1fix_bitstring.lo asn1fix_constraint.lo \
+       asn1fix_integer.lo asn1fix_crange.lo asn1fix_dereft.lo \
+       asn1fix_derefv.lo asn1fix_export.lo asn1fix_param.lo \
+       asn1fix_class.lo asn1fix_tags.lo asn1fix_enum.lo \
+       asn1fix_cws.lo asn1fix_constraint_compat.lo
+libasn1fix_la_OBJECTS = $(am_libasn1fix_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+am_check_crange_OBJECTS = check_crange-asn1fix_crange.$(OBJEXT) \
+       check_crange-asn1fix_constraint_compat.$(OBJEXT)
+check_crange_OBJECTS = $(am_check_crange_OBJECTS)
+check_crange_LDADD = $(LDADD)
+check_crange_DEPENDENCIES = $(noinst_LTLIBRARIES) \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1common/libasn1common.la
+check_fixer_SOURCES = check_fixer.c
+check_fixer_OBJECTS = check_fixer-check_fixer.$(OBJEXT)
+check_fixer_LDADD = $(LDADD)
+check_fixer_DEPENDENCIES = $(noinst_LTLIBRARIES) \
+       $(top_builddir)/libasn1parser/libasn1parser.la \
+       $(top_builddir)/libasn1common/libasn1common.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1fix_la_SOURCES) $(check_crange_SOURCES) \
+       check_fixer.c
+DIST_SOURCES = $(libasn1fix_la_SOURCES) $(check_crange_SOURCES) \
+       check_fixer.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser
+
+noinst_LTLIBRARIES = libasn1fix.la
+libasn1fix_la_SOURCES = \
+    asn1fix.c asn1fix.h                         \
+    asn1fix_internal.h                          \
+    asn1fix_misc.c asn1fix_misc.h               \
+    asn1fix_value.c asn1fix_value.h             \
+    asn1fix_compat.c asn1fix_compat.h           \
+    asn1fix_constr.c asn1fix_constr.h           \
+    asn1fix_cstring.c asn1fix_cstring.h         \
+    asn1fix_retrieve.c asn1fix_retrieve.h       \
+    asn1fix_bitstring.c asn1fix_bitstring.h     \
+    asn1fix_constraint.c asn1fix_constraint.h   \
+    asn1fix_integer.c asn1fix_integer.h         \
+    asn1fix_crange.c asn1fix_crange.h           \
+    asn1fix_dereft.c asn1fix_dereft.h           \
+    asn1fix_derefv.c asn1fix_derefv.h           \
+    asn1fix_export.c asn1fix_export.h           \
+    asn1fix_param.c asn1fix_param.h             \
+    asn1fix_class.c asn1fix_class.h             \
+    asn1fix_tags.c asn1fix_tags.h               \
+    asn1fix_enum.c asn1fix_enum.h               \
+    asn1fix_cws.c asn1fix_cws.h                 \
+    asn1fix_constraint_compat.c
+
+check_fixer_CPPFLAGS = -DTOP_SRCDIR=${top_srcdir} $(AM_CPPFLAGS)
+check_crange_SOURCES = asn1fix_crange.c asn1fix_constraint_compat.c
+check_crange_CPPFLAGS = -DUNIT_TEST $(AM_CPPFLAGS)
+LDADD = $(noinst_LTLIBRARIES)   \
+    $(top_builddir)/libasn1parser/libasn1parser.la  \
+    $(top_builddir)/libasn1common/libasn1common.la
+
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir}
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1fix/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1fix/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1fix.la: $(libasn1fix_la_OBJECTS) $(libasn1fix_la_DEPENDENCIES) $(EXTRA_libasn1fix_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1fix_la_OBJECTS) $(libasn1fix_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check_crange$(EXEEXT): $(check_crange_OBJECTS) $(check_crange_DEPENDENCIES) $(EXTRA_check_crange_DEPENDENCIES) 
+       @rm -f check_crange$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_crange_OBJECTS) $(check_crange_LDADD) $(LIBS)
+
+check_fixer$(EXEEXT): $(check_fixer_OBJECTS) $(check_fixer_DEPENDENCIES) $(EXTRA_check_fixer_DEPENDENCIES) 
+       @rm -f check_fixer$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_fixer_OBJECTS) $(check_fixer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_bitstring.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_class.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_compat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_constr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_constraint.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_constraint_compat.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_crange.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_cstring.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_cws.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_dereft.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_derefv.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_enum.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_export.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_integer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_misc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_param.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_retrieve.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_tags.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1fix_value.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_crange-asn1fix_constraint_compat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_crange-asn1fix_crange.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_fixer-check_fixer.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+check_crange-asn1fix_crange.o: asn1fix_crange.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_crange.o -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_crange.Tpo -c -o check_crange-asn1fix_crange.o `test -f 'asn1fix_crange.c' || echo '$(srcdir)/'`asn1fix_crange.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_crange.Tpo $(DEPDIR)/check_crange-asn1fix_crange.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn1fix_crange.c' object='check_crange-asn1fix_crange.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_crange.o `test -f 'asn1fix_crange.c' || echo '$(srcdir)/'`asn1fix_crange.c
+
+check_crange-asn1fix_crange.obj: asn1fix_crange.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_crange.obj -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_crange.Tpo -c -o check_crange-asn1fix_crange.obj `if test -f 'asn1fix_crange.c'; then $(CYGPATH_W) 'asn1fix_crange.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_crange.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_crange.Tpo $(DEPDIR)/check_crange-asn1fix_crange.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn1fix_crange.c' object='check_crange-asn1fix_crange.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_crange.obj `if test -f 'asn1fix_crange.c'; then $(CYGPATH_W) 'asn1fix_crange.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_crange.c'; fi`
+
+check_crange-asn1fix_constraint_compat.o: asn1fix_constraint_compat.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_constraint_compat.o -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo -c -o check_crange-asn1fix_constraint_compat.o `test -f 'asn1fix_constraint_compat.c' || echo '$(srcdir)/'`asn1fix_constraint_compat.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo $(DEPDIR)/check_crange-asn1fix_constraint_compat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn1fix_constraint_compat.c' object='check_crange-asn1fix_constraint_compat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_constraint_compat.o `test -f 'asn1fix_constraint_compat.c' || echo '$(srcdir)/'`asn1fix_constraint_compat.c
+
+check_crange-asn1fix_constraint_compat.obj: asn1fix_constraint_compat.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_crange-asn1fix_constraint_compat.obj -MD -MP -MF $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo -c -o check_crange-asn1fix_constraint_compat.obj `if test -f 'asn1fix_constraint_compat.c'; then $(CYGPATH_W) 'asn1fix_constraint_compat.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_constraint_compat.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_crange-asn1fix_constraint_compat.Tpo $(DEPDIR)/check_crange-asn1fix_constraint_compat.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn1fix_constraint_compat.c' object='check_crange-asn1fix_constraint_compat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_crange_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_crange-asn1fix_constraint_compat.obj `if test -f 'asn1fix_constraint_compat.c'; then $(CYGPATH_W) 'asn1fix_constraint_compat.c'; else $(CYGPATH_W) '$(srcdir)/asn1fix_constraint_compat.c'; fi`
+
+check_fixer-check_fixer.o: check_fixer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_fixer-check_fixer.o -MD -MP -MF $(DEPDIR)/check_fixer-check_fixer.Tpo -c -o check_fixer-check_fixer.o `test -f 'check_fixer.c' || echo '$(srcdir)/'`check_fixer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_fixer-check_fixer.Tpo $(DEPDIR)/check_fixer-check_fixer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check_fixer.c' object='check_fixer-check_fixer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_fixer-check_fixer.o `test -f 'check_fixer.c' || echo '$(srcdir)/'`check_fixer.c
+
+check_fixer-check_fixer.obj: check_fixer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT check_fixer-check_fixer.obj -MD -MP -MF $(DEPDIR)/check_fixer-check_fixer.Tpo -c -o check_fixer-check_fixer.obj `if test -f 'check_fixer.c'; then $(CYGPATH_W) 'check_fixer.c'; else $(CYGPATH_W) '$(srcdir)/check_fixer.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_fixer-check_fixer.Tpo $(DEPDIR)/check_fixer-check_fixer.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check_fixer.c' object='check_fixer-check_fixer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(check_fixer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o check_fixer-check_fixer.obj `if test -f 'check_fixer.c'; then $(CYGPATH_W) 'check_fixer.c'; else $(CYGPATH_W) '$(srcdir)/check_fixer.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check_crange.log: check_crange$(EXEEXT)
+       @p='check_crange$(EXEEXT)'; \
+       b='check_crange'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check_fixer.log: check_fixer$(EXEEXT)
+       @p='check_fixer$(EXEEXT)'; \
+       b='check_fixer'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+       uninstall-am
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+# 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:
diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c
new file mode 100644 (file)
index 0000000..127ba8c
--- /dev/null
@@ -0,0 +1,583 @@
+#include "asn1fix_internal.h"
+#include "asn1fix.h"
+
+/* Print everything to stderr */
+static void _default_error_logger(int _severity, const char *fmt, ...);
+
+/*
+ * Internal check functions.
+ */
+static int asn1f_fix_module__phase_1(arg_t *arg);
+static int asn1f_fix_module__phase_2(arg_t *arg);
+static int asn1f_fix_simple(arg_t *arg);       /* For INTEGER/ENUMERATED */
+static int asn1f_fix_constructed(arg_t *arg);  /* For SEQUENCE/SET/CHOICE */
+static int asn1f_resolve_constraints(arg_t *arg); /* For subtype constraints */
+static int asn1f_check_constraints(arg_t *arg);        /* For subtype constraints */
+static int asn1f_check_duplicate(arg_t *arg);
+static int asn1f_apply_unique_index(arg_t *arg);
+static int phase_1_1(arg_t *arg, int prm2);
+
+arg_t a1f_replace_me_with_proper_interface_arg;
+
+/*
+ * Scan every module defined here in search for inconsistences.
+ */
+int
+asn1f_process(asn1p_t *asn, enum asn1f_flags flags,
+               error_logger_f error_logger) {
+       arg_t arg;
+       int fatals = 0;
+       int warnings = 0;
+       int ret;
+
+       /*
+        * Check validity of arguments.
+        */
+       if(asn == NULL) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * If errors handler is not specified, default to internal one.
+        */
+       if(error_logger == 0) {
+               error_logger = _default_error_logger;
+       }
+
+       memset(&arg, 0, sizeof(arg));
+       arg.asn = asn;
+       arg.eh = error_logger;
+
+       if(flags & A1F_DEBUG) {
+               arg.debug = arg.eh;
+               arg.debug(-1, "Called %s() with flags %d", __func__, flags);
+               flags &= ~A1F_DEBUG;
+       }
+
+       /* Allow SIZE() constraint for INTEGER and other types */
+       if(flags & A1F_EXTENDED_SizeConstraint) {
+               arg.flags |= A1F_EXTENDED_SizeConstraint;
+               flags &= ~A1F_EXTENDED_SizeConstraint;
+               if(arg.debug) {
+                       arg.debug(-1,
+                               "Extended SizeConstraint support enabled");
+               }
+       }
+
+       a1f_replace_me_with_proper_interface_arg = arg;
+
+       /*
+        * Check that we haven't missed an unknown flag.
+        */
+       if(flags) {
+               errno = EINVAL;
+               return -1;
+       }
+
+    /*
+     * Process each module in the list.
+     * PHASE I.
+     */
+    TQ_FOR(arg.mod, &(asn->modules), mod_next) {
+        arg.ns = asn1_namespace_new_from_module(arg.mod, 0);
+        ret = asn1f_fix_module__phase_1(&arg);
+        /*
+         * These lines are used for illustration purposes.
+         * RET2RVAL() is used everywhere else.
+         */
+        if(ret == -1) fatals++;
+        if(ret == 1) warnings++;
+        asn1_namespace_free(arg.ns);
+        arg.ns = 0;
+    }
+    /* PHASE II. */
+    TQ_FOR(arg.mod, &(asn->modules), mod_next) {
+        arg.ns = asn1_namespace_new_from_module(arg.mod, 0);
+        ret = asn1f_fix_module__phase_2(&arg);
+        if(ret == -1) fatals++;
+        if(ret == 1) warnings++;
+        asn1_namespace_free(arg.ns);
+        arg.ns = 0;
+    }
+
+    memset(&a1f_replace_me_with_proper_interface_arg, 0, sizeof(arg_t));
+
+       /*
+        * Compute a return value.
+        */
+       return fatals?-1:warnings?1:0;
+}
+
+/*
+ * Check the internals of a single module.
+ */
+static int
+asn1f_fix_module__phase_1(arg_t *arg) {
+       asn1p_expr_t *expr;
+       int rvalue = 0;
+       int ret;
+       asn1p_module_t *omod;
+
+       /*
+        * Check that we don't have a similarly named module.
+        */
+       TQ_FOR(omod, &arg->asn->modules, mod_next) {
+               int sameNames;
+               if(omod == arg->mod) break;
+               sameNames = strcmp(omod->ModuleName, arg->mod->ModuleName)?0:1;
+               if(omod->module_oid && arg->mod->module_oid) {
+                       /* Compare only the OID. */
+                       if(asn1p_oid_compare(omod->module_oid,
+                                       arg->mod->module_oid) == 0) {
+                               FATAL("ASN.1 module %s in %s "
+                                       "has the same OBJECT IDENTIFIER"
+                                       " as module %s",
+                                       omod->ModuleName,
+                                       omod->source_file_name,
+                                       arg->mod->ModuleName
+                               );
+                               RET2RVAL(-1, rvalue);
+                       } else if(sameNames) {
+                               WARNING("ASN.1 module %s is defined more than once, with different OIDs", omod->ModuleName);
+                               RET2RVAL(1, rvalue);
+                       }
+               } else if(sameNames) {
+                       FATAL("ASN.1 module %s is defined more than once",
+                               omod->ModuleName);
+                       RET2RVAL(-1, rvalue);
+               }
+       }
+
+       switch((arg->mod->module_flags & MSF_MASK_TAGS)) {
+       case MSF_NOFLAGS:
+       case MSF_EXPLICIT_TAGS:
+       case MSF_IMPLICIT_TAGS:
+       case MSF_AUTOMATIC_TAGS:
+               break;
+       default:
+               FATAL("Module %s defined with ambiguous global tagging mode",
+                       arg->mod->ModuleName);
+               RET2RVAL(-1, rvalue);
+       }
+
+       switch((arg->mod->module_flags & MSF_MASK_INSTRUCTIONS)) {
+       case MSF_NOFLAGS:
+               /*
+                * arg->mod->module_flags |= MSF_TAG_INSTRUCTIONS;
+                */
+               break;
+       case MSF_unk_INSTRUCTIONS:
+               WARNING("Module %s defined with unrecognized "
+                       "encoding reference", arg->mod->ModuleName);
+               RET2RVAL(1, rvalue);
+               /* Fall through */
+       case MSF_TAG_INSTRUCTIONS:
+       case MSF_XER_INSTRUCTIONS:
+               break;
+       default:
+               FATAL("Module %s defined with ambiguous encoding reference",
+                       arg->mod->ModuleName);
+               RET2RVAL(-1, rvalue);
+       }
+
+       /*
+        * Do various non-recursive transformations.
+        */
+       TQ_FOR(expr, &(arg->mod->members), next) {
+               arg->expr = expr;
+               ret = phase_1_1(arg, 0);
+               RET2RVAL(ret, rvalue);
+               /*
+                * Make sure everybody's behaving well.
+                */
+               assert(arg->expr == expr);
+       }
+       TQ_FOR(expr, &(arg->mod->members), next) {
+               arg->expr = expr;
+               ret = phase_1_1(arg, 1);
+               RET2RVAL(ret, rvalue);
+               assert(arg->expr == expr);
+       }
+
+
+
+       /*
+        * 5. Automatic tagging
+        */
+       TQ_FOR(expr, &(arg->mod->members), next) {
+
+               arg->expr = expr;
+
+               ret = asn1f_recurse_expr(arg, asn1f_fix_constr_autotag);
+               RET2RVAL(ret, rvalue);
+
+               assert(arg->expr == expr);
+       }
+
+       /*
+        * 8. fix BIT STRING
+        * 9. fix spaces in cstrings
+        */
+       TQ_FOR(expr, &(arg->mod->members), next) {
+               arg->expr = expr;
+
+               ret = asn1f_recurse_expr(arg, asn1f_fix_bit_string);
+               RET2RVAL(ret, rvalue);
+
+               ret = asn1f_recurse_expr(arg, asn1f_fix_cstring);
+               RET2RVAL(ret, rvalue);
+
+               assert(arg->expr == expr);
+       }
+
+       /*
+        * ... Check for tags distinctness.
+        */
+       TQ_FOR(expr, &(arg->mod->members), next) {
+               arg->expr = expr;
+
+               ret = asn1f_recurse_expr(arg, asn1f_check_constr_tags_distinct);
+               RET2RVAL(ret, rvalue);
+
+               assert(arg->expr == expr);
+       }
+
+       return rvalue;
+}
+
+static int
+asn1f_fix_module__phase_2(arg_t *arg) {
+       asn1p_expr_t *expr;
+       int rvalue = 0;
+       int ret;
+
+       TQ_FOR(expr, &(arg->mod->members), next) {
+
+               arg->expr = expr;
+
+               /*
+                * Dereference DEFAULT values.
+                */
+               ret = asn1f_recurse_expr(arg, asn1f_fix_dereference_defaults);
+               RET2RVAL(ret, rvalue);
+
+               /*
+                * Resolve references in constraints (the second pass).
+                */
+               ret = asn1f_recurse_expr(arg, asn1f_resolve_constraints);
+               RET2RVAL(ret, rvalue);
+
+               /*
+                * Check semantic validity of constraints.
+                */
+               ret = asn1f_recurse_expr(arg, asn1f_check_constraints);
+               RET2RVAL(ret, rvalue);
+
+               /*
+                * Uniquely tag each inner type.
+                */
+               asn1f_apply_unique_index(0);
+               ret = asn1f_recurse_expr(arg, asn1f_apply_unique_index);
+               RET2RVAL(ret, rvalue);
+
+               assert(arg->expr == expr);
+       }
+
+       return rvalue;
+}
+
+static int
+phase_1_1(arg_t *arg, int prm2) {
+       asn1p_expr_t *expr = arg->expr;
+       int rvalue = 0;
+       int ret;
+
+       if(expr->lhs_params && expr->spec_index == -1) {
+               int i;
+               if(!prm2)
+                       /* Do not process the parameterized type just yet */
+                       return 0;
+               for(i = 0; i < expr->specializations.pspecs_count; i++) {
+                       arg->expr = expr->specializations.pspec[i].my_clone;
+                       ret = phase_1_1(arg, 0);
+                       RET2RVAL(ret, rvalue);
+               }
+               arg->expr = expr;       /* revert */
+               return rvalue;
+       } else if(prm2) {
+               return 0;       /* Already done! */
+       }
+
+       /* Check whether this type is a duplicate */
+       if(!expr->lhs_params) {
+               ret = asn1f_check_duplicate(arg);
+               RET2RVAL(ret, rvalue);
+       }
+
+       DEBUG("=== Now processing \"%s\" (%d/0x%x) at line %d ===",
+               expr->Identifier, expr->meta_type, expr->expr_type,
+               expr->_lineno);
+       assert(expr->meta_type != AMT_INVALID);
+
+       /*
+        * 2.1 Pre-process simple types (ENUMERATED, INTEGER, etc).
+        */
+       ret = asn1f_recurse_expr(arg, asn1f_fix_simple);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * 2.5.4
+        */
+       ret = asn1f_recurse_expr(arg, asn1f_fix_dereference_types);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * Fix tagging of top-level types.
+        */
+       ret = asn1f_fix_constr_tag(arg, 1);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * 2.[234] Process SEQUENCE/SET/CHOICE types.
+        */
+       ret = asn1f_recurse_expr(arg, asn1f_fix_constructed);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * 2.5.5
+        */
+       ret = asn1f_recurse_expr(arg, asn1f_fix_dereference_values);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * Resolve references in constraints.
+        */
+       ret = asn1f_recurse_expr(arg, asn1f_resolve_constraints);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * Parse class information object sets.
+        */
+       ret = asn1f_parse_class_object(arg);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * 6. INTEGER value processed at 2.5.4.
+        */
+
+       return rvalue;
+}
+
+static int
+asn1f_fix_simple(arg_t *arg) {
+       int rvalue = 0;
+       int ret;
+
+       ret = asn1f_fix_enum(arg);
+       RET2RVAL(ret, rvalue);
+
+       ret = asn1f_fix_integer(arg);
+       RET2RVAL(ret, rvalue);
+
+       return rvalue;
+}
+
+static int
+asn1f_fix_constructed(arg_t *arg) {
+       int rvalue = 0;
+       int ret;
+
+       switch(arg->expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_CHOICE:
+               break;
+       default:
+               return 0;
+       }
+
+       /* Check identifier distinctness */
+       ret = asn1f_check_unique_expr(arg);
+       RET2RVAL(ret, rvalue);
+
+       /* Fix extensibility */
+       ret = asn1f_fix_constr_ext(arg);
+       RET2RVAL(ret, rvalue);
+
+       /* Fix tagging */
+       ret = asn1f_fix_constr_tag(arg, 0);
+       RET2RVAL(ret, rvalue);
+
+       /* Import COMPONENTS OF stuff */
+       ret = asn1f_pull_components_of(arg);
+       RET2RVAL(ret, rvalue);
+
+       return rvalue;
+}
+
+static int
+asn1f_resolve_constraints(arg_t *arg) {
+       asn1p_expr_t *top_parent;
+       asn1p_expr_type_e etype;
+       int rvalue = 0;
+       int ret;
+
+       top_parent = asn1f_find_terminal_type(arg, arg->expr);
+       if(top_parent)
+               etype = top_parent->expr_type;
+       else    etype = A1TC_INVALID;
+
+       DEBUG("(%s)", arg->expr->Identifier);
+
+    ret = asn1constraint_resolve(arg, arg->expr->constraints, etype, 0);
+    RET2RVAL(ret, rvalue);
+
+       return rvalue;
+}
+
+static int
+asn1f_check_constraints(arg_t *arg) {
+       static enum asn1p_constraint_type_e test_types[] = {
+               ACT_EL_RANGE, ACT_CT_SIZE, ACT_CT_FROM };
+       asn1p_expr_t *top_parent;
+       asn1cnst_range_t *range;
+       asn1p_expr_type_e etype;
+       unsigned int i;
+       int rvalue = 0;
+       int ret;
+
+       DEBUG("(%s{%d/%d})",
+               arg->expr->Identifier,
+               arg->expr->meta_type, arg->expr->expr_type);
+
+       top_parent = asn1f_find_terminal_type(arg, arg->expr);
+       if(!top_parent)
+               return 0;
+       etype = top_parent->expr_type;
+
+       ret = asn1constraint_pullup(arg);
+       RET2RVAL(ret, rvalue);
+
+       for(i = 0; i < sizeof(test_types)/sizeof(test_types[0]); i++) {
+               range = asn1constraint_compute_constraint_range(
+                               arg->expr->Identifier,
+                               etype,
+                               arg->expr->combined_constraints,
+                               test_types[i], 0, 0,
+                               CPR_noflags /* ignore -fbless-SIZE */);
+               if(!range && errno == EPERM) {
+                       FATAL("This error happened for \"%s\" (meta %d) "
+                               "at line %d",
+                               arg->expr->Identifier,
+                               arg->expr->meta_type,
+                               arg->expr->_lineno);
+                       return -1;
+               }
+               asn1constraint_range_free(range);
+       }
+
+       return rvalue;
+}
+
+static int
+asn1f_check_duplicate(arg_t *arg) {
+       arg_t tmparg = *arg;
+       int rvalue = 0;
+
+       /*
+        * This is a linear scan in search of a similar type.
+        * The linear scan is just fine for the task, no need to over-optimize.
+        */
+       TQ_FOR(tmparg.mod, &arg->asn->modules, mod_next) {
+               int critical = 1;       /* FATAL */
+
+               if((arg->mod->_tags & MT_STANDARD_MODULE)
+               != (tmparg.mod->_tags & MT_STANDARD_MODULE)) {
+                       /* Ignore clashes with standard module */
+                       critical = 0;   /* WARNING */
+               }
+
+               TQ_FOR(tmparg.expr, &(tmparg.mod->members), next) {
+                       int diff_files; /* different files */
+
+                       assert(tmparg.expr->Identifier);
+                       assert(arg->expr->Identifier);
+
+                       if(arg->expr->spec_index != -1)
+                               continue;
+
+                       if(tmparg.expr == arg->expr) break;
+
+                       if(strcmp(tmparg.expr->Identifier,
+                                 arg->expr->Identifier))
+                               continue;
+
+                       /* resolve clash of Identifier in different modules */
+                       int oid_exist = (tmparg.expr->module->module_oid && arg->expr->module->module_oid);
+                       if ((!oid_exist && strcmp(tmparg.expr->module->ModuleName, arg->expr->module->ModuleName)) ||
+                               (oid_exist && !asn1p_oid_compare(tmparg.expr->module->module_oid, arg->expr->module->module_oid))) {
+
+                               tmparg.expr->_mark |= TM_NAMECLASH;
+                               arg->expr->_mark |= TM_NAMECLASH;
+                               continue;
+                       }
+
+                       diff_files = strcmp(arg->mod->source_file_name,
+                                       tmparg.mod->source_file_name) ? 1 : 0;
+
+                       LOG(critical,
+                       "ASN.1 expression \"%s\" at line %d of module %s\n"
+                       "clashes with expression \"%s\" at line %d of module %s"
+                       "%s%s%s.\n"
+                       "Rename or remove either instance "
+                               "to resolve the conflict",
+                               arg->expr->Identifier,
+                               arg->expr->_lineno,
+                               arg->mod->ModuleName,
+                               tmparg.expr->Identifier,
+                               tmparg.expr->_lineno,
+                               tmparg.mod->ModuleName,
+                               diff_files ? " (" : "",
+                               diff_files ? tmparg.mod->source_file_name : "",
+                               diff_files ? ")" : "");
+                       if(critical)
+                               return -1;
+                       RET2RVAL(1, rvalue);
+               }
+               if(tmparg.mod == arg->mod) break;
+       }
+
+       return rvalue;
+}
+
+static int
+asn1f_apply_unique_index(arg_t *arg) {
+       static int unique_index;
+       if(!arg) { unique_index = 0; return 0; }
+
+       arg->expr->_type_unique_index = ++unique_index;
+
+       return 0;
+}
+
+/*
+ * Print everything to stderr
+ */
+static void
+_default_error_logger(int _severity, const char *fmt, ...) {
+       va_list ap;
+       char *pfx = "";
+
+       switch(_severity) {
+       case -1: pfx = "DEBUG: "; break;
+       case 0: pfx = "WARNING: "; break;
+       case 1: pfx = "FATAL: "; break;
+       }
+       
+       fprintf(stderr, "%s", pfx);
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       va_end(ap);
+       fprintf(stderr, "\n");
+}
diff --git a/libasn1fix/asn1fix.h b/libasn1fix/asn1fix.h
new file mode 100644 (file)
index 0000000..c75c81c
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * This is the public interface for the processor (fixer) of the ASN.1 tree
+ * produced by the libasn1parser.
+ */
+#ifndef        ASN1FIX_H
+#define        ASN1FIX_H
+
+#include <asn1parser.h>
+
+/*
+ * Operation flags for the function below.
+ */
+enum asn1f_flags {
+       A1F_NOFLAGS,
+       A1F_DEBUG                       = 0x01, /* Print debugging output */
+       A1F_EXTENDED_SizeConstraint     = 0x02, /* Enable constraint gen code */
+};
+
+/*
+ * Perform a set of semantics checks, transformations and small fixes
+ * on the given tree.
+ * RETURN VALUES:
+ *     -1:     Some fatal problems were encountered.
+ *      0:     No inconsistencies were found.
+ *      1:     Some warnings were issued, but no fatal problems encountered.
+ */
+int asn1f_process(asn1p_t *_asn,
+       enum asn1f_flags,
+       void (*error_log_callback)(int _severity, const char *fmt, ...));
+
+
+/*
+ * Explicitly mark type as known.
+ */
+int asn1f_make_known_external_type(const char *);
+
+#endif /* ASN1FIX_H */
diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
new file mode 100644 (file)
index 0000000..e5f80cd
--- /dev/null
@@ -0,0 +1,292 @@
+#include "asn1fix_internal.h"
+
+static int asn1f_fix_bit_string_type(arg_t *arg);
+static int asn1f_fix_bit_string_value(arg_t *arg, asn1p_expr_t *ttype);
+static void asn1f_BS_remove_trailing_zero_bits(asn1p_value_t *value);
+static int asn1f_BS_unparsed_convert(arg_t *arg, asn1p_value_t *value, asn1p_expr_t *ttype);
+
+int
+asn1f_fix_bit_string(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       int r_value = 0;
+       int ret;
+
+       if(expr->meta_type == AMT_VALUE) {
+               asn1p_expr_t *ttype;
+
+               DEBUG("(%s) for line %d", expr->Identifier, expr->_lineno);
+
+               ttype = asn1f_find_terminal_type(arg, expr);
+               if(ttype && ttype->expr_type == ASN_BASIC_BIT_STRING) {
+                       ret = asn1f_fix_bit_string_value(arg, ttype);
+                       RET2RVAL(ret, r_value);
+               }
+       }
+
+       if(expr->meta_type == AMT_TYPE
+       && expr->expr_type == ASN_BASIC_BIT_STRING) {
+               ret = asn1f_fix_bit_string_type(arg);
+               RET2RVAL(ret, r_value);
+       }
+
+       return r_value;
+}
+
+static int _compare_value(asn1p_expr_t *expr1, asn1p_expr_t *expr2) {
+       return expr2->value->value.v_integer - expr1->value->value.v_integer;
+}
+
+static int
+asn1f_fix_bit_string_type(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int r_value = 0;
+       int ret;
+
+       TQ_FOR(v, &(expr->members), next) {
+               if(v->expr_type == A1TC_EXTENSIBLE) {
+                       FATAL("Extension marker (...) is not allowed "
+                               "as a BIT STRING NamedBit at line %d ",
+                               v->_lineno);
+                       return -1;
+               }
+               if(v->expr_type != A1TC_UNIVERVAL) {
+                       FATAL("BIT STRING value at line %d "
+                               "is not an identifier", v->_lineno);
+                       return -1;
+               }
+
+               /* 21.1 */
+               if(v->value == NULL) {
+                       FATAL("BIT STRING NamedBit value at line %d "
+                               "must be explicitly specified in braces",
+                               v->_lineno);
+                       return -1;
+               } else if(v->value->type == ATV_REFERENCED) {
+                       /* Resolve the value */
+            if(asn1f_value_resolve(arg, v, 0))
+                return -1;
+               }
+               if(v->value->type != ATV_INTEGER
+               || v->value->value.v_integer < 0) {
+                       FATAL("BIT STRING NamedBit value at line %d: "
+                               "non-negative integer value expected",
+                               v->_lineno);
+                       return -1;
+               }
+
+               /* Check value uniqueness as per 21.4 */
+               ret = asn1f_check_unique_expr_child(arg, v,
+                               _compare_value, "value");
+               RET2RVAL(ret, r_value);
+               /* Check identifier uniqueness as per 21.5 */
+               ret = asn1f_check_unique_expr_child(arg, v, 0, "identifier");
+               RET2RVAL(ret, r_value);
+       }
+
+       return r_value;
+}
+
+static int
+asn1f_fix_bit_string_value(arg_t *arg, asn1p_expr_t *ttype) {
+       asn1p_expr_t *expr = arg->expr;
+       int r_value = 0;
+
+       DEBUG("(%s) for line %d",
+               expr->Identifier, expr->_lineno);
+
+       switch(expr->value->type) {
+       case ATV_UNPARSED:
+               /*
+                * Most definitely we have something like
+                *      value BitStringType1 ::= { a, b, c }
+                * which could not be parsed by the LALR parser, mostly
+                * because it requires knowledge about BitStringType1
+                * during the parsing. So, here's a little hack: we create
+                * a buffer containing the full specification of a module,
+                * which contains some pre-defined INTEGER type with the
+                * opaque definition "{ a, b, c }" from the bit string.
+                */
+               if(asn1f_BS_unparsed_convert(arg, expr->value, ttype)) {
+                       r_value = -1;
+                       break;
+               }
+               /* Fall through: remove trailing zero bits */
+        /* Fall through */
+       case ATV_BITVECTOR:
+               asn1f_BS_remove_trailing_zero_bits(expr->value);
+               break;
+       default:
+               break;
+       }
+
+       return r_value;
+}
+
+static void
+asn1f_BS_remove_trailing_zero_bits(asn1p_value_t *value) {
+       int lmfb = -1;  /* Last meaningful byte position */
+       int bits;       /* Number of bits in the BIT STRING value */
+       int b;
+
+       assert(value->type == ATV_BITVECTOR);
+
+       bits = value->value.binary_vector.size_in_bits;
+       /*
+        * Figure out the rightmost meaningful byte.
+        */
+       for(b = 0; b < ((bits + 7) >> 3); b++) {
+               uint8_t uc = value->value.binary_vector.bits[b];
+               if(uc && b > lmfb)
+                       lmfb = b;
+       }
+       if(lmfb == -1) {
+               bits = 0;
+       } else {
+               uint8_t uc;
+               uc = value->value.binary_vector.bits[lmfb];
+               bits = (lmfb+1) * 8;
+               /*
+                * Squeeze the bit string width until the rightmost
+                * bit is set.
+                */
+               for(; uc && (uc & 1) == 0; uc >>= 1)
+                       bits--;
+               if(uc == 0) {
+                       bits = lmfb * 8;
+               }
+       }
+       value->value.binary_vector.size_in_bits = bits;
+}
+
+static int
+asn1f_BS_unparsed_convert(arg_t *arg, asn1p_value_t *value, asn1p_expr_t *ttype) {
+       asn1p_t *asn;
+       asn1p_module_t *mod;
+       asn1p_expr_t *V;
+       asn1p_expr_t *bit;
+       asn1c_integer_t aI;
+       uint8_t *bitbuf;
+       int bits;
+       int psize;
+       char *p;
+       int ret;
+       int r_value = 0;
+
+       assert(value->type == ATV_UNPARSED);
+
+       psize = value->value.string.size + sizeof("M DEFINITIONS ::= BEGIN V ::= BIT STRING END") + 32;
+       p = malloc(psize);
+       if(p == NULL)
+               return -1;
+
+       ret = snprintf(p, psize,
+               "M DEFINITIONS ::=\nBEGIN\n"
+               "V ::= #BIT STRING %s\n"
+               "END\n",
+               value->value.string.buf
+       );
+       assert(ret < psize);
+       psize = ret;
+
+       asn = asn1p_parse_buffer(p, psize, arg->expr->module->source_file_name,
+                             arg->expr->_lineno, A1P_EXTENDED_VALUES);
+       free(p);
+       if(asn == NULL) {
+               FATAL("Cannot parse BIT STRING value %s "
+                       "defined as %s at line %d",
+                       arg->expr->Identifier,
+                       value->value.string.buf,
+                       arg->expr->_lineno
+               );
+               return -1;
+       }
+
+       mod = TQ_FIRST(&(asn->modules));
+       assert(mod);
+       V = TQ_FIRST(&(mod->members));
+       assert(V);
+       assert(strcmp(V->Identifier, "V") == 0);
+
+       /*
+        * Simple loop just to fetch the maximal bit position
+        * out of the BIT STRING value defined as NamedBitList.
+        */
+       aI = -1;
+       TQ_FOR(bit, &(V->members), next) {
+               asn1p_expr_t *bitdef;
+               bitdef = asn1f_lookup_child(ttype, bit->Identifier);
+               if(bitdef && bitdef->value
+               && bitdef->value->type == ATV_INTEGER) {
+                       if(bitdef->value->value.v_integer > aI)
+                               aI = bitdef->value->value.v_integer;
+               }
+       }
+
+       if(aI > 1024 * 1024 * 8) {      /* One megabyte */
+               FATAL("Unsupportedly large BIT STRING value \"%s\" "
+                       "defined at line %d "
+                       "(larger than 1MByte)",
+                       arg->expr->Identifier,
+                       arg->expr->_lineno
+               );
+               asn1p_delete(asn);
+               return -1;
+       }
+
+       bits = aI + 1;  /* Number of bits is more than a last bit position */
+       bitbuf = calloc(1, 1 + ((bits + 7) / 8));
+       if(bitbuf == NULL) {
+               asn1p_delete(asn);
+               return -1;
+       }
+
+       TQ_FOR(bit, &(V->members), next) {
+               asn1p_expr_t *bitdef;
+               int set_bit_pos;
+
+               if(bit->value) {
+                       WARNING("Identifier \"%s\" at line %d "
+                               "must not have a value",
+                               bit->Identifier, bit->_lineno);
+                       RET2RVAL(1, r_value);
+               }
+               bitdef = asn1f_lookup_child(ttype, bit->Identifier);
+               if(bitdef == NULL) {
+                       FATAL("Identifier \"%s\" at line %d is not defined "
+                               "in the \"%s\" type definition at line %d",
+                               bit->Identifier,
+                               bit->_lineno,
+                               ttype->Identifier,
+                               ttype->_lineno
+                       );
+                       RET2RVAL(-1, r_value);
+                       continue;
+               }
+               if(bitdef->value == NULL
+               || bitdef->value->type != ATV_INTEGER) {
+                       FATAL("Broken identifier "
+                               "\"%s\" at line %d "
+                               "referenced by \"%s\" at line %d",
+                               bitdef->Identifier,
+                               bitdef->_lineno,
+                               arg->expr->Identifier,
+                               arg->expr->_lineno
+                       );
+                       RET2RVAL(-1, r_value);
+                       continue;
+               }
+
+               assert(bitdef->value->value.v_integer < bits);
+               set_bit_pos = bitdef->value->value.v_integer;
+               bitbuf[set_bit_pos>>3] |= 1 << (7-(set_bit_pos % 8));
+       }
+
+       asn1p_delete(asn);
+       free(value->value.string.buf);
+       value->type = ATV_BITVECTOR;
+       value->value.binary_vector.bits = bitbuf;
+       value->value.binary_vector.size_in_bits = bits;
+
+       return r_value;
+}
diff --git a/libasn1fix/asn1fix_bitstring.h b/libasn1fix/asn1fix_bitstring.h
new file mode 100644 (file)
index 0000000..79b3d00
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1FIX_BIT_STRING_H
+#define        ASN1FIX_BIT_STRING_H
+
+int asn1f_fix_bit_string(arg_t *);
+
+#endif /* ASN1FIX_BIT_STRING_H */
diff --git a/libasn1fix/asn1fix_class.c b/libasn1fix/asn1fix_class.c
new file mode 100644 (file)
index 0000000..91847a6
--- /dev/null
@@ -0,0 +1,91 @@
+#include "asn1fix_internal.h"
+
+asn1p_expr_t *
+asn1f_class_access(arg_t *arg, asn1p_expr_t *rhs_pspecs, const asn1p_ref_t *ref) {
+       asn1p_expr_t *ioclass;
+       asn1p_expr_t *classfield;
+       asn1p_expr_t *expr;
+       asn1p_ref_t tmpref;
+
+       assert(ref->comp_count > 1);
+
+    DEBUG("ClassAccess lookup (%s%s) for line %d",
+          asn1f_printable_reference(ref), rhs_pspecs ? ", parameterized" : "",
+          ref->_lineno);
+
+    /*
+        * Fetch the first part of the reference (OBJECT or ObjectSet).
+        * OBJECT.&<something>...
+        * ObjectSet.&<something>...
+        */
+       assert(isupper(ref->components[0].name[0]));
+
+       tmpref = *ref;
+       tmpref.comp_count = 1;
+       ioclass = asn1f_lookup_symbol(arg, rhs_pspecs, &tmpref);
+       if(ioclass == NULL) {
+        DEBUG("ClassAccess lookup (%s) failed",
+              asn1f_printable_reference(&tmpref));
+        errno = ESRCH;
+               return NULL;
+       }
+       if(ioclass->expr_type == A1TC_REFERENCE) {
+        ioclass = WITH_MODULE(
+            ioclass->module,
+            asn1f_lookup_symbol(arg, ioclass->rhs_pspecs, ioclass->reference));
+        if(ioclass == NULL) {
+                       errno = ESRCH;
+                       return NULL;
+               }
+       }
+       if(ioclass->expr_type != A1TC_CLASSDEF) {
+               if(!(ioclass->_mark & TM_BROKEN)) {
+                       ioclass->_mark |= TM_BROKEN;
+                       FATAL("Class field %s lookup at line %d in something that is not a class: %s at line %d",
+                               asn1f_printable_reference(ref), ref->_lineno,
+                               ioclass->Identifier,
+                               ioclass->_lineno);
+               }
+               errno = EINVAL;
+               return NULL;
+       }
+
+       classfield = asn1f_lookup_child(ioclass, ref->components[1].name);
+       if(classfield == NULL) {
+               DEBUG("CLASS %s does not contain field %s",
+                       ioclass->Identifier, ref->components[1].name);
+               errno = ESRCH;
+               return NULL;
+       }
+
+       assert(classfield->meta_type == AMT_OBJECTFIELD);
+
+       DEBUG("CLASS %s -> %s (%d)", ioclass->Identifier,
+               classfield->Identifier, classfield->expr_type);
+
+       switch(classfield->expr_type) {
+       case A1TC_CLASSFIELD_TFS:
+               if(TQ_FIRST(&classfield->members)) {
+                       /* Already have something */
+               } else {
+                       expr = asn1p_expr_new(classfield->_lineno, arg->mod);
+                       expr->expr_type = ASN_TYPE_ANY;
+                       expr->meta_type = AMT_TYPE;
+                       asn1p_expr_add(classfield, expr);
+               }
+               /* Fall through */
+       case A1TC_CLASSFIELD_FTVFS:
+               expr = TQ_FIRST(&classfield->members);
+               assert(expr);
+               return expr;
+               break;
+       default:
+               FATAL("%s.%s: field type not yet supported. "
+                       "Consider donation to the asn1c author.",
+                       ioclass->Identifier, classfield->Identifier);
+               return NULL;
+       }
+
+       return NULL;
+}
+
diff --git a/libasn1fix/asn1fix_class.h b/libasn1fix/asn1fix_class.h
new file mode 100644 (file)
index 0000000..02292a6
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef        ASN1FIX_CLASS_H
+#define        ASN1FIX_CLASS_H
+
+/*
+ * Fetch the element from the class-related stuff (thing) by its reference.
+ */
+asn1p_expr_t *asn1f_class_access(arg_t *, asn1p_expr_t *rhs_pspecs,
+                                 const asn1p_ref_t *);
+
+#endif /* ASN1FIX_CLASS_H */
diff --git a/libasn1fix/asn1fix_compat.c b/libasn1fix/asn1fix_compat.c
new file mode 100644 (file)
index 0000000..064e38e
--- /dev/null
@@ -0,0 +1,149 @@
+#include "asn1fix_internal.h"
+
+static int asn1f_check_same_children(arg_t *arg, asn1p_expr_t *a, asn1p_expr_t *b);
+
+/*
+ * Check that the expressions given are compatible in their type.
+ * ORDER DOES MATTER! (See .h).
+ */
+int
+asn1f_check_type_compatibility(arg_t *arg, asn1p_expr_t *a, asn1p_expr_t *b) {
+       asn1p_expr_type_e atype, btype;
+
+       atype = a->expr_type;
+       btype = b->expr_type;
+
+       DEBUG("(%s:%x@%d, %s:%x@%d)",
+               a->Identifier, atype, a->_lineno,
+               b->Identifier, btype, b->_lineno);
+
+       /*
+        * Expected terminal type!
+        */
+       assert(atype != A1TC_REFERENCE);
+       assert(btype != A1TC_REFERENCE);
+
+       if(a == b)
+               return 0;       /* Fairly obviously */
+
+       if(atype != btype) {
+               /*
+                * Limited cross-compatibility of integer types.
+                */
+               if((atype == A1TC_UNIVERVAL && btype == ASN_BASIC_INTEGER)
+               || (atype == A1TC_UNIVERVAL && btype == ASN_BASIC_ENUMERATED)
+               )
+                       return 0;
+
+               /* Limited cross-compatibility of string types */
+               if((atype & ASN_STRING_MASK)
+               && (btype & ASN_STRING_MASK)) {
+                       /* X.680, B.5 */
+                       int akm = (atype & ASN_STRING_KM_MASK)
+                               || atype == ASN_STRING_UTF8String;
+                       int bkm = (btype & ASN_STRING_KM_MASK)
+                               || btype == ASN_STRING_UTF8String;
+                       return (akm == bkm) ? 0 : -1;
+               }
+
+               DEBUG("\t%s and %s are not compatible",
+                       a->Identifier, b->Identifier);
+               return -1;      /* Fairly obviously */
+       }
+
+       switch(atype) {
+       case ASN_BASIC_INTEGER:
+               /* All integers are compatible, X.680, B.4.5 */
+               return 0;
+       case ASN_BASIC_ENUMERATED:
+               /*
+                * Enumerations are not compatible
+                * unless their definitions are the same.
+                */
+               if(asn1f_check_same_children(arg, a, b)) {
+                       DEBUG("\tEnumerations are different %s and %s",
+                               a->Identifier, b->Identifier);
+                       return -1;
+               }
+               return 0;
+       default:
+               if((atype & ASN_STRING_MASK)
+               && (btype & ASN_STRING_MASK)) {
+                       /* String type is compatible with the same type */
+                       return 0;
+               }
+               /* Compatibility is not defined yet */
+               DEBUG("\tCompatibility rule is not defined for %s and %s",
+                       a->Identifier, b->Identifier);
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+ * Check that the children are exactly same.
+ */
+static int
+asn1f_check_same_children(arg_t *arg, asn1p_expr_t *a, asn1p_expr_t *b) {
+       asn1p_expr_t *achild;
+       asn1p_expr_t *bchild;
+
+       achild = TQ_FIRST(&(a->members));
+       bchild = TQ_FIRST(&(b->members));
+
+       while(1) {
+               if(achild->expr_type != bchild->expr_type)
+                       return -1;
+
+               if(achild->Identifier && bchild->Identifier) {
+                       if(strcmp(achild->Identifier, bchild->Identifier))
+                               return -1;
+               } else if(!(!achild->Identifier && !bchild->Identifier)) {
+                       return -1;
+               }
+
+               if(achild->value && bchild->value) {
+                       if(achild->value->type != bchild->value->type)
+                               return -1;
+                       switch(achild->value->type) {
+                       case ATV_INTEGER:
+                               if(achild->value->value.v_integer
+                               != bchild->value->value.v_integer)
+                                       return -1;
+                               break;
+                       case ATV_REFERENCED:
+                       default:
+                               DEBUG("Value %s at lines %d and "
+                                       "%d cannot be used in "
+                                       "semantical equality check",
+                                       asn1f_printable_value(achild->value),
+                                       achild->value->value.reference->_lineno,
+                                       bchild->value->value.reference->_lineno
+                               );
+                               return -1;
+                       }
+               } else if(!(!achild->value && !bchild->value)) {
+                       /* One of values is defined, and another is not */
+                       return -1;
+               }
+
+               achild = TQ_NEXT(achild, next);
+               bchild = TQ_NEXT(bchild, next);
+
+               if(achild && bchild)
+                       continue;
+               else if(!achild && !bchild)
+                       break;
+               else
+                       return -1;
+       }
+
+       DEBUG("\t%s:%x@%d and %s:%x@%d are semantically equivalent",
+               a->Identifier, a->expr_type, a->_lineno,
+               b->Identifier, b->expr_type, b->_lineno);
+
+       return 0;
+}
+
+
diff --git a/libasn1fix/asn1fix_compat.h b/libasn1fix/asn1fix_compat.h
new file mode 100644 (file)
index 0000000..b147a1b
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef        ASN1FIX_COMPAT_H
+#define        ASN1FIX_COMPAT_H
+
+/*
+ * Check that the expressions given are compatible in their type.
+ * ORDER DOES MATTER!
+ * The compatibility is being checked as if the value of b were used
+ * to assign it to type a.
+ */
+int asn1f_check_type_compatibility(arg_t *arg,
+       asn1p_expr_t *a,
+       asn1p_expr_t *b);
+
+#endif /* ASN1FIX_COMPAT_H */
diff --git a/libasn1fix/asn1fix_constr.c b/libasn1fix/asn1fix_constr.c
new file mode 100644 (file)
index 0000000..8f4331c
--- /dev/null
@@ -0,0 +1,516 @@
+#include "asn1fix_internal.h"
+
+static int _asn1f_check_if_tag_must_be_explicit(arg_t *arg, asn1p_expr_t *v);
+static int _asn1f_compare_tags(arg_t *arg, asn1p_expr_t *a, asn1p_expr_t *b);
+static int _asn1f_fix_type_tag(arg_t *arg, asn1p_expr_t *expr);
+
+int
+asn1f_pull_components_of(arg_t *arg) {
+       TQ_HEAD(asn1p_expr_t) list;
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *memb;
+       int r_value = 0;
+
+       switch(expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+               break;
+       default:
+               return 0;
+       }
+
+       TQ_INIT(&list);
+
+       /*
+        * Look into
+        */
+       while((memb = TQ_REMOVE(&(expr->members), next))) {
+               asn1p_expr_t *coft;     /* COMPONENTS OF thing itself */
+               asn1p_expr_t *terminal; /* Terminal of the referenced type */
+
+               if(memb->expr_type != A1TC_COMPONENTS_OF) {
+                       TQ_ADD(&list, memb, next);
+                       continue;
+               }
+
+               coft = TQ_FIRST(&memb->members);
+               assert(coft);
+               assert(!TQ_NEXT(coft, next));
+
+               /*
+                * Find the referenced type.
+                */
+               terminal = asn1f_find_terminal_type(arg, coft);
+               if(!terminal || (terminal->expr_type != expr->expr_type)) {
+                       FATAL("COMPONENTS OF at line %d "
+                               "must reference a %s type",
+                               coft->_lineno,
+                               expr->expr_type==ASN_CONSTR_SET
+                                       ? "SET" : "SEQUENCE"
+                       );
+                       TQ_ADD(&list, memb, next);
+                       r_value = -1;
+                       continue;
+               }
+
+               /*
+                * Clone the final structure.
+                */
+
+               coft = asn1p_expr_clone(terminal, 1 /* Skip extensions */);
+               if(!coft) return -1;    /* ENOMEM */
+
+               if(1) {
+                       asn1p_expr_free(memb);  /* Don't need it anymore*/
+               } else {
+                       /* Actual removal clashes with constraints... skip. */
+               }
+
+               /*
+                * Move all components of the cloned structure
+                * into the current one.
+                */
+               while((memb = TQ_REMOVE(&(coft->members), next))) {
+                       TQ_ADD(&list, memb, next);
+                       memb->parent_expr = expr;
+               }
+
+               asn1p_expr_free(coft);  /* Remove wrapper */
+       }
+
+       /* Move the stuff back */
+       TQ_MOVE(&(expr->members), &list);
+
+       return r_value;
+}
+
+/*
+ * Fix extensibility parts inside constructed types (SEQUENCE, SET, CHOICE).
+ */
+int
+asn1f_fix_constr_ext(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       TQ_HEAD(asn1p_expr_t) root_list;
+       TQ_HEAD(asn1p_expr_t) ext_list;
+       TQ_HEAD(asn1p_expr_t) *cur_list;
+       int r_value = 0;
+       int ext_count = 0;
+
+       switch(expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_CHOICE:
+               break;
+       default:
+               return 0;
+       }
+
+       DEBUG("(%s) for line %d", expr->Identifier, expr->_lineno);
+
+       TQ_INIT(&root_list);
+       TQ_INIT(&ext_list);
+       cur_list = (void *)&root_list;
+
+       /*
+        * Split the set of fields into two lists, the root list
+        * and the extensions list.
+        */
+       while((v = TQ_REMOVE(&(expr->members), next))) {
+               if(v->expr_type == A1TC_EXTENSIBLE) {
+                       ext_count++;
+                       switch(ext_count) {
+                       case 1: cur_list = (void *)&ext_list; break;
+                       case 2:
+                               cur_list = (void *)&root_list;
+                               if(v->value) {
+                                       FATAL("Optional extension marker "
+                                               "must not contain "
+                                               "an exception mark "
+                                               "at line %d", v->_lineno);
+                                       r_value = -1;
+                               }
+                               asn1p_expr_free(v);
+                               continue;
+                       case 3:
+                               FATAL("Third extension marker "
+                               "is not allowed at line %d", v->_lineno);
+                /* Fall through */
+                       default:
+                               r_value = -1;
+                       }
+               }
+
+               TQ_ADD(cur_list, v, next);
+       }
+
+       /*
+        * Copy the root list and extension list back into the main list.
+        */
+       TQ_MOVE(&(expr->members), &root_list);
+       while((v = TQ_REMOVE(&ext_list, next)))
+               TQ_ADD(&(expr->members), v, next);
+
+       if(arg->mod->module_flags & MSF_EXTENSIBILITY_IMPLIED
+       && ext_count == 0) {
+               v = asn1p_expr_new(0, arg->mod);
+               if(v) {
+                       v->Identifier = strdup("...");
+                       v->expr_type = A1TC_EXTENSIBLE;
+                       v->meta_type = AMT_TYPE;
+                       v->_lineno = expr->_lineno;     /* The best we can do */
+                       if(v->Identifier == NULL) {
+                               asn1p_expr_free(v);
+                               r_value = -1;
+                       } else {
+                               asn1p_expr_add(expr, v);
+                       }
+               } else {
+                       r_value = -1;
+               }
+       }
+
+       return r_value;
+}
+
+
+int
+asn1f_fix_constr_tag(arg_t *arg, int fix_top_level) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int root_tagged = 0;    /* The root component is manually tagged */
+       int ext_tagged = 0;     /* The extensions are manually tagged */
+       int component_number = 0;
+       int r_value = 0;
+
+       DEBUG("(%s) for line %d", expr->Identifier, expr->_lineno);
+
+       /*
+        * Fix the top-level type itself first.
+        */
+       if(fix_top_level) {
+               if(expr->tag.tag_class == TC_NOCLASS)
+                       return r_value;
+
+               if(_asn1f_fix_type_tag(arg, expr))
+                       r_value = -1;
+
+               return r_value;
+       }
+
+       switch(expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_CHOICE:
+               break;
+       default:
+               return 0;
+       }
+
+       TQ_FOR(v, &(expr->members), next) {
+
+               if(v->expr_type == A1TC_EXTENSIBLE) {
+                       component_number++;
+                       continue;
+               }
+
+               if(v->tag.tag_class == TC_NOCLASS) {
+                       continue;
+               }
+
+               switch(component_number) {
+               case 0: case 2:
+                       root_tagged = 1; break;
+               default:
+                       ext_tagged = 1; break;
+               }
+
+               if(_asn1f_fix_type_tag(arg, v))
+                       r_value = -1;
+
+       }
+
+       if((arg->mod->module_flags & MSF_AUTOMATIC_TAGS)
+       && !root_tagged) {
+               if(ext_tagged) {
+                       /* X.690: 28.4 */
+                       FATAL("In %s at line %d: "
+                               "extensions are tagged "
+                               "but root components are not",
+                               expr->Identifier, expr->_lineno);
+                       r_value = -1;
+               } else {
+                       /* Make a decision on automatic tagging */
+                       expr->auto_tags_OK = 1;
+               }
+       }
+
+       return r_value;
+}
+
+static int
+_asn1f_fix_type_tag(arg_t *arg, asn1p_expr_t *expr) {
+       int must_explicit = _asn1f_check_if_tag_must_be_explicit(arg, expr);
+       int module_impl_tags = (arg->mod->module_flags
+                               & (MSF_IMPLICIT_TAGS | MSF_AUTOMATIC_TAGS));
+       int r_value = 0;
+
+       if(expr->tag.tag_mode == TM_DEFAULT) {
+               if(must_explicit || module_impl_tags == 0)
+                       expr->tag.tag_mode = TM_EXPLICIT;
+               else
+                       expr->tag.tag_mode = TM_IMPLICIT;
+       }
+
+       /*
+        * Perform a final sanity check.
+        */
+       if(must_explicit) {
+               if(expr->tag.tag_mode == TM_IMPLICIT) {
+                       FATAL("%s tagged in IMPLICIT mode "
+                               "but must be EXPLICIT at line %d",
+                               expr->Identifier, expr->_lineno);
+                       r_value = -1;
+               } else {
+                       expr->tag.tag_mode = TM_EXPLICIT;
+               }
+       }
+
+       return r_value;
+}
+
+int
+asn1f_fix_constr_autotag(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       asn1c_integer_t tag_value = 0;
+       int r_value = 0;
+
+       switch(expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_CHOICE:
+               if(expr->auto_tags_OK)
+                       break;
+               /* Automatic tagging is not applicable */
+               /* Fall through */
+       default:
+               return 0;
+       }
+
+       DEBUG("(%s) for line %d", expr->Identifier, expr->_lineno);
+
+       TQ_FOR(v, &(expr->members), next) {
+               int must_explicit;
+
+               if(v->expr_type == A1TC_EXTENSIBLE) {
+                       /* 28.5, d) */
+                       continue;
+               }
+
+               if(0) {
+                       /* This may be not true in case COMPONENTS OF */
+                       assert(v->tag.tag_class == TC_NOCLASS);
+               }
+
+               must_explicit = _asn1f_check_if_tag_must_be_explicit(arg, v);
+
+               v->tag.tag_class = TC_CONTEXT_SPECIFIC;
+               v->tag.tag_mode = must_explicit ? TM_EXPLICIT : TM_IMPLICIT;
+               v->tag.tag_value = tag_value++;
+       }
+
+       return r_value;
+}
+
+/*
+ * Check that tags are distinct.
+ */
+int
+asn1f_check_constr_tags_distinct(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *v;
+       int r_value = 0;
+
+       switch(expr->expr_type) {
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_CHOICE:
+               break;
+       default:
+               return 0;
+       }
+
+       TQ_FOR(v, &(expr->members), next) {
+               /*
+                * In every series of non-mandatory components,
+                * the tags must be distinct from each other AND the
+                * tag of the following mandatory component.
+                * For SET and CHOICE treat everything as a big set of
+                * non-mandatory components.
+                */
+               if(expr->expr_type != ASN_CONSTR_SEQUENCE || v->marker.flags) {
+                       asn1p_expr_t *nv;
+                       for(nv = v; (nv = TQ_NEXT(nv, next));) {
+                               DEBUG("S/C comparing tags %s s. %s",
+                                       v->Identifier, nv->Identifier);
+                               if(_asn1f_compare_tags(arg, v, nv))
+                                       r_value = -1;
+                               if(expr->expr_type == ASN_CONSTR_SEQUENCE
+                               && !nv->marker.flags) break;
+                       }
+               }
+       }
+
+       return r_value;
+}
+
+static int
+_asn1f_check_if_tag_must_be_explicit(arg_t *arg, asn1p_expr_t *v) {
+       struct asn1p_type_tag_s tag;
+       struct asn1p_type_tag_s save_tag;
+       asn1p_expr_t *reft;
+       int ret;
+
+       /*
+        * Fetch the _next_ tag for this type.
+        */
+       save_tag = v->tag;                      /* Save existing tag */
+       memset(&v->tag, 0, sizeof(v->tag));     /* Remove it temporarily */
+       ret = asn1f_fetch_outmost_tag(arg->asn, arg->ns, arg->mod, v, &tag, 0);
+       v->tag = save_tag;                      /* Restore the tag back */
+
+       if(ret == 0) return 0;  /* If found tag, it's okay */
+
+       reft = asn1f_find_terminal_type(arg, v);
+       if(reft) {
+               switch(reft->expr_type) {
+               case ASN_TYPE_ANY:
+               case ASN_CONSTR_CHOICE:
+                       return 1;
+               default:
+                       return 0;
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * Check that the tags are distinct.
+ */
+static int
+_asn1f_compare_tags(arg_t *arg, asn1p_expr_t *a, asn1p_expr_t *b) {
+       struct asn1p_type_tag_s ta, tb;
+       int ra, rb;
+       int ret;
+
+       ra = asn1f_fetch_outmost_tag(arg->asn, arg->ns, arg->mod, a,
+                       &ta, AFT_IMAGINARY_ANY);
+       rb = asn1f_fetch_outmost_tag(arg->asn, arg->ns, arg->mod, b,
+                       &tb, AFT_IMAGINARY_ANY);
+
+       /*
+        * If both tags are explicitly or implicitly given, use them.
+        */
+       DEBUG("Fetching outmost tags: %d, %d", ra, rb);
+       if(ra == 0 && rb == 0) {
+               /*
+                * Simple case: fetched both tags.
+                */
+
+               if((ta.tag_value == tb.tag_value
+                       && ta.tag_class == tb.tag_class)
+               || ta.tag_value == -1   /* Spread IMAGINARY ANY tag... */
+               || tb.tag_value == -1   /* ...it is an evil virus, fear it! */
+               ) {
+                       char tagbuf[2][TAG2STRING_BUFFER_SIZE];
+                       char *p = (a->expr_type == A1TC_EXTENSIBLE)
+                               ?"potentially ":"";
+                       FATAL("Processing %s at line %d: component \"%s\" at line %d %shas the same tag "
+                               "as component \"%s\" at line %d",
+                               arg->expr->Identifier,
+                               arg->expr->_lineno,
+                               a->Identifier,
+                               a->_lineno,
+                               p,
+                               b->Identifier,
+                               b->_lineno
+                       );
+                       FATAL("Consider adding AUTOMATIC TAGS "
+                               "after module %s DEFINITIONS, "
+                               "or manually tag components",
+                               arg->expr->module->ModuleName);
+                       DEBUG("Tags: %s %s  vs.  %s %s",
+                               asn1p_tag2string(&ta, tagbuf[0]),
+                               a->Identifier,
+                               asn1p_tag2string(&tb, tagbuf[1]),
+                               b->Identifier
+                       );
+                       if((arg->mod->module_flags & MSF_EXTENSIBILITY_IMPLIED)
+                       && (a->expr_type == A1TC_EXTENSIBLE)
+                       && (b->expr_type == A1TC_EXTENSIBLE)) {
+                               FATAL("The previous error is due to "
+                                       "improper use of "
+                                       "EXTENSIBILITY IMPLIED flag "
+                                       "of module %s",
+                                       arg->mod->ModuleName);
+                       }
+                       return -1;
+               } else {
+                       /* Tags are distinct */
+                       return 0;
+               }
+       }
+
+       /**********************************************************
+        * Now we must perform some very funny recursion to check
+        * multiple components of CHOICE type, etc.
+        */
+
+       DEBUG("Comparing tags %s:%x <-> %s:%x",
+               a->Identifier, a->expr_type,
+               b->Identifier, b->expr_type);
+
+       if(ra && a->meta_type == AMT_TYPEREF) {
+
+               DEBUG(" %s is a type reference", a->Identifier);
+
+        a = asn1f_lookup_symbol(arg, a->rhs_pspecs, a->reference);
+        if(!a) return 0;       /* Already FATAL()'ed somewhere else */
+        return WITH_MODULE(a->module, _asn1f_compare_tags(arg, a, b));
+    }
+
+       if(ra && a->expr_type == ASN_CONSTR_CHOICE) {
+               asn1p_expr_t *v;
+
+               DEBUG(" %s is a choice type (%d)", a->Identifier, a->_mark);
+
+               /*
+                * Iterate over members of CHOICE.
+                */
+               //if(a->_mark & TM_RECURSION) return 0;
+               TQ_FOR(v, &(a->members), next) {
+                       //a->_mark |= TM_RECURSION;
+                       ret = _asn1f_compare_tags(arg, v, b);
+                       //a->_mark &= ~TM_RECURSION;
+                       if(ret) return ret;
+               }
+               return 0;
+       }
+
+       if(rb && b->expr_type == ASN_CONSTR_CHOICE) {
+               return _asn1f_compare_tags(arg, b, a);
+       }
+
+       if(a->_mark & TM_RECURSION) return 0;
+       if(b->_mark & TM_RECURSION) return 0;
+       a->_mark |= TM_RECURSION;
+       b->_mark |= TM_RECURSION;
+       ret = _asn1f_compare_tags(arg, b, a);
+       a->_mark &= ~TM_RECURSION;
+       b->_mark &= ~TM_RECURSION;
+
+       return ret;
+}
+
diff --git a/libasn1fix/asn1fix_constr.h b/libasn1fix/asn1fix_constr.h
new file mode 100644 (file)
index 0000000..5d9c4f9
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef        ASN1FIX_CONSTRUCTED_H
+#define        ASN1FIX_CONSTRUCTED_H
+
+/*
+ * Pull in COMPONENTS OF.
+ */
+int asn1f_pull_components_of(arg_t *);
+
+/*
+ * Fix extensions in constructed types.
+ */
+int asn1f_fix_constr_ext(arg_t *);
+
+/*
+ * Fix tagging in constructed types.
+ */
+int asn1f_fix_constr_tag(arg_t *, int fix_top_level);
+
+/*
+ * Check distinctive tagging in constructed types.
+ */
+int asn1f_check_constr_tags_distinct(arg_t *);
+
+/*
+ * Perform automatic tagging.
+ */
+int asn1f_fix_constr_autotag(arg_t *);
+
+#endif /* ASN1FIX_CONSTRUCTED_H */
diff --git a/libasn1fix/asn1fix_constraint.c b/libasn1fix/asn1fix_constraint.c
new file mode 100644 (file)
index 0000000..cf29a33
--- /dev/null
@@ -0,0 +1,402 @@
+#include "asn1fix_internal.h"
+#include "asn1fix_constraint.h"
+#include "asn1fix_crange.h"
+
+static void _remove_extensions(arg_t *arg, asn1p_constraint_t *ct, int flast);
+static int constraint_type_resolve(arg_t *arg, asn1p_constraint_t *ct);
+static int constraint_object_resolve(arg_t *arg, asn1p_value_t *value);
+static int constraint_value_resolve(arg_t *arg, asn1p_value_t **value, enum asn1p_constraint_type_e real_ctype);
+
+int
+asn1constraint_pullup(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *top_parent;
+       asn1p_constraint_t *ct_parent;
+       asn1p_constraint_t *ct_expr;
+       int ret;
+
+       if(expr->combined_constraints)
+               return 0;       /* Operation already performed earlier */
+
+       switch(expr->meta_type) {
+       case AMT_TYPE:
+       case AMT_TYPEREF:
+       case AMT_VALUESET:
+               break;
+       default:
+               return 0;       /* Nothing to do */
+       }
+
+       if(expr->expr_type == A1TC_REFERENCE) {
+               asn1p_ref_t *ref = expr->reference;
+               asn1p_expr_t *parent_expr;
+
+               assert(ref);
+        parent_expr = asn1f_lookup_symbol(arg, expr->rhs_pspecs, ref);
+        if(!parent_expr) {
+                       if(errno != EEXIST) {
+                               DEBUG("\tWhile fetching parent constraints: "
+                                       "type \"%s\" not found: %s",
+                                       asn1f_printable_reference(ref),
+                                       strerror(errno));
+                               return -1;
+                       } else {
+                               /*
+                                * -fknown-extern-type is given.
+                                * Assume there are no constraints there.
+                                */
+                               WARNING("External type \"%s\": "
+                                       "assuming no constraints",
+                                       asn1f_printable_reference(ref));
+                               ct_parent = 0;
+                       }
+               } else {
+                       arg->expr = parent_expr;
+                       ret = asn1constraint_pullup(arg);
+                       arg->expr = expr;
+                       if(ret) return ret;
+
+                       ct_parent = parent_expr->combined_constraints;
+               }
+    } else {
+               ct_parent = 0;
+       }
+
+       ct_expr = expr->constraints;
+
+       if(!ct_parent && !ct_expr)
+               return 0;       /* No constraints to consider */
+
+       /*
+        * Resolve constraints, if not already resolved.
+        */
+       top_parent = asn1f_find_terminal_type(arg, arg->expr);
+    ret = asn1constraint_resolve(
+        arg, ct_expr, top_parent ? top_parent->expr_type : A1TC_INVALID, 0);
+    if(ret) return ret;
+
+       /*
+        * Copy parent type constraints.
+        */
+       if(ct_parent) {
+               ct_parent = asn1p_constraint_clone(ct_parent);
+               assert(ct_parent);
+       }
+
+       /*
+        * If the current type does not have constraints, it inherits
+        * the constraints of a parent.
+        */
+       if(ct_parent && !ct_expr) {
+               expr->combined_constraints = ct_parent;
+               return 0;
+       }
+
+       ct_expr = asn1p_constraint_clone(ct_expr);
+       assert(ct_expr);
+
+       /*
+        * Now we have a set of current expression's constraints,
+        * and an optional set of the parent expression's constraints.
+        */
+
+       if(ct_parent) {
+               /*
+                * If we have a parent, remove all the extensions (46.4).
+                */
+               _remove_extensions(arg, ct_parent, 0);
+
+               expr->combined_constraints = ct_parent;
+               if(ct_expr->type == ACT_CA_SET) {
+                       unsigned int i;
+                       for(i = 0; i < ct_expr->el_count; i++) {
+                               if(asn1p_constraint_insert(
+                                       expr->combined_constraints,
+                                               ct_expr->elements[i])) {
+                                       expr->combined_constraints = 0;
+                                       asn1p_constraint_free(ct_expr);
+                                       asn1p_constraint_free(ct_parent);
+                                       return -1;
+                               } else {
+                                       ct_expr->elements[i] = 0;
+                               }
+                       }
+                       asn1p_constraint_free(ct_expr);
+               } else {
+                       asn1p_constraint_insert(expr->combined_constraints,
+                               ct_expr);
+               }
+       } else {
+               _remove_extensions(arg, ct_expr, 1);
+               expr->combined_constraints = ct_expr;
+       }
+
+       return 0;
+}
+
+int
+asn1constraint_resolve(arg_t *arg, asn1p_constraint_t *ct, asn1p_expr_type_e etype, enum asn1p_constraint_type_e effective_type) {
+       enum asn1p_constraint_type_e real_constraint_type;
+       unsigned int el;
+       int rvalue = 0;
+       int ret;
+
+       DEBUG("(\"%s\")", arg->expr->Identifier);
+
+       if(!ct) return 0;
+
+       /* Don't touch information object classes */
+       switch(ct->type) {
+       case ACT_CT_SIZE:
+       case ACT_CT_FROM:
+               if(effective_type && effective_type != ct->type) {
+                       FATAL("%s at line %d: "
+                               "Incompatible nested %s within %s",
+                               arg->expr->Identifier, ct->_lineno,
+                               asn1p_constraint_type2str(ct->type),
+                               asn1p_constraint_type2str(effective_type)
+                       );
+               }
+               effective_type = ct->type;
+               break;
+       case ACT_CT_WCOMP:
+       case ACT_CT_WCOMPS:
+       case ACT_CA_CRC:
+               return 0;
+       default:
+               break;
+       }
+
+       real_constraint_type = effective_type ? effective_type : ct->type;
+
+       if(etype != A1TC_INVALID) {
+
+               ret = asn1constraint_compatible(etype, real_constraint_type,
+                               arg->flags & A1F_EXTENDED_SizeConstraint);
+               switch(ret) {
+               case -1:        /* If unknown, assume OK. */
+               case  1:
+                       break;
+               case 0:
+               default:
+                       FATAL("%s at line %d: "
+                               "Constraint type %s is not applicable to %s",
+                               arg->expr->Identifier, ct->_lineno,
+                               asn1p_constraint_type2str(real_constraint_type),
+                               ASN_EXPR_TYPE2STR(etype)
+                       );
+                       rvalue = -1;
+                       break;
+               }
+       } else {
+               WARNING("%s at line %d: "
+                       "Constraints ignored: Unresolved parent type",
+                       arg->expr->Identifier, arg->expr->_lineno);
+       }
+
+       /*
+        * Resolve all possible references, wherever they occur.
+        */
+       if(ct->containedSubtype) {
+               ret = constraint_type_resolve(arg, ct);
+               RET2RVAL(ret, rvalue);
+       }
+       if(ct->value && ct->value->type == ATV_REFERENCED) {
+        ret = constraint_value_resolve(arg, &ct->value, real_constraint_type);
+        RET2RVAL(ret, rvalue);
+       }
+       if(ct->range_start && ct->range_start->type == ATV_REFERENCED) {
+        ret = constraint_value_resolve(arg, &ct->range_start,
+                                       real_constraint_type);
+        RET2RVAL(ret, rvalue);
+       }
+       if(ct->range_stop && ct->range_stop->type == ATV_REFERENCED) {
+        ret = constraint_value_resolve(arg, &ct->range_stop,
+                                       real_constraint_type);
+        RET2RVAL(ret, rvalue);
+       }
+       if (ct->value && ct->value->type == ATV_UNPARSED && etype == A1TC_CLASSDEF) {
+               ret = constraint_object_resolve(arg, ct->value);
+               RET2RVAL(ret, rvalue);
+       }
+
+    /*
+     * Proceed recursively.
+     */
+    for(el = 0; el < ct->el_count; el++) {
+        ret = asn1constraint_resolve(arg, ct->elements[el], etype,
+                                     effective_type);
+        RET2RVAL(ret, rvalue);
+    }
+
+    return rvalue;
+}
+
+static void
+_remove_extensions(arg_t *arg, asn1p_constraint_t *ct, int forgive_last) {
+       unsigned int i;
+
+       if(!ct) return;
+
+       for(i = 0; i < ct->el_count; i++) {
+               if(ct->elements[i]->type == ACT_EL_EXT)
+                       break;
+               if(forgive_last && ct->type == ACT_CA_SET
+                       && i + 1 == ct->el_count)
+                       return;
+               _remove_extensions(arg, ct->elements[i], 0);
+       }
+
+       /* Remove the elements at and after the extensibility mark */
+       for(; i < ct->el_count; ct->el_count--) {
+               asn1p_constraint_t *rm;
+               rm = ct->elements[ct->el_count-1];
+               asn1p_constraint_free(rm);
+       }
+
+       if(i < ct->el_size)
+               ct->elements[i] = 0;
+}
+
+static asn1p_ref_t *
+get_reference_from(asn1p_constraint_t *ct) {
+    if(ct->containedSubtype->type == ATV_REFERENCED) {
+        return ct->containedSubtype->value.reference;
+    } else if(ct->containedSubtype->type == ATV_TYPE) {
+        if(ct->containedSubtype->value.v_type->expr_type == A1TC_REFERENCE) {
+            return ct->containedSubtype->value.v_type->reference;
+        }
+    }
+    return NULL;
+}
+
+static int
+constraint_type_resolve(arg_t *arg, asn1p_constraint_t *ct) {
+    asn1p_constraint_t *ct_expr;
+    int ret;
+    asn1p_expr_t *rtype = (asn1p_expr_t *)0;
+
+    DEBUG("(\"%s\")", asn1f_printable_value(ct->containedSubtype));
+
+    if(ct->containedSubtype->type == ATV_VALUESET) {
+        ct_expr = ct->containedSubtype->value.constraint;
+        DEBUG("Found %s in constraints", "ValueSet");
+    } else if(get_reference_from(ct)) {
+        arg_t tmparg;
+
+        rtype = asn1f_lookup_symbol(arg, arg->expr->rhs_pspecs,
+                                    get_reference_from(ct));
+        if(!rtype) {
+            FATAL(
+                "Cannot find type \"%s\" in constraints "
+                "at line %d",
+                asn1f_printable_value(ct->containedSubtype), ct->_lineno);
+            return -1;
+        }
+
+        tmparg = *arg;
+        tmparg.expr = rtype;
+        tmparg.mod = rtype->module;
+        ret = asn1constraint_pullup(&tmparg);
+        if(ret) return ret;
+
+        if(rtype->ioc_table) {
+            if(!arg->expr->ioc_table)
+                arg->expr->ioc_table = asn1p_ioc_table_new();
+            asn1p_ioc_table_append(arg->expr->ioc_table, rtype->ioc_table);
+            asn1p_value_free(ct->containedSubtype);
+            ct->containedSubtype = NULL;
+        }
+
+        ct_expr = rtype->combined_constraints;
+        if(!ct_expr) return 0;
+    } else {
+        FATAL("Unsupported constraint kind %s at line %d",
+              asn1f_printable_value(ct->containedSubtype), ct->_lineno);
+        return -1;
+    }
+
+    ct_expr = asn1p_constraint_clone(ct_expr);
+    assert(ct_expr);
+
+    _remove_extensions(arg, ct_expr, 0);
+
+    if(ct_expr->type == ACT_CA_SET) {
+        unsigned int i;
+        for(i = 0; i < ct_expr->el_count; i++) {
+            if(asn1p_constraint_insert(
+                ct, ct_expr->elements[i])) {
+                asn1p_constraint_free(ct_expr);
+                return -1;
+            } else {
+                ct_expr->elements[i] = 0;
+            }
+        }
+        asn1p_constraint_free(ct_expr);
+    } else {
+        ret = asn1p_constraint_insert(ct, ct_expr);
+        assert(ret == 0);
+    }
+
+    ct->type = ACT_CA_SET;
+
+    /* keep constrainedSubtype field for future usage,
+       if valueset has not been resolved yet. */
+    if(rtype &&
+        (rtype->meta_type == AMT_VALUESET) &&
+        (!rtype->ioc_table))
+        return 0;
+
+    asn1p_value_free(ct->containedSubtype);
+    ct->containedSubtype = NULL;
+
+    return 0;
+}
+
+static int
+constraint_value_resolve(arg_t *arg, asn1p_value_t **value,
+                         enum asn1p_constraint_type_e real_ctype) {
+    asn1p_expr_t static_expr;
+       arg_t tmparg;
+       int rvalue = 0;
+       int ret;
+
+       DEBUG("(\"%s\", within <%s>)",
+               asn1f_printable_value(*value),
+               asn1p_constraint_type2str(real_ctype));
+
+       static_expr = *arg->expr;
+       static_expr.value = *value;
+       static_expr.meta_type = AMT_VALUE;
+       tmparg = *arg;
+       tmparg.mod = arg->expr->module;
+       tmparg.expr = &static_expr;
+       ret = asn1f_value_resolve(&tmparg, &static_expr, &real_ctype);
+       RET2RVAL(ret, rvalue);
+       assert(static_expr.value);
+       *value = static_expr.value;
+
+       return rvalue;
+}
+
+static int
+constraint_object_resolve(arg_t *arg, asn1p_value_t *value) {
+    asn1p_expr_t tmp_expr = *arg->expr;
+       asn1p_expr_t *saved_expr = arg->expr;
+
+       tmp_expr.meta_type = AMT_VALUESET;
+       tmp_expr.expr_type = A1TC_REFERENCE;
+       tmp_expr.value = value;
+       arg->expr = &tmp_expr;
+
+       if (asn1f_check_class_object(arg)) {
+               arg->expr = saved_expr;
+               FATAL("Parsing ObjectSet %s failed at %d", arg->expr->Identifier,
+                               arg->expr->_lineno);
+               return -1;
+       }
+
+       arg->expr = saved_expr;
+       return 0;
+}
+
diff --git a/libasn1fix/asn1fix_constraint.h b/libasn1fix/asn1fix_constraint.h
new file mode 100644 (file)
index 0000000..96164e1
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef        ASN1FIX_CONSTRAINT_H
+#define        ASN1FIX_CONSTRAINT_H
+
+/*
+ * Resolve referenced values inside constraints.
+ */
+int asn1constraint_resolve(
+    arg_t *arg, asn1p_constraint_t *ct,
+    asn1p_expr_type_e topmost_parent_expression_type,
+    enum asn1p_constraint_type_e effective_constraint_type);
+
+/*
+ * Collect all subtype constraints from all parents of this type and
+ * the type itself, forming a full constraint structure.
+ * Honors the constraints extensibility rules (46.8)
+ * and does other useful transformations.
+ */
+int asn1constraint_pullup(arg_t *arg);
+
+#endif /* ASN1FIX_CONSTRAINT_H */
diff --git a/libasn1fix/asn1fix_constraint_compat.c b/libasn1fix/asn1fix_constraint_compat.c
new file mode 100644 (file)
index 0000000..5f0ab22
--- /dev/null
@@ -0,0 +1,245 @@
+#include "asn1fix_internal.h"
+#include "asn1fix_crange.h"
+
+/*
+ * Check that a specific constraint is compatible
+ * with the given expression type.
+ */
+int
+asn1constraint_compatible(asn1p_expr_type_e expr_type,
+       enum asn1p_constraint_type_e constr_type, int fbless_SIZE) {
+
+       /*
+        * X.680-0207, Table 9.
+        */
+
+       switch(constr_type) {
+       case ACT_INVALID:
+               return 0;
+       case ACT_EL_TYPE:
+               return 1;
+       case ACT_EL_VALUE:
+               return 1;
+       case ACT_EL_RANGE:
+       case ACT_EL_LLRANGE:
+       case ACT_EL_RLRANGE:
+       case ACT_EL_ULRANGE:
+               switch(expr_type) {
+               case ASN_BASIC_ENUMERATED:
+               case ASN_BASIC_BOOLEAN:
+                       /*
+                        * The ValueRange constraint is not formally
+                        * applicable to the above types. However, we
+                        * support it just fine.
+                        */
+                       /* Fall through */
+               case ASN_BASIC_INTEGER:
+               case ASN_BASIC_REAL:
+                       return 1;
+               default:
+                       if(expr_type & ASN_STRING_MASK)
+                               return 1;
+               }
+               return 0;
+       case ACT_EL_EXT:
+               return -1;
+       case ACT_CT_FROM:
+               if(expr_type & ASN_STRING_MASK)
+                       return 1;
+               return 0;
+       case ACT_CT_SIZE:
+               switch(expr_type) {
+               case ASN_BASIC_INTEGER:
+               case ASN_BASIC_ENUMERATED:
+                       if(fbless_SIZE)
+                               return 1;
+                       break;
+               case ASN_BASIC_BIT_STRING:
+               case ASN_BASIC_OCTET_STRING:
+               case ASN_BASIC_CHARACTER_STRING:
+               case ASN_CONSTR_SEQUENCE_OF:
+               case ASN_CONSTR_SET_OF:
+                       return 1;
+               default:
+                       if(expr_type & ASN_STRING_MASK)
+                               return 1;
+               }
+               return 0;
+       case ACT_CT_WCOMP:
+       case ACT_CT_WCOMPS:
+               switch(expr_type) {
+               case A1TC_INSTANCE:
+               case ASN_BASIC_EXTERNAL:
+               case ASN_BASIC_EMBEDDED_PDV:
+               case ASN_BASIC_REAL:
+               case ASN_BASIC_CHARACTER_STRING:
+               case ASN_CONSTR_CHOICE:
+               case ASN_CONSTR_SEQUENCE:
+               case ASN_CONSTR_SEQUENCE_OF:
+               case ASN_CONSTR_SET:
+               case ASN_CONSTR_SET_OF:
+                       return 1;
+               default: break;
+               }
+               return 0;
+       case ACT_CT_CTDBY:
+               return 1;
+       case ACT_CT_CTNG:       /* X.682, #11 */
+               switch(expr_type) {
+               case ASN_BASIC_OCTET_STRING:
+               case ASN_BASIC_BIT_STRING:
+                       return 1;
+               default:
+                       return 0;
+               }
+       case ACT_CT_PATTERN:
+               if(expr_type & ASN_STRING_MASK)
+                       return 1;
+               return 0;
+       case ACT_CA_SET:
+       case ACT_CA_CRC:
+       case ACT_CA_CSV:
+       case ACT_CA_UNI:
+       case ACT_CA_INT:
+       case ACT_CA_EXC:
+       case ACT_CA_AEX:
+               return 1;
+       }
+
+       return -1;
+}
+
+
+#define DECL_RANGE(foo, lb, ub, ov, pv)     \
+    static asn1cnst_range_t range_##foo = { \
+        {ARE_VALUE, 0, lb}, {ARE_VALUE, 0, ub}, 0, 0, 0, 0, 0, 0, 0, ov, pv}
+
+#define DECL(name, lb, ub) DECL_RANGE(name, lb, ub, 0, 0)
+#define DECL_notOPV(name, lb, ub) DECL_RANGE(name, lb, ub, 1, 1)
+
+asn1cnst_range_t *
+asn1constraint_default_alphabet(asn1p_expr_type_e expr_type) {
+       DECL_notOPV(octstr,     0x00, 0xff);    /* Not OER- and PER-visible */
+       DECL_notOPV(utf8,       0x00, 0x7fffffff);      /* Not OER- and PER-visible */
+       DECL(bmp,       0x00, 65533);   /* 64K-2 cells */
+       DECL(uint7,     0x00, 0x7f);
+       DECL(uint32,    0x00, 0xffffffff);
+       DECL(Space,     0x20, 0x20);
+       DECL(ApostropheAndParens, 0x27, 0x29);
+       DECL(PlusTillColon, 0x2b, 0x3a);
+       DECL(Equal,     0x3d, 0x3d);
+       DECL(QuestionMark, 0x3f, 0x3f);
+       DECL(Digits,    0x30, 0x39);
+       DECL(AlphaCap,  0x41, 0x5a);
+       DECL(AlphaLow,  0x61, 0x7a);
+       DECL(PlusCommaMinusDot, 0x2b, 0x2e);
+       DECL(Plus,      0x2b, 0x2b);
+       DECL(MinusDot,  0x2d, 0x2e);
+       DECL(Z,         0x5a, 0x5a);
+       static asn1cnst_range_t *range_NumericString_array[] = {
+                       &range_Space, &range_Digits };
+       static asn1cnst_range_t *range_PrintableString_array[] = {
+                       &range_Space,
+                       &range_ApostropheAndParens,
+                       &range_PlusTillColon,
+                       &range_Equal,
+                       &range_QuestionMark,
+                       &range_AlphaCap,
+                       &range_AlphaLow
+       };
+       static asn1cnst_range_t *range_UTCTime_array[] = {
+                       &range_Plus, &range_MinusDot, &range_Digits, &range_Z };
+       static asn1cnst_range_t *range_GeneralizedTime_array[] = {
+                       &range_PlusCommaMinusDot, &range_Digits, &range_Z };
+
+       static asn1cnst_range_t range_notPERVisible = {
+                       { ARE_MIN, 0, 0 },
+                       { ARE_MAX, 0, 0 },
+                       0, 0, 0, 0, 0, 0, 0, 0, 1 };
+       static asn1cnst_range_t range_NumericString = {
+                       { ARE_VALUE, 0, 0x20 },
+                       { ARE_VALUE, 0, 0x39 },
+                       NOT_NARROW,
+                       range_NumericString_array,
+                       sizeof(range_NumericString_array)
+                               /sizeof(range_NumericString_array[0]),
+                       0, 0, 0, 0, 0, 0 };
+       static asn1cnst_range_t range_PrintableString = {
+                       { ARE_VALUE, 0, 0x20 },
+                       { ARE_VALUE, 0, 0x7a },
+                       NOT_NARROW,
+                       range_PrintableString_array,
+                       sizeof(range_PrintableString_array)
+                               /sizeof(range_PrintableString_array[0]),
+                       0, 0, 0, 0, 0, 0 };
+       static asn1cnst_range_t range_VisibleString = {
+                       { ARE_VALUE, 0, 0x20 },
+                       { ARE_VALUE, 0, 0x7e },
+                       NOT_NARROW, 0, 0, 0, 0, 0, 0, 0, 0 };
+       static asn1cnst_range_t range_UTCTime = {
+                       { ARE_VALUE, 0, 0x2b },
+                       { ARE_VALUE, 0, 0x5a },
+                       NOT_NARROW,
+                       range_UTCTime_array,
+                       sizeof(range_UTCTime_array)
+                               /sizeof(range_UTCTime_array[0]),
+                       0, 0, 0, 0, 0, 1 };
+       static asn1cnst_range_t range_GeneralizedTime = {
+                       { ARE_VALUE, 0, 0x2b },
+                       { ARE_VALUE, 0, 0x5a },
+                       NOT_NARROW,
+                       range_GeneralizedTime_array,
+                       sizeof(range_GeneralizedTime_array)
+                               /sizeof(range_GeneralizedTime_array[0]),
+                       0, 0, 0, 0, 0, 1 };
+
+       switch(expr_type) {
+       case ASN_STRING_NumericString:
+               return &range_NumericString;
+       case ASN_STRING_PrintableString:
+               return &range_PrintableString;
+       case ASN_STRING_VisibleString:
+               return &range_VisibleString;
+       case ASN_STRING_IA5String:
+               return &range_uint7;
+       case ASN_STRING_BMPString:
+               return &range_bmp;
+       case ASN_STRING_UTF8String:
+               /*
+                * X.691, #9.3.6
+                * Not a known-multipler character string type.
+                */
+               assert(range_utf8.not_OER_visible);
+               assert(range_utf8.not_PER_visible);
+               return &range_utf8;
+       case ASN_STRING_UniversalString:
+               return &range_uint32;
+       case ASN_BASIC_UTCTime:
+               /* Permitted alphabet constraint is not applicable */
+               assert(range_UTCTime.not_PER_visible);
+               return &range_UTCTime;
+       case ASN_BASIC_GeneralizedTime:
+               /* Permitted alphabet constraint is not applicable */
+               assert(range_GeneralizedTime.not_PER_visible);
+               return &range_GeneralizedTime;
+       case ASN_BASIC_OCTET_STRING:
+               /*
+                * Permitted alphabet constraint is not applicable
+                * to this type. However, we support it, albeit not
+                * in a strict PER mode.
+                */
+               assert(range_octstr.not_PER_visible);
+               return &range_octstr;
+       default:
+               if(!(expr_type & ASN_STRING_MASK))
+                       break;
+               assert(expr_type & ASN_STRING_NKM_MASK);
+               /*
+                * X.691, 9.3.6
+                * Not a known-multiplier character string.
+                */
+               return &range_notPERVisible;
+       }
+
+       return NULL;
+}
diff --git a/libasn1fix/asn1fix_crange.c b/libasn1fix/asn1fix_crange.c
new file mode 100644 (file)
index 0000000..4c9345d
--- /dev/null
@@ -0,0 +1,1457 @@
+#include "asn1fix_internal.h"
+#include "asn1fix_constraint.h"
+#include "asn1fix_crange.h"
+
+#undef FATAL
+#define        FATAL(fmt, args...)     do {                    \
+               fprintf(stderr, "FATAL: ");             \
+               fprintf(stderr, fmt, ##args);           \
+               fprintf(stderr, "\n");                  \
+       } while(0)
+
+static void
+asn1constraint_range_free_outer(asn1cnst_range_t *cr) {
+       if(cr) {
+               int i;
+               if(cr->elements) {
+                       for(i = 0; i < cr->el_count; i++)
+                               asn1constraint_range_free(cr->elements[i]);
+                       free(cr->elements);
+               }
+        memset(cr, 0, sizeof(*cr));
+    }
+}
+
+void
+asn1constraint_range_free(asn1cnst_range_t *cr) {
+    asn1constraint_range_free_outer(cr);
+    free(cr);
+}
+
+#define        _range_free(foo)        asn1constraint_range_free(foo)
+
+static asn1cnst_range_t *_range_new() {
+       asn1cnst_range_t *r;
+       r = calloc(1, sizeof(*r));
+       if(r) {
+               r->left.type = ARE_MIN;
+               r->right.type = ARE_MAX;
+       }
+       return r;
+}
+
+static void _range_remove_element(asn1cnst_range_t *range, int idx) {
+       assert(idx >= 0 && idx < range->el_count);
+
+       assert(!range->elements[idx]->elements);
+
+       _range_free(range->elements[idx]);
+
+       memmove(&range->elements[idx],
+               &range->elements[idx + 1],
+               (range->el_count - idx - 1)
+                       * sizeof(range->elements[0])
+       );
+       range->el_count--;
+       range->elements[range->el_count] = 0;   /* JIC */
+
+       if(range->el_count == 0) {
+               range->el_size = 0;
+               free(range->elements);
+               range->elements = 0;
+       }
+}
+
+static int _range_insert(asn1cnst_range_t *into, asn1cnst_range_t *cr) {
+
+       assert(!cr->elements);
+
+       if(into->el_count == into->el_size) {
+               void *p;
+               int n = into->el_size?(into->el_size << 1):4;
+               p = realloc(into->elements, n * sizeof(into->elements[0]));
+               if(p) {
+                       into->el_size = n;
+                       into->elements = p;
+               } else {
+                       assert(p);
+                       return -1;
+               }
+       }
+
+       into->elements[into->el_count++] = cr;
+       return 0;
+}
+
+static asn1cnst_range_t *_range_clone(const asn1cnst_range_t *range) {
+       asn1cnst_range_t *clone;
+       int i;
+
+       clone = _range_new();
+       if(!clone) return NULL;
+
+       *clone = *range;
+       clone->elements = 0;
+       clone->el_count = 0;
+       clone->el_size = 0;
+
+       for(i = 0; i < range->el_count; i++) {
+               asn1cnst_range_t *r = _range_clone(range->elements[i]);
+               if(!r || _range_insert(clone, r)) {
+                       _range_free(clone);
+                       _range_free(r);
+                       return NULL;
+               }
+       }
+
+       return clone;
+}
+
+static int
+_edge_compare(const asn1cnst_edge_t *el, const asn1cnst_edge_t *er) {
+
+       switch(el->type) {
+       case ARE_MIN:
+               switch(er->type) {
+               case ARE_MIN: return 0;
+               case ARE_MAX: return -1;
+               case ARE_VALUE: return -1;
+               }
+               break;
+       case ARE_MAX:
+               switch(er->type) {
+               case ARE_MIN: return 1;
+               case ARE_MAX: return 0;
+               case ARE_VALUE: return 1;
+               }
+               break;
+       case ARE_VALUE:
+               switch(er->type) {
+               case ARE_MIN: return 1;
+               case ARE_MAX: return -1;
+               case ARE_VALUE:
+                       if(el->value < er->value)
+                               return -1;
+                       if(el->value > er->value)
+                               return 1;
+                       return 0;
+               }
+               break;
+       }
+
+       return 0;
+}
+
+static int
+_range_compare(const void *a, const void *b) {
+       const asn1cnst_range_t *ra = *(const asn1cnst_range_t * const *)a;
+       const asn1cnst_range_t *rb = *(const asn1cnst_range_t * const *)b;
+       int ret;
+
+       ret = _edge_compare(&ra->left, &rb->left);
+       if(!ret) {
+               ret = _edge_compare(&ra->right, &rb->right);
+       }
+
+       return ret;
+}
+
+static const char *
+_edge_print(const asn1cnst_edge_t *edge, char *buf, size_t size) {
+       *buf = '\0';
+    assert(size > 4);
+       switch(edge->type) {
+       case ARE_MIN:   strcpy(buf, "MIN"); break;
+       case ARE_MAX:   strcpy(buf, "MAX"); break;
+       case ARE_VALUE:
+               snprintf(buf, size, "%s", asn1p_itoa(edge->value));
+        break;
+    default:
+        assert(!"edge->type");
+       }
+       return buf;
+}
+
+static const char *
+_edge_string(const asn1cnst_edge_t *edge) {
+       static char buf[128];
+    return _edge_print(edge, buf, sizeof(buf));
+}
+
+static const char *
+_range_string(const asn1cnst_range_t *range) {
+    static char buf[128];
+    char buf0[128];
+    char buf1[128];
+    snprintf(buf, sizeof(buf), "(%s..%s)",
+             _edge_print(&range->left, buf0, sizeof(buf0)),
+             _edge_print(&range->right, buf1, sizeof(buf1)));
+    return buf;
+}
+
+static int
+_edge_is_within(const asn1cnst_range_t *range, const asn1cnst_edge_t *edge) {
+       int i;
+
+       for(i = -1; i < range->el_count; i++) {
+               const asn1cnst_range_t *r;
+               if(i == -1) {
+                       if(range->el_count) continue;
+                       r = range;
+               } else {
+                       r = range->elements[i];
+               }
+               if(_edge_compare(&r->left, edge) <= 0
+               && _edge_compare(&r->right, edge) >= 0)
+                       return 1;
+       }
+
+       return 0;
+}
+
+static int
+_check_edges_within(const asn1cnst_range_t *range, const asn1cnst_range_t *r) {
+
+       if(!_edge_is_within(range, &r->left)) {
+               FATAL("Constraint value %s at line %d "
+                       "is not within "
+                       "a parent constraint range %s",
+                       _edge_string(&r->left),
+                       r->left.lineno,
+                       _range_string(range)
+               );
+               return -1;
+       }
+
+       if(!_edge_is_within(range, &r->right)) {
+               FATAL("Constraint value %s at line %d "
+                       "is not within "
+                       "a parent constraint range %s",
+                       _edge_string(&r->right),
+                       r->left.lineno,
+                       _range_string(range)
+               );
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+ * Combine narrowings to get the strongest (most specific).
+ */
+static enum asn1cnst_range_narrowing
+_strongest_narrowing(const asn1cnst_range_t *ar, const asn1cnst_range_t *br) {
+    enum asn1cnst_range_narrowing an = ar->narrowing;
+    enum asn1cnst_range_narrowing bn = br->narrowing;
+
+    if(!an) {
+        return bn;
+    } else if(!bn) {
+        return an;
+    } else {
+        return an > bn ? an : bn;
+    }
+}
+
+/*
+ * Combine narrowings to get the softest one.
+ */
+static enum asn1cnst_range_narrowing
+_softest_narrowing(const asn1cnst_range_t *ar, const asn1cnst_range_t *br) {
+    enum asn1cnst_range_narrowing an = ar->narrowing;
+    enum asn1cnst_range_narrowing bn = br->narrowing;
+
+    if(an) {
+        if(bn) {
+            return an < bn ? an : bn;
+        } else {
+            assert(bn == NOT_NARROW);
+            if(br->left.type == ARE_VALUE && br->right.type == ARE_VALUE) {
+                return an;
+            } else {
+                return NOT_NARROW;
+            }
+        }
+    } else if(bn) {
+        if(ar->left.type == ARE_VALUE && ar->right.type == ARE_VALUE) {
+            return bn;
+        } else {
+            return NOT_NARROW;
+        }
+    } else {
+        return NOT_NARROW;
+    }
+}
+
+static int _range_merge_in(asn1cnst_range_t *into, asn1cnst_range_t *cr) {
+       asn1cnst_range_t *r;
+       int prev_count = into->el_count;
+       int i;
+
+       into->not_OER_visible |= cr->not_OER_visible;
+       into->not_PER_visible |= cr->not_PER_visible;
+       into->extensible |= cr->extensible;
+       if(into->extensible)
+               into->not_OER_visible = 1;
+
+    into->narrowing = _softest_narrowing(into, cr);
+
+       /*
+        * Add the element OR all its children "into".
+        */
+       for(i = -1; i < cr->el_count; i++) {
+
+               if(i == -1) {
+                       if(cr->el_count) continue;
+                       r = cr;
+               } else {
+                       r = cr->elements[i];
+               }
+
+               if(_range_insert(into, r)) {
+                       into->el_count = prev_count;    /* Undo */
+                       return -1;
+               }
+       }
+
+       if(cr->el_count) {
+               cr->el_count = 0;
+               _range_free(cr);
+       } else {
+               /* This range is linked into "into". */
+       }
+
+       return 0;
+}
+
+enum range_fill_result {
+    RFR_OK,
+    RFR_FAIL,
+    RFR_INCOMPATIBLE
+};
+static enum range_fill_result _range_fill(asn1p_value_t *val, const asn1cnst_range_t *minmax, asn1cnst_edge_t *edge, asn1cnst_range_t *range, enum asn1p_constraint_type_e type, int lineno) {
+       unsigned char *p, *pend;
+
+       edge->lineno = lineno;
+
+       switch(val->type) {
+       case ATV_INTEGER:
+               if(type != ACT_EL_RANGE && type != ACT_CT_SIZE) {
+                       FATAL("Integer %s value invalid "
+                               "for %s constraint at line %d",
+                               asn1p_itoa(val->value.v_integer),
+                               asn1p_constraint_type2str(type), lineno);
+                       return RFR_FAIL;
+               }
+               edge->type = ARE_VALUE;
+               edge->value = val->value.v_integer;
+               return RFR_OK;
+       case ATV_MIN:
+               if(type != ACT_EL_RANGE && type != ACT_CT_SIZE) {
+                       FATAL("MIN invalid for %s constraint at line %d",
+                               asn1p_constraint_type2str(type), lineno);
+                       return RFR_FAIL;
+               }
+               edge->type = ARE_MIN;
+               if(minmax) *edge = minmax->left;
+               edge->lineno = lineno;  /* Restore lineno */
+               return RFR_OK;
+       case ATV_MAX:
+               if(type != ACT_EL_RANGE && type != ACT_CT_SIZE) {
+                       FATAL("MAX invalid for %s constraint at line %d",
+                               asn1p_constraint_type2str(type), lineno);
+                       return RFR_FAIL;
+               }
+               edge->type = ARE_MAX;
+               if(minmax) *edge = minmax->right;
+               edge->lineno = lineno;  /* Restore lineno */
+               return RFR_OK;
+       case ATV_FALSE:
+       case ATV_TRUE:
+               if(type != ACT_EL_RANGE) {
+                       FATAL("%s is invalid for %s constraint at line %d",
+                               val->type==ATV_TRUE?"TRUE":"FALSE",
+                               asn1p_constraint_type2str(type),
+                               lineno);
+                       return RFR_FAIL;
+               }
+               edge->type = ARE_VALUE;
+               edge->value = (val->type==ATV_TRUE);
+               return RFR_OK;
+       case ATV_TUPLE:
+       case ATV_QUADRUPLE:
+               edge->type = ARE_VALUE;
+               edge->value = val->value.v_integer;
+               return RFR_OK;
+       case ATV_STRING:
+               if(type != ACT_CT_FROM)
+                       return RFR_OK;
+               break;
+       case ATV_REFERENCED:
+               FATAL("Unresolved constraint element \"%s\" at line %d",
+                       asn1f_printable_reference(val->value.reference),
+                       lineno);
+               return RFR_FAIL;
+       case ATV_BITVECTOR:
+        /* Value constraint... not supported yet. */
+        /* OER: X.696 (08/2015) #8.2.2i */
+        return RFR_INCOMPATIBLE;
+       default:
+               FATAL("Unrecognized constraint range element type %d at line %d",
+                       val->type, lineno);
+               return RFR_FAIL;
+       }
+
+       assert(val->type == ATV_STRING);
+
+       p = val->value.string.buf;
+       pend = p + val->value.string.size;
+       if(p == pend) return RFR_OK;
+
+       edge->type = ARE_VALUE;
+       if(val->value.string.size == 1) {
+               edge->value = *p;
+       } else {
+               /*
+                * Else this is a set:
+                * (FROM("abcdef"))
+                * However, (FROM("abc".."def")) is forbidden.
+                * See also 47.4.4.
+                */
+               asn1c_integer_t vmin, vmax;
+               vmin = vmax = *p;
+               for(; p < pend; p++) {
+                       asn1cnst_range_t *nr = _range_new();
+                       int ret;
+                       assert(nr);
+
+                       if(*p < vmin) vmin = *p;
+                       if(*p > vmax) vmax = *p;
+
+                       ret = _range_insert(range, nr);
+                       assert(ret == 0);
+
+                       nr->left.type = ARE_VALUE;
+                       nr->left.value = *p;
+                       nr->left.lineno = lineno;
+                       nr->right = nr->left;
+               }
+               edge->value = (edge == &range->right) ? vmin : vmax;
+       }
+
+       return RFR_OK;
+}
+
+/*
+ * Check if ranges contain common elements.
+ */
+static int
+_range_overlap(const asn1cnst_range_t *ra, const asn1cnst_range_t *rb) {
+       int lr, rl;
+       const asn1cnst_edge_t *ra_l = &ra->left;
+       const asn1cnst_edge_t *ra_r = &ra->right;
+       const asn1cnst_edge_t *rb_l = &rb->left;
+       const asn1cnst_edge_t *rb_r = &rb->right;
+
+       assert(_edge_compare(ra_l, ra_r) <= 0);
+       assert(_edge_compare(rb_l, rb_r) <= 0);
+
+       lr = _edge_compare(ra_l, rb_r);
+       rl = _edge_compare(ra_r, rb_l);
+
+       /*
+        * L:       |---|
+        * R: |---|
+        */
+       if(lr > 0) return 0;
+
+       /*
+        * L: |---|
+        * R:       |---|
+        */
+       if(rl < 0) return 0;
+
+       return 1;
+}
+
+
+static int _range_partial_compare(const void *pa, const void *pb) {
+    const asn1cnst_range_t *ra = *(const void * const *)pa;
+    const asn1cnst_range_t *rb = *(const void * const *)pb;
+
+       return _edge_compare(&ra->left, &rb->left);
+}
+
+static void _range_partial_sort_elements(asn1cnst_range_t *r) {
+    qsort(r->elements, r->el_count, sizeof(r->elements[0]),
+          _range_partial_compare);
+}
+
+/*
+ * (MIN..20) x (10..15) = (MIN..9,10..15,16..20)
+ */
+static asn1cnst_range_t *
+_range_split(asn1cnst_range_t *ra, const asn1cnst_range_t *rb) {
+       asn1cnst_range_t *range, *nr;
+       int ll, rr;
+
+       assert(ra);
+       assert(rb);
+       assert(!ra->el_count);
+       assert(!rb->el_count);
+
+       if(!_range_overlap(ra, rb)) {
+               errno = 0;
+               return 0;
+       }
+
+       ll = _edge_compare(&ra->left, &rb->left);
+       rr = _edge_compare(&ra->right, &rb->right);
+
+       /*
+        * L:   |---|
+        * R: |-------|
+        */
+       if(ll >= 0 && rr <= 0) {
+               errno = 0;
+               return 0;
+       }
+
+       range = _range_new();
+       assert(range);
+
+       nr = _range_new();
+       assert(nr);
+
+       /*
+        * L: |---...
+        * R:   |--..
+        */
+       while(ll < 0) {
+               nr->left = ra->left;
+               nr->right = rb->left;
+               if(nr->right.type == ARE_VALUE) {
+                       if(nr->right.value == INTMAX_MIN) {
+                               /* We've hit the limit here. */
+                               break;
+                       }
+                       nr->right.value--;
+               }
+               _range_insert(range, nr);
+               nr = _range_new();
+               assert(nr);
+               break;
+       }
+
+       /*
+        * L: ...---|
+        * R: ..--|
+        */
+       while(rr > 0) {
+               nr->left = rb->right;
+               nr->right = ra->right;
+               if(nr->left.type == ARE_VALUE) {
+                       if(nr->left.value == INTMAX_MAX) {
+                               /* We've hit the limit here. */
+                               break;
+                       }
+                       nr->left.value++;
+               }
+               _range_insert(range, nr);
+               nr = _range_new();
+               assert(nr);
+               break;
+       }
+
+       /*
+        * L:  |---|
+        * R: |-----|
+        */
+       nr->left = ra->left;
+       nr->right = ra->right;
+       if(_edge_compare(&ra->left, &rb->left) < 0)
+               nr->left = rb->left;
+       if(_edge_compare(&ra->right, &rb->right) > 0)
+               nr->right = rb->right;
+
+       _range_insert(range, nr);
+
+    _range_partial_sort_elements(range);
+
+       return range;
+}
+
+static int
+_range_intersection(asn1cnst_range_t *range, const asn1cnst_range_t *with, int strict_edge_check, int is_oer) {
+       int ret;
+       int i, j;
+
+       assert(!range->incompatible);
+
+    if(is_oer) {
+        assert(range->extensible == 0);
+        assert(range->not_OER_visible == 0);
+        assert(with->extensible == 0);
+        assert(with->not_OER_visible == 0);
+        if(range->extensible) {
+            assert(range->not_OER_visible);
+        }
+        if(range->extensible || range->not_OER_visible) {
+            /* X.696 #8.2.4 Completely ignore the extensible constraints */
+            /* (XXX)(YYY,...) Retain the first one (XXX). */
+            asn1cnst_range_t *tmp = _range_new();
+            *tmp = *range;
+            *range = *with;
+            _range_free(tmp);
+            return 0;
+        }
+
+        if(with->extensible) {
+            assert(with->not_OER_visible);
+        }
+        if(with->extensible || with->not_OER_visible) {
+            /* X.696 #8.2.4 Completely ignore the extensible constraints */
+            return 0;
+        }
+    } else {
+        /* Propagate errors */
+        range->extensible |= with->extensible;
+        if(with->extensible)
+            range->not_OER_visible = 1;
+        range->not_PER_visible |= with->not_PER_visible;
+    }
+       range->empty_constraint |= with->empty_constraint;
+
+    range->narrowing = _strongest_narrowing(range, with);
+
+       if(range->empty_constraint) {
+               /* No use in intersecting empty constraints */
+               return 0;
+       }
+
+       /*
+        * This is an AND operation.
+        */
+
+       /* If this is the only element, insert it into itself as a child */
+       if(range->el_count == 0) {
+               asn1cnst_range_t *r = _range_new();
+               r->left = range->left;
+               r->right = range->right;
+               _range_insert(range, r);
+               assert(range->el_count == 1);
+       }
+
+       /*
+        * Make sure we're dealing with sane data.
+        * G.4.2.3
+        */
+       if(strict_edge_check) {
+               for(j = -1; j < with->el_count; j++) {
+
+                       if(j == -1) {
+                               if(with->el_count) continue;
+                               if(_check_edges_within(range, with))
+                                       return -1;
+                       } else {
+                               if(_check_edges_within(range,
+                                               with->elements[j]))
+                                       return -1;
+                       }
+               }
+       }
+
+       /*
+        * Split range in pieces.
+        */
+
+       for(i = 0; i < range->el_count; i++) {
+         for(j = -1; j < with->el_count; j++) {
+               const asn1cnst_range_t *wel;
+               asn1cnst_range_t *r;
+
+               if(j == -1) {
+                       if(with->el_count) continue;
+                       wel = with;
+               } else {
+                       wel = with->elements[j];
+                       assert(!wel->el_count); /* non-compound item! */
+               }
+
+               r = _range_split(range->elements[i], wel);
+               if(r) {
+                       int ec;
+                       /* Substitute the current element with a split */
+                       _range_remove_element(range, i);
+                       assert(r->el_count);
+                       for(ec = 0; ec < r->el_count; ec++) {
+                               ret = _range_insert(range, r->elements[ec]);
+                               assert(ret == 0);
+                       }
+                       r->el_count = 0;
+                       _range_free(r);
+                       i--;
+                       break;  /* Try again from this point */
+               }
+         }
+       }
+
+       assert(range->el_count);
+
+       /*
+        * Remove pieces which aren't AND-compatible "with" range.
+        */
+
+       for(i = 0; i < range->el_count; i++) {
+               for(j = -1; j < with->el_count; j++) {
+                       const asn1cnst_range_t *wel;
+       
+                       if(j == -1) {
+                               if(with->el_count) continue;
+                               wel = with;
+                       } else {
+                               wel = with->elements[j];
+                       }
+
+                       if(_range_overlap(range->elements[i], wel))
+                               break;
+               }
+               if(j == with->el_count) {
+                       _range_remove_element(range, i);
+                       i--;
+               }
+       }
+
+       if(range->el_count == 0)
+               range->empty_constraint = 1;
+
+       return 0;
+}
+
+static int
+_range_union(asn1cnst_range_t *range) {
+       int i;
+
+       qsort(range->elements, range->el_count, sizeof(range->elements[0]),
+               _range_compare);
+
+       /*
+        * The range is sorted by the start values.
+        */
+       for(i = 1; i < range->el_count; i++) {
+               asn1cnst_range_t *ra = range->elements[i - 1];
+               asn1cnst_range_t *rb = range->elements[i];
+
+               if(_range_overlap(ra, rb)) {
+                       if(_edge_compare(&ra->left, &rb->left) < 0)
+                               rb->left = ra->left;
+
+                       if(_edge_compare(&ra->right, &rb->right) > 0)
+                               rb->right = ra->right;
+               } else {
+                       /*
+                        * Still, range may be joined: (1..4)(5..10).
+                        * This logic is valid only for whole numbers
+                        * (i.e., not REAL type, but REAL constraints
+                        * are not PER-visible (X.691, #9.3.12).
+                        */
+                       if(ra->right.type == ARE_VALUE
+                       && rb->left.type == ARE_VALUE
+                       && (rb->left.value - ra->right.value) == 1) {
+                               /* (1..10) */
+                               rb->left = ra->left;
+                       } else {
+                               continue;
+                       }
+               }
+
+               /*
+                * Squeeze the array by removing the ra.
+                */
+               _range_remove_element(range, i - 1);
+
+               i--;    /* Retry from the current point */
+       }
+
+       return 0;
+}
+
+static int
+_range_canonicalize(asn1cnst_range_t *range) {
+
+       if(range->el_count == 0) {
+               /*
+                * Switch left and right edges, make them sorted.
+                * It might be a mild warning though.
+                */
+               if(_edge_compare(&range->left, &range->right) > 0) {
+                       asn1cnst_edge_t tmp = range->left;
+                       range->left = range->right;
+                       range->right = tmp;
+               }
+
+               free(range->elements);
+               range->elements = 0;
+               range->el_size = 0;
+               return 0;
+       }
+
+       /*
+        * Remove duplicates and overlaps by merging them in.
+        */
+       _range_union(range);
+
+       /* Refine the left edge of a parent */
+       range->left = range->elements[0]->left;
+
+       /* Refine the right edge of a parent */
+       range->right = range->elements[range->el_count - 1]->right;
+
+       /* Remove the child, if it's a single one */
+       if(range->el_count == 1) {
+               _range_remove_element(range, 0);
+       }
+
+       return 0;
+}
+
+asn1cnst_range_t *
+asn1constraint_compute_OER_range(const char *dbg_name, asn1p_expr_type_e expr_type, const asn1p_constraint_t *ct, enum asn1p_constraint_type_e requested_ct_type, const asn1cnst_range_t *minmax, int *exmet, enum cpr_flags cpr_flags) {
+    return asn1constraint_compute_constraint_range(dbg_name, expr_type, ct, requested_ct_type, minmax, exmet, cpr_flags | CPR_strict_OER_visibility);
+}
+
+asn1cnst_range_t *
+asn1constraint_compute_PER_range(const char *dbg_name, asn1p_expr_type_e expr_type, const asn1p_constraint_t *ct, enum asn1p_constraint_type_e requested_ct_type, const asn1cnst_range_t *minmax, int *exmet, enum cpr_flags cpr_flags) {
+    if(0) return asn1constraint_compute_constraint_range(dbg_name, expr_type, ct, requested_ct_type, minmax, exmet, cpr_flags | CPR_strict_PER_visibility);
+    /* Due to pecularities of PER constraint handling, we don't enable strict PER visibility upfront here. */
+    return asn1constraint_compute_constraint_range(dbg_name, expr_type, ct, requested_ct_type, minmax, exmet, cpr_flags);
+}
+
+static asn1cnst_range_t *
+asn1f_real_range_from_WCOMPS(const char *dbg_name,
+                             const asn1p_constraint_t *ct) {
+    asn1cnst_range_t two = {
+        {ARE_VALUE, 0, 2}, {ARE_VALUE, 0, 2}, 0, NULL, 0, 0, 0, 0, 0, 0, 0};
+    asn1cnst_range_t ten = {
+        {ARE_VALUE, 0, 10}, {ARE_VALUE, 0, 10}, 0, NULL, 0, 0, 0, 0, 0, 0, 0};
+    asn1cnst_range_t *two_ten[] = {&two, &ten};
+    /* Interpretation of X.680 #21.5 */
+    asn1cnst_range_t mantissa_default_range = {
+        {ARE_MIN, 0, 0}, {ARE_MAX, 0, 0}, 0, NULL, 0, 0, 0, 0, 0, 0, 0};
+    asn1cnst_range_t exponent_default_range = {
+        {ARE_MIN, 0, 0}, {ARE_MAX, 0, 0}, 0, NULL, 0, 0, 0, 0, 0, 0, 0};
+    asn1cnst_range_t base_default_range = {
+        {ARE_VALUE, 0, 2}, {ARE_MAX, 0, 10}, 0, two_ten, 2, 0, 0, 0, 0, 0, 0};
+
+    asn1cnst_range_t *mantissa = _range_clone(&mantissa_default_range);
+    asn1cnst_range_t *exponent = _range_clone(&exponent_default_range);
+    asn1cnst_range_t *base = _range_clone(&base_default_range);
+    asn1cnst_range_t *range;
+
+#define FREE_MEB()             \
+    do {                       \
+        _range_free(mantissa); \
+        _range_free(exponent); \
+        _range_free(base);     \
+    } while(0)
+
+    (void)dbg_name;
+
+    assert(ct->type == ACT_CT_WCOMPS);
+
+    range = _range_new();
+    range->incompatible = 1;
+
+    for(unsigned i = 0; i < ct->el_count; i++) {
+        struct asn1p_constraint_s *el = ct->elements[i];
+        asn1p_value_t *value = 0;
+        asn1cnst_range_t **dst_range = 0;
+
+        switch(el->type) {
+        case ACT_EL_EXT:
+            /* Some components might not be defined. */
+            assert(range->incompatible);
+            FREE_MEB();
+            return range;
+        default:
+            assert(range->incompatible);
+            FREE_MEB();
+            return range;
+        case ACT_EL_VALUE:
+            value = el->value;
+            if(value->type != ATV_REFERENCED) {
+                FREE_MEB();
+                return range;
+            }
+            break;
+        }
+
+        if(strcmp(asn1p_ref_string(value->value.reference), "mantissa") == 0) {
+            dst_range = &mantissa;
+        } else if(strcmp(asn1p_ref_string(value->value.reference), "exponent")
+                  == 0) {
+            dst_range = &exponent;
+        } else if(strcmp(asn1p_ref_string(value->value.reference), "base")
+                  == 0) {
+            dst_range = &base;
+        } else {
+            FATAL("Invalid specification \"%s\" for REAL",
+                  asn1p_ref_string(value->value.reference));
+            FREE_MEB();
+            return range;
+        }
+
+        switch(el->el_count) {
+        case 0: continue;
+        case 1: break;
+        default:
+            FATAL("Too many constraints (%u) for \"%s\" for REAL", el->el_count,
+                  asn1p_ref_string(value->value.reference));
+            FREE_MEB();
+            return range;
+        }
+
+        asn1cnst_range_t *tmprange = asn1constraint_compute_constraint_range(
+            dbg_name, ASN_BASIC_INTEGER, el->elements[0], ACT_EL_RANGE,
+            *dst_range, 0, CPR_noflags);
+        assert(tmprange);
+        if(tmprange->incompatible) {
+            _range_free(tmprange);
+            FREE_MEB();
+            return range;
+        }
+        asn1constraint_range_free(*dst_range);
+        *dst_range = tmprange;
+    }
+
+    range->incompatible = 0;
+
+    /* X.696 #12.2 */
+    if(mantissa->left.type == ARE_VALUE && mantissa->right.type == ARE_VALUE
+       && mantissa->left.value >= -16777215 && mantissa->right.value <= 16777215
+       && base->left.type == ARE_VALUE && base->right.type == ARE_VALUE
+       && base->left.value == 2 && base->right.value == 2
+       && exponent->left.type == ARE_VALUE && exponent->right.type == ARE_VALUE
+       && exponent->left.value >= -149 && exponent->right.value <= 104) {
+        range->narrowing = NARROW_FLOAT32;
+    } else /* X.696 #12.3 */
+    if(mantissa->left.type == ARE_VALUE && mantissa->right.type == ARE_VALUE
+       && mantissa->left.value >= -9007199254740991ll
+       && mantissa->right.value <= 9007199254740991ull
+       && base->left.type == ARE_VALUE && base->right.type == ARE_VALUE
+       && base->left.value == 2 && base->right.value == 2
+       && exponent->left.type == ARE_VALUE && exponent->right.type == ARE_VALUE
+       && exponent->left.value >= -1074 && exponent->right.value <= 971) {
+        range->narrowing = NARROW_DOUBLE64;
+    }
+
+    FREE_MEB();
+    return range;
+}
+
+asn1cnst_range_t *
+asn1constraint_compute_constraint_range(
+    const char *dbg_name, asn1p_expr_type_e expr_type,
+    const asn1p_constraint_t *ct,
+    enum asn1p_constraint_type_e requested_ct_type,
+    const asn1cnst_range_t *minmax, int *exmet, enum cpr_flags cpr_flags) {
+    asn1cnst_range_t *range;
+       asn1cnst_range_t *tmp;
+       asn1p_value_t *vmin;
+       asn1p_value_t *vmax;
+       int expectation_met;
+       unsigned int i;
+       int ret;
+
+       if(!exmet) {
+               exmet = &expectation_met;
+               *exmet = 0;
+       }
+
+       /*
+        * Check if the requested constraint is theoretically compatible
+        * with the given expression type.
+        */
+       if(asn1constraint_compatible(expr_type, requested_ct_type,
+                       cpr_flags & CPR_simulate_fbless_SIZE) != 1) {
+               errno = EINVAL;
+               return 0;
+       }
+
+       /*
+        * Check arguments' validity.
+        */
+       switch(requested_ct_type) {
+       case ACT_EL_RANGE:
+               if(exmet == &expectation_met)
+                       *exmet = 1;
+               break;
+       case ACT_CT_FROM:
+        if(cpr_flags & CPR_strict_OER_visibility) {
+            errno = EINVAL;
+            return 0;
+        }
+               if(!minmax) {
+                       minmax = asn1constraint_default_alphabet(expr_type);
+                       if(minmax) {
+                               break;
+                       }
+               }
+               /* Fall through */
+       case ACT_CT_SIZE:
+               if(!minmax) {
+                       static asn1cnst_range_t mm;
+                       mm.left.type = ARE_VALUE;
+                       mm.left.value = 0;
+                       mm.right.type = ARE_MAX;
+                       minmax = &mm;
+               }
+               break;
+       default:
+               errno = EINVAL;
+               return 0;
+       }
+
+       if(minmax) {
+               range = _range_clone(minmax);
+       } else {
+               range = _range_new();
+       }
+
+       /*
+        * X.691, #9.3.6
+        * Constraints on restricted character string types
+        * which are not known-multiplier are not PER-visible.
+        */
+       if((expr_type & ASN_STRING_NKM_MASK))
+               range->not_PER_visible = 1;
+
+    if(!ct
+       || (range->not_PER_visible && (cpr_flags & CPR_strict_PER_visibility)))
+        return range;
+
+    /*
+     * X.696 (08/2015), #8.2.2
+     * SIZE constraints on restricted character string types
+     * which are not known-multiplier are not OER-visible.
+     */
+       if(requested_ct_type == ACT_CT_SIZE && (expr_type & ASN_STRING_NKM_MASK))
+               range->not_OER_visible = 1;
+
+    if(!ct
+       || (range->not_OER_visible && (cpr_flags & CPR_strict_OER_visibility))) {
+        return range;
+    }
+
+       switch(ct->type) {
+       case ACT_EL_VALUE:
+               vmin = vmax = ct->value;
+               break;
+       case ACT_EL_RANGE:
+       case ACT_EL_LLRANGE:
+       case ACT_EL_RLRANGE:
+       case ACT_EL_ULRANGE:
+               vmin = ct->range_start;
+               vmax = ct->range_stop;
+               break;
+       case ACT_EL_EXT:
+               if(!*exmet) {
+                       range->extensible = 1;
+                       range->not_OER_visible = 1;
+               } else {
+                       _range_free(range);
+                       errno = ERANGE;
+                       range = 0;
+               }
+               return range;
+       case ACT_CT_SIZE:
+       case ACT_CT_FROM:
+               if(requested_ct_type == ct->type) {
+                       /*
+                        * Specifically requested to process SIZE() or FROM() constraint.
+                        */
+                       *exmet = 1;
+               } else {
+                       range->incompatible = 1;
+                       return range;
+               }
+               assert(ct->el_count == 1);
+               tmp = asn1constraint_compute_constraint_range(
+                       dbg_name, expr_type, ct->elements[0], requested_ct_type, minmax,
+                       exmet, cpr_flags);
+               if(tmp) {
+                       _range_free(range);
+               } else {
+                       if(errno == ERANGE) {
+                               range->empty_constraint = 1;
+                               range->extensible = 1;
+                               if(range->extensible)
+                                       range->not_OER_visible = 1;
+                               tmp = range;
+                       } else {
+                               _range_free(range);
+                       }
+               }
+               return tmp;
+       case ACT_CA_SET:        /* (10..20)(15..17) */
+       case ACT_CA_INT:        /* SIZE(1..2) ^ FROM("ABCD") */
+
+               /* AND constraints, one after another. */
+               for(i = 0; i < ct->el_count; i++) {
+                       tmp = asn1constraint_compute_constraint_range(dbg_name, expr_type,
+                               ct->elements[i], requested_ct_type,
+                               ct->type==ACT_CA_SET?range:minmax, exmet,
+                               cpr_flags);
+                       if(!tmp) {
+                               if(errno == ERANGE) {
+                                       range->extensible = 1;
+                                       if(range->extensible)
+                                               range->not_OER_visible = 1;
+                                       continue;
+                               } else {
+                                       _range_free(range);
+                                       return NULL;
+                               }
+                       }
+
+                       if(tmp->incompatible) {
+                               /*
+                                * Ignore constraints
+                                * incompatible with arguments:
+                                *      SIZE(1..2) ^ FROM("ABCD")
+                                * either SIZE or FROM will be ignored.
+                                */
+                               _range_free(tmp);
+                               continue;
+                       }
+
+                       if(tmp->not_OER_visible
+                       && (cpr_flags & CPR_strict_OER_visibility)) {
+                /*
+                 * Ignore not OER-visible
+                 */
+                _range_free(tmp);
+                               continue;
+                       }
+
+                       if(tmp->not_PER_visible
+                       && (cpr_flags & CPR_strict_PER_visibility)) {
+                               if(ct->type == ACT_CA_SET) {
+                                       /*
+                                        * X.691, #9.3.18:
+                                        * Ignore this separate component.
+                                        */
+                               } else {
+                                       /*
+                                        * X.691, #9.3.19:
+                                        * Ignore not PER-visible INTERSECTION
+                                        */
+                               }
+                               _range_free(tmp);
+                               continue;
+                       }
+
+                       ret = _range_intersection(range, tmp,
+                               ct->type == ACT_CA_SET, cpr_flags & CPR_strict_OER_visibility);
+                       _range_free(tmp);
+                       if(ret) {
+                               _range_free(range);
+                               errno = EPERM;
+                               return NULL;
+                       }
+
+                       _range_canonicalize(range);
+               }
+
+               return range;
+       case ACT_CA_CSV:        /* SIZE(1..2, 3..4) */
+       case ACT_CA_UNI:        /* SIZE(1..2) | FROM("ABCD") */
+
+               /*
+                * Grab the first valid constraint.
+                */
+               tmp = 0;
+               for(i = 0; i < ct->el_count; i++) {
+                       tmp = asn1constraint_compute_constraint_range(dbg_name, expr_type,
+                               ct->elements[i], requested_ct_type, minmax, exmet,
+                               cpr_flags);
+                       if(!tmp) {
+                               if(errno == ERANGE) {
+                                       range->extensible = 1;
+                                       range->not_OER_visible = 1;
+                                       continue;
+                               } else {
+                                       _range_free(range);
+                                       return NULL;
+                               }
+                       }
+                       if(tmp->incompatible) {
+                               _range_free(tmp);
+                               tmp = 0;
+                       }
+                       break;
+               }
+               if(tmp) {
+                       tmp->extensible |= range->extensible;
+                       tmp->not_OER_visible |= range->not_OER_visible;
+                       tmp->empty_constraint |= range->empty_constraint;
+                       _range_free(range);
+                       range = tmp;
+               } else {
+                       range->incompatible = 1;
+                       return range;
+               }
+
+               /*
+                * Merge with the rest of them.
+                * Canonicalizator will do the union magic.
+                */
+               for(; i < ct->el_count; i++) {
+                       tmp = asn1constraint_compute_constraint_range(dbg_name, expr_type,
+                               ct->elements[i], requested_ct_type, minmax, exmet,
+                               cpr_flags);
+                       if(!tmp) {
+                               if(errno == ERANGE) {
+                                       range->extensible = 1;
+                                       range->not_OER_visible = 1;
+                                       continue;
+                               } else {
+                                       _range_free(range);
+                                       return NULL;
+                               }
+                       }
+
+                       if(tmp->incompatible) {
+                               _range_free(tmp);
+                               _range_canonicalize(range);
+                               range->incompatible = 1;
+                               return range;
+                       }
+
+                       if(tmp->empty_constraint) {
+                               /*
+                                * Ignore empty constraints in OR logic.
+                                */
+                               range->extensible |= tmp->extensible;
+                               range->not_OER_visible |= tmp->not_OER_visible;
+                               _range_free(tmp);
+                               continue;
+                       }
+
+                       _range_merge_in(range, tmp);
+               }
+
+               _range_canonicalize(range);
+
+        if(requested_ct_type == ACT_CT_FROM) {
+            /*
+             * X.696 permitted alphabet constraints are not OER-visible.
+             */
+            range->not_OER_visible = 1;
+            if(range->extensible) {
+                /*
+                 * X.691, #9.3.10:
+                 * Extensible permitted alphabet constraints
+                 * are not PER-visible.
+                 */
+                range->not_PER_visible = 1;
+            }
+        }
+
+               if(range->not_PER_visible
+               && (cpr_flags & CPR_strict_PER_visibility)) {
+                       /*
+                        * X.691, #9.3.19:
+                        * If not PER-visible constraint is part of UNION,
+                        * the whole resulting constraint is not PER-visible.
+                        */
+                       _range_free(range);
+                       if(minmax)
+                               range = _range_clone(minmax);
+                       else
+                               range = _range_new();
+                       range->not_PER_visible = 1;
+                       range->incompatible = 1;
+               }
+
+               return range;
+       case ACT_CA_EXC:        /* FROM("ABCD") EXCEPT FROM("AB") */
+               /*
+                * X.691 (PER), #9.3.19:
+                * EXCEPT and the following value set is completely ignored.
+                * X.696 (OER), #8.2.6:
+                * EXCEPT keyword and the following value set is completely ignored.
+                */
+               assert(ct->el_count >= 1);
+               _range_free(range);
+               range = asn1constraint_compute_constraint_range(dbg_name, expr_type,
+                       ct->elements[0], requested_ct_type, minmax, exmet, cpr_flags);
+               return range;
+       case ACT_CT_WCOMPS:
+        if(expr_type == ASN_BASIC_REAL) {
+            return asn1f_real_range_from_WCOMPS(dbg_name, ct);
+        }
+               range->incompatible = 1;
+               return range;
+       default:
+               range->incompatible = 1;
+               return range;
+       }
+
+       if(!*exmet) {
+               /*
+                * Expectation is not met. Return the default range.
+                */
+               range->incompatible = 1;
+               return range;
+       }
+
+    if(expr_type == ASN_BASIC_REAL
+       && (vmin->type == ATV_REAL || vmax->type == ATV_REAL)) {
+        range->incompatible = 1;
+        return range;
+    }
+
+    _range_free(range);
+       range = _range_new();
+
+    enum range_fill_result rfr;
+       rfr = _range_fill(vmin, minmax, &range->left,
+                               range, requested_ct_type, ct->_lineno);
+    if(rfr == RFR_OK) {
+        rfr = _range_fill(vmax, minmax, &range->right,
+                    range, requested_ct_type, ct->_lineno);
+    }
+    switch(rfr) {
+    case RFR_OK:
+        break;
+    case RFR_FAIL:
+        _range_free(range);
+        errno = EPERM;
+        return NULL;
+    case RFR_INCOMPATIBLE:
+               range->incompatible = 1;
+               return range;
+       }
+
+       if(minmax) {
+               asn1cnst_range_t *clone;
+
+               clone = _range_clone(minmax);
+
+               /* Constrain parent type with given data. */
+               ret = _range_intersection(clone, range, 1,
+                                         cpr_flags & CPR_strict_OER_visibility);
+               _range_free(range);
+               if(ret) {
+                       _range_free(clone);
+                       errno = EPERM;
+                       return NULL;
+               }
+               range = clone;
+       }
+
+       /*
+        * Recompute elements's min/max, remove duplicates, etc.
+        */
+       _range_canonicalize(range);
+
+       return range;
+}
+
+#ifdef UNIT_TEST
+int main() {
+    asn1cnst_range_t *ra = _range_new();
+    asn1cnst_range_t *rb = _range_new();
+
+    fprintf(stderr, "Testing (MIN..20) x (10..15) => (MIN..9,10..15,16..20)\n");
+
+    /* (MIN..20) */
+    ra->left.type = ARE_MIN;
+    ra->right.type = ARE_VALUE; ra->right.value = 20;
+
+    /* (10..15) */
+    rb->left.type = ARE_VALUE; rb->left.value = 10;
+    rb->right.type = ARE_VALUE; rb->right.value = 15;
+
+    /*
+     * (MIN..20) x (10..15) = (MIN..9,10..15,16..20)
+     */
+    asn1cnst_range_t *r = _range_split(ra, rb);
+    assert(r);
+    assert(r->left.type == ARE_MIN);
+    assert(r->right.type == ARE_MAX);
+
+    assert(r->el_count == 3);
+    assert(r->elements[0]->elements == NULL);
+    assert(r->elements[1]->elements == NULL);
+    assert(r->elements[2]->elements == NULL);
+
+    /* (MIN..9) */
+    fprintf(stderr, "[0].left = %s\n", _edge_string(&r->elements[0]->left));
+    fprintf(stderr, "[0].right = %s\n", _edge_string(&r->elements[0]->right));
+    assert(r->elements[0]->left.type == ARE_MIN);
+    assert(r->elements[0]->right.type == ARE_VALUE);
+    assert(r->elements[0]->right.value == 9);
+
+    /* (10..15) */
+    fprintf(stderr, "[1].left = %s\n", _edge_string(&r->elements[1]->left));
+    fprintf(stderr, "[1].right = %s\n", _edge_string(&r->elements[1]->right));
+    assert(r->elements[1]->left.type == ARE_VALUE);
+    assert(r->elements[1]->left.value == 10);
+    assert(r->elements[1]->right.type == ARE_VALUE);
+    assert(r->elements[1]->right.value == 15);
+
+    /* (16..20) */
+    fprintf(stderr, "[2].left = %s\n", _edge_string(&r->elements[2]->left));
+    fprintf(stderr, "[2].right = %s\n", _edge_string(&r->elements[2]->right));
+    assert(r->elements[2]->left.type == ARE_VALUE);
+    assert(r->elements[2]->left.value == 16);
+    assert(r->elements[2]->right.type == ARE_VALUE);
+    assert(r->elements[2]->right.value == 20);
+
+    _range_free(r);
+
+
+
+    fprintf(stderr, "Testing (MIN..20) x (<min>..15) => (<min>..15,16..20)\n");
+
+    /* (MIN..20) */
+    ra->left.type = ARE_MIN;
+    ra->right.type = ARE_VALUE; ra->right.value = 20;
+
+    /* (<INTMAX_MIN>..15) */
+    rb->left.type = ARE_VALUE; rb->left.value = INTMAX_MIN;
+    rb->right.type = ARE_VALUE; rb->right.value = 15;
+
+    r = _range_split(ra, rb);
+    assert(r);
+    assert(r->left.type == ARE_MIN);
+    assert(r->right.type == ARE_MAX);
+
+    assert(r->el_count == 2);
+    assert(r->elements[0]->elements == NULL);
+    assert(r->elements[1]->elements == NULL);
+
+    /* (<min>..16) */
+    fprintf(stderr, "[0].left = %s\n", _edge_string(&r->elements[0]->left));
+    fprintf(stderr, "[0].right = %s\n", _edge_string(&r->elements[0]->right));
+    assert(r->elements[0]->left.type == ARE_VALUE);
+    assert(r->elements[0]->left.value == INTMAX_MIN);
+    assert(r->elements[0]->right.type == ARE_VALUE);
+    assert(r->elements[0]->right.value == 15);
+
+    /* (16..20) */
+    fprintf(stderr, "[1].left = %s\n", _edge_string(&r->elements[1]->left));
+    fprintf(stderr, "[1].right = %s\n", _edge_string(&r->elements[1]->right));
+    assert(r->elements[1]->left.type == ARE_VALUE);
+    assert(r->elements[1]->left.value == 16);
+    assert(r->elements[1]->right.type == ARE_VALUE);
+    assert(r->elements[1]->right.value == 20);
+
+    _range_free(r);
+
+    return 0;
+}
+#endif
diff --git a/libasn1fix/asn1fix_crange.h b/libasn1fix/asn1fix_crange.h
new file mode 100644 (file)
index 0000000..1896392
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef        ASN1FIX_CRANGE_H
+#define        ASN1FIX_CRANGE_H
+
+typedef struct asn1cnst_edge_s {
+       enum asn1cnst_range_edge {
+               ARE_MIN,
+               ARE_MAX,
+               ARE_VALUE,
+       } type;
+       int lineno;     /* Line where the corresponding token was found */
+       asn1c_integer_t value;  /* Value when type is ARE_VALUE */
+} asn1cnst_edge_t;
+
+typedef struct asn1cnst_range_s {
+       asn1cnst_edge_t left;   /* MIN from (MIN..10) */
+       asn1cnst_edge_t right;  /* 10 from (MIN..10) */
+
+    enum asn1cnst_range_narrowing {
+        /* Sorted from softest to strictest narrowing */
+        NOT_NARROW,
+        NARROW_DOUBLE64,
+        NARROW_FLOAT32,
+    } narrowing; /* Constrained to a known narrow type */
+
+    /* If range is split in parts, these are the parts */
+       struct asn1cnst_range_s **elements;
+       int el_count;
+       int el_size;
+
+       int empty_constraint;   /* If yes, too bad. */
+       int extensible;         /* Extension marker (...) is in effect. */
+
+       int incompatible;       /* Constraint incompatible with argument */
+       int not_OER_visible;    /* Contains not OER-visible components */
+       int not_PER_visible;    /* Contains not PER-visible components */
+} asn1cnst_range_t;
+
+/*
+ * Compute the constraint range with variable visibility restrictions.
+ * 
+ * (expr_type) must have the type of the top-level parent ASN.1 type.
+ * (required_type) must be one of ACT_EL_RANGE, ACT_CT_SIZE or ACT_CT_FROM.
+ * (minmax) and (expectation_met) should be 0.
+ * ERRORS:
+ *     EINVAL: Mandatory arguments missing.
+ *     ENOMEM: Memory allocation failure.
+ *     EPERM:  Invalid constraint reference.
+ */
+enum cpr_flags {
+       CPR_noflags                     = 0x00,
+       CPR_strict_OER_visibility       = 0x01,
+       CPR_strict_PER_visibility       = 0x02,
+       CPR_simulate_fbless_SIZE        = 0x04,
+};
+asn1cnst_range_t *asn1constraint_compute_OER_range(const char *dbg_name,
+       asn1p_expr_type_e expr_type,
+       const asn1p_constraint_t *ct,
+       enum asn1p_constraint_type_e required_type,
+       const asn1cnst_range_t *minmax,
+       int *expectation_met,
+       enum cpr_flags);
+asn1cnst_range_t *asn1constraint_compute_PER_range(const char *dbg_name,
+       asn1p_expr_type_e expr_type,
+       const asn1p_constraint_t *ct,
+       enum asn1p_constraint_type_e required_type,
+       const asn1cnst_range_t *minmax,
+       int *expectation_met,
+       enum cpr_flags);
+/* Base implementation */
+asn1cnst_range_t *asn1constraint_compute_constraint_range(const char *dbg_name,
+       asn1p_expr_type_e expr_type,
+       const asn1p_constraint_t *ct,
+       enum asn1p_constraint_type_e required_type,
+       const asn1cnst_range_t *minmax,
+       int *expectation_met,
+       enum cpr_flags);
+
+void asn1constraint_range_free(asn1cnst_range_t *);
+
+/*
+ * Check that a specific constraint is compatible
+ * with the given expression type.
+ */
+int asn1constraint_compatible(asn1p_expr_type_e expr_type,
+       enum asn1p_constraint_type_e constr_type, int fbless_SIZE);
+
+/*
+ * Fetch a default alphabet for this type.
+ */
+asn1cnst_range_t *asn1constraint_default_alphabet(asn1p_expr_type_e expr_type);
+
+#endif /* ASN1FIX_CRANGE_H */
diff --git a/libasn1fix/asn1fix_cstring.c b/libasn1fix/asn1fix_cstring.c
new file mode 100644 (file)
index 0000000..f4e7604
--- /dev/null
@@ -0,0 +1,72 @@
+#include "asn1fix_internal.h"
+
+struct _cstring_pattern {
+       char *start;
+       size_t length;
+};
+static int _asn1f_cstring_find_line_pattern(char *s, struct _cstring_pattern *);
+
+int
+asn1f_fix_cstring(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       int r_value = 0;
+
+       if(expr->value && expr->value->type == ATV_STRING) {
+               struct _cstring_pattern cp;
+               char *buf = (char *)expr->value->value.string.buf;
+               int buflen = expr->value->value.string.size;
+               int start = 0;
+
+               DEBUG("(%s) for line %d", expr->Identifier, expr->_lineno);
+
+               while(_asn1f_cstring_find_line_pattern(buf + start, &cp)) {
+                       assert(cp.length);
+                       memmove(cp.start, cp.start + cp.length,
+                               buflen - ((cp.start + cp.length) - buf));
+                       buflen -= cp.length;
+                       start = cp.start - buf;
+                       buf[buflen] = '\0';
+               }
+       }
+
+       return r_value;
+}
+
+/*
+ * If a string has a newline, the tabulation and spaces before and
+ * after it must be eliminated.
+ */
+static int
+_asn1f_cstring_find_line_pattern(char *s, struct _cstring_pattern *cp) {
+       int newline_found = 0;
+
+       cp->start = NULL;
+
+       for(;;s++) {
+               switch(*s) {
+               case '\r': case '\n':
+                       newline_found = 1;
+                       /* Fall through */
+               case ' ': case '\t':
+                       if(cp->start == NULL)
+                               cp->start = s;
+                       continue;
+               case '\0':
+               default:
+                       if(newline_found) {
+                               cp->length = (size_t)(s - cp->start);
+                               return 1;
+                       }
+
+                       cp->start = NULL;
+                       if(*s == '\0')
+                               break;
+                       continue;
+               }
+               break;
+       }
+
+       return 0;
+}
+
+
diff --git a/libasn1fix/asn1fix_cstring.h b/libasn1fix/asn1fix_cstring.h
new file mode 100644 (file)
index 0000000..9804d21
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1FIX_CSTRING_H
+#define        ASN1FIX_CSTRING_H
+
+int asn1f_fix_cstring(arg_t *);
+
+#endif /* ASN1FIX_CSTRING_H */
diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c
new file mode 100644 (file)
index 0000000..62bb883
--- /dev/null
@@ -0,0 +1,553 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "asn1fix_internal.h"
+#include "asn1fix_cws.h"
+
+static int _asn1f_parse_class_object_data(arg_t *, asn1p_expr_t *eclass,
+               struct asn1p_ioc_row_s *row, asn1p_wsyntx_t *syntax,
+               const uint8_t *buf, const uint8_t *bend,
+               int optional_mode, const uint8_t **newpos, int counter);
+static int _asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_cell_s *cell, const uint8_t *buf, const uint8_t *bend, int counter);
+static asn1p_wsyntx_chunk_t *asn1f_next_literal_chunk(asn1p_wsyntx_t *syntax, asn1p_wsyntx_chunk_t *chunk, const uint8_t *buf);
+
+int
+asn1f_check_class_object(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *eclass;
+       asn1p_ioc_row_t *row;
+       int ret;
+
+       if(expr->meta_type != AMT_VALUESET
+       || expr->expr_type != A1TC_REFERENCE
+       || !expr->value
+       || expr->value->type != ATV_UNPARSED) {
+               return 0;
+    }
+
+       eclass = asn1f_find_terminal_type(arg, expr);
+       if(!eclass
+       || eclass->meta_type != AMT_OBJECTCLASS
+       || eclass->expr_type != A1TC_CLASSDEF) {
+               return 0;
+       }
+
+       if(!eclass->with_syntax) {
+               DEBUG("Can't process classes without %s just yet",
+                       "WITH SYNTAX");
+               return 0;
+       }
+
+       row = asn1p_ioc_row_new(eclass);
+       assert(row);
+
+       ret = _asn1f_parse_class_object_data(arg, eclass, row,
+               eclass->with_syntax,
+               expr->value->value.string.buf + 1,
+               expr->value->value.string.buf
+                       + expr->value->value.string.size - 1,
+               0, 0, 0);
+
+       asn1p_ioc_row_delete(row);
+
+       return ret;
+}
+
+static int
+_asn1f_is_ioc_row_duplicate(asn1p_ioc_table_t *it, asn1p_ioc_row_t *row) {
+    if(!it) {
+        return 0;
+    }
+
+    for(size_t i = 0; i < it->rows; i++) {
+        switch(asn1p_ioc_row_match(it->row[i], row)) {
+        default:
+        case -1:
+            return -1;
+        case 1:
+            continue;
+        case 0:
+            return 1; /* Duplicate! */
+        }
+    }
+    return 0;
+}
+
+struct parse_object_key {
+    arg_t *arg;
+    asn1p_expr_t *expr;   /* InformationObjectSet */
+    asn1p_expr_t *eclass; /* CLASS */
+    int sequence;          /* Sequence counter */
+};
+
+/*
+ * Add to the IoC table if the row is unique.
+ */
+static int
+_asn1f_add_unique_row(arg_t *arg, asn1p_expr_t *expr, asn1p_ioc_row_t *row) {
+    assert(expr->ioc_table);
+
+    /* Look for duplicates */
+    switch(_asn1f_is_ioc_row_duplicate(expr->ioc_table, row)) {
+    case -1:
+        DEBUG("Found Information Object Duplicate in %s", expr->Identifier,
+              expr->_lineno);
+        return -1;
+    case 0:
+        /* Not a duplicate */
+        break;
+    case 1:
+        /* Proper duplicate detected; ignore */
+        asn1p_ioc_row_delete(row);
+        return 0;
+        }
+
+    asn1p_ioc_table_add(expr->ioc_table, row);
+
+    return 0;
+}
+
+/*
+ * Given a single blob of unparsed Information Object specification, parse it
+ * into a given InformationObjectSet.
+ */
+static int
+_asn1f_parse_object_cb(const uint8_t *buf, size_t size, void *keyp) {
+    struct parse_object_key *key = keyp;
+    arg_t *arg = key->arg;
+    asn1p_expr_t *expr = key->expr;
+    asn1p_expr_t *eclass = key->eclass;
+       asn1p_ioc_row_t *row;
+    int ret;
+
+    key->sequence++;
+
+       row = asn1p_ioc_row_new(eclass);
+       assert(row);
+
+    ret = _asn1f_parse_class_object_data(arg, eclass, row, eclass->with_syntax,
+                                         buf, buf + size, 0, 0, key->sequence);
+    if(ret) {
+        LOG(ret, "Cannot parse %s of CLASS %s found at line %d",
+            expr->Identifier, eclass->Identifier, expr->_lineno);
+        asn1p_ioc_row_delete(row);
+               return ret;
+       }
+
+    /* Add object to a CLASS. */
+    if(_asn1f_add_unique_row(arg, eclass, row) != 0)
+        return -1;
+
+    /*
+     * Add a copy of the object to the Information Object Set.
+     */
+       row = asn1p_ioc_row_new(eclass);
+       assert(row);
+    ret = _asn1f_parse_class_object_data(arg, eclass, row, eclass->with_syntax,
+                                         buf, buf + size, 0, 0, key->sequence);
+    assert(ret == 0);
+
+    if(_asn1f_add_unique_row(arg, expr, row) != 0)
+        return -1;
+
+    return 0;
+}
+
+static int
+_asn1f_foreach_unparsed_union(const asn1p_constraint_t *ct_union,
+                              int (*process)(const uint8_t *buf, size_t size,
+                                             void *key),
+                              void *key) {
+    assert(ct_union->type == ACT_CA_UNI);
+
+    for(size_t j = 0; j < ct_union->el_count; j++) {
+        const asn1p_constraint_t *ct2 = ct_union->elements[j];
+        if(ct2->type == ACT_EL_VALUE && ct2->value->type == ATV_UNPARSED) {
+            if(process
+               && process(ct2->value->value.string.buf + 1,
+                          ct2->value->value.string.size - 2, key)
+                      != 0) {
+                return -1;
+            }
+            continue;
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+_asn1f_foreach_unparsed(arg_t *arg, const asn1p_constraint_t *ct,
+                        int (*process)(const uint8_t *buf, size_t size,
+                                       void *key),
+                        void *keyp) {
+    struct parse_object_key *key = keyp;
+    if(!ct) return -1;
+
+    switch(ct->type) {
+    default:
+        DEBUG("Constraint is of unknown type %d for CWS", ct->type);
+        return -1;
+    case ACT_EL_EXT:    /* ... */
+        if(key) {
+            key->expr->ioc_table->extensible = 1;
+        }
+        return 0;
+    case ACT_CA_UNI:    /* | */
+        return _asn1f_foreach_unparsed_union(ct, process, keyp);
+    case ACT_CA_CSV:    /* , */
+        break;
+    case ACT_EL_VALUE:
+        if(ct->value->type == ATV_UNPARSED) {
+            if(process
+               && process(ct->value->value.string.buf + 1,
+                          ct->value->value.string.size - 2, key)
+                      != 0) {
+                return -1;
+            }
+        }
+        return 0;
+    }
+
+    for(size_t i = 0; i < ct->el_count; i++) {
+        const asn1p_constraint_t *ct1 = ct->elements[i];
+        if(_asn1f_foreach_unparsed(arg, ct1, process, keyp) != 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static int
+_asn1f_constraint_looks_like_object_set(arg_t *arg,
+                                        const asn1p_constraint_t *ct) {
+    return 0 == _asn1f_foreach_unparsed(arg, ct, NULL, NULL);
+}
+
+int
+asn1f_parse_class_object(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *eclass;
+    enum {
+        FROM_VALUE,
+        FROM_CONSTRAINT,
+    } source = FROM_VALUE;
+
+       if(expr->meta_type == AMT_VALUE
+       && expr->expr_type == A1TC_REFERENCE
+       && expr->value && expr->value->type == ATV_UNPARSED) {
+        source = FROM_VALUE;
+    } else if(expr->meta_type != AMT_VALUESET
+       || expr->expr_type != A1TC_REFERENCE) {
+        return 0;
+    } else if(expr->value && expr->value->type == ATV_UNPARSED) {
+        source = FROM_VALUE;
+    } else if(!expr->value) {
+        if(_asn1f_constraint_looks_like_object_set(arg, expr->constraints)) {
+            source = FROM_CONSTRAINT;
+        } else {
+            return 0;
+        }
+    } else {
+        return 0;
+    }
+
+       /*
+        * Find the governing class.
+        */
+       eclass = asn1f_find_terminal_type(arg, expr);
+       if(!eclass
+       || eclass->meta_type != AMT_OBJECTCLASS
+       || eclass->expr_type != A1TC_CLASSDEF) {
+               return 0;
+       }
+
+       DEBUG("Value %s of CLASS %s found at line %d",
+               expr->Identifier, eclass->Identifier, expr->_lineno);
+
+       if(!eclass->with_syntax) {
+               DEBUG("Can't process classes without %s just yet",
+                       "WITH SYNTAX");
+               return 0;
+       }
+
+    struct parse_object_key key = {
+        .arg = arg,
+        .expr = expr,
+        .eclass = eclass,
+        .sequence = eclass->_type_unique_index
+    };
+
+    if(!expr->ioc_table) {
+        expr->ioc_table = asn1p_ioc_table_new();
+    }
+
+    if(!eclass->ioc_table) {
+        eclass->ioc_table = asn1p_ioc_table_new();
+    }
+
+    switch(source) {
+    case FROM_VALUE:
+        if(_asn1f_parse_object_cb(expr->value->value.string.buf + 1,
+                           expr->value->value.string.size - 2, &key)
+           != 0) {
+            return -1;
+        }
+        break;
+    case FROM_CONSTRAINT:
+        if(_asn1f_foreach_unparsed(arg, expr->constraints,
+                                   _asn1f_parse_object_cb, &key)
+           != 0) {
+            return -1;
+        }
+    }
+
+    eclass->_type_unique_index = key.sequence;
+
+       return 0;
+}
+
+#define        SKIPSPACES      for(; buf < bend && isspace(*buf); buf++)
+
+static int
+_asn1f_parse_class_object_data(arg_t *arg, asn1p_expr_t *eclass,
+               struct asn1p_ioc_row_s *row, asn1p_wsyntx_t *syntax,
+               const uint8_t *buf, const uint8_t *bend,
+               int optional_mode, const uint8_t **newpos, int counter) {
+       struct asn1p_wsyntx_chunk_s *chunk;
+       int ret;
+
+       TQ_FOR(chunk, (&syntax->chunks), next) {
+               switch(chunk->type) {
+               case WC_LITERAL: {
+                       int token_len = strlen(chunk->content.token);
+                       SKIPSPACES;
+                       if(bend - buf < token_len
+                       || memcmp(buf, chunk->content.token, token_len)) {
+                               if(!optional_mode) {
+                                       FATAL("While parsing object class value %s at line %d: Expected: \"%s\", found: \"%s\"",
+                                       arg->expr->Identifier, arg->expr->_lineno, chunk->content.token, buf);
+                               }
+                               if(newpos) *newpos = buf;
+                               return -1;
+                       }
+                       buf += token_len;
+                   } break;
+               case WC_WHITESPACE: break;      /* Ignore whitespace */
+               case WC_FIELD: {
+                       struct asn1p_ioc_cell_s *cell;
+                       asn1p_wsyntx_chunk_t *next_literal;
+                       const uint8_t *buf_old = buf;
+                       const uint8_t *p = 0;
+
+                       SKIPSPACES;
+
+                       next_literal = asn1f_next_literal_chunk(syntax, chunk, buf);
+                       if(!next_literal) {
+                               p += (bend - p);
+                       } else {
+                               p = (uint8_t *)strstr((const char *)buf, (const char *)next_literal->content.token);
+                               if(!p) {
+                                       if (!optional_mode)
+                                               FATAL("Next literal \"%s\" not found !", next_literal->content.token);
+
+                                       if(newpos) *newpos = buf_old;
+                                       return -1;
+                               }
+                       }
+                       cell = asn1p_ioc_row_cell_fetch(row,
+                                       chunk->content.token);
+                       if(cell == NULL) {
+                               FATAL("Field reference %s found in WITH SYNAX {} clause does not match actual field in Object Class %s",
+                                       chunk->content.token,
+                                       eclass->Identifier, eclass->_lineno);
+                               if(newpos) *newpos = buf;
+                               return -1;
+                       }
+                       DEBUG("Reference %s satisfied by %s (%d)",
+                               chunk->content.token,
+                               buf, p - buf);
+                       ret = _asn1f_assign_cell_value(arg, cell, buf, p, counter);
+                       if(ret) return ret;
+                       buf = p;
+                       if(newpos) *newpos = buf;
+                   } break;
+               case WC_OPTIONALGROUP: {
+                       const uint8_t *np = 0;
+                       SKIPSPACES;
+                       ret = _asn1f_parse_class_object_data(arg, eclass, row,
+                               chunk->content.syntax, buf, bend, 1, &np, counter);
+                       if(newpos) *newpos = np;
+                       if(ret && np != buf)
+                               return ret;
+                       buf = np;
+                   } break;
+               }
+       }
+
+
+       if(newpos) *newpos = buf;
+       return 0;
+}
+
+
+static int
+_asn1f_assign_cell_value(arg_t *arg, struct asn1p_ioc_cell_s *cell,
+                         const uint8_t *buf, const uint8_t *bend, int counter) {
+    asn1p_expr_t *expr = (asn1p_expr_t *)NULL;
+       char *mivr; /* Most Immediate Value Representation */
+       int new_ref = 1;
+       asn1p_t *asn;
+       asn1p_expr_t *type_expr = (asn1p_expr_t *)NULL;
+       int i, ret = 0, psize;
+       char *pp;
+
+       if((bend - buf) <= 0) {
+               FATAL("Assignment warning: empty string is being assigned into %s for %s at line %d",
+                       cell->field->Identifier,
+                       arg->expr->Identifier, arg->expr->_lineno);
+               return -1;
+       }
+
+       mivr = malloc(bend - buf + 1);
+       assert(mivr);
+       memcpy(mivr, buf, bend - buf);
+       mivr[bend - buf] = '\0';
+       /* remove trailing space */
+       for (i = bend - buf - 1; (i > 0) && isspace(mivr[i]); i--)
+               mivr[i] = '\0';
+
+       /* This value 100 should be larger than following formatting string */
+       psize = bend - buf + 100;
+       pp = calloc(1, psize);
+       if(pp == NULL) {
+               free(mivr);
+               return -1;
+       }
+
+       if(cell->field->expr_type == A1TC_CLASSFIELD_TFS) {
+               ret = snprintf(pp, psize,
+                       "M DEFINITIONS ::=\nBEGIN\n"
+                       "V ::= %s\n"
+                       "END\n",
+                       mivr
+               );
+       } else if(cell->field->expr_type == A1TC_CLASSFIELD_FTVFS) {
+               type_expr = TQ_FIRST(&(cell->field->members));
+               ret = snprintf(pp, psize,
+                               "M DEFINITIONS ::=\nBEGIN\n"
+                               "v %s ::= %s\n"
+                               "END\n",
+                               type_expr->reference ? 
+                                       type_expr->reference->components[0].name : 
+                                       _asn1p_expr_type2string(type_expr->expr_type),
+                               mivr
+                       );
+       } else {
+               WARNING("asn1c only be able to parse TypeFieldSpec and FixedTypeValueFieldSpec. Failed when parsing %s at line %d\n", mivr, arg->expr->_lineno);
+               free(mivr);
+               free(pp);
+               return -1;
+       }
+       DEBUG("ASN.1:\n\n%s\n", pp);
+
+       assert(ret < psize);
+       psize = ret;
+
+       asn = asn1p_parse_buffer(pp, psize,
+               arg->expr->module->source_file_name, arg->expr->_lineno, A1P_NOFLAGS);
+       free(pp);
+       if(asn == NULL) {
+               FATAL("Cannot parse Setting token %s "
+                       "at line %d",
+                       mivr,
+                       arg->expr->_lineno
+               );
+               free(mivr);
+               return -1;
+       } else {
+        asn1p_module_t *mod = TQ_FIRST(&(asn->modules));
+        assert(mod);
+
+        /* This member removal is safe with respect to members hash since the
+         * entire asn module will be deleted down below.
+         */
+        expr = TQ_REMOVE(&(mod->members), next);
+               assert(expr);
+
+        expr->parent_expr = NULL;
+        asn1p_expr_set_source(expr, arg->expr->module, arg->expr->_lineno);
+        expr->_type_unique_index = counter;
+        DEBUG("Parsed identifier %s, mivr [%s], reference [%s] value [%s]",
+              expr->Identifier, mivr, asn1p_ref_string(expr->reference),
+              asn1f_printable_value(expr->value));
+        free(expr->Identifier);
+        if(expr->value) {
+                       expr->Identifier = strdup(asn1f_printable_value(expr->value));
+        } else if (expr->reference) {
+                       expr->Identifier = strdup(expr->reference->components[expr->reference->comp_count - 1].name);
+               } else {
+                       expr->Identifier = mivr;
+               }
+               asn1p_delete(asn);
+       }
+
+       if(expr->reference &&
+               !asn1f_lookup_symbol(arg, expr->rhs_pspecs, expr->reference)) {
+
+               asn1p_ref_free(expr->reference);
+               new_ref = 0;
+               expr->reference = type_expr->reference;
+               if (asn1f_value_resolve(arg, expr, 0)) {
+                       expr->reference = 0;
+                       asn1p_expr_free(expr);
+                       FATAL("Cannot find %s referenced by %s at line %d",
+                               mivr, arg->expr->Identifier,
+                               arg->expr->_lineno);
+                       free(mivr);
+                       return -1;
+               }
+       }
+
+       DEBUG("Field %s assignment of %s got %s",
+               cell->field->Identifier, mivr, expr->Identifier);
+
+       cell->value = expr;
+       cell->new_ref = new_ref;
+
+       if(expr->Identifier != mivr) {
+               free(mivr);
+    }
+
+       return 0;
+}
+
+static asn1p_wsyntx_chunk_t *
+asn1f_next_literal_chunk(asn1p_wsyntx_t *syntax, asn1p_wsyntx_chunk_t *chunk, const uint8_t *buf)
+{
+       asn1p_wsyntx_chunk_t *next_chunk;
+
+       next_chunk = TQ_NEXT(chunk, next);
+       do {
+               if(next_chunk == (struct asn1p_wsyntx_chunk_s *)0) {
+                       if(!syntax->parent)
+                               break;
+                       next_chunk = TQ_NEXT(syntax->parent, next);
+               } else if(next_chunk->type == WC_LITERAL) {
+                       if(strstr((const char *)buf, (char *)next_chunk->content.token))
+                               break;
+                       if(!syntax->parent)
+                               break;
+                       next_chunk = TQ_NEXT(syntax->parent, next);
+               } else if(next_chunk->type == WC_WHITESPACE) {
+                       next_chunk = TQ_NEXT(next_chunk, next);
+               } else if(next_chunk->type == WC_OPTIONALGROUP) {
+                       syntax = next_chunk->content.syntax;
+                       next_chunk = TQ_FIRST(((&next_chunk->content.syntax->chunks)));
+               } else 
+                       break;
+       } while (next_chunk);
+
+       return next_chunk;
+}
diff --git a/libasn1fix/asn1fix_cws.h b/libasn1fix/asn1fix_cws.h
new file mode 100644 (file)
index 0000000..e998a28
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef        ASN1FIX_CLASS_WITH_SYNTAX_H
+#define        ASN1FIX_CLASS_WITH_SYNTAX_H
+
+/*
+ * Parse class objects
+ */
+int asn1f_check_class_object(arg_t *arg);
+int asn1f_parse_class_object(arg_t *arg);
+
+#endif /* ASN1FIX_CLASS_WITH_SYNTAX_H */
diff --git a/libasn1fix/asn1fix_dereft.c b/libasn1fix/asn1fix_dereft.c
new file mode 100644 (file)
index 0000000..8f570f6
--- /dev/null
@@ -0,0 +1,50 @@
+#include "asn1fix_internal.h"
+
+int
+asn1f_fix_dereference_types(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *type_expr;
+       int r_value = 0;
+
+       if(expr->expr_type != A1TC_REFERENCE
+       || expr->meta_type != AMT_TYPEREF) {
+               //assert(expr->reference == 0);
+               return 0;       /* Just ignore it */
+       }
+
+       DEBUG("(\"%s\":%x ::= \"%s\") for line %d",
+               expr->Identifier, expr->expr_type,
+               asn1f_printable_value(expr->value),
+               expr->_lineno);
+
+       assert(TQ_FIRST(&(expr->members)) == 0);
+       assert(expr->reference);
+
+       /*
+        * Follow the reference.
+        */
+       type_expr = asn1f_find_terminal_type(arg, expr);
+       if(type_expr == NULL) {
+               const char *type_name;
+               asn1p_expr_t *idexpr;
+
+               if(errno == EEXIST) {
+                       /* Ignore missing type
+                        * if known to be defined externally:
+                        * -fknown-extern-type=<name>
+                        */
+                       return 0;
+               }
+
+               type_name = asn1f_printable_reference(expr->reference);
+               /* Avoid NULL in case of unnamed T ::= SEQUENCE OF ... */
+               for(idexpr = expr; !idexpr->Identifier && idexpr->parent_expr;
+                       idexpr = idexpr->parent_expr);
+               FATAL("Unknown type \"%s\" referenced by \"%s\" at line %d",
+                       type_name, idexpr->Identifier, expr->_lineno);
+               return -1;
+       }
+
+       return r_value;
+}
+
diff --git a/libasn1fix/asn1fix_dereft.h b/libasn1fix/asn1fix_dereft.h
new file mode 100644 (file)
index 0000000..36f3f2e
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1FIX_DEREFT_H
+#define        ASN1FIX_DEREFT_H
+
+int asn1f_fix_dereference_types(arg_t *);
+
+#endif /* ASN1FIX_DEREFT_H */
diff --git a/libasn1fix/asn1fix_derefv.c b/libasn1fix/asn1fix_derefv.c
new file mode 100644 (file)
index 0000000..3942d16
--- /dev/null
@@ -0,0 +1,66 @@
+#include "asn1fix_internal.h"
+
+/*
+ * Dereference DefinedValues:
+ */
+int
+asn1f_fix_dereference_values(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       int r_value = 0;
+
+       if(expr->value && expr->meta_type == AMT_VALUE) {
+               if(asn1f_value_resolve(arg, expr, 0)) {
+                       /* This function will emit messages */
+                       r_value = -1;
+               }
+       }
+
+       return r_value;
+}
+
+
+/*
+ * Dereference DEFAULT values
+ */
+int
+asn1f_fix_dereference_defaults(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       int r_value = 0;
+
+       if(expr->marker.default_value) {
+               arg_t tmparg = *arg;
+               asn1p_expr_t tmpexpr = *expr;
+
+               switch(expr->marker.default_value->type) {
+               default:
+                       return r_value;
+               case ATV_REFERENCED:
+                       break;
+               }
+
+
+               if(expr->expr_type == A1TC_CLASSFIELD_FTVFS) {
+                       asn1p_expr_t *child = TQ_FIRST(&expr->members);
+                       int ret;
+                       assert(child);
+                       assert(child->marker.default_value == 0);
+                       tmparg.expr = child;
+                       child->marker.default_value=expr->marker.default_value;
+                       ret = asn1f_fix_dereference_defaults(&tmparg);
+                       expr->marker.default_value = child->marker.default_value;
+                       child->marker.default_value = 0; /* ULB: trying to ensure there isn't another pointer to the same value object */
+                       if(ret == 0) return 0;  /* Finished */
+               }
+
+               tmparg.expr = &tmpexpr;
+               tmpexpr.meta_type = AMT_VALUE;
+               tmpexpr.marker.default_value = 0;
+               tmpexpr.value = expr->marker.default_value;
+               if(asn1f_value_resolve(&tmparg, &tmpexpr, 0))
+                       r_value = -1;
+               expr->marker.default_value = tmpexpr.value;
+       }
+
+       return r_value;
+}
+
diff --git a/libasn1fix/asn1fix_derefv.h b/libasn1fix/asn1fix_derefv.h
new file mode 100644 (file)
index 0000000..2e69317
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef        ASN1FIX_DEREFV_H
+#define        ASN1FIX_DEREFV_H
+
+int asn1f_fix_dereference_values(arg_t *);
+
+int asn1f_fix_dereference_defaults(arg_t *);
+
+#endif /* ASN1FIX_DEREFV_H */
diff --git a/libasn1fix/asn1fix_enum.c b/libasn1fix/asn1fix_enum.c
new file mode 100644 (file)
index 0000000..ac543f2
--- /dev/null
@@ -0,0 +1,192 @@
+#include "asn1fix_internal.h"
+
+/*
+ * Check the validity of an enumeration.
+ */
+int
+asn1f_fix_enum(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *ev;
+       asn1c_integer_t max_value = -1;
+       asn1c_integer_t max_value_ext = -1;
+       int rvalue = 0;
+       asn1p_expr_t *ext_marker = NULL;        /* "..." position */
+       int ret;
+
+       /* Keep track of value collisions */
+       asn1c_integer_t *used_vals;
+       int used_vals_sz = 50;
+       int used_vals_next = 0;
+
+       if(expr->expr_type != ASN_BASIC_ENUMERATED)
+               return 0;       /* Just ignore it */
+
+       DEBUG("(%s)", expr->Identifier);
+
+       used_vals = (asn1c_integer_t *) malloc(sizeof(asn1c_integer_t) * used_vals_sz);
+       if (!used_vals) {
+               FATAL("Out of memory");
+               return -1;
+       }
+
+       /*
+        * 1. Scan the enumeration values in search for inconsistencies.
+        */
+       TQ_FOR(ev, &(expr->members), next) {
+               asn1c_integer_t eval;
+
+               if(ev->value)
+                       DEBUG("\tItem %s(%s)", ev->Identifier,
+                               asn1f_printable_value(ev->value));
+               else
+                       DEBUG("\tItem %s", ev->Identifier);
+
+               /*
+                * 1.1 Found an extension mark "...", check correctness.
+                */
+               if(ev->expr_type == A1TC_EXTENSIBLE) {
+                       if(ext_marker) {
+                               FATAL("Enumeration %s at line %d: "
+                               "Second extension marker is not allowed",
+                               expr->Identifier,
+                               ev->_lineno);
+                               rvalue = -1;
+                       } else {
+                               /*
+                                * Remember the marker's position.
+                                */
+                               ext_marker = ev;
+                       }
+                       continue;
+               } else if(ev->Identifier == NULL
+                       || ev->expr_type != A1TC_UNIVERVAL) {
+                       FATAL(
+                               "Enumeration %s at line %d: "
+                               "Unsupported enumeration element %s",
+                               expr->Identifier,
+                               ev->_lineno,
+                               ev->Identifier?ev->Identifier:"<anonymous>");
+                       rvalue = -1;
+                       continue;
+               }
+
+               /*
+                * 1.2 Compute the value of the enumeration element.
+                */
+               if(ev->value) {
+                       switch(ev->value->type) {
+                       case ATV_INTEGER:
+                               eval = ev->value->value.v_integer;
+                               break;
+                       case ATV_REFERENCED:
+                               FATAL("HERE HERE HERE", 1);
+                               rvalue = -1;
+                               continue;
+                               break;
+                       default:
+                               FATAL("ENUMERATED type %s at line %d "
+                                       "contain element %s(%s) at line %d",
+                                       expr->Identifier, expr->_lineno,
+                                       ev->Identifier,
+                                       asn1f_printable_value(ev->value),
+                                       ev->_lineno);
+                               rvalue = -1;
+                               continue;
+                       }
+               } else {
+                       eval = max_value + 1;
+                       ev->value = asn1p_value_fromint(eval);
+                       if(ev->value == NULL) {
+                               rvalue = -1;
+                               continue;
+                       }
+               }
+
+               /*
+                * 1.3 Check the applicability of this value.
+                */
+
+               /*
+                * Enumeration is allowed to be unordered
+                * before the first marker, but after the marker
+                * the values must be ordered.
+                */
+               if (ext_marker) {
+                       if (eval > max_value_ext) {
+                               max_value_ext = eval;
+                       } else {
+                char max_value_buf[128];
+                asn1p_itoa_s(max_value_buf, sizeof(max_value_buf),
+                             max_value_ext);
+                FATAL(
+                                       "Enumeration %s at line %d: "
+                                       "Explicit value \"%s(%s)\" "
+                                       "is not greater "
+                                       "than previous values (max %s)",
+                                       expr->Identifier,
+                                       ev->_lineno,
+                                       ev->Identifier,
+                                       asn1p_itoa(eval),
+                                       max_value_buf);
+                               rvalue = -1;
+                       }
+               }
+
+               if (eval > max_value) {
+                       max_value = eval;
+               }
+
+
+               /*
+                * 1.4 Check that all identifiers are unique
+                */
+               int unique = 1;
+               int uv_idx;
+               for (uv_idx = 0; uv_idx < used_vals_next; uv_idx++) {
+                       if (used_vals[uv_idx] == eval) {
+                               FATAL(
+                                       "Enumeration %s at line %d: "
+                                       "Explicit value \"%s(%s)\" "
+                                       "collides with previous values",
+                                       expr->Identifier,
+                                       ev->_lineno,
+                                       ev->Identifier,
+                                       asn1p_itoa(eval));
+                               rvalue = -1;
+                               unique = 0;
+                       }
+               }
+
+               if (unique) {
+                       /* Grow the array if needed */
+                       if (used_vals_next >= used_vals_sz) {
+                               asn1c_integer_t *temp;
+                               int new_sz = used_vals_sz + 50;
+                               temp = (asn1c_integer_t *) realloc(used_vals,
+                                                       sizeof(asn1c_integer_t) * new_sz);
+                               if (!temp) return -1;
+                               used_vals = temp;
+                               used_vals_sz = new_sz;
+                       }
+                       used_vals[used_vals_next++] = eval;
+               }
+
+               /*
+                * 1.5 Check that all identifiers before the current one
+                * differs from it.
+                */
+               ret = asn1f_check_unique_expr_child(arg, ev, 0, "identifier");
+               RET2RVAL(ret, rvalue);
+       }
+
+       free(used_vals);
+
+       /*
+        * 2. Reorder the first half (before optional "...") of the
+        * identifiers alphabetically.
+        */
+       // TODO
+
+       return rvalue;
+}
+
diff --git a/libasn1fix/asn1fix_enum.h b/libasn1fix/asn1fix_enum.h
new file mode 100644 (file)
index 0000000..7c2a9db
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1FIX_ENUM_H
+#define        ASN1FIX_ENUM_H
+
+int asn1f_fix_enum(arg_t *);   /* Enumeration ::= ENUMERATED { a(1), b(2) } */
+
+#endif /* ASN1FIX_ENUM_H */
diff --git a/libasn1fix/asn1fix_export.c b/libasn1fix/asn1fix_export.c
new file mode 100644 (file)
index 0000000..ee39afb
--- /dev/null
@@ -0,0 +1,133 @@
+#include "asn1fix_internal.h"
+#include "asn1fix_export.h"
+
+extern arg_t a1f_replace_me_with_proper_interface_arg;
+
+static asn1p_t *asn1f_ssn_asn_;
+
+static void
+_add_standard_namespaces(asn1_namespace_t *ns) {
+    asn1p_oid_t *uioc_oid;
+    asn1p_oid_arc_t arcs[] = {{1, "iso"},           {3, "org"},
+                              {6, "dod"},           {1, "internet"},
+                              {4, "private"},       {1, "enterprise"},
+                              {9363, "spelio"},     {1, "software"},
+                              {5, "asn1c"},         {3, "standard-modules"},
+                              {0, "auto-imported"}, {1, 0}};
+
+    uioc_oid = asn1p_oid_construct(arcs, sizeof(arcs) / sizeof(arcs[0]));
+
+    asn1p_module_t *module = asn1f_lookup_module_ex(
+        asn1f_ssn_asn_, "ASN1C-UsefulInformationObjectClasses", uioc_oid);
+    asn1p_oid_free(uioc_oid);
+
+    if(module) {
+        asn1_namespace_add_module(ns, module, 0);
+    }
+}
+
+void
+asn1f_use_standard_namespaces(asn1p_t *asn) {
+    asn1f_ssn_asn_ = asn;
+    asn1_namespace_add_standard_namespaces_callback(_add_standard_namespaces);
+}
+
+asn1p_module_t *
+asn1f_lookup_module_ex(asn1p_t *asn, const char *module_name,
+                       const asn1p_oid_t *oid) {
+    arg_t arg;
+
+    memset(&arg, 0, sizeof(arg));
+
+    arg.asn = asn;
+    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+    return asn1f_lookup_module(&arg, module_name, oid);
+}
+
+asn1p_expr_t *
+asn1f_lookup_symbol_ex(asn1p_t *asn, asn1_namespace_t *ns, asn1p_expr_t *expr,
+                       const asn1p_ref_t *ref) {
+    arg_t arg;
+
+    memset(&arg, 0, sizeof(arg));
+
+    arg.asn = asn;
+    arg.ns = ns;
+    arg.mod = expr->module;
+    arg.expr = expr;
+    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+
+    return asn1f_lookup_symbol(&arg, expr->rhs_pspecs, ref);
+}
+
+asn1p_expr_t *
+asn1f_class_access_ex(asn1p_t *asn,
+               asn1p_module_t *mod,
+               asn1_namespace_t *ns,
+               asn1p_expr_t *expr,
+               asn1p_expr_t *rhs_pspecs,
+               const asn1p_ref_t *ref) {
+       arg_t arg;
+
+       memset(&arg, 0, sizeof(arg));
+
+       arg.asn = asn;
+       arg.mod = mod;
+       arg.ns = ns;
+       arg.expr = expr;
+       arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+       arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+
+    return asn1f_class_access(&arg, rhs_pspecs, ref);
+}
+
+asn1p_expr_t *
+asn1f_find_terminal_type_ex(asn1p_t *asn, asn1_namespace_t *ns,
+                            asn1p_expr_t *expr) {
+    arg_t arg;
+
+    memset(&arg, 0, sizeof(arg));
+
+    arg.asn = asn;
+    arg.ns = ns;
+    arg.mod = expr->module;
+    arg.expr = expr;
+    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+
+    return asn1f_find_terminal_type(&arg, expr);
+}
+
+asn1p_expr_t *
+asn1f_find_ancestor_type_with_PER_constraint_ex(asn1p_t *asn, asn1p_expr_t *expr) {
+       arg_t arg;
+
+       memset(&arg, 0, sizeof(arg));
+
+       arg.asn = asn;
+       arg.mod = expr->module;
+       arg.expr = expr;
+       arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+       arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+
+       return asn1f_find_ancestor_type_with_PER_constraint(&arg, expr);
+}
+
+int
+asn1f_fix_dereference_values_ex(asn1p_t *asn, asn1p_module_t *mod,
+        asn1p_expr_t *expr) {
+       arg_t arg;
+
+       memset(&arg, 0, sizeof(arg));
+
+       arg.asn = asn;
+       arg.mod = mod;
+       arg.expr = expr;
+       arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
+       arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
+
+       return asn1f_fix_dereference_values(&arg);
+}
+
diff --git a/libasn1fix/asn1fix_export.h b/libasn1fix/asn1fix_export.h
new file mode 100644 (file)
index 0000000..bfa055b
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * This header exports fixer procedures that are common enough to be used
+ * in other modules.
+ */
+#ifndef        ASN1FIX_EXPORT_H
+#define        ASN1FIX_EXPORT_H
+
+#include "asn1fix_tags.h"
+
+struct asn1_namespace_s;   /* Forward declaration. */
+
+void asn1f_use_standard_namespaces(asn1p_t *asn);
+
+/*
+ * Lookup the module by its oid. oid is mandatory.
+ */
+asn1p_module_t *asn1f_lookup_module_ex(asn1p_t *asn, const char *module_name,
+                                       const asn1p_oid_t *oid);
+
+/*
+ * Create a human-readable representation of a reference and value.
+ */
+char const *asn1f_printable_reference(const asn1p_ref_t *ref);
+char const *asn1f_printable_value(asn1p_value_t *value);
+
+/*
+ *  Exportable version of an asn1f_lookup_symbol().
+ */
+asn1p_expr_t *asn1f_lookup_symbol_ex(
+               asn1p_t *asn,
+               struct asn1_namespace_s *ns,
+               asn1p_expr_t *expr,
+               const asn1p_ref_t *ref);
+
+/*
+ *  Exportable version of an asn1f_class_access().
+ */
+asn1p_expr_t *asn1f_class_access_ex(asn1p_t *asn, asn1p_module_t *mod,
+                                    struct asn1_namespace_s *ns,
+                                    asn1p_expr_t *expr,
+                                    asn1p_expr_t *rhs_rspecs,
+                                    const asn1p_ref_t *);
+
+/*
+ * Exportable version of asn1f_find_terminal_type().
+ */
+asn1p_expr_t *asn1f_find_terminal_type_ex(asn1p_t *asn,
+                                          struct asn1_namespace_s *ns,
+                                          asn1p_expr_t *tc);
+
+/*
+ * Exportable version of asn1f_fix_dereference_values();
+ */
+int asn1f_fix_dereference_values_ex(asn1p_t *asn, asn1p_module_t *mod,
+       asn1p_expr_t *expr);
+
+/*
+ * Exportable version of asn1f_find_ancestor_type_with_PER_constraint().
+ */
+asn1p_expr_t *asn1f_find_ancestor_type_with_PER_constraint_ex(asn1p_t *asn,
+       asn1p_expr_t *expr);
+
+#endif /* ASN1FIX_EXPORT_H */
diff --git a/libasn1fix/asn1fix_integer.c b/libasn1fix/asn1fix_integer.c
new file mode 100644 (file)
index 0000000..36e5466
--- /dev/null
@@ -0,0 +1,160 @@
+#include "asn1fix_internal.h"
+
+static int _compare_value(asn1p_expr_t *expr1, asn1p_expr_t *expr2) {
+       if(expr2->value->type == ATV_INTEGER
+       && expr1->value->type == ATV_INTEGER) {
+               return expr2->value->value.v_integer
+                       - expr1->value->value.v_integer;
+       } else {
+               return -1;
+       }
+}
+
+/*
+ * Check the validity of an INTEGER type.
+ */
+int
+asn1f_fix_integer(arg_t *arg) {
+       asn1p_expr_t *expr = arg->expr;
+       asn1p_expr_t *iv;
+       int rvalue = 0;
+       int ret;
+
+       if(expr->expr_type != ASN_BASIC_INTEGER)
+               return 0;       /* Just ignore it */
+
+       DEBUG("(\"%s\", %x) for line %d",
+               expr->Identifier, expr->expr_type, expr->_lineno);
+
+       /*
+        * Scan the integer values in search for inconsistencies.
+        */
+       TQ_FOR(iv, &(expr->members), next) {
+
+               DEBUG("\tItem %s(%s)", iv->Identifier,
+                       asn1f_printable_value(iv->value));
+
+               /*
+                * Found "...", check correctness.
+                */
+               if(iv->expr_type == A1TC_EXTENSIBLE) {
+                       FATAL("INTEGER %s at line %d: "
+                               "Extension marker is not allowed",
+                               expr->Identifier,
+                               iv->_lineno);
+                       rvalue = -1;
+                       continue;
+               }
+
+               if(iv->Identifier == NULL
+               || iv->expr_type != A1TC_UNIVERVAL) {
+                       FATAL("INTEGER %s at line %d: "
+                               "Unsupported enumeration element %s",
+                               expr->Identifier,
+                               iv->_lineno,
+                               iv->Identifier?iv->Identifier:"<Anonymous>"
+                       );
+                       rvalue = -1;
+                       continue;
+               }
+
+               if(iv->value == NULL) {
+                       FATAL("INTEGER %s at line %d: "
+                               "Value for the identifier %s "
+                               "must be set explicitly",
+                               expr->Identifier,
+                               iv->_lineno,
+                               iv->Identifier
+                       );
+                       rvalue = -1;
+                       continue;
+               } else if(iv->value->type == ATV_REFERENCED) {
+                       /*
+                        * Resolve the value, once and for all.
+                        */
+                       if(asn1f_value_resolve(arg, iv, 0)) {
+                               /* This function will emit messages */
+                               rvalue = -1;
+                               continue;
+                       }
+               }
+
+               if(iv->value->type != ATV_INTEGER) {
+                       FATAL("INTEGER %s at line %d: "
+                               "Value for the identifier %s "
+                               "is not compatible with INTEGER type",
+                               expr->Identifier,
+                               iv->_lineno);
+                       rvalue = -1;
+                       continue;
+               }
+
+               /*
+                * Check that all identifiers are distinct.
+                */
+               ret = asn1f_check_unique_expr_child(arg, iv, 0, "identifier");
+               RET2RVAL(ret, rvalue);
+               /*
+                * Check that all values are distinct.
+                */
+               ret = asn1f_check_unique_expr_child(arg, iv,
+                               _compare_value, "value");
+               RET2RVAL(ret, rvalue);
+       }
+
+
+       return rvalue;
+}
+
+#if 0
+static int
+_asn1f_make_sure_type_is(arg_t *arg, asn1p_expr_t *expr, asn1p_expr_type_e type) {
+       asn1p_expr_t *next_expr;
+       asn1p_expr_type_e expr_type;
+       int ret;
+
+       expr_type = expr->expr_type;
+
+       /*
+        * Here we're trying to make sure that the type of the given
+        * expression is really what is expected.
+        * This is ensured in two ways.
+        * First, if the immediate type matches the provided one,
+        * this is a clear hit.
+        */
+       if(expr_type == type)
+               return 0;
+
+       /*
+        * Otherwise, it must be either a reference or a different type.
+        */
+       if(expr_type != A1TC_REFERENCE) {
+               errno = EPERM;
+               return -1;
+       }
+
+       assert(expr_type == A1TC_REFERENCE);
+       assert(expr->reference);
+
+       /*
+        * Then, it is a reference. For a reference, try to resolve type
+        * and try again.
+        */
+       next_expr = asn1f_lookup_symbol(arg, expr->module,
+                       expr->rhs_pspecs, expr->reference);
+       if(next_expr == NULL) {
+               errno = ESRCH;
+               return -1;
+       }
+
+       /*
+        * If symbol is here, recursively check that it conforms to the type.
+        */
+       WITH_MODULE(next_expr->module,
+               ret = _asn1f_make_sure_type_is(arg, next_expr, type));
+
+       return ret;
+}
+#endif
+
+
diff --git a/libasn1fix/asn1fix_integer.h b/libasn1fix/asn1fix_integer.h
new file mode 100644 (file)
index 0000000..fb06fe6
--- /dev/null
@@ -0,0 +1,7 @@
+#ifndef        ASN1FIX_INTEGER_H
+#define        ASN1FIX_INTEGER_H
+
+/* Type1 ::= INTEGER { a(1), b(2) } */
+int asn1f_fix_integer(arg_t *);
+
+#endif /* ASN1FIX_INTEGER_H */
diff --git a/libasn1fix/asn1fix_internal.h b/libasn1fix/asn1fix_internal.h
new file mode 100644 (file)
index 0000000..c429730
--- /dev/null
@@ -0,0 +1,158 @@
+#ifndef        ASN1FIX_INTERNAL_H
+#define        ASN1FIX_INTERNAL_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+/*
+ * System headers required in various modules.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>             /* isupper() */
+#include <errno.h>
+#include <assert.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <asn1parser.h>                /* Our lovely ASN.1 parser module */
+#include <asn1_namespace.h>
+#include <genhash.h>
+#include "asn1fix.h"
+
+#ifdef _WIN32
+#define        EX_NOINPUT      66
+#define        EX_DATAERR      65
+#define        snprintf        _snprintf
+#if defined HAVE_DECL_STRCASECMP && !HAVE_DECL_STRCASECMP
+#define        strcasecmp      stricmp
+#endif
+#endif
+
+#ifndef        ETOOMANYREFS
+#define        ETOOMANYREFS    144
+#endif
+
+/*
+ * A definition of a function that will log error messages.
+ */
+typedef void (*error_logger_f)(int _is_fatal, const char *fmt, ...);
+
+/*
+ * Universal argument.
+ */
+typedef struct arg_s {
+    asn1p_t *asn;
+    asn1_namespace_t *ns;
+    asn1p_module_t *mod;
+    asn1p_expr_t *expr;
+    error_logger_f eh;
+    error_logger_f debug;
+    void *key; /* The next level key */
+    enum asn1f_flags flags;
+} arg_t;
+
+/*
+ * Functions performing normalization of various types.
+ */
+#include "asn1fix_misc.h"              /* Support functions */
+#include "asn1fix_value.h"             /* Value processing */
+#include "asn1fix_cstring.h"           /* Fix cstring values */
+#include "asn1fix_compat.h"            /* Data compatibility */
+#include "asn1fix_constr.h"            /* Constructed types */
+#include "asn1fix_class.h"             /* CLASS support */
+#include "asn1fix_cws.h"               /* CLASS WITH SYNTAX support */
+#include "asn1fix_param.h"             /* Parameterization */
+#include "asn1fix_retrieve.h"          /* Data retrieval */
+#include "asn1fix_enum.h"              /* Process ENUMERATED */
+#include "asn1fix_integer.h"           /* Process INTEGER */
+#include "asn1fix_bitstring.h"         /* Process BIT STRING */
+#include "asn1fix_dereft.h"            /* Dereference types */
+#include "asn1fix_derefv.h"            /* Dereference values */
+#include "asn1fix_tags.h"              /* Tags-related stuff */
+#include "asn1fix_constraint.h"                /* Constraint manipulation */
+#include "asn1fix_crange.h"            /* Constraint groking, exportable */
+#include "asn1fix_export.h"            /* Exported functions */
+
+
+/*
+ * Merge the return value of the called function with the already
+ * partially computed return value of the current function.
+ */
+#define RET2RVAL(ret, rv)                      \
+    do {                                       \
+        int __ret = ret;                       \
+        switch(__ret) {                        \
+        case 0:                                \
+            break;                             \
+        case 1:                                \
+            if(rv) break;                      \
+            /* Fall through */                 \
+        case -1:                               \
+            rv = __ret;                        \
+            break;                             \
+        default:                               \
+            assert(__ret >= -1 && __ret <= 1); \
+            rv = -1;                           \
+        }                                      \
+    } while(0)
+
+/*
+ * Temporary substitute module for the purposes of evaluating expression.
+ */
+#define WITH_MODULE(tmp_mod, code)                            \
+    ({                                                        \
+        void *_saved_mod = arg->mod;                          \
+        asn1_namespace_t *_saved_ns = arg->ns;                \
+        arg->mod = tmp_mod;                                   \
+        arg->ns = asn1_namespace_new_from_module(tmp_mod, 1); \
+        typeof(code) ret = code;                              \
+        asn1_namespace_free(arg->ns);                         \
+        arg->ns = _saved_ns;                                  \
+        arg->mod = _saved_mod;                                \
+        ret;                                                  \
+    })
+
+#define LOG(code, fmt, args...)                                          \
+    do {                                                                 \
+        int _save_errno = errno;                                         \
+        if(code < 0) {                                                   \
+            if(arg->debug) {                                             \
+                arg->debug(code, "%s: " fmt " in %s (%s:%d)", __func__,  \
+                           ##args, arg->mod->source_file_name, __FILE__, \
+                           __LINE__);                                    \
+            }                                                            \
+        } else if(arg->eh) {                                             \
+            if(arg->debug) {                                             \
+                arg->eh(code, fmt " in %s (%s:%d)", ##args,              \
+                        arg->mod->source_file_name, __FILE__, __LINE__); \
+            } else {                                                     \
+                arg->eh(code, fmt " in %s", ##args,                      \
+                        arg->mod->source_file_name);                     \
+            }                                                            \
+            errno = _save_errno;                                         \
+        }                                                                \
+    } while(0)
+
+#define        DEBUG(fmt, args...)     LOG(-1, fmt, ##args)
+#define        FATAL(fmt, args...)     LOG( 1, fmt, ##args)
+#define        WARNING(fmt, args...)   LOG( 0, fmt, ##args)
+
+
+/*
+ * Define the symbol corresponding to the name of the current function.
+ */
+#if __STDC_VERSION__ < 199901
+#if !(__GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3)
+#define __func__       (char *)0       /* Name of the current function */
+#endif /* GNUC */
+/* __func__ is supposed to be defined */
+#endif
+
+
+#endif /* ASN1FIX_INTERNAL_H */
diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c
new file mode 100644 (file)
index 0000000..283ed53
--- /dev/null
@@ -0,0 +1,373 @@
+#include "asn1fix_internal.h"
+#include "asn1fix.h"
+
+char const *
+asn1f_printable_reference(const asn1p_ref_t *ref) {
+       if(ref) {
+               return asn1p_ref_string(ref);
+       } else {
+               return "<no ref>";
+       }
+}
+
+char const *
+asn1f_printable_value(asn1p_value_t *v) {
+       static char buf[128];
+       static char *managedptr;
+       static size_t managedptr_len;
+       int ret;
+
+#define ENSURE(len)     do {                        \
+        size_t tmp_len = (len);                     \
+        if(tmp_len >= managedptr_len) {             \
+            free(managedptr);                       \
+            managedptr = calloc(1, tmp_len + 1);    \
+            if(managedptr) {                        \
+                managedptr_len = tmp_len;           \
+            } else {                                \
+                managedptr_len = 0;                 \
+                return "<memory allocation error>"; \
+            }                                       \
+        }                                           \
+    } while(0)
+
+       if(v == NULL)
+               return "<no value>";
+
+       switch(v->type) {
+       case ATV_NOVALUE:
+               return "<NO VALUE>";
+       case ATV_NULL:
+               return "NULL";
+       case ATV_REAL:
+               ret = snprintf(buf, sizeof(buf), "%f", v->value.v_double);
+               if(ret >= (ssize_t)sizeof(buf))
+                       memcpy(buf + sizeof(buf) - 4, "...", 4);
+               return buf;
+       case ATV_INTEGER:
+               ret = snprintf(buf, sizeof(buf), "%s", asn1p_itoa(v->value.v_integer));
+               if(ret >= (ssize_t)sizeof(buf))
+                       memcpy(buf + sizeof(buf) - 4, "...", 4);
+               return buf;
+       case ATV_MIN: return "MIN";
+       case ATV_MAX: return "MAX";
+       case ATV_FALSE: return "FALSE";
+       case ATV_TRUE: return "TRUE";
+       case ATV_TUPLE:
+               ret = snprintf(buf, sizeof(buf), "{%d, %d}",
+                       (int)(v->value.v_integer >> 4),
+                       (int)(v->value.v_integer & 0xff));
+               if(ret >= (ssize_t)sizeof(buf))
+                       memcpy(buf + sizeof(buf) - 4, "...", 4);
+               return buf;
+       case ATV_QUADRUPLE:
+               ret = snprintf(buf, sizeof(buf), "{%d, %d, %d, %d}",
+                       (int)((v->value.v_integer >> 24) & 0xff),
+                       (int)((v->value.v_integer >> 16) & 0xff),
+                       (int)((v->value.v_integer >>  8) & 0xff),
+                       (int)(v->value.v_integer & 0xff));
+               if(ret >= (ssize_t)sizeof(buf))
+                       memcpy(buf + sizeof(buf) - 4, "...", 4);
+               return buf;
+       case ATV_STRING:
+       case ATV_UNPARSED:
+               /* Buffer is guaranteed to be null-terminated */
+               assert(v->value.string.buf[v->value.string.size] == '\0');
+               return (char *)v->value.string.buf;
+       case ATV_TYPE:
+               return "<Type>";
+       case ATV_BITVECTOR:
+               {
+                       uint8_t *bitvector;
+                       char *ptr;
+                       size_t len;
+                       int i;
+                       /*
+                        * Compute number of bytes necessary
+                        * to represend the binary value.
+                        */
+                       int bits = v->value.binary_vector.size_in_bits;
+                       len = ((bits%8)?bits:(bits >> 2)) + sizeof("''H");
+                       /*
+                        * Reallocate managed buffer
+                        */
+                       ENSURE(len);
+
+                       /*
+                        * Fill the buffer.
+                        */
+                       ptr = managedptr;
+                       bitvector = v->value.binary_vector.bits;
+                       *ptr++ = '\'';
+                       if(bits%8) {
+                               /*
+                                * Dump bit by bit.
+                                */
+                               for(i = 0; i < bits; i++) {
+                                       uint8_t uc;
+                                       uc = bitvector[i>>3];
+                                       *ptr++ = ((uc >> (7-(i%8)))&1)?'1':'0';
+                               }
+                       } else {
+                               static const char *hextable="0123456789ABCDEF";
+                               /*
+                                * Dump byte by byte.
+                                */
+                               for(i = 0; i < (bits >> 3); i++) {
+                                       *ptr++ = hextable[bitvector[i] >> 4];
+                                       *ptr++ = hextable[bitvector[i] & 0x0f];
+                               }
+                       }
+                       *ptr++ = '\'';
+                       *ptr++ = (bits%8)?'B':'H';
+                       *ptr++ = 'H';
+                       assert(len == (size_t)(ptr - managedptr));
+                       return managedptr;
+               }
+       case ATV_REFERENCED:
+               {
+                       asn1p_ref_t *ref;
+                       size_t reflen;
+                       char *ptr;
+
+                       assert(v->value.reference);
+                       ref = v->value.reference;
+                       reflen = ref->comp_count;       /* Number of dots */
+                       for(size_t i = 0; i < ref->comp_count; i++)
+                               reflen += strlen(ref->components[i].name);
+                       /*
+                        * Make sure we have a buffer of this size.
+                        */
+                       ENSURE(reflen);
+
+                       /*
+                        * Fill-up the buffer.
+                        */
+                       ptr = managedptr;
+                       for(size_t i = 0; i < ref->comp_count; i++) {
+                               char *nc;
+                               if(i) *ptr++ = '.';
+                               for(nc = ref->components[i].name; *nc; nc++)
+                                       *ptr++ = *nc;
+                       }
+                       *ptr++ = '\0';
+                       assert(reflen == (size_t)(ptr - managedptr));
+                       return managedptr;
+               }
+       case ATV_VALUESET:
+               return "<ValueSet>";
+       case ATV_CHOICE_IDENTIFIER:
+               {
+                       char *cid = v->value.choice_identifier.identifier;
+                       char const *vptr = asn1f_printable_value(
+                                       v->value.choice_identifier.value);
+                       char *val;
+
+                       val = strdup(vptr);
+                       if(!val) return "<memory allocation error>";
+
+                       ENSURE(strlen(cid) + sizeof(": ") + strlen(val));
+
+                       ret = snprintf(managedptr, managedptr_len + 1,
+                               "%s: %s", cid, val);
+                       assert(ret >= 0 && (size_t)ret <= managedptr_len);
+                       free(val);
+                       return managedptr;
+               }
+       }
+
+       return "<some complex value>";
+}
+
+
+/*
+ * Recursively invoke a given function over the given expr and all its
+ * children.
+ */
+int
+asn1f_recurse_expr(arg_t *arg, int (*callback)(arg_t *arg)) {
+       asn1p_expr_t *expr = arg->expr;
+       int rvalue = 0;
+       int ret;
+
+       assert(expr);
+
+       if(expr->lhs_params && expr->spec_index == -1) {
+               int i;
+               for(i = 0; i < expr->specializations.pspecs_count; i++) {
+                       arg->expr = expr->specializations.pspec[i].my_clone;
+                       ret = asn1f_recurse_expr(arg, callback);
+                       RET2RVAL(ret, rvalue);
+               }
+               arg->expr = expr;       /* revert */
+               return rvalue;
+       }
+
+       /*
+        * Invoke the callback at this very level.
+        */
+       ret = callback(arg);
+       RET2RVAL(ret, rvalue);
+
+       /*
+        * Recursively invoke myself
+        * to iterate over each element in the tree.
+        */
+       TQ_FOR(arg->expr, &(expr->members), next) {
+               assert(arg->expr->expr_type != A1TC_INVALID);
+               assert(arg->expr->parent_expr == expr);
+               ret = asn1f_recurse_expr(arg, callback);
+               RET2RVAL(ret, rvalue);
+       }
+
+       arg->expr = expr;       /* Restore original position */
+
+       return rvalue;
+}
+
+
+/*
+ * Check that every child of a given expr has unique name or does not have any.
+ */
+int
+asn1f_check_unique_expr(arg_t *arg) {
+       asn1p_expr_t *expr;
+       int rvalue = 0;
+
+       TQ_FOR(expr, &(arg->expr->members), next) {
+               if(expr->Identifier) {
+                       int ret = asn1f_check_unique_expr_child(arg, expr,
+                               0, "identifier");
+                       if(ret) rvalue = -1;
+               } else {
+                       /*
+                        * No point of comparing this child with any other:
+                        * this one does not have a name.
+                        */
+               }
+       }
+
+       return rvalue;
+}
+
+/*
+ * Check that every preceeding child of the given expr is not
+ * having the name of the given one.
+ */
+int
+asn1f_check_unique_expr_child(arg_t *arg, asn1p_expr_t *child,
+               int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b),
+               const char *opt_property_name) {
+       asn1p_expr_t *expr;
+
+       if(!opt_property_name) opt_property_name = "property";
+
+       assert(child);
+       assert(opt_compare || child->Identifier);
+
+       TQ_FOR(expr, &(arg->expr->members), next) {
+               int ret;
+
+               if(expr == child)
+                       break;
+
+               /*
+                * Compare according to the custom rule or default
+                * names comparisons.
+                */
+               if(opt_compare) {
+                       ret = opt_compare(expr, child);
+               } else {
+                       if(expr->Identifier == NULL
+                       || expr->expr_type == A1TC_EXTENSIBLE)
+                               continue;
+                       ret = strcmp(expr->Identifier, child->Identifier);
+               }
+
+               if(ret == 0) {
+                       FATAL("Clash detected: "
+                               "\"%s\" at line %d has similar %s with "
+                               "\"%s\" at line %d",
+                               expr->Identifier,
+                               expr->_lineno,
+                               opt_property_name,
+                               child->Identifier,
+                               child->_lineno
+                       );
+                       return -1;
+               }
+       }
+
+       return 0;
+}
+
+int
+asn1f_count_children(asn1p_expr_t *expr) {
+       asn1p_expr_t *child;
+       int count = 0;
+
+       TQ_FOR(child, &(expr->members), next) {
+               count++;
+       }
+
+       return count;
+}
+
+
+static char **known_types;
+static int known_types_count;
+static int known_types_size;
+
+static int _known_types_cmp(const void *ap, const void *bp) {
+       const char *a = *(const char * const *)ap;
+       const char *b = *(const char * const *)bp;
+       return strcmp(a, b);
+}
+
+int
+asn1f_make_known_external_type(const char *type_name) {
+       char *tname;
+
+       /* Check for duplicates */
+       if(asn1f_check_known_external_type(type_name) == 0) {
+               errno = EEXIST;
+               return -1;
+       }
+
+       /* Ensure enough space */
+       if(known_types_count <= known_types_size) {
+               int n = known_types_size ? known_types_size << 1 : 4;
+               void *p;
+               p = realloc(known_types, n * sizeof(known_types[0]));
+               if(!p) return -1;
+               known_types = p;
+               known_types_size = n;
+       }
+
+       tname = strdup(type_name);
+       if(!tname) return -1;
+
+       known_types[known_types_count++] = tname;
+
+#ifdef HAVE_MERGESORT
+       mergesort
+#else
+       qsort
+#endif
+       (known_types, known_types_count, sizeof(known_types[0]),
+               _known_types_cmp);
+
+       return 0;
+}
+
+int
+asn1f_check_known_external_type(const char *type_name) {
+       if(known_types_count) {
+               void *p = bsearch(&type_name, known_types, known_types_count,
+                               sizeof(known_types[0]), _known_types_cmp);
+               if(p) return 0;
+       }
+       errno = ESRCH;
+       return -1;
+}
+
diff --git a/libasn1fix/asn1fix_misc.h b/libasn1fix/asn1fix_misc.h
new file mode 100644 (file)
index 0000000..0114d49
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Miscellaneous functions necessary for several other modules.
+ */
+#ifndef        ASN1FIX_MISC_H
+#define        ASN1FIX_MISC_H
+
+/*
+ * Recursively invoke a given function over the given expr and all its
+ * children.
+ */
+int asn1f_recurse_expr(arg_t *arg, int (*f)(arg_t *arg));
+
+/*
+ * Check that every child of a given expr has unique identifier.
+ */
+int asn1f_check_unique_expr(arg_t *arg);
+
+/*
+ * Check that every preceeding child of the given expr is not
+ * having the name of the given one.
+ * If opt_compare == NULL, the default comparison of the argument's
+ * names (identifiers) will be performed.
+ */
+int asn1f_check_unique_expr_child(arg_t *arg, asn1p_expr_t *child,
+               int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b),
+               const char *opt_property_name);
+
+/*
+ * Return number of children.
+ */
+int asn1f_count_children(asn1p_expr_t *parent);
+
+/*
+ * Check if type is explicitly known.
+ */
+int asn1f_check_known_external_type(const char *);
+
+#endif /* ASN1FIX_MISC_H */
diff --git a/libasn1fix/asn1fix_param.c b/libasn1fix/asn1fix_param.c
new file mode 100644 (file)
index 0000000..894f42a
--- /dev/null
@@ -0,0 +1,225 @@
+#include "asn1fix_internal.h"
+
+typedef struct resolver_arg {
+       asn1p_expr_t      *(*resolver)(asn1p_expr_t *, void *arg);
+       arg_t             *arg;
+       asn1p_expr_t      *original_expr;
+       asn1p_paramlist_t *lhs_params;
+       asn1p_expr_t      *rhs_pspecs;
+       char              *resolved_name;
+} resolver_arg_t;
+
+static asn1p_expr_t *resolve_expr(asn1p_expr_t *, void *resolver_arg);
+static int compare_specializations(const asn1p_expr_t *a, const asn1p_expr_t *b);
+static asn1p_expr_t *find_target_specialization_byvalueset(resolver_arg_t *rarg, asn1p_constraint_t *ct);
+static asn1p_expr_t *find_target_specialization_byref(resolver_arg_t *rarg, asn1p_ref_t *ref);
+static asn1p_expr_t *find_target_specialization_bystr(resolver_arg_t *rarg, char *str);
+
+asn1p_expr_t *
+asn1f_parameterization_fork(arg_t *arg, asn1p_expr_t *expr, asn1p_expr_t *rhs_pspecs) {
+       resolver_arg_t rarg;    /* resolver argument */
+       asn1p_expr_t *exc;      /* expr clone */
+       asn1p_expr_t *rpc;      /* rhs_pspecs clone */
+       asn1p_expr_t *m;        /* expr members */
+       asn1p_expr_t *target;
+       void *p;
+       struct asn1p_pspec_s *pspec;
+       int npspecs;
+
+       assert(rhs_pspecs);
+       assert(expr->lhs_params);
+       assert(expr->parent_expr == 0);
+
+       /*
+        * Find if this exact specialization has been used already.
+        */
+       for(npspecs = 0;
+               npspecs < expr->specializations.pspecs_count;
+                       npspecs++) {
+               if(compare_specializations(rhs_pspecs,
+                       expr->specializations.pspec[npspecs].rhs_pspecs) == 0) {
+                       DEBUG("Reused parameterization for %s",
+                               expr->Identifier);
+                       return expr->specializations.pspec[npspecs].my_clone;
+               }
+       }
+
+       DEBUG("Forking parameterization at %d for %s (%d alr)",
+               rhs_pspecs->_lineno, expr->Identifier,
+               expr->specializations.pspecs_count);
+
+       rarg.resolver = resolve_expr;
+       rarg.arg = arg;
+       rarg.original_expr = expr;
+       rarg.lhs_params = expr->lhs_params;
+       rarg.rhs_pspecs = rhs_pspecs;
+       rarg.resolved_name = NULL;
+       exc = asn1p_expr_clone_with_resolver(expr, resolve_expr, &rarg);
+       if(!exc) return NULL;
+       if(rarg.resolved_name) {
+               free(exc->Identifier);
+               exc->Identifier = strdup(rarg.resolved_name);
+               exc->_lineno = 0;
+       }
+       rpc = asn1p_expr_clone(rhs_pspecs, 0);
+       assert(rpc);
+
+       /*
+        * Create a new specialization.
+        */
+       npspecs = expr->specializations.pspecs_count;
+       p = realloc(expr->specializations.pspec,
+                       (npspecs + 1) * sizeof(expr->specializations.pspec[0]));
+       assert(p);
+       expr->specializations.pspec = p;
+       pspec = &expr->specializations.pspec[npspecs];
+       memset(pspec, 0, sizeof *pspec);
+
+       pspec->rhs_pspecs = rpc;
+       pspec->my_clone = exc;
+       exc->spec_index = npspecs;
+       exc->rhs_pspecs = asn1p_expr_clone_with_resolver(expr->rhs_pspecs ?
+                                       expr->rhs_pspecs : rhs_pspecs,
+                                       resolve_expr, &rarg);
+
+       /* Passing arguments to members and type references */
+
+       target = TQ_FIRST(&expr->members);
+       TQ_FOR(m, &exc->members, next) {
+               m->rhs_pspecs = asn1p_expr_clone_with_resolver(target->rhs_pspecs ?
+                                               target->rhs_pspecs : exc->rhs_pspecs,
+                                               resolve_expr, &rarg);
+               target = TQ_NEXT(target, next);
+       }
+
+       DEBUG("Forked new parameterization for %s", expr->Identifier);
+
+       /* Commit */
+       expr->specializations.pspecs_count = npspecs + 1;
+       return exc;
+}
+
+static int
+compare_specializations(const asn1p_expr_t *a, const asn1p_expr_t *b) {
+    return asn1p_expr_compare(a, b);
+}
+
+static asn1p_expr_t *
+resolve_expr(asn1p_expr_t *expr_to_resolve, void *resolver_arg) {
+       resolver_arg_t *rarg = resolver_arg;
+       arg_t *arg = rarg->arg;
+       asn1p_expr_t *expr;
+       asn1p_expr_t *nex;
+
+       DEBUG("Resolving %s (meta %d)",
+               expr_to_resolve->Identifier, expr_to_resolve->meta_type);
+
+       if(expr_to_resolve->meta_type == AMT_TYPEREF) {
+               expr = find_target_specialization_byref(rarg,
+                               expr_to_resolve->reference);
+               if(!expr) return NULL;
+       } else if(expr_to_resolve->meta_type == AMT_VALUE) {
+               if(!expr_to_resolve->value) return NULL;
+               expr = find_target_specialization_bystr(rarg,
+                               expr_to_resolve->Identifier);
+               if(!expr) return NULL;
+       } else if(expr_to_resolve->meta_type == AMT_VALUESET) {
+               assert(expr_to_resolve->constraints);
+               expr = find_target_specialization_byvalueset(rarg,
+                               expr_to_resolve->constraints);
+               if(!expr) return NULL;
+       } else {
+               errno = ESRCH;
+               return NULL;
+       }
+
+       DEBUG("Found target %s (%d/%x)",
+               expr->Identifier, expr->meta_type, expr->expr_type);
+       if(expr->meta_type == AMT_TYPE
+       || expr->meta_type == AMT_VALUE
+       || expr->meta_type == AMT_TYPEREF
+       || expr->meta_type == AMT_VALUESET) {
+               DEBUG("Target is a simple type %s",
+                       ASN_EXPR_TYPE2STR(expr->expr_type));
+               nex = asn1p_expr_clone(expr, 0);
+               free(nex->Identifier);
+               nex->Identifier = expr_to_resolve->Identifier
+                       ? strdup(expr_to_resolve->Identifier) : 0;
+               if(expr->meta_type == AMT_TYPEREF) {
+                       asn1p_ref_t *ref = expr->reference;
+                       rarg->resolved_name = ref->components[ref->comp_count - 1].name;
+               } else if(expr->meta_type == AMT_VALUESET) {
+                       asn1p_constraint_t *ct = expr->constraints;
+                       if(ct->type == ACT_EL_TYPE) {
+                               asn1p_ref_t *ref = ct->containedSubtype->value.v_type->reference;
+                               rarg->resolved_name = ref->components[ref->comp_count - 1].name;
+                       }
+               }
+               return nex;
+       } else {
+               FATAL("Feature not implemented for %s (%d/%x), "
+                       "please contact the asn1c author",
+                       rarg->original_expr->Identifier,
+                       expr->meta_type, expr->expr_type);
+               errno = EPERM;
+               return NULL;
+       }
+
+       return NULL;
+}
+
+static asn1p_expr_t *
+find_target_specialization_byvalueset(resolver_arg_t *rarg, asn1p_constraint_t *ct) {
+       asn1p_ref_t *ref;
+
+       if (ct->type != ACT_EL_TYPE) return NULL;
+
+       ref = ct->containedSubtype->value.v_type->reference;
+
+       return find_target_specialization_byref(rarg, ref);
+}
+
+static asn1p_expr_t *
+find_target_specialization_byref(resolver_arg_t *rarg, asn1p_ref_t *ref) {
+       char *refstr;
+
+       if(!ref || ref->comp_count != 1) {
+               errno = ESRCH;
+               return NULL;
+       }
+
+       refstr = ref->components[0].name;       /* T */
+
+       return find_target_specialization_bystr(rarg, refstr);
+}
+
+static asn1p_expr_t *
+find_target_specialization_bystr(resolver_arg_t *rarg, char *refstr) {
+       arg_t *arg = rarg->arg;
+       asn1p_expr_t *target;
+       int i;
+
+       if(!refstr) return NULL;
+
+       target = TQ_FIRST(&rarg->rhs_pspecs->members);
+       for(i = 0; i < rarg->lhs_params->params_count;
+                       i++, target = TQ_NEXT(target, next)) {
+               struct asn1p_param_s *param = &rarg->lhs_params->params[i];
+               if(!target) break;
+
+               if(strcmp(param->argument, refstr))
+                       continue;
+
+               return target;
+       }
+       if(i != rarg->lhs_params->params_count) {
+               FATAL("Parameterization of %s failed: "
+                       "parameters number mismatch",
+                               rarg->original_expr->Identifier);
+               errno = EPERM;
+               return NULL;
+       }
+
+       errno = ESRCH;
+       return NULL;
+}
diff --git a/libasn1fix/asn1fix_param.h b/libasn1fix/asn1fix_param.h
new file mode 100644 (file)
index 0000000..6bf5f42
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef        ASN1FIX_PARAMETERIZATION_H
+#define        ASN1FIX_PARAMETERIZATION_H
+
+asn1p_expr_t *asn1f_parameterization_fork(arg_t *arg, asn1p_expr_t *expr, asn1p_expr_t *rhs_pspecs);
+
+#endif /* ASN1FIX_PARAMETERIZATION_H */
diff --git a/libasn1fix/asn1fix_retrieve.c b/libasn1fix/asn1fix_retrieve.c
new file mode 100644 (file)
index 0000000..16f5c1c
--- /dev/null
@@ -0,0 +1,599 @@
+#include "asn1fix_internal.h"
+
+enum ftt_what {
+       FTT_TYPE,       /* Find the type of the given expression */
+       FTT_VALUE,      /* Find the value of the given expression */
+       FTT_CONSTR_TYPE /* Find the type of the given expression having constraint */ 
+};
+
+static asn1p_expr_t *asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, enum ftt_what);
+static int asn1f_compatible_with_exports(arg_t *arg, asn1p_module_t *mod, const char *name);
+
+
+/*
+ * Lookup a child by its name.
+ */
+asn1p_expr_t *
+asn1f_lookup_child(asn1p_expr_t *tc, const char *name) {
+       asn1p_expr_t *child_tc;
+
+       TQ_FOR(child_tc, &(tc->members), next) {
+               if(child_tc->Identifier
+               && strcmp(child_tc->Identifier, name) == 0) {
+                       return child_tc;
+               }
+       }
+
+       errno = ESRCH;
+       return NULL;
+}
+
+static asn1p_expr_t *
+asn1f_lookup_in_module(asn1p_module_t *mod, const char *name) {
+    asn1p_expr_t *expr = genhash_get(mod->members_hash, name);
+    if(!expr) {
+        asn1p_expr_t *memb;
+        TQ_FOR(memb, &mod->members, next) {
+            if(memb->expr_type == ASN_BASIC_ENUMERATED) {
+                asn1p_expr_t *v = asn1f_lookup_child(memb, name);
+                if(v) return v;
+            }
+        }
+    }
+
+    return expr;
+}
+
+asn1p_module_t *
+asn1f_lookup_in_imports(arg_t *arg, asn1p_module_t *mod, const char *name) {
+       asn1p_xports_t *xp;
+
+       /*
+        * Search in which exactly module this name is defined.
+        */
+       TQ_FOR(xp, &(mod->imports), xp_next) {
+        asn1p_module_t *fromModule =
+            asn1f_lookup_module(arg, xp->fromModuleName, NULL);
+        asn1p_expr_t *tc = (asn1p_expr_t *)0;
+
+        TQ_FOR(tc, &(xp->xp_members), next) {
+            if(strcmp(name, tc->Identifier) == 0)
+                               break;
+
+                       if(!fromModule)
+                               continue;
+
+            asn1p_expr_t *v =
+                asn1f_lookup_in_module(fromModule, name);
+            if(v) break;
+               }
+               if(tc) break;
+       }
+       if(xp == NULL) {
+               errno = ESRCH;
+               return NULL;
+       }
+
+       /*
+        * Okay, right now we have a module name and, hopefully, an OID.
+        * Search the arg->asn for the specified module.
+        */
+       mod = asn1f_lookup_module(arg, xp->fromModuleName, xp->identifier.oid);
+       if(mod == NULL) {
+               /* Conditional debug */
+               if(!(arg->expr->_mark & TM_BROKEN)) {
+                       arg->expr->_mark |= TM_BROKEN;
+                       FATAL("Cannot find external module \"%s\" "
+                               "mentioned for "
+                               "\"%s\" at line %d. "
+                               "Obtain this module and instruct compiler to process it too.",
+                               xp->fromModuleName, name, arg->expr->_lineno);
+               }
+               /* ENOENT/ETOOMANYREFS */
+               return NULL;
+       }
+
+       /*
+        * Check that the EXPORTS section of this module contains
+        * the symbol we care about, or it is EXPORTS ALL.
+        */
+       if(asn1f_compatible_with_exports(arg, mod, name)) {
+               errno = EPERM;
+               return NULL;
+       }
+
+       return mod;
+}
+
+asn1p_module_t *
+asn1f_lookup_module(arg_t *arg, const char *module_name, const asn1p_oid_t *oid) {
+       asn1p_module_t *mod;
+
+       assert(module_name);
+
+       /*
+        * If OID is given, the module_name is unused.
+        * If OID is not given, the module_name may mean
+        * either the real module's name, or the symbol which is the
+        * result of renaming. Check this first.
+        */
+       if(oid == 0) {
+               asn1p_xports_t *xp;
+               /*
+                * Check inside the IMPORTS section for possible renaming.
+                * Renaming practically means that a module_name is mentioned
+                * somewhere in the IMPORTS section AND OID is given.
+                */
+               TQ_FOR(xp, &(arg->mod->imports), xp_next) {
+                       if(strcmp(module_name, xp->fromModuleName))
+                               continue;
+                       if(oid) {
+                               FATAL("Ambiguous reference: "
+                                       "%s "
+                                       "matches several modules",
+                                       module_name);
+                               errno = ETOOMANYREFS;
+                               return NULL;
+                       }
+                       /*
+                        * Yes, there is a renaming.
+                        * Make lookup use OID instead.
+                        */
+                       oid = xp->identifier.oid;
+               }
+       }
+
+       /*
+        * Perform lookup using OID or module_name.
+        */
+       TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+               if(oid) {
+                       if(mod->module_oid) {
+                               if(asn1p_oid_compare(oid,
+                                       mod->module_oid)) {
+                                       continue;
+                               } else {
+                                       /* Match! Even if name doesn't. */
+                                       return mod;
+                               }
+                       } else {
+                               /* Not match, even if name is the same. */
+                               continue;
+                       }
+               }
+       
+               if(strcmp(module_name, mod->ModuleName) == 0)
+                       return mod;
+       }
+
+       DEBUG("\tModule \"%s\" not found", module_name);
+
+       errno = ENOENT;
+       return NULL;
+}
+
+static asn1p_expr_t *
+asn1f_lookup_symbol_impl(arg_t *arg, asn1p_expr_t *rhs_pspecs, const asn1p_ref_t *ref, int recursion_depth) {
+    asn1_namespace_t *initial_namespace = arg->ns;
+       asn1p_ref_t tmp_ref;
+       asn1p_module_t *imports_from;
+       char *modulename;
+       char *identifier;
+
+    if(ref->module && arg->mod != ref->module) {
+        return WITH_MODULE(
+            ref->module,
+            asn1f_lookup_symbol_impl(arg, rhs_pspecs, ref, recursion_depth));
+    }
+
+       /*
+        * First of all, a reference to a symbol may be specified
+        * using several possible forms:
+        * a) simple identifier
+        *      v INTEGER ::= value
+        * b) external reference
+        *      v INTEGER ::= Module1.value
+        * c) class-related stuff (the most complex stuff)
+        *      v ::= <[A-Z][A-Z0-9a-z-]*>.&<[A-Z0-9a-z-]+>.
+        * All other forms are not implemented at this moment.
+        */
+
+       DEBUG("Lookup (%s) in %s for line %d",
+               asn1f_printable_reference(ref),
+               asn1_namespace_string(initial_namespace),
+               ref->_lineno);
+
+       if(recursion_depth++ > 30 /* Arbitrary constant */) {
+        FATAL(
+            "Excessive circular referencing detected in namespace %s for %s at "
+            "line %d",
+            asn1_namespace_string(initial_namespace),
+            asn1f_printable_reference(ref), ref->_lineno);
+        errno = ETOOMANYREFS;
+               return NULL;
+       }
+
+       if(ref->comp_count == 1) {
+               modulename = NULL;
+               identifier = ref->components[0].name;
+       } else if(ref->comp_count == 2
+               && ref->components[1].name[0] != '&') {
+               modulename = ref->components[0].name;
+               identifier = ref->components[1].name;
+       } else if(ref->comp_count > 1
+               && isupper(ref->components[0].name[0])
+               && ref->components[1].name[0] == '&') {
+               asn1p_expr_t *extract;
+               /*
+                * This is a reference to a CLASS-related stuff.
+                * Employ a separate function for that.
+                */
+               extract = asn1f_class_access(arg, rhs_pspecs, ref);
+               
+               return extract;
+       } else {
+               DEBUG("\tToo many components: %d", ref->comp_count);
+               errno = EINVAL;
+               return NULL;
+       }
+
+    if(modulename) {
+        /*
+         * The modulename is specified inside this reference.
+         * To avoid recursion, reformat the reference
+         * as it were local to that module.
+         */
+        tmp_ref = *ref;
+        tmp_ref.components++; /* Hide the first element */
+        tmp_ref.comp_count--;
+        assert(tmp_ref.comp_count > 0);
+        ref = &tmp_ref;
+    }
+
+    asn1_namespace_t *my_namespace = initial_namespace;
+
+#define DISPOSE_OF_MY_NAMESPACE()               \
+    do {                                        \
+        int tmp_errno = errno;                  \
+        if(my_namespace != initial_namespace) { \
+            asn1_namespace_free(my_namespace);  \
+            my_namespace = NULL;                \
+        }                                       \
+        errno = tmp_errno;                      \
+    } while(0)
+
+    /*
+     * If module name is specified explicitly
+     * OR the current module's IMPORTS clause contains the identifier,
+     * switch namespace to that module.
+     */
+    if(modulename) {
+        imports_from = asn1f_lookup_module(arg, modulename, 0);
+        if(imports_from == NULL) {
+            FATAL(
+                "Module \"%s\" "
+                "mentioned at line %d is not found",
+                modulename, ref->_lineno);
+            return NULL;
+        }
+
+        /*
+         * Check that the EXPORTS section of this module contains
+         * the symbol we care about, or it is EXPORTS ALL.
+         */
+        if(asn1f_compatible_with_exports(arg, imports_from, identifier)) {
+            errno = EPERM;
+            return NULL;
+        }
+
+        DISPOSE_OF_MY_NAMESPACE();
+        my_namespace = asn1_namespace_new_from_module(imports_from, 1);
+        DEBUG("Lookup (%s) in %s for line %d", asn1f_printable_reference(ref),
+              asn1_namespace_string(my_namespace), ref->_lineno);
+    }
+
+    size_t namespace_switches = 0;
+
+    /*
+     * Search through all layers of the namespace.
+     */
+    for(ssize_t ns_item = my_namespace->elements_count - 1; ns_item >= 0;
+        ns_item--) {
+        struct asn1_namespace_element_s *ns_el =
+            &my_namespace->elements[ns_item];
+
+        switch(ns_el->selector) {
+        case NAM_SYMBOL:
+            if(modulename) {
+                /*
+                 * Trying to match a fully specified "Module.Symbol"
+                 * against the "Symbol" parameter. Doesn't match.
+                 */
+                continue;
+            }
+            if(strcmp(ns_el->u.symbol.identifier, identifier) != 0) {
+                continue;
+            } else {
+                DEBUG("Lookup (%s) in %s for line %d => found as parameter",
+                      asn1f_printable_reference(ref),
+                      asn1_namespace_string(my_namespace), ref->_lineno);
+                DISPOSE_OF_MY_NAMESPACE();
+                return ns_el->u.symbol.resolution;
+            }
+        case NAM_SPACE: {
+            asn1p_expr_t *ref_tc; /* Referenced tc */
+            /*
+             * Do a direct symbol search in the given module.
+             */
+            ref_tc = asn1f_lookup_in_module(ns_el->u.space.module, identifier);
+            if(ref_tc) {
+                /* It is acceptable that we don't use input parameters */
+                if(rhs_pspecs && !ref_tc->lhs_params) {
+                    WARNING(
+                        "Parameterized type %s expected "
+                        "for %s at line %d",
+                        ref_tc->Identifier, asn1f_printable_reference(ref),
+                        ref->_lineno);
+                }
+                if(!rhs_pspecs && ref_tc->lhs_params) {
+                    FATAL(
+                        "Type %s expects specialization "
+                        "from %s at line %d",
+                        ref_tc->Identifier, asn1f_printable_reference(ref),
+                        ref->_lineno);
+                    errno = EPERM;
+                    DISPOSE_OF_MY_NAMESPACE();
+                    return NULL;
+                }
+                if(rhs_pspecs && ref_tc->lhs_params) {
+                    /* Specialize the target */
+                    ref_tc =
+                        asn1f_parameterization_fork(arg, ref_tc, rhs_pspecs);
+                }
+
+                DISPOSE_OF_MY_NAMESPACE();
+                return ref_tc;
+            }
+        }
+
+    /*
+            if(!expr && !(arg->expr->_mark & TM_BROKEN)
+               && !(imports_from->_tags & MT_STANDARD_MODULE)) {
+                arg->expr->_mark |= TM_BROKEN;
+                if(modulename) {
+                } else {
+                    FATAL(
+                        "Module %s referred in IMPORTS section "
+                        "for %s of module %s does not contain "
+                        "the requested symbol",
+                        imports_from->ModuleName,
+                        asn1f_printable_reference(ref), mod->ModuleName);
+                }
+            }
+        */
+
+            /* Search inside the IMPORTS section of the given module */
+            imports_from =
+                asn1f_lookup_in_imports(arg, ns_el->u.space.module, identifier);
+            if(imports_from) {
+
+                if(namespace_switches++ > 10 /* Arbitrary constant */) {
+                    FATAL(
+                        "Excessive circular referencing detected in namespace "
+                        "%s for %s at "
+                        "line %d",
+                        asn1_namespace_string(arg->ns),
+                        asn1f_printable_reference(ref), ref->_lineno);
+                    errno = ETOOMANYREFS;
+                    DISPOSE_OF_MY_NAMESPACE();
+                    return NULL;
+                }
+
+                /* Switch namespace */
+                DISPOSE_OF_MY_NAMESPACE();
+                my_namespace = asn1_namespace_new_from_module(imports_from, 1);
+                DEBUG("Lookup (%s) in %s for line %d",
+                      asn1f_printable_reference(ref),
+                      asn1_namespace_string(my_namespace), ref->_lineno);
+                ns_item = my_namespace->elements_count;
+
+                continue;
+            } else if(errno != ESRCH) {
+                /*
+                 * Return only if the name was not found.
+                 * If module was not found or more serious error
+                 * encountered, just return preserving the errno.
+                 */
+                DISPOSE_OF_MY_NAMESPACE();
+                return NULL;
+            }
+
+            if(modulename) {
+                FATAL(
+                    "Module %s referred by %s in module %s "
+                    "does not contain the requested symbol",
+                    ns_el->u.space.module->ModuleName,
+                    asn1f_printable_reference(ref), modulename);
+                break;
+            }
+
+            /* Search failed in the given namespace */
+            continue;
+        }
+    }
+
+    DEBUG(
+        "Namespace %s does not contain \"%s\" "
+        "mentioned at line %d: %s",
+        asn1_namespace_string(my_namespace), identifier, ref->_lineno,
+        strerror(errno));
+
+    DISPOSE_OF_MY_NAMESPACE();
+
+    if(asn1f_check_known_external_type(identifier) == 0) {
+               errno = EEXIST; /* Exists somewhere */
+       } else {
+               errno = ESRCH;
+       }
+       return NULL;
+}
+
+
+asn1p_expr_t *
+asn1f_lookup_symbol(arg_t *arg, asn1p_expr_t *rhs_pspecs,
+                    const asn1p_ref_t *ref) {
+    return asn1f_lookup_symbol_impl(arg, rhs_pspecs, ref, 0);
+}
+
+asn1p_expr_t *
+asn1f_find_terminal_type(arg_t *arg, asn1p_expr_t *expr) {
+       return asn1f_find_terminal_thing(arg, expr, FTT_TYPE);
+}
+
+asn1p_expr_t *
+asn1f_find_terminal_value(arg_t *arg, asn1p_expr_t *expr) {
+       return asn1f_find_terminal_thing(arg, expr, FTT_VALUE);
+}
+
+asn1p_expr_t *
+asn1f_find_ancestor_type_with_PER_constraint(arg_t *arg, asn1p_expr_t *expr) {
+       return asn1f_find_terminal_thing(arg, expr, FTT_CONSTR_TYPE);
+}
+
+static asn1p_expr_t *
+asn1f_find_terminal_thing(arg_t *arg, asn1p_expr_t *expr, enum ftt_what what) {
+       asn1p_ref_t *ref = 0;
+       asn1p_expr_t *tc;
+
+    if(arg->mod != expr->module) {
+        return WITH_MODULE(expr->module,
+                           asn1f_find_terminal_thing(arg, expr, what));
+    }
+
+    switch(what) {
+    case FTT_TYPE:
+    case FTT_CONSTR_TYPE:
+        /* Expression may be a terminal type itself */
+        if(expr->expr_type != A1TC_REFERENCE) {
+            return expr;
+        }
+        ref = expr->reference;
+        break;
+    case FTT_VALUE:
+
+       DEBUG("%s(%s->%s) meta %d for line %d",
+               "VALUE", expr->Identifier, asn1f_printable_reference(ref),
+               expr->meta_type, expr->_lineno);
+
+        assert(expr->meta_type == AMT_VALUE);
+        assert(expr->value);
+        /* Expression may be a terminal type itself */
+        if(expr->value->type != ATV_REFERENCED) {
+            return expr;
+        }
+        ref = expr->value->value.reference;
+        break;
+    }
+
+       DEBUG("%s(%s->%s) for line %d",
+               (what == FTT_VALUE)?"VALUE":"TYPE",
+               expr->Identifier, asn1f_printable_reference(ref),
+               expr->_lineno);
+
+       assert(ref);
+
+       /*
+        * Lookup inside the type itself (ENUMERATED, INTEGER, etc).
+        */
+       if(what == FTT_VALUE) {
+               asn1p_expr_t *val_type_tc;
+               val_type_tc = asn1f_find_terminal_type(arg, expr);
+        if(val_type_tc
+           && WITH_MODULE(val_type_tc->module,
+                          asn1f_look_value_in_type(arg, val_type_tc, expr))) {
+            return expr;
+        }
+               if(expr->value->type != ATV_REFERENCED) {
+            return expr;
+               }
+               assert(ref == expr->value->value.reference);
+               ref = expr->value->value.reference;
+       }
+
+       /*
+        * Lookup inside the default module and its IMPORTS section.
+        */
+    tc = asn1f_lookup_symbol(arg, expr->rhs_pspecs, ref);
+    if(tc == NULL) {
+               /*
+                * Lookup inside the ref's module and its IMPORTS section.
+                */
+        tc = WITH_MODULE(ref->module,
+                         asn1f_lookup_symbol(arg, expr->rhs_pspecs, ref));
+        if(tc == NULL) {
+                       DEBUG("\tSymbol \"%s\" not found: %s",
+                               asn1f_printable_reference(ref),
+                               strerror(errno));
+            return NULL;
+               }
+       }
+
+       /*
+        * Recursive loops detection.
+        */
+    if(tc->_mark & TM_RECURSION) {
+        DEBUG("Recursion loop detected for %s at line %d",
+              asn1f_printable_reference(ref), ref->_lineno);
+        errno = EPERM;
+        return NULL;
+    }
+
+    tc->_type_referenced = 1;
+
+    if((what == FTT_CONSTR_TYPE) && (tc->constraints)) {
+        return tc;
+    }
+
+    tc->_mark |= TM_RECURSION;
+    expr = WITH_MODULE(tc->module, asn1f_find_terminal_thing(arg, tc, what));
+    tc->_mark &= ~TM_RECURSION;
+
+    return expr;
+}
+
+
+/*
+ * Make sure that the specified name is present or otherwise does
+ * not contradict with the EXPORTS clause of the specified module.
+ */
+static int
+asn1f_compatible_with_exports(arg_t *arg, asn1p_module_t *mod, const char *name) {
+       asn1p_xports_t *exports;
+       asn1p_expr_t *item;
+
+       assert(mod);
+       assert(name);
+
+       exports = TQ_FIRST(&(mod->exports));
+       if(exports == NULL) {
+               /* No EXPORTS section or EXPORTS ALL; */
+               return 0;
+       }
+
+       TQ_FOR(item, &(exports->xp_members), next) {
+               if(strcmp(item->Identifier, name) == 0)
+                       return 0;
+       }
+
+       /* Conditional debug */
+       if(!(arg->expr->_mark & TM_BROKEN)) {
+               arg->expr->_mark |= TM_BROKEN;
+               FATAL("EXPORTS section of module %s in %s "
+                       "does not mention %s at line %d",
+                       mod->ModuleName, mod->source_file_name, name,
+                       arg->expr->_lineno);
+       }
+
+       errno = ESRCH;
+       return -1;
+}
diff --git a/libasn1fix/asn1fix_retrieve.h b/libasn1fix/asn1fix_retrieve.h
new file mode 100644 (file)
index 0000000..8143937
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Miscellaneous functions necessary for several other modules.
+ */
+#ifndef        ASN1FIX_RETRIEVE_H
+#define        ASN1FIX_RETRIEVE_H
+
+/*
+ * Simple search for the label in the descendants of the given node.
+ * ERRORS:
+ * NULL/ESRCH
+ */
+asn1p_expr_t *asn1f_lookup_child(asn1p_expr_t *tc, const char *name);
+
+/*
+ * Return a module which contain a specified name, as stated in appropriate
+ * IMPORTS section of the current module (arg->mod).
+ *
+ * RETURN VALUES:
+ * NULL/ESRCH: The name was not found in IMPORTS section.
+ * NULL/EPERM: The name was not found in EXPORTS section of the source module.
+ * Also, NULL with errno values defined by asn1f_lookup_module().
+ */
+asn1p_module_t *asn1f_lookup_in_imports(arg_t *arg, asn1p_module_t *mod, const char *name);
+
+/*
+ * Return a module by its name or optional OID.
+ *
+ * RETURN VALUES:
+ * NULL/ENOENT:        No module was found by the specified name and oid
+ * NULL/ETOOMANYREFS:  Several modules are matching the specified name and oid
+ */
+asn1p_module_t *asn1f_lookup_module(arg_t *arg,
+               const char *module_name,
+               const asn1p_oid_t *module_oid);
+
+/*
+ * Return the reference to a destination of the given reference,
+ * symbol lookup. Not a recursive function.
+ */
+asn1p_expr_t *asn1f_lookup_symbol(arg_t *arg, asn1p_expr_t *rhs_pspecs,
+                                  const asn1p_ref_t *ref);
+
+/*
+ * Recursively find the original type for the given expression.
+ * i.e.:
+ * If the original specification defines
+ *     v Type1 ::= 5
+ *     Type1 ::= Type2 (1..5)
+ *     Type3 ::= Type4 (2..7)
+ *     Type4 ::= INTEGER (1..10)
+ * Then this function, given the the first expression as an argument,
+ * would return an expression for Type4.
+ * WARNING: No attempts are made to honor constraints at this moment.
+ */
+asn1p_expr_t *asn1f_find_terminal_type(arg_t *arg, asn1p_expr_t *tc);
+
+/*
+ * Recursively find the original value for the given expression.
+ * i.e.:
+ * If the original specification defines
+ *     v Type1 ::= value
+ *     value Type2 ::= value2
+ *     value2 Type3 ::= 3
+ * Then this function will return the expression for value2 if given
+ * the v as an argment.
+ */
+asn1p_expr_t *asn1f_find_terminal_value(arg_t *arg, asn1p_expr_t *tc);
+
+/*
+ * Recursively find the original type with constraint for the given
+ * expression.
+ */
+asn1p_expr_t *asn1f_find_ancestor_type_with_PER_constraint(arg_t *arg, asn1p_expr_t *tc);
+
+
+#endif /* ASN1FIX_RETRIEVE_H */
diff --git a/libasn1fix/asn1fix_tags.c b/libasn1fix/asn1fix_tags.c
new file mode 100644 (file)
index 0000000..505f260
--- /dev/null
@@ -0,0 +1,177 @@
+#include "asn1fix_internal.h"
+#include <asn1_namespace.h>
+
+#define        ADD_TAG(skip, newtag)   do {                                    \
+       void *__p;                                                      \
+       if(skip && !(flags & AFT_FULL_COLLECT)) {                       \
+               if(newtag.tag_mode != TM_IMPLICIT)                      \
+                       skip--;                                         \
+               break;                                                  \
+       } else {                                                        \
+               if(newtag.tag_mode == TM_IMPLICIT)                      \
+                       skip++;                                         \
+       }                                                               \
+       __p = realloc((*tags),                                          \
+               sizeof(struct asn1p_type_tag_s) * (count + 1));         \
+       if(!__p) return -1;                                             \
+       *tags = __p;                                                    \
+       (*tags)[count++] = newtag;                                      \
+       if((flags & AFT_FETCH_OUTMOST)) return count;                   \
+} while(0)
+
+/* X.691, #22.2 */
+static int asn1f_fetch_minimal_choice_root_tag(arg_t *arg, struct asn1p_type_tag_s *tag, enum asn1f_aft_flags_e flags);
+
+static int
+asn1f_fetch_tags_impl(arg_t *arg, struct asn1p_type_tag_s **tags, int count, int skip, enum asn1f_aft_flags_e flags) {
+       asn1p_expr_t *expr = arg->expr;
+
+       DEBUG("Fetching tag from %s: meta %d, type %s", expr->Identifier,
+               expr->meta_type, expr->expr_type);
+
+       /* If this type is tagged, add this tag first */
+       if(expr->tag.tag_class != TC_NOCLASS)
+               ADD_TAG(skip, expr->tag);
+
+       /* REMOVE ME */
+       if(expr->expr_type == A1TC_EXTENSIBLE) {
+               struct asn1p_type_tag_s tt;
+               memset(&tt, 0, sizeof(tt));
+               tt.tag_class = -1;
+               ADD_TAG(skip, tt);
+               return count;
+       }
+
+       if(expr->meta_type == AMT_TYPE) {
+               struct asn1p_type_tag_s tt;
+               memset(&tt, 0, sizeof(tt));
+               tt.tag_class = TC_UNIVERSAL;
+               tt.tag_value = expr_type2uclass_value[expr->expr_type];
+               if(tt.tag_value == 0) {
+                       if(expr->expr_type == ASN_TYPE_ANY
+                               && (flags & AFT_IMAGINARY_ANY))
+                               tt.tag_value = -1;
+                       else if(expr->expr_type != ASN_CONSTR_CHOICE)
+                               return -1;
+                       else if(count) return count;
+                       else if((flags & AFT_CANON_CHOICE) == 0)
+                               return -1;
+                       else if(asn1f_fetch_minimal_choice_root_tag(arg,
+                                       &tt, flags))
+                               return -1;
+               }
+               ADD_TAG(skip, tt);
+               return count;
+       }
+
+       if(expr->meta_type == AMT_TYPEREF) {
+               asn1p_expr_t *nexpr;
+               DEBUG("Following the reference %s", expr->Identifier);
+               nexpr = asn1f_lookup_symbol(arg, expr->rhs_pspecs, expr->reference);
+               if(nexpr == NULL) {
+                       if(errno != EEXIST)     /* -fknown-extern-type */
+                               return -1;
+                       if(!count)
+                               return 0;       /* OK */
+                       if((*tags)[count-1].tag_mode == TM_IMPLICIT) {
+                               WARNING("Tagging mode for %s "
+                                       "is IMPLICIT, assuming %s "
+                                       "has exactly one tag",
+                                       expr->Identifier,
+                                       asn1f_printable_reference(expr->reference)
+                               );
+                               return count;
+                       }
+                       FATAL("Tagging mode %s -> %s "
+                               "dangerously incompatible",
+                               expr->Identifier,
+                               asn1f_printable_reference(expr->reference)
+                       );
+                       return -1;
+               } else {
+                       arg->expr = nexpr;
+               }
+               if(expr->_mark & TM_RECURSION)
+                       return -1;
+               expr->_mark |= TM_RECURSION;
+               count = asn1f_fetch_tags_impl(arg, tags, count, skip, flags);
+               expr->_mark &= ~TM_RECURSION;
+               return count;
+       }
+
+       DEBUG("No tags discovered for type %d", expr->expr_type);
+
+       return -1;
+}
+
+static int
+asn1f_fetch_minimal_choice_root_tag(arg_t *arg, struct asn1p_type_tag_s *tag, enum asn1f_aft_flags_e flags) {
+       struct asn1p_type_tag_s min_tag;
+       asn1p_expr_t *v;
+
+       memset(&min_tag, 0, sizeof(min_tag));
+       min_tag.tag_class = TC_PRIVATE + 1;
+
+       TQ_FOR(v, &(arg->expr->members), next) {
+               arg_t tmparg = *arg;
+               struct asn1p_type_tag_s *tags = 0;
+               int count;
+
+               if(v->expr_type == A1TC_EXTENSIBLE)
+                       break;  /* Search only within extension root */
+
+               tmparg.expr = v;
+               count  = asn1f_fetch_tags_impl(&tmparg, &tags, 0, 0, flags);
+               if(count <= 0) continue;
+
+               if(tags[0].tag_class < min_tag.tag_class)
+                       min_tag = tags[0];
+               else if(tags[0].tag_class == min_tag.tag_class
+                       && tags[0].tag_value < min_tag.tag_value)
+                               min_tag = tags[0];
+               free(tags);
+       }
+
+       if(min_tag.tag_class == TC_PRIVATE + 1)
+               return -1;
+       else
+               *tag = min_tag;
+       return 0;
+}
+
+int
+asn1f_fetch_outmost_tag(asn1p_t *asn, asn1_namespace_t *ns, asn1p_module_t *mod, asn1p_expr_t *expr, struct asn1p_type_tag_s *tag, enum asn1f_aft_flags_e flags) {
+       struct asn1p_type_tag_s *tags;
+       int count;
+
+       flags |= AFT_FETCH_OUTMOST;
+
+       count = asn1f_fetch_tags(asn, ns, mod, expr, &tags, flags);
+       if(count <= 0) return count;
+
+       *tag = tags[0];
+       free(tags);
+
+       return 0;
+}
+
+int
+asn1f_fetch_tags(asn1p_t *asn, asn1_namespace_t *ns, asn1p_module_t *mod, asn1p_expr_t *expr, struct asn1p_type_tag_s **tags_r, enum asn1f_aft_flags_e flags) {
+       arg_t arg;
+       struct asn1p_type_tag_s *tags = 0;
+       int count;
+
+       memset(&arg, 0, sizeof(arg));
+       arg.asn = asn;
+       arg.ns = ns;
+       arg.mod = mod;
+       arg.expr = expr;
+
+       count = asn1f_fetch_tags_impl(&arg, &tags, 0, 0, flags);
+       if (count <= 0) {
+               free(tags);
+               tags = 0;
+       }
+       *tags_r = tags;
+       return count;
+}
diff --git a/libasn1fix/asn1fix_tags.h b/libasn1fix/asn1fix_tags.h
new file mode 100644 (file)
index 0000000..d59063b
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef        ASN1FIX_TAGS_H
+#define        ASN1FIX_TAGS_H
+
+struct asn1_namespace_s;   /* Forward declaration */
+
+enum asn1f_aft_flags_e {
+       AFT_IMAGINARY_ANY       = 0x01, /* Treat ANY tag as [IMAGINARY ANY] */
+       AFT_FETCH_OUTMOST       = 0x02, /* Fetch only outmost tag */
+       AFT_FULL_COLLECT        = 0x04, /* Collect all tags */
+       AFT_CANON_CHOICE        = 0x08, /* Fetch the minimal CHOICE root tag */
+};
+
+/*
+ * Allocate and return an array of tags for the given type.
+ * Type1 ::= [2] EXPLICIT Type2
+ * Type2 ::= [3] IMPLICIT Type3
+ * Type3 ::= [4] EXPLICIT SEQUENCE { ... }
+ * Will return [2][3][UNIVERSAL 16] for the Type1.
+ */
+int asn1f_fetch_tags(asn1p_t *asn, struct asn1_namespace_s *ns,
+                     asn1p_module_t *mod, asn1p_expr_t *expr,
+                     struct asn1p_type_tag_s **tags,
+                     enum asn1f_aft_flags_e flags);
+
+/*
+ * Fetch the outmost tag of the given type.
+ * Type1 ::= Type2
+ * Type2 ::= [2] Type3
+ * Type3 ::= SEQUENCE { ... }
+ * Will yield [2] for Type1.
+ */
+int asn1f_fetch_outmost_tag(asn1p_t *asn, struct asn1_namespace_s *ns,
+                            asn1p_module_t *mod, asn1p_expr_t *expr,
+                            struct asn1p_type_tag_s *tag,
+                            enum asn1f_aft_flags_e);
+
+#endif /* ASN1FIX_TAGS_H */
diff --git a/libasn1fix/asn1fix_value.c b/libasn1fix/asn1fix_value.c
new file mode 100644 (file)
index 0000000..b881afc
--- /dev/null
@@ -0,0 +1,229 @@
+#include "asn1fix_internal.h"
+
+static int _asn1f_copy_value(arg_t *arg, asn1p_expr_t *to,asn1p_expr_t *from);
+
+int
+asn1f_value_resolve(arg_t *arg, asn1p_expr_t *expr, const enum asn1p_constraint_type_e *opt_constr_type) {
+       asn1p_expr_t *val_type_expr;
+       asn1p_expr_t *value_expr;
+       asn1p_expr_t *type_expr;
+       int ret;
+
+       /* Make sure this IS a value assignment */
+       assert(expr->meta_type == AMT_VALUE);
+       assert(expr->value);
+
+       if(expr->value->type != ATV_REFERENCED)
+               return 0;
+
+       DEBUG("(=\"%s\", %x%s%s)",
+               asn1f_printable_value(expr->value), expr->expr_type,
+               opt_constr_type ? ", " : "",
+               opt_constr_type
+                       ? asn1p_constraint_type2str(*opt_constr_type) : ""
+       );
+
+       /*
+        * 1. Find the terminal type for this assignment.
+        */
+       type_expr = asn1f_find_terminal_type(arg, expr);
+       if(type_expr == 0) {
+               if(errno == EEXIST) {
+                       DEBUG("External type for %s at line %d",
+                               expr->Identifier, expr->_lineno);
+                       return 0;
+               } else {
+                       FATAL("Terminal type for %s at line %d not found",
+                               expr->Identifier, expr->_lineno);
+                       return -1;
+               }
+       }
+
+       if(asn1f_look_value_in_type(arg, type_expr, expr) == -1) {
+               FATAL("Value not found in type for %s at line %d",
+                       expr->Identifier, expr->_lineno);
+               return -1;
+       }
+
+       /*
+        * 2. Find the terminal value also.
+        */
+       value_expr = asn1f_find_terminal_value(arg, expr);
+       if(value_expr) {
+               DEBUG("Terminal value for %s->%s is %s at line %d",
+                       expr->Identifier, asn1f_printable_value(expr->value),
+                       value_expr->Identifier, value_expr->_lineno);
+       } else {
+               FATAL("Terminal value for %s->%s not found",
+                       expr->Identifier, asn1f_printable_value(expr->value));
+               return -1;
+       }
+
+       /*
+        * 3. Find the _type_ of a _terminal value_.
+        */
+       WITH_MODULE(value_expr->module,
+               val_type_expr = asn1f_find_terminal_type(arg, value_expr));
+       if(val_type_expr) {
+               DEBUG("Terminal type of value %s->%s is %s at line %d",
+                       expr->Identifier, asn1f_printable_value(expr->value),
+                       val_type_expr->Identifier, val_type_expr->_lineno);
+       } else {
+               FATAL("Terminal type of value %s->%s not found",
+                       expr->Identifier, asn1f_printable_value(expr->value));
+               return -1;
+       }
+
+       /*
+        * 4. Check compatibility between the type of the current expression
+        * and the type of the discovered value.
+        */
+       if(opt_constr_type)
+               ret = asn1constraint_compatible(val_type_expr->expr_type,
+                       *opt_constr_type, 0 /* must not matter here */);
+       else
+               ret = asn1f_check_type_compatibility(arg,
+                       type_expr, val_type_expr);
+       if(ret == -1) {
+               switch(type_expr->expr_type) {
+               default:
+                       if(!(type_expr->expr_type & ASN_STRING_MASK))
+                               break;
+                       /* Compatibility rules are not defined */
+                       /* Fall through */
+               case ASN_BASIC_INTEGER:
+               case ASN_BASIC_ENUMERATED:
+                       FATAL("Incompatible type of \"%s\" (%s) at line %d "
+                       "with \"%s\" (%s) at line %d",
+                       type_expr->Identifier,
+                               ASN_EXPR_TYPE2STR(type_expr->expr_type),
+                               type_expr->_lineno,
+                       val_type_expr->Identifier,
+                               ASN_EXPR_TYPE2STR(val_type_expr->expr_type),
+                               val_type_expr->_lineno);
+                       return -1;
+               case ASN_BASIC_OBJECT_IDENTIFIER:
+                       /*
+                        * Ignore this for now.
+                        * We can't deal with OIDs inheritance properly yet.
+                        */
+                       return 0;
+               }
+               WARNING("Possibly incompatible type of \"%s\" (%s) at line %d "
+                       "with \"%s\" (%s) at line %d",
+                       type_expr->Identifier,
+                               ASN_EXPR_TYPE2STR(type_expr->expr_type),
+                               type_expr->_lineno,
+                       val_type_expr->Identifier,
+                               ASN_EXPR_TYPE2STR(val_type_expr->expr_type),
+                               val_type_expr->_lineno);
+               return 1;
+       }
+
+       if(asn1f_look_value_in_type(arg, val_type_expr, expr) == -1)
+               return -1;
+
+       /*
+        * 5. Copy value from the terminal value into the current expression.
+        */
+       ret = _asn1f_copy_value(arg, expr, value_expr);
+       if(ret == -1) {
+               FATAL("Value %s cannot be copied from line %d to line %d",
+                       asn1f_printable_value(value_expr->value),
+                       value_expr->_lineno, expr->_lineno);
+               return -1;
+       }
+
+       DEBUG("Final value for \"%s\" at line %d is %s",
+               expr->Identifier, expr->_lineno,
+               asn1f_printable_value(expr->value));
+
+       return 0;
+}
+
+static int
+_asn1f_copy_value(arg_t *arg, asn1p_expr_t *to, asn1p_expr_t *from) {
+       asn1p_value_t *v;
+
+       v = asn1p_value_clone(from->value);
+       if(v) {
+               asn1p_value_free(to->value);
+               to->value = v;
+               DEBUG("Copied value %s from \"%s\" on line %d "
+                       "to \"%s\" on line %d",
+                       asn1f_printable_value(v),
+                       from->Identifier,
+                       from->_lineno,
+                       to->Identifier,
+                       to->_lineno
+               );
+               return 0;
+       } else {
+               return -1;
+       }
+}
+
+int
+asn1f_look_value_in_type(arg_t *arg,
+               asn1p_expr_t *type_expr,
+               asn1p_expr_t *value_expr) {
+       asn1p_expr_t *child_expr;
+       char *identifier;
+
+       if(value_expr->value->type != ATV_REFERENCED
+       || value_expr->value->value.reference->comp_count != 1)
+               return 0;
+       if(type_expr->expr_type != ASN_BASIC_INTEGER
+       && type_expr->expr_type != ASN_BASIC_ENUMERATED)
+               return 0;
+
+       DEBUG("(for %s in %s %x) for line %d",
+               asn1f_printable_value(value_expr->value),
+               type_expr->Identifier,
+               type_expr->expr_type,
+               value_expr->_lineno);
+
+       /*
+        * Look into the definitions of the type itself:
+        * Type1 ::= INTEGER { a(1), b(2) }
+        * value Type1 = b      -- will assign 2
+        */
+       identifier = value_expr->value->value.reference->components[0].name;
+
+       child_expr = asn1f_lookup_child(type_expr, identifier);
+       DEBUG("Looking into a type %s at line %d for %s at line %d: %s",
+               type_expr->Identifier, type_expr->_lineno,
+               identifier, value_expr->_lineno,
+               child_expr
+                       ? asn1f_printable_value(child_expr->value)
+                       : "<not found>"
+               );
+
+       if(child_expr) {
+               /* Maybe hasn't been fixed yet. */
+               if (!child_expr->value) {
+                       asn1p_expr_t *saved_expr = arg->expr;
+                       arg->expr = type_expr;
+                       switch (type_expr->expr_type) {
+                       case ASN_BASIC_INTEGER:
+                               asn1f_fix_integer(arg);
+                               break;
+                       case ASN_BASIC_ENUMERATED:
+                               asn1f_fix_enum(arg);
+                               break;
+                       default:
+                               WARNING("Unexpected type %s for %s",
+                                               type_expr->expr_type,
+                                               type_expr->Identifier);
+                               return -1;
+                       }
+                       arg->expr = saved_expr;
+               }
+               if(child_expr->value && _asn1f_copy_value(arg,
+                               value_expr, child_expr))
+                       return -1;
+               /* Fall through */
+       }
+
+       return 0;
+}
diff --git a/libasn1fix/asn1fix_value.h b/libasn1fix/asn1fix_value.h
new file mode 100644 (file)
index 0000000..23208a8
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Functions related with processing values.
+ */
+#ifndef        ASN1FIX_VALUE_H
+#define        ASN1FIX_VALUE_H
+
+struct asn1p_namespace_s;   /* Forward declaration */
+
+/*
+ * Resolve the value given by reference.
+ * This function also takes a parameter which specifies the desired
+ * value's type.
+ * 
+ * RETURN VALUES:
+ * 0:          Value resolved successfully.
+ * -1/EPERM:   Recursive looping detected.
+ * -1/EEXIST:  Reference is not compatible with the desired type.
+ * -1/ESRCH:   Cannot find the terminal reference.
+ */
+int asn1f_value_resolve(arg_t *arg, asn1p_expr_t *tc,
+                        const enum asn1p_constraint_type_e *opt_constr_type);
+
+/*
+ * Check if a value in value_expr refers to the enumeration or integer element
+ * within the type provided. If yes, it will replace referenced value with
+ * the appropriate inline value.
+ */
+int asn1f_look_value_in_type(arg_t *arg,
+               asn1p_expr_t *type_expr, asn1p_expr_t *value_expr);
+
+#endif /* ASN1FIX_VALUE_H */
diff --git a/libasn1fix/check_fixer.c b/libasn1fix/check_fixer.c
new file mode 100644 (file)
index 0000000..b71a8c9
--- /dev/null
@@ -0,0 +1,390 @@
+#undef NDEBUG
+#include "asn1fix_internal.h"
+
+#ifdef _WIN32
+#include <io.h>
+#include <direct.h>
+#define        chdir _chdir
+#else
+#include <dirent.h>
+#include <sysexits.h>
+#endif
+#include <errno.h>
+#include <libgen.h>
+
+#include "genhash.h"
+#include "asn1fix.h"
+#include "asn1_buffer.h"
+#include "asn1_namespace.h"
+
+#ifndef TOP_SRCDIR
+#define TOP_SRCDIR_S    ".."
+#else
+#define STRINGIFY_MACRO2(x)  #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define TOP_SRCDIR_S    STRINGIFY_MACRO(TOP_SRCDIR)
+#endif
+
+static int check(const char *fname,
+       enum asn1p_flags parser_flags,
+       enum asn1f_flags fixer_flags);
+static int post_fix_check(asn1p_t *asn);
+static int post_fix_check_element(asn1p_module_t *mod, asn1p_expr_t *expr);
+
+int
+main(int ac, char **av) {
+#ifdef _WIN32
+       intptr_t dir;
+       struct _finddata_t c_file;
+#else
+       struct dirent *dp;
+       DIR *dir;
+#endif
+       int failed = 0;
+       int completed = 0;
+       enum asn1p_flags parser_flags = A1P_NOFLAGS;
+       enum asn1f_flags fixer_flags  = A1F_NOFLAGS;
+       const char *filename;
+       size_t len;
+
+       /*
+        * Just in case when one decides that some flags better be
+        * enabled during `ASN1_FIXER_FLAGS=1 make check` or some
+        * similar usage.
+        */
+       if(getenv("ASN1_PARSER_FLAGS"))
+               parser_flags = atoi(getenv("ASN1_PARSER_FLAGS"));
+       if(getenv("ASN1_FIXER_FLAGS"))
+               fixer_flags = atoi(getenv("ASN1_FIXER_FLAGS"));
+
+       /*
+        * Go into a directory with tests.
+        */
+       if(ac <= 1) {
+        abuf *asn1_tests_dirname = abuf_new();
+        const char *top_srcdir = getenv("top_srcdir");
+        if(!top_srcdir) top_srcdir = TOP_SRCDIR_S;
+
+        abuf_printf(asn1_tests_dirname, "%s/tests/tests-asn1c-compiler",
+                    top_srcdir);
+
+        fprintf(stderr, "Testing in %s...\n", top_srcdir);
+        int ret = chdir(asn1_tests_dirname->buffer);
+        if(ret == -1)
+            fprintf(stderr, "%s: %s\n", asn1_tests_dirname->buffer,
+                    strerror(errno));
+        assert(ret == 0);
+        /* For some reasons, tests could be hidden under extra tests dir. */
+#ifdef _WIN32
+               dir = _findfirst("*.asn1", &c_file);
+               assert(dir != -1L);
+#else
+               dir = opendir(".");
+               assert(dir);
+#endif /* _WIN32 */
+       } else {
+               dir = 0;
+       }
+
+       /*
+        * Scan every *.asn1 file and try to parse and fix it.
+        */
+    if(dir) {
+#ifdef _WIN32
+        do {
+            filename = c_file.name;
+#else
+        while((dp = readdir(dir))) {
+            filename = dp->d_name;
+#endif /* _WIN32 */
+            len = strlen(filename);
+            if(len <= 5 || !isdigit(filename[0])
+               || strcmp(filename + len - 5, ".asn1"))
+                continue;
+            int ret = check(filename, parser_flags, fixer_flags);
+            if(ret) {
+                fprintf(stderr, "FAILED: %s\n", filename);
+                failed++;
+            }
+            completed++;
+#ifdef _WIN32
+        } while(_findnext(dir, &c_file) == 0);
+        _findclose(dir);
+#else
+        }
+        closedir(dir);
+#endif /* _WIN32 */
+
+
+        fprintf(stderr,
+                "Tests COMPLETED: %d\n"
+                "Tests FAILED:    %d\n",
+                completed, failed);
+    } else {
+        for(int i = 1; i < ac; i++) {
+            int ret = check(av[i], parser_flags, fixer_flags);
+            if(ret) {
+                fprintf(stderr, "FAILED: %s\n", av[i]);
+                failed++;
+            }
+            completed++;
+        }
+    }
+
+    if(completed == 0) {
+        fprintf(stderr, "No tests defined?!\n");
+        exit(EX_NOINPUT);
+    }
+
+    if(failed) {
+        exit(EX_DATAERR);
+    }
+    return 0;
+}
+
+static int
+check(const char *fname,
+               enum asn1p_flags parser_flags,
+               enum asn1f_flags fixer_flags) {
+       asn1p_t *asn;
+       int expected_parseable;         /* Is it expected to be parseable? */
+       int expected_fix_code;          /* What code a fixer must return */
+       int r_value = 0;
+
+       /*
+        * Figure out how the processing should go by inferring
+        * expectations from the file name.
+        */
+       if(strstr(fname, "-OK.")) {
+               expected_parseable = 1;
+               expected_fix_code  = 0;
+       } else if(strstr(fname, "-NP.")) {
+               expected_parseable = 0;
+               expected_fix_code  = 123;       /* Does not matter */
+       } else if(strstr(fname, "-SE.")) {
+               expected_parseable = 1;
+               expected_fix_code  = -1;        /* Semantically incorrect */
+       } else if(strstr(fname, "-SW.")) {
+               expected_parseable = 1;
+               expected_fix_code  = 1; /* Semantically suspicious */
+       } else {
+               fprintf(stderr, "%s: Invalid file name format\n", fname);
+               return -1;
+       }
+
+       /* Flag modifiers */
+       if(strstr(fname, "-blessSize-"))
+               fixer_flags |= A1F_EXTENDED_SizeConstraint;
+
+       fprintf(stderr, "[=> %s]\n", fname);
+
+       /*
+        * Perform low-level parsing.
+        */
+       if(!expected_parseable)
+               fprintf(stderr, "Expecting error...\n");
+       asn = asn1p_parse_file(fname, parser_flags);
+       if(asn == NULL) {
+               if(expected_parseable) {
+                       fprintf(stderr, "Cannot parse file \"%s\"\n", fname);
+                       r_value = -1;
+               } else {
+                       fprintf(stderr,
+                               "Previous error is EXPECTED, no worry\n");
+               }
+       } else if(!expected_parseable) {
+               fprintf(stderr,
+                       "The file \"%s\" is not expected to be parseable, "
+                       "yet parsing was successfull!\n", fname);
+               r_value = -1;
+       }
+       if(!asn) return r_value;
+
+       if(r_value == 0) {
+        char *fname_copy = strdup(fname);
+        char *test_dir = dirname(fname_copy);
+        abuf *skeletons_dirname = abuf_new();
+               asn1p_t *std_asn;
+
+        abuf_printf(skeletons_dirname,
+                    "%s/../../skeletons/standard-modules/"
+                    "ASN1C-UsefulInformationObjectClasses.asn1",
+                    test_dir);
+        free(fname_copy);
+
+        std_asn = asn1p_parse_file(skeletons_dirname->buffer, A1P_NOFLAGS);
+        if(std_asn) {
+                       asn1p_module_t *mod;
+                       while((mod = TQ_REMOVE(&(std_asn->modules), mod_next))) {
+                               mod->_tags |= MT_STANDARD_MODULE;
+                               TQ_ADD(&(asn->modules), mod, mod_next);
+                       }
+                       asn1p_delete(std_asn);
+
+            /* Allow referencing imported modules. */
+            asn1f_use_standard_namespaces(asn);
+               } else {
+            fprintf(stderr, "%s: %s\n", skeletons_dirname->buffer,
+                    strerror(errno));
+        }
+
+        abuf_free(skeletons_dirname);
+    }
+
+       /*
+        * Perform semantical checks and fixes.
+        */
+       if(r_value == 0) {
+               int ret;
+
+               if(expected_fix_code)
+                       fprintf(stderr, "Expecting some problems...\n");
+
+               ret = asn1f_process(asn, fixer_flags, 0);
+               if(ret) {
+                       if(ret == expected_fix_code) {
+                               fprintf(stderr,
+                                       "Previous error is EXPECTED, "
+                                       "no worry\n");
+                       } else {
+                               fprintf(stderr,
+                                       "Cannot process file \"%s\": %d\n",
+                                       fname, ret);
+                               r_value = -1;
+               }
+               } else if(ret != expected_fix_code) {
+                       fprintf(stderr,
+                               "File \"%s\" is expected "
+                               "to be semantically incorrect, "
+                               "yet processing was successful!\n",
+                               fname);
+                       r_value = -1;
+               }
+       }
+
+       /*
+        * Check validity of some values, if grammar has special
+        * instructions for that.
+        */
+       if(r_value == 0) {
+               if(post_fix_check(asn))
+                       r_value = -1;
+       }
+
+       /*
+        * Destroy the asn.
+        */
+#ifdef CLEAN_EVERYTHING
+       asn1p_delete(asn);
+#endif
+
+       return r_value;
+}
+
+
+static int
+post_fix_check(asn1p_t *asn) {
+       asn1p_module_t *mod;
+       asn1p_expr_t *expr;
+       int r_value = 0;
+
+       TQ_FOR(mod, &(asn->modules), mod_next) {
+               TQ_FOR(expr, &(mod->members), next) {
+                       assert(expr->Identifier);
+                       if(strncmp(expr->Identifier, "check-", 6) == 0) {
+                               if(post_fix_check_element(mod, expr))
+                                       r_value = -1;
+                       }
+               }
+       }
+
+       return r_value;
+}
+
+
+static int
+post_fix_check_element(asn1p_module_t *mod, asn1p_expr_t *check_expr) {
+       asn1p_expr_t *expr = NULL;
+       char *name;
+       asn1p_value_t *value;
+
+       if(check_expr->expr_type != ASN_BASIC_INTEGER
+       || check_expr->meta_type != AMT_VALUE) {
+               fprintf(stderr,
+                       "CHECKER: Unsupported type of \"%s\" value: "
+                       "%d at line %d of %s\n",
+                       check_expr->Identifier,
+                       check_expr->expr_type,
+                       check_expr->_lineno,
+                       mod->source_file_name
+               );
+               return -1;
+       }
+
+       assert(check_expr->meta_type == AMT_VALUE);
+
+       value = check_expr->value;
+       if(value == NULL || value->type != ATV_INTEGER) {
+               fprintf(stderr,
+                       "CHECKER: Unsupported value type of \"%s\": "
+                       "%d at line %d of %s\n",
+                       check_expr->Identifier,
+                       value?(signed)value->type:-1,
+                       expr->_lineno,
+                       mod->source_file_name
+               );
+               return -1;
+       }
+
+       name = check_expr->Identifier + sizeof("check-") - 1;
+
+       /*
+        * Scan in search for the original.
+        */
+    expr = genhash_get(mod->members_hash, name);
+       if(expr == NULL) {
+               fprintf(stderr,
+                       "CHECKER: Value \"%s\" requested by "
+                       "\"check-%s\" at line %d of %s is not found!\n",
+                       name, name, check_expr->_lineno,
+                       mod->source_file_name
+               );
+               return -1;
+       }
+
+       if(0 && expr->expr_type != check_expr->expr_type) {
+               fprintf(stderr,
+                       "CHECKER: Value type of \"%s\" (=%d) at line %d "
+                       "does not have desired type %d as requested by "
+                       "\"check-%s\" in %s\n",
+                       expr->Identifier,
+                       expr->expr_type,
+                       expr->_lineno,
+                       check_expr->expr_type,
+                       name,
+                       mod->source_file_name
+               );
+               return -1;
+       }
+
+       if(expr->value == NULL
+       || expr->value->type != value->type) {
+               fprintf(stderr,
+                       "CHECKER: Value of \"%s\" (\"%s\", type=%d) at line %d "
+                       "does not have desired type %d as requested by "
+                       "\"check-%s\" in %s\n",
+                       expr->Identifier,
+                       asn1f_printable_value(expr->value),
+                       expr->value->type,
+                       expr->_lineno,
+                       value->type,
+                       name,
+                       mod->source_file_name
+               );
+               return -1;
+       }
+
+       return 0;
+}
+
+
diff --git a/libasn1parser/.deps/asn1p_class.Plo b/libasn1parser/.deps/asn1p_class.Plo
new file mode 100644 (file)
index 0000000..4803afe
--- /dev/null
@@ -0,0 +1,187 @@
+asn1p_class.lo: asn1p_class.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_constr.Plo b/libasn1parser/.deps/asn1p_constr.Plo
new file mode 100644 (file)
index 0000000..3c2f878
--- /dev/null
@@ -0,0 +1,187 @@
+asn1p_constr.lo: asn1p_constr.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_expr.Plo b/libasn1parser/.deps/asn1p_expr.Plo
new file mode 100644 (file)
index 0000000..2975166
--- /dev/null
@@ -0,0 +1,187 @@
+asn1p_expr.lo: asn1p_expr.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_integer.Plo b/libasn1parser/.deps/asn1p_integer.Plo
new file mode 100644 (file)
index 0000000..5f94c1b
--- /dev/null
@@ -0,0 +1,180 @@
+asn1p_integer.lo: asn1p_integer.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ asn1p_integer.h ../config.h ../libasn1common/asn1_buffer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+asn1p_integer.h:
+
+../config.h:
+
+../libasn1common/asn1_buffer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
diff --git a/libasn1parser/.deps/asn1p_l.Plo b/libasn1parser/.deps/asn1p_l.Plo
new file mode 100644 (file)
index 0000000..6daa64f
--- /dev/null
@@ -0,0 +1,203 @@
+asn1p_l.lo: asn1p_l.c /usr/include/stdc-predef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/assert.h \
+ asn1parser.h ../config.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ asn1p_integer.h asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h \
+ asn1p_param.h asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h asn1p_y.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
+
+asn1p_y.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
diff --git a/libasn1parser/.deps/asn1p_module.Plo b/libasn1parser/.deps/asn1p_module.Plo
new file mode 100644 (file)
index 0000000..69afae8
--- /dev/null
@@ -0,0 +1,153 @@
+asn1p_module.lo: asn1p_module.c /usr/include/stdc-predef.h \
+ /usr/include/stdlib.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h ../libasn1common/genhash.h \
+ asn1parser.h ../config.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h /usr/include/assert.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+../libasn1common/genhash.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+/usr/include/assert.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_oid.Plo b/libasn1parser/.deps/asn1p_oid.Plo
new file mode 100644 (file)
index 0000000..41192b4
--- /dev/null
@@ -0,0 +1,170 @@
+asn1p_oid.lo: asn1p_oid.c /usr/include/stdc-predef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h /usr/include/assert.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+/usr/include/assert.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_param.Plo b/libasn1parser/.deps/asn1p_param.Plo
new file mode 100644 (file)
index 0000000..6f37613
--- /dev/null
@@ -0,0 +1,187 @@
+asn1p_param.lo: asn1p_param.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_value.Plo b/libasn1parser/.deps/asn1p_value.Plo
new file mode 100644 (file)
index 0000000..83b4f37
--- /dev/null
@@ -0,0 +1,166 @@
+asn1p_value.lo: asn1p_value.c /usr/include/stdc-predef.h \
+ /usr/include/stdlib.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_xports.Plo b/libasn1parser/.deps/asn1p_xports.Plo
new file mode 100644 (file)
index 0000000..cafc344
--- /dev/null
@@ -0,0 +1,150 @@
+asn1p_xports.lo: asn1p_xports.c /usr/include/stdc-predef.h \
+ /usr/include/stdlib.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h /usr/include/assert.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+/usr/include/assert.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1p_y.Plo b/libasn1parser/.deps/asn1p_y.Plo
new file mode 100644 (file)
index 0000000..e3c25d6
--- /dev/null
@@ -0,0 +1,186 @@
+asn1p_y.lo: asn1p_y.c /usr/include/stdc-predef.h /usr/include/stdlib.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h asn1parser.h ../config.h \
+ ../libasn1common/asn1_ref.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h asn1p_integer.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ asn1p_list.h asn1p_oid.h asn1p_module.h asn1p_value.h asn1p_param.h \
+ asn1p_constr.h asn1p_xports.h asn1p_class.h asn1p_expr.h \
+ asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/asn1parser.Plo b/libasn1parser/.deps/asn1parser.Plo
new file mode 100644 (file)
index 0000000..bab9935
--- /dev/null
@@ -0,0 +1,192 @@
+asn1parser.lo: asn1parser.c /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ /usr/include/x86_64-linux-gnu/sys/stat.h \
+ /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/assert.h \
+ /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \
+ /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ asn1parser.h ../config.h ../libasn1common/asn1_ref.h \
+ ../libasn1common/asn1_buffer.h ../libasn1common/asn1_namespace.h \
+ asn1p_integer.h /usr/include/inttypes.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h /usr/include/stdint.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h asn1p_list.h asn1p_oid.h \
+ asn1p_module.h asn1p_value.h asn1p_param.h asn1p_constr.h asn1p_xports.h \
+ asn1p_class.h asn1p_expr.h asn1p_expr_str.h asn1p_expr2uclass.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/sys/stat.h:
+
+/usr/include/x86_64-linux-gnu/bits/stat.h:
+
+/usr/include/assert.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+asn1p_integer.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+asn1p_list.h:
+
+asn1p_oid.h:
+
+asn1p_module.h:
+
+asn1p_value.h:
+
+asn1p_param.h:
+
+asn1p_constr.h:
+
+asn1p_xports.h:
+
+asn1p_class.h:
+
+asn1p_expr.h:
+
+asn1p_expr_str.h:
+
+asn1p_expr2uclass.h:
diff --git a/libasn1parser/.deps/check_asn1p_integer.Po b/libasn1parser/.deps/check_asn1p_integer.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/libasn1parser/Makefile b/libasn1parser/Makefile
new file mode 100644 (file)
index 0000000..23cd6c7
--- /dev/null
@@ -0,0 +1,1050 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# libasn1parser/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+check_PROGRAMS = check_asn1p_integer$(EXEEXT)
+subdir = libasn1parser
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1parser_la_LIBADD =
+am_libasn1parser_la_OBJECTS = asn1parser.lo asn1p_y.lo asn1p_l.lo \
+       asn1p_module.lo asn1p_oid.lo asn1p_value.lo asn1p_expr.lo \
+       asn1p_xports.lo asn1p_constr.lo asn1p_param.lo asn1p_class.lo \
+       asn1p_integer.lo
+libasn1parser_la_OBJECTS = $(am_libasn1parser_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+check_asn1p_integer_SOURCES = check_asn1p_integer.c
+check_asn1p_integer_OBJECTS = check_asn1p_integer.$(OBJEXT)
+check_asn1p_integer_LDADD = $(LDADD)
+check_asn1p_integer_DEPENDENCIES =  \
+       $(top_builddir)/libasn1common/libasn1common.la \
+       libasn1parser.la
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1parser_la_SOURCES) check_asn1p_integer.c
+DIST_SOURCES = $(libasn1parser_la_SOURCES) check_asn1p_integer.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/libasn1parser
+abs_srcdir = /home/nokia/mouse07410/asn1c/libasn1parser
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+AM_CPPFLAGS = -I$(top_srcdir)/libasn1common
+AM_YFLAGS = -p asn1p_ -d 
+AM_LFLAGS = -s -p -Cem -Pasn1p_ -olex.yy.c
+noinst_LTLIBRARIES = libasn1parser.la
+libasn1parser_la_LIBDADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1parser_la_SOURCES = \
+    asn1parser.c asn1parser.h           \
+    asn1p_y.c asn1p_y.h asn1p_l.c       \
+    asn1p_module.c asn1p_module.h       \
+    asn1p_oid.c asn1p_oid.h             \
+    asn1p_value.c asn1p_value.h         \
+    asn1p_expr.c asn1p_expr.h           \
+    asn1p_expr_str.h                    \
+    asn1p_expr2uclass.h                 \
+    asn1p_xports.c asn1p_xports.h       \
+    asn1p_constr.c asn1p_constr.h       \
+    asn1p_param.c asn1p_param.h         \
+    asn1p_class.c asn1p_class.h         \
+    asn1p_integer.c asn1p_integer.h     \
+    asn1p_list.h
+
+LDADD = $(top_builddir)/libasn1common/libasn1common.la libasn1parser.la
+TESTS = $(check_PROGRAMS)
+EXTRA_DIST = expr-h.pl
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1parser/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1parser/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1parser.la: $(libasn1parser_la_OBJECTS) $(libasn1parser_la_DEPENDENCIES) $(EXTRA_libasn1parser_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1parser_la_OBJECTS) $(libasn1parser_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check_asn1p_integer$(EXEEXT): $(check_asn1p_integer_OBJECTS) $(check_asn1p_integer_DEPENDENCIES) $(EXTRA_check_asn1p_integer_DEPENDENCIES) 
+       @rm -f check_asn1p_integer$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_asn1p_integer_OBJECTS) $(check_asn1p_integer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1p_class.Plo
+include ./$(DEPDIR)/asn1p_constr.Plo
+include ./$(DEPDIR)/asn1p_expr.Plo
+include ./$(DEPDIR)/asn1p_integer.Plo
+include ./$(DEPDIR)/asn1p_l.Plo
+include ./$(DEPDIR)/asn1p_module.Plo
+include ./$(DEPDIR)/asn1p_oid.Plo
+include ./$(DEPDIR)/asn1p_param.Plo
+include ./$(DEPDIR)/asn1p_value.Plo
+include ./$(DEPDIR)/asn1p_xports.Plo
+include ./$(DEPDIR)/asn1p_y.Plo
+include ./$(DEPDIR)/asn1parser.Plo
+include ./$(DEPDIR)/check_asn1p_integer.Po
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check_asn1p_integer.log: check_asn1p_integer$(EXEEXT)
+       @p='check_asn1p_integer$(EXEEXT)'; \
+       b='check_asn1p_integer'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+       uninstall-am
+
+.PRECIOUS: Makefile
+
+
+asn1parser.h: asn1p_expr_str.h
+
+asn1p_expr_str.h: expr-h.pl asn1p_expr.h
+       ./expr-h.pl asn1p_expr.h > $@
+
+# 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:
diff --git a/libasn1parser/Makefile.am b/libasn1parser/Makefile.am
new file mode 100644 (file)
index 0000000..7599dd4
--- /dev/null
@@ -0,0 +1,37 @@
+
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = -I$(top_srcdir)/libasn1common
+AM_YFLAGS = -p asn1p_ -d 
+AM_LFLAGS = -s -p -Cem -Pasn1p_ -olex.yy.c
+
+noinst_LTLIBRARIES = libasn1parser.la
+
+libasn1parser_la_LIBDADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1parser_la_SOURCES =              \
+    asn1parser.c asn1parser.h           \
+    asn1p_y.c asn1p_y.h asn1p_l.c       \
+    asn1p_module.c asn1p_module.h       \
+    asn1p_oid.c asn1p_oid.h             \
+    asn1p_value.c asn1p_value.h         \
+    asn1p_expr.c asn1p_expr.h           \
+    asn1p_expr_str.h                    \
+    asn1p_expr2uclass.h                 \
+    asn1p_xports.c asn1p_xports.h       \
+    asn1p_constr.c asn1p_constr.h       \
+    asn1p_param.c asn1p_param.h         \
+    asn1p_class.c asn1p_class.h         \
+    asn1p_integer.c asn1p_integer.h     \
+    asn1p_list.h
+
+check_PROGRAMS = check_asn1p_integer
+
+LDADD = $(top_builddir)/libasn1common/libasn1common.la libasn1parser.la
+
+TESTS = $(check_PROGRAMS)
+
+asn1parser.h: asn1p_expr_str.h
+
+asn1p_expr_str.h: expr-h.pl asn1p_expr.h
+       ./expr-h.pl asn1p_expr.h > $@
+
+EXTRA_DIST = expr-h.pl
diff --git a/libasn1parser/Makefile.in b/libasn1parser/Makefile.in
new file mode 100644 (file)
index 0000000..8cd855b
--- /dev/null
@@ -0,0 +1,1050 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+check_PROGRAMS = check_asn1p_integer$(EXEEXT)
+subdir = libasn1parser
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1parser_la_LIBADD =
+am_libasn1parser_la_OBJECTS = asn1parser.lo asn1p_y.lo asn1p_l.lo \
+       asn1p_module.lo asn1p_oid.lo asn1p_value.lo asn1p_expr.lo \
+       asn1p_xports.lo asn1p_constr.lo asn1p_param.lo asn1p_class.lo \
+       asn1p_integer.lo
+libasn1parser_la_OBJECTS = $(am_libasn1parser_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+check_asn1p_integer_SOURCES = check_asn1p_integer.c
+check_asn1p_integer_OBJECTS = check_asn1p_integer.$(OBJEXT)
+check_asn1p_integer_LDADD = $(LDADD)
+check_asn1p_integer_DEPENDENCIES =  \
+       $(top_builddir)/libasn1common/libasn1common.la \
+       libasn1parser.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1parser_la_SOURCES) check_asn1p_integer.c
+DIST_SOURCES = $(libasn1parser_la_SOURCES) check_asn1p_integer.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = -I$(top_srcdir)/libasn1common
+AM_YFLAGS = -p asn1p_ -d 
+AM_LFLAGS = -s -p -Cem -Pasn1p_ -olex.yy.c
+noinst_LTLIBRARIES = libasn1parser.la
+libasn1parser_la_LIBDADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1parser_la_SOURCES = \
+    asn1parser.c asn1parser.h           \
+    asn1p_y.c asn1p_y.h asn1p_l.c       \
+    asn1p_module.c asn1p_module.h       \
+    asn1p_oid.c asn1p_oid.h             \
+    asn1p_value.c asn1p_value.h         \
+    asn1p_expr.c asn1p_expr.h           \
+    asn1p_expr_str.h                    \
+    asn1p_expr2uclass.h                 \
+    asn1p_xports.c asn1p_xports.h       \
+    asn1p_constr.c asn1p_constr.h       \
+    asn1p_param.c asn1p_param.h         \
+    asn1p_class.c asn1p_class.h         \
+    asn1p_integer.c asn1p_integer.h     \
+    asn1p_list.h
+
+LDADD = $(top_builddir)/libasn1common/libasn1common.la libasn1parser.la
+TESTS = $(check_PROGRAMS)
+EXTRA_DIST = expr-h.pl
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1parser/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1parser/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1parser.la: $(libasn1parser_la_OBJECTS) $(libasn1parser_la_DEPENDENCIES) $(EXTRA_libasn1parser_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1parser_la_OBJECTS) $(libasn1parser_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check_asn1p_integer$(EXEEXT): $(check_asn1p_integer_OBJECTS) $(check_asn1p_integer_DEPENDENCIES) $(EXTRA_check_asn1p_integer_DEPENDENCIES) 
+       @rm -f check_asn1p_integer$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_asn1p_integer_OBJECTS) $(check_asn1p_integer_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_class.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_constr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_expr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_integer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_l.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_module.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_oid.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_param.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_value.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_xports.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1p_y.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_asn1p_integer.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check_asn1p_integer.log: check_asn1p_integer$(EXEEXT)
+       @p='check_asn1p_integer$(EXEEXT)'; \
+       b='check_asn1p_integer'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool \
+       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am recheck tags tags-am uninstall \
+       uninstall-am
+
+.PRECIOUS: Makefile
+
+
+asn1parser.h: asn1p_expr_str.h
+
+asn1p_expr_str.h: expr-h.pl asn1p_expr.h
+       ./expr-h.pl asn1p_expr.h > $@
+
+# 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:
diff --git a/libasn1parser/asn1p_class.c b/libasn1parser/asn1p_class.c
new file mode 100644 (file)
index 0000000..cbe9480
--- /dev/null
@@ -0,0 +1,319 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+#include "asn1p_class.h"
+
+asn1p_ioc_table_t *
+asn1p_ioc_table_new() {
+    asn1p_ioc_table_t *it = calloc(1, sizeof(*it));
+    assert(it);
+    return it;
+}
+
+void
+asn1p_ioc_table_add(asn1p_ioc_table_t *it, asn1p_ioc_row_t *row) {
+    assert(it);
+
+    asn1p_ioc_row_t **new_rows =
+        realloc(it->row, (it->rows + 1) * sizeof(it->row[0]));
+    assert(new_rows);
+    it->row = new_rows;
+    it->row[it->rows++] = row;
+}
+
+void
+asn1p_ioc_table_append(asn1p_ioc_table_t *it, asn1p_ioc_table_t *src) {
+
+    if(!src || !it) return;
+
+    for(size_t i = 0; i < src->rows; i++) {
+        asn1p_ioc_table_add(it, asn1p_ioc_row_clone(src->row[i]));
+    }
+}
+
+void
+asn1p_ioc_table_free(asn1p_ioc_table_t *it) {
+    if(it) {
+        for(size_t i = 0; i < it->rows; i++) {
+            asn1p_ioc_row_delete(it->row[i]);
+        }
+        free(it->row);
+        free(it);
+    }
+}
+
+size_t
+asn1p_ioc_table_max_identifier_length(asn1p_ioc_table_t *it) {
+    size_t max_length = 0;
+    if(it) {
+        for(size_t i = 0; i < it->rows; i++) {
+            size_t len = asn1p_ioc_row_max_identifier_length(it->row[i]);
+            if(len > max_length) max_length = len;
+        }
+    }
+    return max_length;
+}
+
+size_t
+asn1p_ioc_row_max_identifier_length(asn1p_ioc_row_t *row) {
+    size_t max_length = 0;
+    if(row) {
+        for(size_t i = 0; i < row->columns; i++) {
+            if(row->column[i].value) {
+                size_t len = strlen(row->column[i].value->Identifier);
+                if(len > max_length) max_length = len;
+            }
+        }
+    }
+    return max_length;
+}
+
+asn1p_ioc_row_t *
+asn1p_ioc_row_new(asn1p_expr_t *oclass) {
+       asn1p_ioc_row_t *row;
+       asn1p_expr_t *field;
+       int columns = 0;
+
+       assert(oclass->expr_type == A1TC_CLASSDEF);
+
+       row = calloc(1, sizeof *row);
+       if(!row) return NULL;
+
+       TQ_FOR(field, &oclass->members, next)
+               columns++;
+
+       row->column = calloc(columns, sizeof *row->column);
+       if(!row->column) {
+               free(row);
+               return NULL;
+       }
+       row->columns = columns;
+
+       columns = 0;
+       TQ_FOR(field, &oclass->members, next) {
+               row->column[columns].field = field;
+               row->column[columns].value = NULL;
+               columns++;
+       }
+
+       return row;
+}
+
+asn1p_ioc_row_t *
+asn1p_ioc_row_clone(asn1p_ioc_row_t *src) {
+       asn1p_ioc_row_t *row;
+
+       row = calloc(1, sizeof *row);
+       if(!row) return NULL;
+
+       row->column = calloc(src->columns, sizeof *src->column);
+       if(!row->column) {
+               free(row);
+               return NULL;
+       }
+       row->columns = src->columns;
+
+       for(size_t i = 0; i < src->columns; i++) {
+               row->column[i].field = src->column[i].field;
+               row->column[i].value = 0;
+               if(src->column[i].value) {
+                       row->column[i].value = asn1p_expr_clone(src->column[i].value, 0);
+               }
+               row->column[i].new_ref = 1;
+       }
+
+       return row;
+}
+
+void
+asn1p_ioc_row_delete(asn1p_ioc_row_t *row) {
+       if(row) {
+               if(row->column) {
+                       for(size_t i = 0; i < row->columns; i++) {
+                               if(!row->column[i].new_ref && row->column[i].value) {
+                                       /* 
+                                        * Field 'reference' comes from asn1fix_cws.c :
+                                        * TQ_FIRST(&cell->field->members)->reference
+                                        * so it should not be freed here.
+                                        */
+                                       row->column[i].value->reference = NULL;
+                               }
+                               asn1p_expr_free(row->column[i].value);
+                       }
+                       free(row->column);
+               }
+               free(row);
+       }
+}
+
+int
+asn1p_ioc_row_match(const asn1p_ioc_row_t *a, const asn1p_ioc_row_t *b) {
+    assert(a && b);
+
+    if(a->columns != b->columns)
+        return -1;  /* Bad! */
+
+    for(size_t i = 0; i < a->columns; i++) {
+        assert(a->column[i].field);
+        assert(b->column[i].field);
+        if(strcmp(a->column[i].field->Identifier,
+                  b->column[i].field->Identifier)
+           != 0) {
+            return -1;  /* Bad! */
+        }
+        if((a->column[i].value && !b->column[i].value)
+           || (!a->column[i].value && b->column[i].value)) {
+            return 1;   /* Not match */
+        }
+        if(a->column[i].value && b->column[i].value) {
+            if(asn1p_expr_compare(a->column[i].value, b->column[i].value)
+               != 0) {
+                return 1;   /* Not match */
+            }
+        }
+    }
+
+    return 0;
+}
+
+struct asn1p_ioc_cell_s *
+asn1p_ioc_row_cell_fetch(asn1p_ioc_row_t *row, const char *fieldname) {
+       for(size_t i = 0; i < row->columns; i++) {
+               if(strcmp(row->column[i].field->Identifier, fieldname) == 0)
+                       return &row->column[i];
+       }
+       errno = ESRCH;
+       return NULL;
+}
+
+asn1p_wsyntx_chunk_t *
+asn1p_wsyntx_chunk_new() {
+       asn1p_wsyntx_chunk_t *wc;
+
+       wc = calloc(1, sizeof(*wc));
+
+       return wc;
+}
+
+void
+asn1p_wsyntx_chunk_free(asn1p_wsyntx_chunk_t *wc) {
+       if(wc) {
+               switch(wc->type) {
+               case WC_LITERAL:
+               case WC_WHITESPACE:
+               case WC_FIELD:
+                       free(wc->content.token); break;
+               case WC_OPTIONALGROUP:
+                       asn1p_wsyntx_free(wc->content.syntax);
+                       break;
+               }
+               free(wc);
+       }
+}
+
+asn1p_wsyntx_chunk_t *
+asn1p_wsyntx_chunk_clone(asn1p_wsyntx_chunk_t *wc) {
+       asn1p_wsyntx_chunk_t *nc;
+
+       nc = asn1p_wsyntx_chunk_new();
+       if(nc) {
+               nc->type = wc->type;
+               switch(wc->type) {
+               case WC_LITERAL:
+               case WC_WHITESPACE:
+               case WC_FIELD:
+                       nc->content.token = malloc(strlen(wc->content.token)+1);
+                       strcpy(nc->content.token, wc->content.token);
+                       break;
+               case WC_OPTIONALGROUP:
+                       nc->content.syntax = asn1p_wsyntx_clone(wc->content.syntax);
+                       break;
+               }
+       }
+
+       return nc;
+}
+
+asn1p_wsyntx_t *
+asn1p_wsyntx_new() {
+       asn1p_wsyntx_t *wx;
+
+       wx = calloc(1, sizeof(*wx));
+       if(wx) {
+               TQ_INIT(&(wx->chunks));
+       }
+
+       return wx;
+}
+
+void
+asn1p_wsyntx_free(asn1p_wsyntx_t *wx) {
+       if(wx) {
+               asn1p_wsyntx_chunk_t *wc;
+               while((wc = TQ_REMOVE(&(wx->chunks), next)))
+                       asn1p_wsyntx_chunk_free(wc);
+               free(wx);
+       }
+}
+
+asn1p_wsyntx_t *
+asn1p_wsyntx_clone(asn1p_wsyntx_t *wx) {
+       asn1p_wsyntx_t *nw;
+
+       nw = asn1p_wsyntx_new();
+       if(nw) {
+               asn1p_wsyntx_chunk_t *wc;
+               asn1p_wsyntx_chunk_t *nc;
+               TQ_FOR(wc, &(wx->chunks), next) {
+                       nc = asn1p_wsyntx_chunk_clone(wc);
+                       if(nc) {
+                               TQ_ADD(&(nw->chunks), nc, next);
+                       } else {
+                               asn1p_wsyntx_free(nw);
+                               return NULL;
+                       }
+               }
+       }
+
+       return nw;
+}
+
+asn1p_wsyntx_chunk_t *
+asn1p_wsyntx_chunk_fromstring(char *token, int do_copy) {
+       asn1p_wsyntx_chunk_t *wc;
+
+       if(do_copy) {
+               static asn1p_wsyntx_chunk_t tmp;
+               tmp.type = WC_LITERAL;
+               tmp.content.token = token;
+               wc = asn1p_wsyntx_chunk_clone(&tmp);
+       } else {
+               wc = asn1p_wsyntx_chunk_new();
+               if(wc) {
+                       wc->type = WC_LITERAL;
+                       wc->content.token = token;
+               }
+       }
+
+       return wc;
+}
+
+
+asn1p_wsyntx_chunk_t *
+asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax) {
+       asn1p_wsyntx_chunk_t *wc;
+
+       wc = asn1p_wsyntx_chunk_new();
+       if(wc) {
+               wc->type = WC_OPTIONALGROUP;
+               wc->content.syntax = syntax;
+               syntax->parent = wc;
+       }
+
+       return wc;
+}
+
diff --git a/libasn1parser/asn1p_class.h b/libasn1parser/asn1p_class.h
new file mode 100644 (file)
index 0000000..4c6efab
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * CLASS-related stuff.
+ */
+#ifndef        ASN1_PARSER_CLASS_H
+#define        ASN1_PARSER_CLASS_H
+
+struct asn1p_expr_s;   /* Forward declaration */
+
+typedef struct asn1p_ioc_row_s {
+       struct asn1p_ioc_cell_s {
+               struct asn1p_expr_s *field;     /* may never be NULL */
+               struct asn1p_expr_s *value;     /* may be left uninitialized */
+               int new_ref;
+       } *column;
+       size_t columns;
+} asn1p_ioc_row_t;
+
+asn1p_ioc_row_t *asn1p_ioc_row_new(struct asn1p_expr_s *oclass);
+asn1p_ioc_row_t *asn1p_ioc_row_clone(asn1p_ioc_row_t *src);
+size_t asn1p_ioc_row_max_identifier_length(asn1p_ioc_row_t *);
+void asn1p_ioc_row_delete(asn1p_ioc_row_t *);
+
+typedef struct asn1p_ioc_table_s {
+    asn1p_ioc_row_t **row;
+    size_t rows;
+    int extensible; /* 0 if non-extensible (sealed). Otherwise, extensible. */
+} asn1p_ioc_table_t;
+
+asn1p_ioc_table_t *asn1p_ioc_table_new(void);
+void asn1p_ioc_table_add(asn1p_ioc_table_t *, asn1p_ioc_row_t *row);
+void asn1p_ioc_table_append(asn1p_ioc_table_t *it, asn1p_ioc_table_t *src);
+size_t asn1p_ioc_table_max_identifier_length(asn1p_ioc_table_t *);
+void asn1p_ioc_table_free(asn1p_ioc_table_t *);
+
+/*
+ * Match is similar to a comparison,
+ * but -1 means error and 1 means not equal. 0 is OK
+ */
+int asn1p_ioc_row_match(const asn1p_ioc_row_t *, const asn1p_ioc_row_t *);
+
+struct asn1p_ioc_cell_s *asn1p_ioc_row_cell_fetch(asn1p_ioc_row_t *,
+               const char *fieldname);
+
+/*
+ * WITH SYNTAX free-form chunks.
+ */
+typedef struct asn1p_wsyntx_chunk_s {
+       enum {
+               WC_LITERAL,
+               WC_WHITESPACE,
+               WC_FIELD,
+               WC_OPTIONALGROUP
+       } type;
+       /*
+        * WC_LITERAL -> {token}
+        * WC_WHITESPACE -> {token}
+        * WC_FIELD -> {token}
+        * WC_OPTIONALGROUP -> {syntax}
+        */
+       union {
+               char *token;
+               struct asn1p_wsyntx_s *syntax;
+       } content;
+
+       TQ_ENTRY(struct asn1p_wsyntx_chunk_s) next;
+} asn1p_wsyntx_chunk_t;
+
+typedef struct asn1p_wsyntx_s {
+
+       struct asn1p_wsyntx_chunk_s *parent;
+
+       TQ_HEAD(struct asn1p_wsyntx_chunk_s) chunks;
+
+} asn1p_wsyntx_t;
+
+
+/*
+ * Constructor, destructor and cloning function.
+ */
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_new(void);
+void asn1p_wsyntx_chunk_free(asn1p_wsyntx_chunk_t *);
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_clone(asn1p_wsyntx_chunk_t *);
+
+asn1p_wsyntx_t *asn1p_wsyntx_new(void);
+void asn1p_wsyntx_free(asn1p_wsyntx_t *);
+asn1p_wsyntx_t *asn1p_wsyntx_clone(asn1p_wsyntx_t *);
+
+/*
+ * RETURN VALUES:
+ *      0:     Component has been added
+ *     -1:     Failure to add component (refer to errno)
+ */
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromstring(char *token, int _copy);
+asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax);
+
+
+#endif /* ASN1_PARSER_CLASS_H */
diff --git a/libasn1parser/asn1p_constr.c b/libasn1parser/asn1p_constr.c
new file mode 100644 (file)
index 0000000..03dafe5
--- /dev/null
@@ -0,0 +1,240 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+
+void
+asn1p_constraint_set_source(asn1p_constraint_t *ct,
+                            struct asn1p_module_s *module, int lineno) {
+    if(ct) {
+        ct->module = module;
+        ct->_lineno = lineno;
+        asn1p_value_set_source(ct->containedSubtype,module,lineno);
+        asn1p_value_set_source(ct->value,module,lineno);
+        asn1p_value_set_source(ct->range_start,module,lineno);
+        asn1p_value_set_source(ct->range_stop,module,lineno);
+        for(size_t i = 0; i < ct->el_count; i++) {
+            asn1p_constraint_set_source(ct->elements[i], module, lineno);
+        }
+    }
+}
+
+int asn1p_constraint_compare(const asn1p_constraint_t *a,
+                             const asn1p_constraint_t *b) {
+    assert((a && b));
+
+    if(a->type != b->type)
+        return -1;
+
+    /* Currently we only check VALUESET as a reference */
+    if(a->type == ACT_EL_TYPE) {
+        return strcmp(a->containedSubtype->value.v_type->reference->components[0].name,
+                      b->containedSubtype->value.v_type->reference->components[0].name);
+    }
+
+    return 0;
+}
+
+asn1p_constraint_t *
+asn1p_constraint_new(int _lineno, asn1p_module_t *mod) {
+       asn1p_constraint_t *ct;
+
+       ct = calloc(1, sizeof(*ct));
+       if(ct) {
+               ct->_lineno = _lineno;
+               ct->module = mod;
+       }
+
+       return ct;
+}
+
+
+void
+asn1p_constraint_free(asn1p_constraint_t *ct) {
+       if(ct) {
+
+               asn1p_value_free(ct->containedSubtype);
+               asn1p_value_free(ct->value);
+               asn1p_value_free(ct->range_start);
+               asn1p_value_free(ct->range_stop);
+
+               if(ct->elements) {
+                       while(ct->el_count--) {
+                               asn1p_constraint_free(
+                                       ct->elements[ct->el_count]);
+                       }
+                       free(ct->elements);
+               }
+
+               free(ct);
+       }
+}
+
+asn1p_constraint_t *
+asn1p_constraint_clone(asn1p_constraint_t *src) {
+       return asn1p_constraint_clone_with_resolver(src, 0, 0);
+}
+
+asn1p_constraint_t *
+asn1p_constraint_clone_with_resolver(asn1p_constraint_t *src,
+               asn1p_value_t *(*vr)(asn1p_value_t *, void *varg), void *varg) {
+       asn1p_constraint_t *clone;
+
+#define        CLONE(field, func)      do { if(src->field) {                   \
+                       clone->field = func(src->field, vr, varg);      \
+                       if(clone->field == NULL) {                      \
+                               asn1p_constraint_free(clone);           \
+                               return NULL;                            \
+                       }                                               \
+               } } while(0)
+
+       clone = asn1p_constraint_new(src->_lineno, src->module);
+       if(clone) {
+               unsigned int i;
+
+               clone->type = src->type;
+               clone->presence = src->presence;
+               CLONE(containedSubtype, asn1p_value_clone_with_resolver);
+               CLONE(value,            asn1p_value_clone_with_resolver);
+               CLONE(range_start,      asn1p_value_clone_with_resolver);
+               CLONE(range_stop,       asn1p_value_clone_with_resolver);
+
+               for(i = 0; i < src->el_count; i++) {
+                       asn1p_constraint_t *t;
+                       t = asn1p_constraint_clone_with_resolver(src->elements[i], vr, varg);
+                       if(!t) {
+                               asn1p_constraint_free(clone);
+                               return NULL;
+                       }
+                       if(asn1p_constraint_insert(clone, t)) {
+                               asn1p_constraint_free(clone);
+                               asn1p_constraint_free(t);
+                               return NULL;
+                       }
+               }
+               assert(clone->el_count == src->el_count);
+               clone->_lineno = src->_lineno;
+       }
+
+       return clone;
+}
+
+/*
+ * Make sure there's enough space to add an element.
+ */
+static int
+asn1p_constraint_make_memory(asn1p_constraint_t *ct) {
+       if(ct->el_count == ct->el_size) {
+               unsigned int newsize = ct->el_size ? ct->el_size << 2 : 4;
+               void *p;
+               p = realloc(ct->elements, newsize * sizeof(ct->elements[0]));
+               if(p) {
+                       ct->elements = p;
+                       ct->el_size = newsize;
+               } else {
+                       return -1;
+               }
+       }
+       return 0;
+}
+
+int
+asn1p_constraint_insert(asn1p_constraint_t *into, asn1p_constraint_t *what) {
+       assert(into);
+       assert(what);
+
+       if(asn1p_constraint_make_memory(into))
+               return -1;
+
+       into->elements[into->el_count++] = what;
+       what->parent_ct = into;
+
+       return 0;
+}
+
+int
+asn1p_constraint_prepend(asn1p_constraint_t *before, asn1p_constraint_t *what) {
+       assert(before);
+       assert(what);
+
+       if(asn1p_constraint_make_memory(before))
+               return -1;
+
+       memmove(&before->elements[1], &before->elements[0],
+               before->el_count * sizeof(before->elements[0]));
+
+       before->elements[0] = what;
+       before->el_count++;
+       what->parent_ct = before;
+
+       return 0;
+}
+
+
+const char *
+asn1p_constraint_type2str(enum asn1p_constraint_type_e type) {
+       switch(type) {
+       case ACT_INVALID:
+               return "INVALID";
+       case ACT_EL_TYPE:
+               return "ContainedSubtype";
+       case ACT_EL_VALUE:
+               return "SingleValue";
+       case ACT_EL_RANGE:
+       case ACT_EL_LLRANGE:
+       case ACT_EL_RLRANGE:
+       case ACT_EL_ULRANGE:
+               return "ValueRange";
+       case ACT_EL_EXT:
+               return "...";
+       case ACT_CT_SIZE:
+               return "SizeConstraint";
+       case ACT_CT_FROM:
+               return "PermittedAlphabet";
+       case ACT_CT_WCOMP:
+               return "SingleTypeConstraint";
+       case ACT_CT_WCOMPS:
+               return "MultipleTypeConstraints";
+       case ACT_CT_CTDBY:
+               return "UserDefinedConstraint";
+       case ACT_CT_CTNG:
+               return "ContentsConstraint";
+       case ACT_CT_PATTERN:
+               return "PatternConstraint";
+       case ACT_CA_SET:
+               return "SET";
+       case ACT_CA_CRC:
+               return "ComponentRelationConstraint";
+       case ACT_CA_CSV:
+               return "CSV";
+       case ACT_CA_UNI:
+               return "UNION";
+       case ACT_CA_INT:
+               return "INTERSECTION";
+       case ACT_CA_EXC:
+               return "EXCEPT";
+       case ACT_CA_AEX:
+               return "ALL EXCEPT";
+       }
+       return "UNKNOWN";
+}
+
+const asn1p_constraint_t *
+asn1p_get_component_relation_constraint(asn1p_constraint_t *ct) {
+    if(ct) {
+        if(ct->type == ACT_CA_CRC)
+            return ct;
+        if(ct->type == ACT_CA_SET) {
+            for(size_t i = 0; i < ct->el_count; i++) {
+                const asn1p_constraint_t *tmp =
+                    asn1p_get_component_relation_constraint(ct->elements[i]);
+                if(tmp) return tmp;
+            }
+        }
+    }
+    return NULL;
+}
+
diff --git a/libasn1parser/asn1p_constr.h b/libasn1parser/asn1p_constr.h
new file mode 100644 (file)
index 0000000..2351628
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Type constraints.
+ */
+#ifndef        ASN1_PARSER_CONSTRAINT_H
+#define        ASN1_PARSER_CONSTRAINT_H
+
+typedef struct asn1p_constraint_s {
+
+       enum asn1p_constraint_type_e {
+               ACT_INVALID,            /* for assertions */
+               /*
+                * Constraint elements.
+                */
+               ACT_EL_TYPE,            /* T (contained subtype) */
+               ACT_EL_VALUE,           /* 123, "A", (elementary value) */
+               ACT_EL_RANGE,           /* 1..2 (elementary range) */
+               ACT_EL_LLRANGE,         /* 1<..2 (elementary range) */
+               ACT_EL_RLRANGE,         /* 1..<2 (elementary range) */
+               ACT_EL_ULRANGE,         /* 1<..<2 (elementary range) */
+               ACT_EL_EXT,             /* ... (extensibility mark) */
+               /*
+                * Constraint types.
+                */
+               ACT_CT_SIZE,            /* SIZE constraint type */
+               ACT_CT_FROM,            /* FROM constraint type */
+               ACT_CT_WCOMP,           /* WITH COMPONENT */
+               ACT_CT_WCOMPS,          /* WITH COMPONENTS */
+               ACT_CT_CTDBY,           /* CONSTRAINED BY */
+               ACT_CT_CTNG,            /* CONTAINING Type */
+               ACT_CT_PATTERN,         /* PATTERN Value */
+               /*
+                * Arrays of constraints.
+                */
+               ACT_CA_SET,             /* A set of constraints: (c1)(c2) */
+               ACT_CA_CRC,             /* Comp. relation c-t: ({a}{@b}) */
+               ACT_CA_CSV,             /* Comma-separated constraints array */
+               ACT_CA_UNI,             /* UNION (|) */
+               ACT_CA_INT,             /* INTERSECTION (^) */
+               ACT_CA_EXC,             /* EXCEPT */
+               ACT_CA_AEX,             /* ALL EXCEPT */
+       } type;
+
+       enum asn1p_constr_pres_e {
+               ACPRES_DEFAULT,
+               ACPRES_PRESENT,
+               ACPRES_ABSENT,
+               ACPRES_OPTIONAL,
+       } presence;
+
+       struct asn1p_constraint_s *parent_ct;   /* optional */
+
+       /*
+        * Separate types and values.
+        */
+       asn1p_value_t *containedSubtype;
+       asn1p_value_t *value;
+       asn1p_value_t *range_start;
+       asn1p_value_t *range_stop;
+
+       /*
+        * A collection of constraint elements.
+        */
+       struct asn1p_constraint_s **elements;
+       unsigned int el_count;  /* Number of meaningful elements */
+       unsigned int el_size;   /* Size of the allocated (elements) */
+
+       struct asn1p_module_s *module;  /* Defined in module */
+       int _lineno;    /* Position in a source file */
+} asn1p_constraint_t;
+
+/* Human-readable constraint type description */
+const char *asn1p_constraint_type2str(enum asn1p_constraint_type_e);
+
+const asn1p_constraint_t *asn1p_get_component_relation_constraint(
+    asn1p_constraint_t *);
+
+int asn1p_constraint_compare(const asn1p_constraint_t *,
+                             const asn1p_constraint_t *);
+void asn1p_constraint_set_source(asn1p_constraint_t *,
+                                 struct asn1p_module_s *module, int lineno);
+
+/*
+ * Constructors and a recursive destructor.
+ */
+asn1p_constraint_t *asn1p_constraint_new(int _lineno, asn1p_module_t *mod);
+void asn1p_constraint_free(asn1p_constraint_t *);
+
+/*
+ * Clone the constraint and all its children.
+ */
+asn1p_constraint_t *asn1p_constraint_clone(asn1p_constraint_t *source_to_clone);
+asn1p_constraint_t *asn1p_constraint_clone_with_resolver(
+       asn1p_constraint_t *source_to_clone,
+       asn1p_value_t *(*resolver)(asn1p_value_t *, void *), void *);
+
+/*
+ * Insert additional element into the element array of a (to) constraint.
+ */
+int asn1p_constraint_insert(asn1p_constraint_t *into, asn1p_constraint_t *what);
+int asn1p_constraint_prepend(asn1p_constraint_t *before, asn1p_constraint_t *what);
+
+#endif /* ASN1_PARSER_CONSTRAINT_H */
diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c
new file mode 100644 (file)
index 0000000..807c081
--- /dev/null
@@ -0,0 +1,431 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+
+static asn1p_expr_t *asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*)(asn1p_expr_t *, void *), void *);
+static asn1p_value_t *value_resolver(asn1p_value_t *, void *arg);
+
+void
+asn1p_expr_set_source(asn1p_expr_t *expr, asn1p_module_t *module, int lineno) {
+    if(expr) {
+        expr->module = module;
+        expr->_lineno = lineno;
+        asn1p_ref_set_source(expr->reference, module, lineno);
+        asn1p_value_set_source(expr->value, module, lineno);
+        asn1p_constraint_set_source(expr->constraints, module, lineno);
+        asn1p_constraint_set_source(expr->combined_constraints, module, lineno);
+        asn1p_expr_set_source(expr->rhs_pspecs, module, lineno);
+
+        asn1p_expr_t *memb;
+
+        TQ_FOR(memb, &(expr->members), next) {
+            asn1p_expr_set_source(memb, module, lineno);
+        }
+    }
+}
+
+int
+asn1p_expr_compare(const asn1p_expr_t *a, const asn1p_expr_t *b) {
+    if((a && !b) || (!a && b)) {
+        return -1;
+    }
+
+    if(a->meta_type != b->meta_type || a->expr_type != b->expr_type) {
+        return -1;
+    }
+
+    if((!a->Identifier && b->Identifier) || (a->Identifier && !b->Identifier)) {
+        return -1;
+    } else if(a->Identifier && strcmp(a->Identifier, b->Identifier)) {
+        return -1;
+    }
+
+    if((!a->reference && b->reference) || (a->reference && !b->reference)) {
+        return -1;
+    } else if(a->reference
+              && asn1p_ref_compare(a->reference, b->reference) != 0) {
+        return -1;
+    }
+
+    if((!a->value && b->value) || (a->value && !b->value)) {
+        return -1;
+    } else if(a->value && asn1p_value_compare(a->value, b->value)) {
+        return -1;
+    }
+
+    if((!a->constraints && b->constraints) || (a->constraints && !b->constraints)) {
+        return -1;
+    } else if(a->constraints && asn1p_constraint_compare(a->constraints, b->constraints)) {
+        return -1;
+    }
+
+    if((a->tag.tag_class != b->tag.tag_class)
+       || (a->tag.tag_mode != b->tag.tag_mode)
+       || (a->tag.tag_value != b->tag.tag_value)) {
+        return -1;
+    }
+
+    if((a->marker.flags != b->marker.flags)
+       || (a->marker.default_value && !b->marker.default_value)
+       || (!a->marker.default_value && b->marker.default_value)
+       || (a->marker.default_value
+           && asn1p_value_compare(a->marker.default_value,
+                                  b->marker.default_value))) {
+        return -1;
+    }
+
+    if(a->unique != b->unique) {
+        return -1;
+    }
+
+    const asn1p_expr_t *am = TQ_FIRST(&a->members);
+    const asn1p_expr_t *bm = TQ_FIRST(&b->members);
+    for(; am || bm; am = TQ_NEXT(am, next), bm = TQ_NEXT(bm, next)) {
+        if((am && !bm) || (!am && bm)) {
+            return -1;
+        } else if(asn1p_expr_compare(am, bm) != 0) {
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+/*
+ * Construct a new empty types collection.
+ */
+asn1p_expr_t *
+asn1p_expr_new(int _lineno, asn1p_module_t *mod) {
+       asn1p_expr_t *expr;
+
+       expr = calloc(1, sizeof *expr);
+       if(expr) {
+               TQ_INIT(&(expr->members));
+               expr->spec_index = -1;
+               expr->module = mod;
+               expr->_lineno = _lineno;
+               expr->ref_cnt = 0;
+       }
+
+       return expr;
+}
+
+asn1p_expr_t *
+asn1p_expr_clone(asn1p_expr_t *expr, int skip_extensions) {
+       return asn1p_expr_clone_impl(expr, skip_extensions, 0, 0);
+}
+
+asn1p_expr_t *
+asn1p_expr_clone_with_resolver(asn1p_expr_t *expr, asn1p_expr_t *(*r)(asn1p_expr_t *, void *), void *rarg) {
+       return asn1p_expr_clone_impl(expr, 0, r, rarg);
+}
+
+static asn1p_expr_t *
+asn1p_expr_clone_impl(asn1p_expr_t *expr, int skip_extensions, asn1p_expr_t *(*r)(asn1p_expr_t *, void *), void *rarg) {
+       asn1p_value_t *(*vr)(asn1p_value_t *, void *) = 0;
+       asn1p_expr_t *clone = 0;
+       asn1p_expr_t *tcmemb;   /* Child of tc */
+       int hit_ext = 0;
+
+#define        CLCOPY(field)   do { clone->field = expr->field; } while(0)
+#define        CLCLONE(field, func)    do { if(expr->field) {                  \
+                       clone->field = func(expr->field);               \
+                       if(clone->field == NULL) {                      \
+                               asn1p_expr_free(clone);                 \
+                               return NULL;                            \
+                       }                                               \
+               } } while(0)
+#define        CLVRCLONE(field, func)  do { if(expr->field) {                  \
+                       clone->field = func(expr->field, vr, rarg);     \
+                       if(clone->field == NULL) {                      \
+                               asn1p_expr_free(clone);                 \
+                               return NULL;                            \
+                       }                                               \
+               } } while(0)
+
+       if(r) {
+               vr = value_resolver;
+               clone = r(expr, rarg);
+               if(clone) {
+                       /* Merge constraints */
+                       if(expr->constraints) {
+                               asn1p_constraint_t *tmpct = asn1p_constraint_clone_with_resolver(expr->constraints, vr, rarg);
+                               if(clone->constraints) {
+                                       if(asn1p_constraint_insert(clone->constraints, tmpct)) {
+                                               asn1p_constraint_free(tmpct);
+                                               asn1p_expr_free(clone);
+                                               return NULL;
+                                       }
+                               } else {
+                                       clone->constraints = tmpct;
+                               }
+                               assert(expr->combined_constraints == 0);
+                       }
+                       /* Merge defaults */
+                       CLCOPY(marker.flags);
+                       CLVRCLONE(marker.default_value,
+                               asn1p_value_clone_with_resolver);
+                       if(clone->tag.tag_class == TC_NOCLASS) {
+                               CLCOPY(tag);
+                       } else if(expr->tag.tag_class != TC_NOCLASS) {
+                               fprintf(stderr, "asn1c does not support "
+                                       "nested tagging in parameterization, "
+                                       "necessary at line %d\n",
+                                       expr->_lineno);
+                               asn1p_expr_free(clone);
+                               return NULL;
+                       }
+                       return clone;
+               } else if(errno != ESRCH) {
+                       return NULL;    /* Hard error */
+               }
+       }
+       if(!clone) clone = asn1p_expr_new(expr->_lineno, expr->module);
+       if(!clone) return NULL;
+
+       /*
+        * Copy simple fields.
+        */
+       CLCOPY(meta_type);
+       CLCOPY(expr_type);
+       CLCOPY(tag);
+       CLCOPY(marker.flags);           /* OPTIONAL/DEFAULT */
+       CLCOPY(_mark);
+       CLCOPY(parent_expr);
+       CLCOPY(_type_unique_index);
+
+       clone->data = 0;        /* Do not clone this */
+       clone->data_free = 0;   /* Do not clone this */
+
+       /*
+        * Clone complex fields.
+        */
+       CLCLONE(Identifier, strdup);
+       CLCLONE(reference, asn1p_ref_clone);
+       CLVRCLONE(constraints, asn1p_constraint_clone_with_resolver);
+       CLVRCLONE(combined_constraints, asn1p_constraint_clone_with_resolver);
+       CLCLONE(lhs_params, asn1p_paramlist_clone);
+       CLVRCLONE(value, asn1p_value_clone_with_resolver);
+       CLVRCLONE(marker.default_value, asn1p_value_clone_with_resolver);
+       CLCLONE(with_syntax, asn1p_wsyntx_clone);
+
+       /*
+        * Copy all the children of this expr.
+        */
+       TQ_FOR(tcmemb, &(expr->members), next) {
+               asn1p_expr_t *cmemb;
+
+               if(skip_extensions
+               && tcmemb->expr_type == A1TC_EXTENSIBLE) {
+                       hit_ext++; /* Even if hit_ext wraps around, we're OK. */
+                       continue;
+               }
+               if(hit_ext == 1) continue;      /* Skip between ...'s */
+
+               cmemb = asn1p_expr_clone_impl(tcmemb, skip_extensions, r, rarg);
+               if(cmemb == NULL) {
+                       asn1p_expr_free(clone);
+                       return NULL;
+               }
+               asn1p_expr_add(clone, cmemb);
+       }
+
+       return clone;
+}
+
+
+static asn1p_value_t *
+value_resolver(asn1p_value_t *value, void *rarg) {
+       asn1p_value_t *cval;
+       asn1p_expr_t *tmpexpr;
+       asn1p_expr_t *target;
+       asn1p_ref_t *ref;
+       struct {
+               asn1p_expr_t *(*expr_resolve)(asn1p_expr_t *, void *arg);
+       } *varg = rarg;
+
+       if(!value || value->type != ATV_REFERENCED) {
+               errno = ESRCH;
+               return NULL;
+       }
+
+       ref = value->value.reference;
+       tmpexpr = asn1p_expr_new(ref->_lineno, 0);
+       tmpexpr->meta_type = AMT_TYPEREF;
+       tmpexpr->expr_type = A1TC_REFERENCE;
+       tmpexpr->reference = ref;
+       target = varg->expr_resolve(tmpexpr, rarg);
+       tmpexpr->reference = 0;
+       asn1p_expr_free(tmpexpr);
+
+       if(!target)
+               return NULL;    /* errno's are compatible */
+
+       if(target->meta_type == AMT_VALUE) {
+               if(!target->value) {
+                       fprintf(stderr,
+                       "FATAL: Parameterization did not resolve "
+                       "value reference at line %d\n", ref->_lineno);
+                       asn1p_expr_free(target);
+                       errno = EPERM;
+                       return NULL;
+               }
+               cval = asn1p_value_clone(target->value);
+       } else if(target->meta_type == AMT_VALUESET) {
+               if(!target->constraints) {
+                       fprintf(stderr,
+                       "FATAL: Parameterization did not resolve "
+                       "value set reference at line %d\n", ref->_lineno);
+                       asn1p_expr_free(target);
+                       errno = EPERM;
+                       return NULL;
+               }
+               cval = asn1p_value_fromconstr(target->constraints, 1);
+       } else {
+               errno = EPERM;
+               cval = NULL;
+       }
+
+       asn1p_expr_free(target);
+       return cval;
+}
+
+/*
+ * Add expression as a member of another.
+ */
+void
+asn1p_expr_add(asn1p_expr_t *to, asn1p_expr_t *what) {
+       TQ_ADD(&(to->members), what, next);
+       what->parent_expr = to;
+}
+
+/*
+ * Add inner expressions as members of another.
+ */
+void
+asn1p_expr_add_many(asn1p_expr_t *to, asn1p_expr_t *from_what) {
+       asn1p_expr_t *expr;
+       TQ_FOR(expr, &(from_what->members), next) {
+               expr->parent_expr = to;
+       }
+       TQ_CONCAT(&(to->members), &(from_what->members), next);
+}
+
+/*
+ * Lookup a child by its name.
+ */
+asn1p_expr_t *
+asn1p_lookup_child(asn1p_expr_t *tc, const char *name) {
+       asn1p_expr_t *child_tc;
+
+       TQ_FOR(child_tc, &(tc->members), next) {
+               if(child_tc->Identifier
+               && strcmp(child_tc->Identifier, name) == 0) {
+                       return child_tc;
+               }
+       }
+
+       errno = ESRCH;
+       return NULL;
+}
+
+/*
+ * Destruct the types collection structure.
+ */
+void
+asn1p_expr_free(asn1p_expr_t *expr) {
+       if(expr) {
+               asn1p_expr_t *tm;
+
+               if (expr->ref_cnt) {
+                       /* Decrease reference count only */
+                       expr->ref_cnt--;
+                       return;
+               }
+
+               /* Remove all children */
+               while((tm = TQ_REMOVE(&(expr->members), next))) {
+                       if(tm->parent_expr != expr)
+                               printf("<%s:%p !-> %s:%p>\n",
+                                       tm->Identifier, tm->parent_expr,
+                                       expr->Identifier, expr);
+                       assert(tm->parent_expr == expr);
+                       asn1p_expr_free(tm);
+               }
+
+               free(expr->Identifier);
+               asn1p_ref_free(expr->reference);
+               asn1p_constraint_free(expr->constraints);
+               asn1p_constraint_free(expr->combined_constraints);
+               asn1p_paramlist_free(expr->lhs_params);
+               asn1p_expr_free(expr->rhs_pspecs);
+               asn1p_value_free(expr->value);
+               asn1p_value_free(expr->marker.default_value);
+               asn1p_wsyntx_free(expr->with_syntax);
+               if(expr->specializations.pspec) {
+                       int pspec;
+                       for(pspec = 0; pspec < expr->specializations.pspecs_count; pspec++) {
+                               asn1p_expr_free(expr->specializations.pspec[pspec].rhs_pspecs);
+                               asn1p_expr_free(expr->specializations.pspec[pspec].my_clone);
+                       }
+                       free(expr->specializations.pspec);
+               }
+               asn1p_ioc_table_free(expr->ioc_table);
+
+               if(expr->data && expr->data_free)
+                       expr->data_free(expr->data);
+
+               memset(expr, 0, sizeof(*expr));
+               free(expr);
+       }
+}
+
+
+const char *asn1p_tag2string(const struct asn1p_type_tag_s *tag, char *buf) {
+       static char buf_stat[TAG2STRING_BUFFER_SIZE];
+       char *start;
+       char *end;
+
+       if(!buf) buf = buf_stat;
+       start = buf;
+       end = buf + TAG2STRING_BUFFER_SIZE;
+
+       if(tag->tag_class == TC_NOCLASS) {
+               *buf = 0;
+               return buf;
+       }
+
+       strcpy(buf, "[");
+       switch(tag->tag_class) {
+       case TC_NOCLASS:
+               assert(tag->tag_class != TC_NOCLASS);
+               break;
+       case TC_UNIVERSAL:      strcat(buf, "UNIVERSAL ");      break;
+       case TC_PRIVATE:        strcat(buf, "PRIVATE ");        break;
+       case TC_APPLICATION:    strcat(buf, "APPLICATION ");    break;
+       case TC_CONTEXT_SPECIFIC:
+               break;
+       }
+       buf += snprintf(buf + strlen(buf), end - buf,
+               "%s]", asn1p_itoa(tag->tag_value));
+       assert((unsigned int)(buf - end) > sizeof(" IMPLICIT "));
+
+       switch(tag->tag_mode) {
+       case TM_DEFAULT: break;
+       case TM_IMPLICIT: strcat(buf, " IMPLICIT"); break;
+       case TM_EXPLICIT: strcat(buf, " EXPLICIT"); break;
+       }
+
+       return start;
+}
+
+asn1p_paramlist_t *
+asn1p_get_namespace(asn1p_expr_t *expr) {
+    if(!expr) return NULL;
+    if(expr->lhs_params) return expr->lhs_params;
+    return asn1p_get_namespace(expr->parent_expr);
+}
diff --git a/libasn1parser/asn1p_expr.h b/libasn1parser/asn1p_expr.h
new file mode 100644 (file)
index 0000000..0628a8d
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * A collection of data members of unspecified types.
+ */
+#ifndef        ASN1_PARSER_EXPR_H
+#define        ASN1_PARSER_EXPR_H
+
+/*
+ * Meta type of the ASN expression.
+ */
+typedef enum asn1p_expr_meta {
+       AMT_INVALID,
+       AMT_TYPE,               /* Type1 ::= INTEGER */
+       AMT_TYPEREF,            /* Type2 ::= Type1 */
+       AMT_VALUE,              /* value1 Type1 ::= 1 */
+       AMT_VALUESET,           /* ValueSet Type1 ::= { value1 } */
+       AMT_OBJECT,             /* object CLASS ::= {...} */
+       AMT_OBJECTCLASS,        /* FUNCTION ::= CLASS {...} */
+       AMT_OBJECTFIELD,        /* ... */
+       AMT_EXPR_META_MAX
+} asn1p_expr_meta_e;
+
+/*
+ * ASN type of the expression.
+ */
+typedef enum asn1p_expr_type {
+       /*
+        * Internal types.
+        */
+       A1TC_INVALID,           /* Invalid type */
+       A1TC_REFERENCE,         /* Reference to the type defined elsewhere */
+       A1TC_EXPORTVAR,         /* We're exporting this definition */
+       A1TC_UNIVERVAL,         /* A value of an ENUMERATED, INTEGER or BS */
+       A1TC_BITVECTOR,         /* A plain collection of bits */
+       A1TC_OPAQUE,            /* Opaque data encoded as a bitvector */
+       A1TC_EXTENSIBLE,        /* An extension marker "..." */
+       A1TC_COMPONENTS_OF,     /* COMPONENTS OF clause */
+       A1TC_VALUESET,          /* Value set definition */
+       A1TC_CLASSDEF,          /* Information Object Class */
+       A1TC_INSTANCE,          /* Instance of Object Class */
+
+       /*
+        * ASN.1 Class field types
+        */
+#define        ASN_CLASSFIELD_MASK     0x10    /* Every class field type */
+       A1TC_CLASSFIELD_TFS     = ASN_CLASSFIELD_MASK,  /* TypeFieldSpec */
+       A1TC_CLASSFIELD_FTVFS,          /* FixedTypeValueFieldSpec */
+       A1TC_CLASSFIELD_VTVFS,          /* VariableTypeValueFieldSpec */
+       A1TC_CLASSFIELD_FTVSFS,         /* FixedTypeValueSetFieldSpec */
+       A1TC_CLASSFIELD_VTVSFS,         /* VariableTypeValueSetFieldSpec */
+       A1TC_CLASSFIELD_OFS,            /* ObjectFieldSpec */
+       A1TC_CLASSFIELD_OSFS,           /* ObjectSetFieldSpec */
+
+       /*
+        * ASN.1 Constructed types
+        */
+#define        ASN_CONSTR_MASK         0x20    /* Every constructed type */
+       ASN_CONSTR_SEQUENCE     = ASN_CONSTR_MASK,      /* SEQUENCE */
+       ASN_CONSTR_CHOICE,              /* CHOICE */
+       ASN_CONSTR_SET,                 /* SET */
+       ASN_CONSTR_SEQUENCE_OF,         /* SEQUENCE OF */
+       ASN_CONSTR_SET_OF,              /* SET OF */
+       ASN_CONSTR_OPEN_TYPE,
+
+       /*
+        * ASN.1 Basic types
+        */
+#define        ASN_BASIC_MASK          0x40    /* Every basic type */
+       ASN_TYPE_ANY            = ASN_BASIC_MASK,       /* ANY (deprecated) */
+       ASN_BASIC_BOOLEAN,
+       ASN_BASIC_NULL,
+       ASN_BASIC_INTEGER,
+       ASN_BASIC_REAL,
+       ASN_BASIC_ENUMERATED,
+       ASN_BASIC_BIT_STRING,
+       ASN_BASIC_OCTET_STRING,
+       ASN_BASIC_OBJECT_IDENTIFIER,
+       ASN_BASIC_RELATIVE_OID,
+       ASN_BASIC_EXTERNAL,
+       ASN_BASIC_EMBEDDED_PDV,
+       ASN_BASIC_CHARACTER_STRING,
+       ASN_BASIC_UTCTime,
+       ASN_BASIC_GeneralizedTime,
+
+       /*
+        * ASN.1 String types
+        */
+#define        ASN_STRING_KM_MASK      0x100   /* Known multiplier */
+#define        ASN_STRING_NKM_MASK     0x200   /* Not a known multiplier */
+#define        ASN_STRING_MASK         0x300   /* Every restricted string type */
+       ASN_STRING_IA5String    = ASN_STRING_KM_MASK,
+       ASN_STRING_PrintableString,
+       ASN_STRING_VisibleString,
+       ASN_STRING_ISO646String,        /* aka VisibleString */
+       ASN_STRING_NumericString,
+       ASN_STRING_UniversalString,
+       ASN_STRING_BMPString,
+       ASN_STRING_UTF8String   = ASN_STRING_NKM_MASK,
+       ASN_STRING_GeneralString,
+       ASN_STRING_GraphicString,
+       ASN_STRING_TeletexString,
+       ASN_STRING_T61String,
+       ASN_STRING_VideotexString,
+       ASN_STRING_ObjectDescriptor,
+       ASN_EXPR_TYPE_MAX
+} asn1p_expr_type_e;
+
+#include "asn1p_expr_str.h"
+#include "asn1p_expr2uclass.h"
+
+struct asn1p_module_s; /* Forward declaration */
+struct asn1p_ioc_table_s;      /* Forward declaration */
+
+/*
+ * A named collection of types.
+ */
+typedef struct asn1p_expr_s {
+
+       /*
+        * Human readable name.
+        */
+       char *Identifier;
+
+       /*
+        * Meta type of the expression (type, value, value set, etc).
+        */
+       asn1p_expr_meta_e meta_type;
+
+       /*
+        * ASN type of the expression.
+        */
+       asn1p_expr_type_e expr_type;
+
+       /*
+        * Referenced type, defined elsewhere.
+        * (If expr_type == A1TC_REFERENCE)
+        */
+       asn1p_ref_t     *reference;
+
+       /*
+        * Constraints for the type.
+        */
+       asn1p_constraint_t *constraints;
+
+       /*
+        * This field is holding the transformed constraints, with all the
+        * parent constraints taken into account.
+        */
+       asn1p_constraint_t *combined_constraints;
+
+       /*
+        * Left hand side parameters for parametrized type declaration
+        * Type{Param1, Param2} ::= SEQUENCE { a Param1, b Param2 }
+        */
+       asn1p_paramlist_t *lhs_params;
+       /*
+        * Right hand type specialization.
+        * Type2 ::= Type{Param1}
+        */
+       struct asn1p_expr_s *rhs_pspecs;        /* ->members */
+       /*
+        * If lhs_params is defined, this structure represents all possible
+        * specializations of the parent expression.
+        */
+       struct {
+               struct asn1p_pspec_s {
+                       struct asn1p_expr_s *rhs_pspecs;
+                       struct asn1p_expr_s *my_clone;
+               } *pspec;
+               int pspecs_count;       /* Number of specializations */
+       } specializations;
+       int spec_index; /* -1, or 0-based specialization index in the parent */
+
+       /*
+        * The actual value (DefinedValue or inlined value).
+        */
+       asn1p_value_t *value;
+
+       /*
+        * The WITH SYNTAX clause.
+        */
+       asn1p_wsyntx_t *with_syntax;
+
+       /* Information Object Class table, specific for a class or object set */
+    struct asn1p_ioc_table_s *ioc_table;
+
+       /*
+        * A tag.
+        */
+       struct asn1p_type_tag_s {
+               enum {
+                       TC_NOCLASS,
+                       TC_UNIVERSAL,
+                       TC_APPLICATION,
+                       TC_CONTEXT_SPECIFIC,
+                       TC_PRIVATE,
+               } tag_class;
+               enum {
+                       TM_DEFAULT,
+                       TM_IMPLICIT,
+                       TM_EXPLICIT,
+               } tag_mode;
+               asn1c_integer_t tag_value;
+       } tag;
+
+       struct asn1p_expr_marker_s {
+               enum asn1p_expr_marker_e {
+                 EM_NOMARK,
+                 EM_INDIRECT   = 0x01, /* 00001 Represent as pointer */
+                 EM_OMITABLE   = 0x02, /* 00010 May be absent in encoding */
+                 EM_OPTIONAL   = 0x07, /* 00111 Optional member */
+                 EM_DEFAULT    = 0x0F, /* 01111 default_value */
+                 EM_UNRECURSE  = 0x10, /* 10000 Use safe naming */
+               } flags;
+               asn1p_value_t *default_value;   /* For EM_DEFAULT case */
+       } marker;
+       int unique;     /* UNIQUE */
+       int ref_cnt;    /* reference count */
+
+       /*
+        * Whether automatic tagging may be applied for subtypes.
+        */
+       int auto_tags_OK;
+
+       /*
+        * Members of the constructed type.
+        */
+       TQ_HEAD(struct asn1p_expr_s)    members;
+
+       /*
+        * Next expression in the list.
+        */
+       TQ_ENTRY(struct asn1p_expr_s)   next;
+
+       struct asn1p_expr_s *parent_expr;       /* optional */
+
+       struct asn1p_module_s *module;  /* Defined in module */
+
+       /*
+        * Line number where this structure is defined in the original
+        * grammar source.
+        */
+       int _lineno;
+
+       /*
+        * Marks are used for various purposes.
+        * Here are some predefined ones.
+        */
+       enum {
+         TM_NOMARK     = 0,
+         TM_RECURSION  = (1<<0), /* Used to break recursion */
+         TM_BROKEN     = (1<<1), /* A warning was already issued */
+         TM_PERFROMCT  = (1<<2), /* PER FROM() constraint tables emitted */
+         TM_NAMECLASH  = (1<<3), /* Name clash found, need to add module name to resolve */
+         TM_NAMEGIVEN  = (1<<4)  /* The expression has already yielded a name */
+       } _mark;
+
+       /*
+        * Some tags used by the compiler.
+        */
+       int _anonymous_type;    /* This type is unnamed */
+       int _type_unique_index; /* A per top-level-type unique index */
+       int _type_referenced;   /* This type is referenced from another place */
+
+       /*
+        * Opaque data may be attached to this structure,
+        * probably by compiler.
+        */
+       void *data;
+       void (*data_free)(void *data);
+} asn1p_expr_t;
+
+
+/*
+ * Constructor and destructor.
+ */
+asn1p_expr_t *asn1p_expr_new(int _lineno, struct asn1p_module_s *);
+asn1p_expr_t *asn1p_expr_clone(asn1p_expr_t *, int skip_extensions);
+asn1p_expr_t *asn1p_expr_clone_with_resolver(asn1p_expr_t *,
+       asn1p_expr_t *(*resolver)(asn1p_expr_t *to_resolve, void *resolver_arg),
+       void *resolver_arg);
+void asn1p_expr_add(asn1p_expr_t *to, asn1p_expr_t *what);
+void asn1p_expr_add_many(asn1p_expr_t *to, asn1p_expr_t *from_what);
+asn1p_expr_t *asn1p_lookup_child(asn1p_expr_t *tc, const char *name);
+int asn1p_expr_compare(const asn1p_expr_t *, const asn1p_expr_t *);
+void asn1p_expr_free(asn1p_expr_t *expr);
+void asn1p_expr_set_source(asn1p_expr_t *, asn1p_module_t *, int lineno);
+
+asn1p_paramlist_t *asn1p_get_namespace(asn1p_expr_t *);
+
+#define        TAG2STRING_BUFFER_SIZE  64      /* buf should be at least this big */
+const char *asn1p_tag2string(const struct asn1p_type_tag_s *tag, char *opt_buf);
+
+#define MODULE_NAME_OF(expr) \
+               ((!expr) ? "" : \
+                       (!(expr->_mark & TM_NAMECLASH) ? "" : \
+                               (!expr->module ? "" : expr->module->ModuleName))), \
+               ((!expr) ? "" : \
+                       (!(expr->_mark & TM_NAMECLASH) ? "" : "_"))
+
+#endif /* ASN1_PARSER_EXPR_H */
diff --git a/libasn1parser/asn1p_expr2uclass.h b/libasn1parser/asn1p_expr2uclass.h
new file mode 100644 (file)
index 0000000..1fb6dbb
--- /dev/null
@@ -0,0 +1,92 @@
+#ifndef        ASN1_PARSER_EXPR2UCLASS_H
+#define        ASN1_PARSER_EXPR2UCLASS_H
+
+#ifndef        __GNUC__
+#define        __attribute__(x)        /* unused */
+#endif
+
+static int expr_type2uclass_value[ASN_EXPR_TYPE_MAX]
+               __attribute__ ((unused)) = {
+       [ ASN_BASIC_BOOLEAN ]           = 1,
+       [ ASN_BASIC_INTEGER ]           = 2,
+       [ ASN_BASIC_BIT_STRING ]        = 3,
+       [ ASN_BASIC_OCTET_STRING ]      = 4,
+       [ ASN_BASIC_NULL ]              = 5,
+       [ ASN_BASIC_OBJECT_IDENTIFIER ] = 6,
+       [ ASN_STRING_ObjectDescriptor ] = 7,
+       [ ASN_BASIC_EXTERNAL ]          = 8,
+       [ ASN_BASIC_REAL ]              = 9,
+       [ ASN_BASIC_ENUMERATED ]        = 10,
+       [ ASN_BASIC_EMBEDDED_PDV ]      = 11,
+       [ ASN_STRING_UTF8String ]       = 12,
+       [ ASN_BASIC_RELATIVE_OID ]      = 13,
+       [ ASN_CONSTR_SEQUENCE ]         = 16,
+       [ ASN_CONSTR_SEQUENCE_OF ]      = 16,
+       [ ASN_CONSTR_SET ]              = 17,
+       [ ASN_CONSTR_SET_OF ]           = 17,
+       [ ASN_STRING_NumericString ]    = 18,
+       [ ASN_STRING_PrintableString ]  = 19,
+       [ ASN_STRING_TeletexString ]    = 20,
+       [ ASN_STRING_T61String ]        = 20,
+       [ ASN_STRING_VideotexString ]   = 21,
+       [ ASN_STRING_IA5String ]        = 22,
+       [ ASN_BASIC_UTCTime ]           = 23,
+       [ ASN_BASIC_GeneralizedTime ]   = 24,
+       [ ASN_STRING_GraphicString ]    = 25,
+       [ ASN_STRING_VisibleString ]    = 26,
+       [ ASN_STRING_ISO646String ]     = 26,
+       [ ASN_STRING_GeneralString ]    = 27,
+       [ ASN_STRING_UniversalString ]  = 28,
+       [ ASN_BASIC_CHARACTER_STRING ]  = 29,
+       [ ASN_STRING_BMPString ]        = 30,
+};
+
+static enum asn1p_expr_type expr_utag2type[32] __attribute__ ((unused)) = {
+       [ 0 ]   = 0,                    /* If zero length, end-of-content */
+       [ 1 ]   = ASN_BASIC_BOOLEAN,
+       [ 2 ]   = ASN_BASIC_INTEGER,
+       [ 3 ]   = ASN_BASIC_BIT_STRING,
+       [ 4 ]   = ASN_BASIC_OCTET_STRING,
+       [ 5 ]   = ASN_BASIC_NULL,
+       [ 6 ]   = ASN_BASIC_OBJECT_IDENTIFIER,
+       [ 7 ]   = ASN_STRING_ObjectDescriptor,
+       [ 8 ]   = ASN_BASIC_EXTERNAL,
+       [ 9 ]   = ASN_BASIC_REAL,
+       [ 10 ]  = ASN_BASIC_ENUMERATED,
+       [ 11 ]  = ASN_BASIC_EMBEDDED_PDV,
+       [ 12 ]  = ASN_STRING_UTF8String,
+       [ 13 ]  = ASN_BASIC_RELATIVE_OID,
+       [ 14 ]  = 0,
+       [ 15 ]  = 0,
+       [ 16 ]  = ASN_CONSTR_SEQUENCE,          /* Or SEQUENCE OF */
+       [ 17 ]  = ASN_CONSTR_SET,               /* Or SET OF */
+       [ 18 ]  = ASN_STRING_NumericString,     /* " "|"0".."9" */
+       [ 19 ]  = ASN_STRING_PrintableString,
+       [ 20 ]  = ASN_STRING_TeletexString,
+       [ 21 ]  = ASN_STRING_VideotexString,
+       [ 22 ]  = ASN_STRING_IA5String,
+       [ 23 ]  = ASN_BASIC_UTCTime,
+       [ 24 ]  = ASN_BASIC_GeneralizedTime,
+       [ 25 ]  = ASN_STRING_GraphicString,
+       [ 26 ]  = ASN_STRING_VisibleString,
+       [ 27 ]  = ASN_STRING_GeneralString,
+       [ 28 ]  = ASN_STRING_UniversalString,   /* 32-bit UCS-4 */
+       [ 29 ]  = ASN_BASIC_CHARACTER_STRING,
+       [ 30 ]  = ASN_STRING_BMPString,         /* 16-bit UCS-2 */
+};
+
+/*
+ * Convert the [UNIVERSAL value] into the internal type or a string.
+ */
+#define        ASN_UNIVERSAL_TAG2TYPE(utag)                                    \
+       (                                                               \
+       (((int)(utag)) < 0                                              \
+       || ((int)(utag)) >= (int)(sizeof(expr_utag2type)                \
+               / sizeof(expr_utag2type[0])))                           \
+               ? 0                                                     \
+               : expr_utag2type[(int)(utag)]                           \
+       )
+#define        ASN_UNIVERSAL_TAG2STR(utag)                                     \
+       ASN_EXPR_TYPE2STR(ASN_UNIVERSAL_TAG2TYPE(utag))
+
+#endif /* ASN1_PARSER_EXPR2UCLASS_H */
diff --git a/libasn1parser/asn1p_expr_str.h b/libasn1parser/asn1p_expr_str.h
new file mode 100644 (file)
index 0000000..065766e
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * This file is automatically generated by ./expr-h.pl
+ * DO NOT EDIT MANUALLY, fix the ./expr-h.pl instead if necessary.
+ */
+#ifndef        ASN1_PARSER_EXPR_STR_H
+#define        ASN1_PARSER_EXPR_STR_H
+
+#include <assert.h>
+
+#ifndef        __GNUC__
+#define        __attribute__(x)        /* unused */
+#endif
+
+static char *asn1p_expr_type2str[] __attribute__ ((unused)) = {
+       [ ASN_CONSTR_SEQUENCE ]  = "SEQUENCE",
+       [ ASN_CONSTR_CHOICE ]    = "CHOICE",
+       [ ASN_CONSTR_SET ]       = "SET",
+       [ ASN_CONSTR_SEQUENCE_OF ]       = "SEQUENCE OF",
+       [ ASN_CONSTR_SET_OF ]    = "SET OF",
+       [ ASN_CONSTR_OPEN_TYPE ]         = "OPEN TYPE",
+       [ ASN_TYPE_ANY ]         = "ANY",
+       [ ASN_BASIC_BOOLEAN ]    = "BOOLEAN",
+       [ ASN_BASIC_NULL ]       = "NULL",
+       [ ASN_BASIC_INTEGER ]    = "INTEGER",
+       [ ASN_BASIC_REAL ]       = "REAL",
+       [ ASN_BASIC_ENUMERATED ]         = "ENUMERATED",
+       [ ASN_BASIC_BIT_STRING ]         = "BIT STRING",
+       [ ASN_BASIC_OCTET_STRING ]       = "OCTET STRING",
+       [ ASN_BASIC_OBJECT_IDENTIFIER ]  = "OBJECT IDENTIFIER",
+       [ ASN_BASIC_RELATIVE_OID ]       = "RELATIVE-OID",
+       [ ASN_BASIC_EXTERNAL ]   = "EXTERNAL",
+       [ ASN_BASIC_EMBEDDED_PDV ]       = "EMBEDDED PDV",
+       [ ASN_BASIC_CHARACTER_STRING ]   = "CHARACTER STRING",
+       [ ASN_BASIC_UTCTime ]    = "UTCTime",
+       [ ASN_BASIC_GeneralizedTime ]    = "GeneralizedTime",
+       [ ASN_STRING_IA5String ]         = "IA5String",
+       [ ASN_STRING_PrintableString ]   = "PrintableString",
+       [ ASN_STRING_VisibleString ]     = "VisibleString",
+       [ ASN_STRING_ISO646String ]      = "ISO646String",
+       [ ASN_STRING_NumericString ]     = "NumericString",
+       [ ASN_STRING_UniversalString ]   = "UniversalString",
+       [ ASN_STRING_BMPString ]         = "BMPString",
+       [ ASN_STRING_UTF8String ]        = "UTF8String",
+       [ ASN_STRING_GeneralString ]     = "GeneralString",
+       [ ASN_STRING_GraphicString ]     = "GraphicString",
+       [ ASN_STRING_TeletexString ]     = "TeletexString",
+       [ ASN_STRING_T61String ]         = "T61String",
+       [ ASN_STRING_VideotexString ]    = "VideotexString",
+       [ ASN_STRING_ObjectDescriptor ]  = "ObjectDescriptor",
+};
+
+/*
+ * Convert the ASN.1 expression type back into the string representation.
+ */
+#define ASN_EXPR_TYPE2STR(type) _asn1p_expr_type2string(type)
+
+static inline char * __attribute__((unused))
+_asn1p_expr_type2string(asn1p_expr_type_e type) {
+    assert((signed int)type >= 0);
+    if(type < sizeof(asn1p_expr_type2str)/sizeof(asn1p_expr_type2str[0]))
+        return asn1p_expr_type2str[type];
+    return NULL;
+}
+
+#endif /* ASN1_PARSER_EXPR_STR_H */
diff --git a/libasn1parser/asn1p_integer.c b/libasn1parser/asn1p_integer.c
new file mode 100644 (file)
index 0000000..64d39db
--- /dev/null
@@ -0,0 +1,188 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "asn1p_integer.h"
+
+#define ASN_INTEGER_MAX    \
+    (~((asn1c_integer_t)0) \
+     & ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)))
+#define ASN_INTEGER_MIN (-(ASN_INTEGER_MAX)-1)
+
+/*
+ * Parse the number in the given string until the given *end position,
+ * returning the position after the last parsed character back using the
+ * same (*end) pointer.
+ * WARNING: This behavior is different from the standard strtol/strtoimax(3).
+ */
+enum strtox_result_e {
+    STRTOX_ERROR_RANGE = -3, /* Input outside of supported numeric range */
+    STRTOX_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */
+    STRTOX_EXPECT_MORE = -1, /* More data expected (e.g. "+") */
+    STRTOX_OK = 0,           /* Conversion succeded, number ends at (*end) */
+    STRTOX_EXTRA_DATA =
+        1 /* Conversion succeded, but the string has extra stuff */
+};
+
+static enum strtox_result_e
+strtoaint_lim(const char *str, const char **end, asn1c_integer_t *intp) {
+       const asn1c_integer_t upper_boundary = ASN_INTEGER_MAX / 10;
+       int last_digit_max = ASN_INTEGER_MAX % 10;
+       int sign = 1;
+       asn1c_integer_t value;
+
+       if(str >= *end) return STRTOX_ERROR_INVAL;
+
+       switch(*str) {
+       case '-':
+               last_digit_max++;
+               sign = -1;
+               /* FALL THROUGH */
+       case '+':
+               str++;
+               if(str >= *end) {
+                       *end = str;
+                       return STRTOX_EXPECT_MORE;
+               }
+       }
+
+       for(value = 0; str < (*end); str++) {
+               switch(*str) {
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: {
+                       int d = *str - '0';
+                       if(value < upper_boundary) {
+                               value = value * 10 + d;
+                       } else if(value == upper_boundary) {
+                               if(d <= last_digit_max) {
+                                       if(sign > 0) {
+                                               value = value * 10 + d;
+                                       } else {
+                                               sign = 1;
+                                               value = -value * 10 - d;
+                                       }
+                               } else {
+                                       *end = str;
+                                       return STRTOX_ERROR_RANGE;
+                               }
+                       } else {
+                               *end = str;
+                               return STRTOX_ERROR_RANGE;
+                       }
+                   }
+                   continue;
+               default:
+                   *end = str;
+                   *intp = sign * value;
+                   return STRTOX_EXTRA_DATA;
+               }
+       }
+
+       *end = str;
+       *intp = sign * value;
+       return STRTOX_OK;
+}
+
+int
+asn1p_atoi(const char *ptr, asn1c_integer_t *value) {
+    const char *end = ptr + strlen(ptr);
+    if(strtoaint_lim(ptr, &end, value) == STRTOX_OK) {
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+const char *asn1p_itoa(asn1c_integer_t v) {
+    static char static_buf[128];
+    int ret = asn1p_itoa_s(static_buf, sizeof(static_buf), v);
+    if(ret > 0) {
+        assert((size_t)ret < sizeof(static_buf));
+        return static_buf;
+    } else {
+        return NULL;
+    }
+}
+
+int asn1p_itoa_s(char *buf, size_t size, asn1c_integer_t v) {
+    char tmp_buf[128];
+
+    if(v >= LONG_MIN && v < LONG_MAX) {
+        int ret = snprintf(buf, size, "%ld", (long)v);
+        if(ret < 0 || (size_t)ret >= size) {
+            return -1;
+        }
+        return ret;
+    }
+
+    int sign = 0;
+    if(v < 0) {
+        if(v == ASN_INTEGER_MIN) {
+            switch(sizeof(v)) {
+            case 16:
+                if(size < 41)
+                    return -1;
+                memcpy(buf, "-170141183460469231731687303715884105729", 41);
+                return 41;
+            case 8:
+                if(size < 21)
+                    return -1;
+                memcpy(buf, "-9223372036854775809", 21);
+                return 21;
+            default:
+                assert(!"unreachable");
+            }
+        }
+
+        sign = -1;
+        v = -v; /* Ditch the sign */
+    }
+
+    assert(v > 1000000000L);
+    char restbuf[10] = "000000000\0";
+    const char *rest = asn1p_itoa((long)(v % 1000000000L));
+    size_t restlen = strlen(rest);
+    assert(restlen <= 9);
+    memcpy(restbuf + (9 - restlen), rest, restlen);
+    rest = restbuf;
+
+    const char *head = asn1p_itoa(v / 1000000000L);
+    assert(head);
+    int ret = snprintf(tmp_buf, sizeof(tmp_buf), "%s%s%s", sign ? "-" : "",
+                       head, rest);
+    if(ret < 0 || (size_t)ret >= size) {
+        assert(ret > 0 && (size_t)ret < sizeof(tmp_buf));
+        return -1;
+    }
+    memcpy(buf, tmp_buf, ret);
+    buf[ret] = '\0';
+    return ret;
+}
+
+abuf *
+asn1p_integer_as_INTEGER(asn1c_integer_t value) {
+    abuf *ab = abuf_new();
+    uint8_t buf[sizeof(value) + 1];
+    uint8_t *bp = buf;
+
+    do {
+        *bp++ = value;
+        value >>= 8;
+    } while(!((value == 0 && !(bp[-1] & 0x80))
+              || (value == -1 && (bp[-1] & 0x80))));
+
+    abuf_printf(ab, "{ (uint8_t *)\"");
+
+    for(const uint8_t *p = bp-1; p >= buf; p--) {
+        abuf_printf(ab, "\\x%02x", *p);
+    }
+
+    abuf_printf(ab, "\\0\", %zu }", bp - buf);
+
+    return ab;
+}
diff --git a/libasn1parser/asn1p_integer.h b/libasn1parser/asn1p_integer.h
new file mode 100644 (file)
index 0000000..346c025
--- /dev/null
@@ -0,0 +1,52 @@
+#ifndef        ASN1P_INTEGER_H
+#define        ASN1P_INTEGER_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include <asn1_buffer.h>
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>          /* POSIX 1003.1-2001, C99 */
+#else  /* HAVE_INTTYPES_H */
+#ifdef HAVE_STDINT_H
+#include <stdint.h>            /* SUSv2+ */
+#endif /* HAVE_STDINT_H */
+#endif /* HAVE_INTTYPES_H */
+
+/*
+ * Basic integer type used in numerous places.
+ * ASN.1 does not define any limits on this number, so it must be sufficiently
+ * large to accomodate typical inputs. It does not have to be a dynamically
+ * allocated type with potentially unlimited width: consider the width of
+ * an integer defined here as one of the "compiler limitations".
+ * NOTE: this is NOT a type for ASN.1 "INTEGER" type representation, this
+ * type is used by the compiler itself to handle large integer values
+ * specified inside ASN.1 grammar.
+ */
+#ifdef  HAVE_128_BIT_INT
+typedef        __int128 asn1c_integer_t;
+#else
+typedef        intmax_t asn1c_integer_t;
+#endif
+
+int asn1p_atoi(const char *ptr, asn1c_integer_t *r_value);
+const char *asn1p_itoa(asn1c_integer_t value);   /* Ptr to a static buf */
+/*
+ * Return values:
+ * -1: The value did not fit in the buffer.
+ * >0: The length in bytes of the stringified numeric value.
+ */
+int asn1p_itoa_s(char *buf, size_t size,
+                 asn1c_integer_t value); /* Return -1 on error, or length. */
+
+/*
+ * Convert asn1c_integer_t into INTEGER_t structure.
+ */
+abuf *asn1p_integer_as_INTEGER(asn1c_integer_t value);
+
+#endif /* ASN1P_INTEGER_H */
diff --git a/libasn1parser/asn1p_l.c b/libasn1parser/asn1p_l.c
new file mode 100644 (file)
index 0000000..d374b63
--- /dev/null
@@ -0,0 +1,4761 @@
+#line 2 "asn1p_l.c"
+
+#line 4 "asn1p_l.c"
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+#define yy_create_buffer asn1p__create_buffer
+#define yy_delete_buffer asn1p__delete_buffer
+#define yy_flex_debug asn1p__flex_debug
+#define yy_init_buffer asn1p__init_buffer
+#define yy_flush_buffer asn1p__flush_buffer
+#define yy_load_buffer_state asn1p__load_buffer_state
+#define yy_switch_to_buffer asn1p__switch_to_buffer
+#define yyin asn1p_in
+#define yyleng asn1p_leng
+#define yylex asn1p_lex
+#define yylineno asn1p_lineno
+#define yyout asn1p_out
+#define yyrestart asn1p_restart
+#define yytext asn1p_text
+#define yywrap asn1p_wrap
+#define yyalloc asn1p_alloc
+#define yyrealloc asn1p_realloc
+#define yyfree asn1p_free
+
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* %if-c++-only */
+/* %endif */
+
+/* %if-c-only */
+    
+/* %endif */
+
+/* %if-c-only */
+
+/* %endif */
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+/* %if-c-only */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+/* %endif */
+
+/* %if-tables-serialization */
+/* %endif */
+/* end standard C headers. */
+
+/* %if-c-or-c++ */
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+typedef uint64_t flex_uint64_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else  /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* %not-for-header */
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+/* %ok-for-header */
+
+/* %if-reentrant */
+/* %endif */
+
+/* %if-not-reentrant */
+
+/* %endif */
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE asn1p_restart(asn1p_in  )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+/* %if-not-reentrant */
+extern yy_size_t asn1p_leng;
+/* %endif */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+extern FILE *asn1p_in, *asn1p_out;
+/* %endif */
+/* %endif */
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE asn1p_lex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-asn1p_lineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                yy_size_t yyl;\
+                for ( yyl = n; yyl < asn1p_leng; ++yyl )\
+                    if ( asn1p_text[yyl] == '\n' )\
+                        --asn1p_lineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up asn1p_text. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               *yy_cp = (yy_hold_char); \
+               YY_RESTORE_YY_MORE_OFFSET \
+               (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+               YY_DO_BEFORE_ACTION; /* set up asn1p_text again */ \
+               } \
+       while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr)  )
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+       {
+/* %if-c-only */
+       FILE *yy_input_file;
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+       char *yy_ch_buf;                /* input buffer */
+       char *yy_buf_pos;               /* current position in input buffer */
+
+       /* Size of input buffer in bytes, not including room for EOB
+        * characters.
+        */
+       yy_size_t yy_buf_size;
+
+       /* Number of characters read into yy_ch_buf, not including EOB
+        * characters.
+        */
+       yy_size_t yy_n_chars;
+
+       /* Whether we "own" the buffer - i.e., we know we created it,
+        * and can realloc() it to grow it, and should free() it to
+        * delete it.
+        */
+       int yy_is_our_buffer;
+
+       /* Whether this is an "interactive" input source; if so, and
+        * if we're using stdio for input, then we want to use getc()
+        * instead of fread(), to make sure we stop fetching input after
+        * each newline.
+        */
+       int yy_is_interactive;
+
+       /* Whether we're considered to be at the beginning of a line.
+        * If so, '^' rules will be active on the next match, otherwise
+        * not.
+        */
+       int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+       /* Whether to try to fill the input buffer when we reach the
+        * end of it.
+        */
+       int yy_fill_buffer;
+
+       int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+       /* When an EOF's been seen but there's still some text to process
+        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+        * shouldn't try reading from the input source any more.  We might
+        * still have a bunch of tokens to match, though, because of
+        * possible backing-up.
+        *
+        * When we actually see the EOF, we change the status to "new"
+        * (via asn1p_restart()), so that the user can continue scanning by
+        * just pointing asn1p_in at a new input file.
+        */
+#define YY_BUFFER_EOF_PENDING 2
+
+       };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+/* %if-not-reentrant */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+/* %endif */
+/* %ok-for-header */
+
+/* %endif */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* %if-c-only Standard (non-C++) definition */
+
+/* %if-not-reentrant */
+/* %not-for-header */
+
+/* yy_hold_char holds the character lost when asn1p_text is formed. */
+static char yy_hold_char;
+static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
+yy_size_t asn1p_leng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0;                /* whether we need to initialize */
+static int yy_start = 0;       /* start state number */
+
+/* Flag which is used to allow asn1p_wrap()'s to do buffer switches
+ * instead of setting up a fresh asn1p_in.  A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+/* %ok-for-header */
+
+/* %endif */
+
+void asn1p_restart (FILE *input_file  );
+void asn1p__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
+YY_BUFFER_STATE asn1p__create_buffer (FILE *file,int size  );
+void asn1p__delete_buffer (YY_BUFFER_STATE b  );
+void asn1p__flush_buffer (YY_BUFFER_STATE b  );
+void asn1p_push_buffer_state (YY_BUFFER_STATE new_buffer  );
+void asn1p_pop_buffer_state (void );
+
+static void asn1p_ensure_buffer_stack (void );
+static void asn1p__load_buffer_state (void );
+static void asn1p__init_buffer (YY_BUFFER_STATE b,FILE *file  );
+
+#define YY_FLUSH_BUFFER asn1p__flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE asn1p__scan_buffer (char *base,yy_size_t size  );
+YY_BUFFER_STATE asn1p__scan_string (yyconst char *yy_str  );
+YY_BUFFER_STATE asn1p__scan_bytes (yyconst char *bytes,yy_size_t len  );
+
+/* %endif */
+
+void *asn1p_alloc (yy_size_t  );
+void *asn1p_realloc (void *,yy_size_t  );
+void asn1p_free (void *  );
+
+#define yy_new_buffer asn1p__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){ \
+        asn1p_ensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            asn1p__create_buffer(asn1p_in,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+       }
+
+#define yy_set_bol(at_bol) \
+       { \
+       if ( ! YY_CURRENT_BUFFER ){\
+        asn1p_ensure_buffer_stack (); \
+               YY_CURRENT_BUFFER_LVALUE =    \
+            asn1p__create_buffer(asn1p_in,YY_BUF_SIZE ); \
+       } \
+       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+       }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* %% [1.0] asn1p_text/asn1p_in/asn1p_out/yy_state_type/asn1p_lineno etc. def's & init go here */
+/* Begin user sect3 */
+
+#define asn1p_wrap(n) 1
+#define YY_SKIP_YYWRAP
+
+#define FLEX_DEBUG
+
+typedef unsigned char YY_CHAR;
+
+FILE *asn1p_in = (FILE *) 0, *asn1p_out = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int asn1p_lineno;
+
+int asn1p_lineno = 1;
+
+extern char *asn1p_text;
+#define yytext_ptr asn1p_text
+
+/* %if-c-only Standard (non-C++) definition */
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[]  );
+
+/* %endif */
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up asn1p_text.
+ */
+#define YY_DO_BEFORE_ACTION \
+       (yytext_ptr) = yy_bp; \
+/* %% [2.0] code to fiddle asn1p_text and asn1p_leng for yymore() goes here \ */\
+       asn1p_leng = (yy_size_t) (yy_cp - yy_bp); \
+       (yy_hold_char) = *yy_cp; \
+       *yy_cp = '\0'; \
+/* %% [3.0] code to copy yytext_ptr to asn1p_text[] goes here, if %array \ */\
+       (yy_c_buf_p) = yy_cp;
+
+/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
+#define YY_NUM_RULES 142
+#define YY_END_OF_BUFFER 143
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+       {
+       flex_int32_t yy_verify;
+       flex_int32_t yy_nxt;
+       };
+static yyconst flex_int16_t yy_acclist[1290] =
+    {   0,
+      143,  141,  142,  134,  141,  142,  134,  142,  139,  141,
+      142,   21,  141,  142,  139,  141,  142,  141,  142,  139,
+      141,  142,  141,  142,  141,  142,  139,  141,  142,  141,
+      142,   35,  141,  142,   34,  141,  142,  139,  141,  142,
+      141,  142,  122,  123,  141,  142,  122,  123,  141,  142,
+      122,  123,  141,  142,  122,  123,  141,  142,  122,  123,
+      141,  142,  122,  123,  141,  142,  122,  123,  141,  142,
+      122,  123,  141,  142,  122,  123,  141,  142,  122,  123,
+      141,  142,  122,  123,  141,  142,  122,  123,  141,  142,
+      122,  123,  141,  142,  122,  123,  141,  142,  122,  123,
+
+      141,  142,  122,  123,  141,  142,  122,  123,  141,  142,
+      122,  123,  141,  142,  122,  123,  141,  142,  139,  141,
+      142,  139,  141,  142,  121,  141,  142,  139,  141,  142,
+      141,  142,   11,  141,  142,    8,  142,    8,  141,  142,
+       10,  141,  142,   10,  141,  142,   13,   15,  141,  142,
+       13,  142,   15,  141,  142,   15,  141,  142,   15,  141,
+      142,   23,  141,  142,   23,  142,   24,  141,  142,   18,
+      141,  142,   18,  142,   20,  141,  142,   20,  141,  142,
+       16,  141,  142,   17,  141,  142,   27,   29,  141,  142,
+       29,  141,  142,   30,  142,   27,   28,   29,  141,  142,
+
+       27,   28,   29,  141,  142,  132,  141,  142,  132,  142,
+      141,  142,  128,  141,  142,  141,  142,  141,  142,  127,
+      141,  142,  130,  141,  142,  131,  141,  142,  129,  141,
+      142,  133,  141,  142,  134,  141,  142,  134,  142,  141,
+      142,  141,  142,  122,  141,  142,  134,   21,   21,  119,
+      120,    7,   33,  126,   12,   36,   34,   36,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,   46,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+
+      123,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  123,  122,
+      123,  122,  123,   91,  122,  123,  122,  123,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  123,  122,  123,  122,  123,  123,
+      123,  122,  123,  137,  138,  121,   11,    9,    9,   14,
+       23,   22,   18,   27,   27,   28,   27,   28,  132,    7,
+      127,  122,  140,  119,  120,   33,   36,  125,   36,  124,
+      122,  123,  123,  122,  123,   38,  122,  123,   39,  122,
+
+      123,  122,  123,  122,  123,  122,  123,   43,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+       60,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  123,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,   83,  122,  123,   84,  122,  123,  122,  123,  123,
+      122,  123,  122,  123,  122,  123,  123,  122,  123,   94,
+      122,  123,  122,  123,  122,  123,  122,  123,  123,  122,
+      123,  122,  123,  122,  123,  102,  122,  123,  122,  123,
+
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      123,  122,  123,  122,  123,  122,  123,  123,  123,  123,
+      122,  123,  121,    1,    4,   19,   27,   28,   26,   27,
+       28,  127,  122,  119,  120,   32,   31,    3,    2,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,   68,  122,  123,  123,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+
+      122,  123,  122,  123,  122,  123,   86,  122,  123,  123,
+      122,  123,  122,  123,  122,  123,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  123,   99,  122,  123,  122,
+      123,  122,  123,  103,  122,  123,  122,  123,  122,  123,
+      122,  123,  107,  122,  123,  109,  122,  123,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  123,
+      123,  123,  118,  122,  123,    4,   27,   28,  122,  123,
+      122,  123,  122,  123,   42,  122,  123,  123,  122,  123,
+      122,  123,  122,  123,   49,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,   67,  122,  123,  123,  123,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  122,  123,  123,
+      122,  123,   90,  122,  123,  122,  123,  123,  122,  123,
+      122,  123,  122,  123,  123,  122,  123,  122,  123,  122,
+      123,  122,  123,  123,  123,  110,  122,  123,  122,  123,
+      122,  123,  123,  122,  123,  123,  123,  123,  135,   27,
+       28,   37,  122,  123,  122,  123,  122,  123,  123,  122,
+      123,  122,  123,   48,  122,  123,  122,  123,  122,  123,
+
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,   62,  122,  123,  122,
+      123,  122,  123,  122,  123,  122,  123,  123,  123,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      123,   88,  122,  123,  122,  123,  123,  122,  123,  122,
+      123,  122,  123,  122,  123,  123,  122,  123,  122,  123,
+      104,  122,  123,  105,  122,  123,  123,  123,  111,  122,
+      123,  122,  123,  123,  123,  123,  123,  123,   27,   28,
+      122,  123,  122,  123,  123,   45,  122,  123,  122,  123,
+
+      122,  123,  122,  123,  122,  123,   54,  122,  123,   55,
+      122,  123,  122,  123,  122,  123,   58,  122,  123,  122,
+      123,  122,  123,  122,  123,   64,  122,  123,  122,  123,
+      122,  123,  123,  123,  123,  122,  123,  122,  123,   75,
+      122,  123,   76,  122,  123,  122,  123,  122,  123,  122,
+      123,   80,  122,  123,  122,  123,  122,  123,  122,  123,
+      123,  122,  123,  123,   93,  122,  123,  122,  123,   96,
+      122,  123,   98,  122,  123,  123,  122,  123,  122,  123,
+      123,  123,  122,  123,  114,  123,  123,  123,  123,  123,
+       27,   28,  122,  123,  122,  123,  123,  122,  123,  122,
+
+      123,  122,  123,  122,  123,  122,  123,   57,  122,  123,
+      122,  123,  122,  123,   63,  122,  123,  122,  123,   66,
+      122,  123,  123,  123,  123,  123,  122,  123,   74,  122,
+      123,   77,  122,  123,   78,  122,  123,  122,  123,  122,
+      123,  123,  122,  123,  123,   92,  122,  123,  123,  122,
+      123,  123,  122,  123,  101,  122,  123,  123,  123,  122,
+      123,  123,  123,  123,  123,   27,   28,  122,  123,   41,
+      122,  123,   44,  123,   47,  122,  123,   50,  122,  123,
+      122,  123,  122,  123,  122,  123,  122,  123,  122,  123,
+      123,  123,  123,   72,  123,  122,  123,  122,  123,  122,
+
+      123,  123,  122,  123,  123,  123,  122,  123,  123,  106,
+      123,  123,  112,  122,  123,  123,  123,  123,  123,  136,
+       27,  122,  123,   51,  122,  123,  122,  123,   53,  122,
+      123,  122,  123,  122,  123,   61,  122,  123,  122,  123,
+      123,  123,  123,   73,  122,  123,  122,  123,  122,  123,
+      123,  122,  123,  123,  123,  122,  123,  123,  122,  123,
+      123,  115,  123,  123,  123,  123,   27,   40,  122,  123,
+       52,  122,  123,   56,  122,  123,  122,  123,  122,  123,
+      123,  123,  123,  122,  123,  122,  123,  123,  122,  123,
+      123,  123,  122,  123,  123,  122,  123,  123,  123,  123,
+
+      123,   27,    6,  122,  123,  122,  123,  123,  123,  123,
+       79,  122,  123,   81,  122,  123,   82,  123,  122,  123,
+      123,  123,  122,  123,  123,  100,  122,  123,  123,  123,
+      123,  123,   27,  122,  123,   65,  122,  123,   70,  123,
+      123,   71,  123,  122,  123,   87,  123,  123,   95,  122,
+      123,  123,  108,  123,  123,  123,  117,  123,   27,  122,
+      123,  123,   85,  122,  123,  123,  123,  123,  116,  123,
+       27,  122,  123,   69,  123,  123,   97,  123,  113,  123,
+       27,   59,  122,  123,   89,  123,   25,   27,    5
+    } ;
+
+static yyconst flex_int16_t yy_accept[770] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
+        4,    7,    9,   12,   15,   18,   20,   23,   25,   27,
+       30,   32,   35,   38,   41,   43,   47,   51,   55,   59,
+       63,   67,   71,   75,   79,   83,   87,   91,   95,   99,
+      103,  107,  111,  115,  119,  122,  125,  128,  131,  133,
+      136,  138,  141,  144,  147,  151,  153,  156,  159,  162,
+      165,  167,  170,  173,  175,  178,  181,  184,  187,  191,
+      194,  196,  201,  206,  209,  211,  213,  216,  218,  220,
+      223,  226,  229,  232,  235,  238,  240,  242,  244,  247,
+
+      247,  248,  249,  250,  250,  251,  251,  252,  252,  252,
+      252,  253,  254,  255,  256,  256,  257,  257,  259,  259,
+      259,  261,  263,  265,  267,  269,  271,  272,  274,  276,
+      278,  280,  283,  285,  287,  289,  291,  293,  295,  297,
+      299,  301,  302,  303,  305,  307,  309,  311,  313,  315,
+      317,  319,  320,  322,  324,  327,  329,  330,  332,  334,
+      336,  338,  339,  341,  343,  345,  347,  349,  351,  353,
+      355,  356,  358,  360,  361,  362,  364,  365,  366,  366,
+      367,  367,  367,  367,  367,  368,  369,  370,  371,  372,
+      373,  374,  374,  375,  377,  379,  380,  381,  381,  382,
+
+      382,  382,  383,  384,  384,  384,  385,  385,  386,  386,
+      386,  386,  386,  388,  389,  390,  390,  391,  393,  394,
+      396,  399,  402,  404,  406,  406,  408,  411,  413,  415,
+      417,  419,  421,  423,  425,  427,  429,  431,  434,  436,
+      438,  440,  442,  444,  446,  447,  448,  450,  452,  454,
+      456,  458,  460,  462,  465,  468,  470,  471,  473,  475,
+      477,  478,  480,  483,  485,  487,  489,  490,  492,  494,
+      496,  499,  501,  503,  505,  507,  509,  511,  512,  514,
+      516,  518,  519,  520,  521,  523,  524,  524,  524,  525,
+      526,  527,  529,  532,  533,  533,  534,  534,  535,  536,
+
+      537,  538,  539,  540,  540,  540,  540,  542,  544,  546,
+      548,  550,  552,  554,  556,  558,  560,  562,  564,  566,
+      568,  570,  572,  574,  576,  578,  580,  582,  584,  587,
+      588,  589,  591,  593,  595,  597,  599,  601,  603,  605,
+      607,  610,  611,  613,  615,  617,  618,  620,  622,  624,
+      626,  627,  630,  632,  634,  637,  639,  641,  643,  646,
+      649,  650,  652,  654,  656,  658,  660,  661,  662,  663,
+      666,  666,  666,  666,  666,  667,  669,  669,  669,  671,
+      673,  675,  678,  679,  681,  683,  685,  688,  690,  692,
+      694,  696,  698,  700,  702,  704,  706,  708,  710,  712,
+
+      714,  717,  718,  719,  720,  722,  724,  726,  728,  730,
+      732,  734,  736,  738,  740,  741,  743,  746,  748,  749,
+      751,  751,  753,  755,  756,  758,  760,  762,  764,  765,
+      766,  769,  771,  773,  774,  776,  777,  778,  779,  779,
+      779,  780,  782,  782,  782,  785,  787,  789,  790,  792,
+      794,  797,  799,  801,  803,  805,  807,  809,  811,  813,
+      815,  817,  820,  822,  824,  826,  828,  829,  830,  831,
+      833,  835,  837,  839,  841,  843,  845,  847,  849,  851,
+      851,  852,  855,  857,  858,  860,  862,  864,  866,  867,
+      869,  871,  874,  877,  878,  879,  882,  884,  885,  886,
+
+      887,  888,  889,  889,  889,  891,  891,  891,  893,  895,
+      896,  899,  901,  903,  905,  907,  910,  913,  915,  917,
+      920,  922,  924,  926,  929,  931,  933,  934,  935,  936,
+      938,  940,  943,  946,  948,  950,  952,  955,  957,  959,
+      961,  962,  964,  965,  968,  970,  973,  976,  977,  979,
+      981,  982,  983,  985,  987,  988,  989,  990,  991,  991,
+      993,  993,  993,  995,  997,  998, 1000, 1002, 1004, 1006,
+     1008, 1011, 1013, 1015, 1018, 1020, 1023, 1024, 1025, 1026,
+     1027, 1029, 1032, 1035, 1038, 1040, 1042, 1043, 1045, 1046,
+     1049, 1050, 1052, 1053, 1055, 1058, 1059, 1060, 1062, 1063,
+
+     1064, 1065, 1066, 1066, 1066, 1068, 1068, 1068, 1070, 1073,
+     1075, 1078, 1081, 1083, 1085, 1087, 1087, 1089, 1091, 1092,
+     1093, 1094, 1096, 1098, 1100, 1102, 1103, 1105, 1106, 1107,
+     1109, 1110, 1110, 1112, 1113, 1116, 1117, 1118, 1119, 1120,
+     1120, 1121, 1122, 1122, 1122, 1124, 1127, 1129, 1132, 1134,
+     1136, 1139, 1141, 1142, 1143, 1144, 1147, 1149, 1151, 1152,
+     1154, 1155, 1156, 1158, 1159, 1161, 1162, 1164, 1165, 1166,
+     1167, 1168, 1168, 1168, 1171, 1174, 1177, 1179, 1181, 1182,
+     1183, 1184, 1186, 1188, 1189, 1191, 1192, 1193, 1195, 1196,
+     1198, 1199, 1200, 1201, 1202, 1203, 1204, 1204, 1206, 1208,
+
+     1209, 1210, 1211, 1214, 1217, 1219, 1221, 1222, 1223, 1225,
+     1226, 1229, 1230, 1231, 1232, 1233, 1234, 1234, 1236, 1239,
+     1241, 1242, 1244, 1246, 1248, 1249, 1252, 1253, 1255, 1256,
+     1257, 1259, 1260, 1260, 1262, 1263, 1266, 1267, 1268, 1269,
+     1271, 1272, 1272, 1274, 1276, 1277, 1279, 1281, 1282, 1282,
+     1285, 1287, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
+     1289, 1289, 1289, 1289, 1289, 1289, 1289, 1290, 1290
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        4,    4,    5,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    6,    7,    8,    9,    1,    1,   10,   11,   12,
+       12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
+       21,   22,   23,   24,   21,   25,   26,   27,   28,   29,
+       30,   31,    1,   12,   32,   33,   34,   35,   36,   37,
+       38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
+       48,   49,   50,   51,   52,   53,   54,   55,   56,   57,
+       58,    1,   59,   60,    1,    1,   61,   62,   63,   64,
+
+       65,   66,   67,   68,   69,   70,   66,   71,   72,   73,
+       74,   75,   66,   76,   77,   78,   79,   80,   66,   81,
+       66,   82,   83,   84,   85,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,   86,    1,    1,    1,
+       87,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,   88,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[89] =
+    {   0,
+        1,    2,    3,    4,    4,    2,    1,    5,    1,    1,
+        6,    1,    1,    1,    1,    7,    1,    1,    8,    8,
+        8,    8,    8,    8,    8,    8,    9,    1,    1,    9,
+        1,    8,    8,    8,    8,    8,    8,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
+       10,   10,   10,   10,   10,   10,   10,    1,    1,    1,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
+       11,   11,   12,    1,   12,    1,    1,    1
+    } ;
+
+static yyconst flex_int16_t yy_base[796] =
+    {   0,
+        0,    0,   86,   89,   92,   95,  100,  101,   98,  104,
+      106,  107,  192,  280,  368,    0,  455,    0, 1756, 1741,
+      120,  136, 1737, 1735,  530,  146, 4634,  148,  213, 1728,
+      104,  236,  596, 1712, 4634,  646,  279,  303,  285,  482,
+      111,  581,  197,  434,  499,  221,  597,  697,  500,  705,
+      727,  735,  608,  748, 1679,  105, 1715,  799,  177,    0,
+     4634, 4634, 1713, 1712, 4634, 4634, 1704, 1705, 4634,    0,
+        0, 1708,    0,    0, 1687, 4634, 4634, 4634,    0, 4634,
+     4634,  825,  913,  173,  178,  292, 4634, 1696, 1698, 1689,
+     4634, 4634, 4634, 4634,  209,  354, 1670, 1674, 1682, 1687,
+
+      514,    0, 1686, 1680, 1667,   93, 1666,  855, 1668,  869,
+      116,  928, 1660, 4634,  955,  985, 1003, 1013, 1645, 1018,
+      764,  854,  951, 1008, 1009, 1024, 1657, 1025, 1068, 1069,
+     1084, 1090, 1106, 1112, 1123, 1136, 1139, 1159, 1156, 1167,
+     1180,  112,  170, 1195, 1198, 1206, 1221, 1232, 1243, 1249,
+     1260,  145, 1273, 1276, 1289, 1297,  146, 1300, 1313, 1324,
+     1337,  202, 1353, 1359, 1370, 1376, 1387, 1398, 1404, 1415,
+      231, 1421, 1437,  230,  458, 1436, 4634, 4634,    0, 1655,
+      825, 1471, 1483, 1581,    0, 4634, 1643, 4634,    0, 4634,
+        0, 1625,    0, 1606,  299,  551, 4634,    0, 1633, 1608,
+
+        0, 1631, 4634, 1628,    0, 1619,    0, 1618,  308, 1594,
+      301,  641, 1493, 4634, 1084, 1501, 4634, 1543, 1616, 1495,
+     1501, 1517, 1518, 1533, 1615, 1541, 1544, 1593, 1594, 1609,
+     1617, 1620, 1633, 1641, 1657, 1663, 1674, 1680, 1691, 1697,
+     1708, 1714, 1725, 1736,  209,  254, 1749, 1757, 1760, 1775,
+     1778, 1781, 1807, 1799, 1810, 1823,  249, 1831, 1844, 1852,
+      289, 1855, 1868, 1876, 1884, 1892,  572, 1905, 1908, 1916,
+     1929, 1937, 1945, 1953, 1966, 1974, 1987,  297, 1995, 2011,
+     2012,  469,  456,  459, 2027, 1614, 2078, 2086, 4634, 1613,
+     4634,  181, 1583, 1587, 1544, 1578, 1533, 1567, 1566, 4634,
+
+     4634, 4634, 4634,  545,  731, 1525, 2080, 2081, 2096, 2102,
+     2113, 2119, 2135, 2136, 2151, 2159, 2167, 2183, 2180, 2191,
+     2204, 2207, 2222, 2228, 2239, 2245, 2256, 2271, 2277,  111,
+      607, 2288, 2294, 2309, 2310, 2325, 2331, 2346, 2349, 2357,
+     2370,  251, 2378, 2381, 2394,  460, 2402, 2415, 2423, 2431,
+      446, 2439, 2447, 2460, 2468, 2471, 2489, 2486, 2492, 2507,
+      452, 2510, 2513, 2530, 2536, 2547,  573,  632,  642, 2563,
+     2598, 2623, 2631, 2643, 1557,  308, 1565, 1522, 2627, 2642,
+     2648, 2659,  658, 2677, 2680, 2683, 2698, 2701, 2709, 2722,
+     2730, 2743, 2754, 2760, 2771, 2782, 2797, 2803, 2814, 2820,
+
+     2835,  723,  636,  660, 2836, 2856, 2853, 2874, 2873, 2889,
+     2895, 2906, 2919, 2930,  727, 2927, 2943, 2951,  737, 2959,
+      229, 2967, 2980,  738, 2993, 2996, 3004, 3017,  794,  748,
+     3028, 3034, 3045,  742, 3056,  796,  739,  719,  874, 3107,
+     4634,  203, 1507, 1536, 3071, 3092, 3103,  846, 3114, 3120,
+     3131, 3137, 3153, 3154, 3169, 3180, 3186, 3203, 3209, 3220,
+     3226, 3237, 3243, 3254, 3260, 3276,  847,  731,  848, 3277,
+     3292, 3298, 3309, 3315, 3330, 3336, 3347, 3362, 3368,  623,
+      853, 3379, 3395,  619, 3392, 1510, 3403, 3416,  715, 3424,
+     3439, 3442, 3445,  866,  544, 3460, 3463,  891,  857,  790,
+
+      892,  903, 3514, 3506, 1509, 1501, 1515, 3508, 3509,  865,
+     3524, 3530, 3541, 3547, 3558, 3564, 3575, 3581, 3596, 3597,
+     3612, 3618, 3629, 3640, 3646, 3657,  886,  882,  887, 3663,
+     3674, 3685, 3691, 3702, 3708, 3723, 3724, 3739, 3745, 1500,
+      945, 3756,  921, 3762, 1506, 3773, 3779,  894, 3794, 3800,
+      967,  966, 3816, 1525,  923,  951,  950,  997, 3851,  591,
+     1488,    0, 3845, 3817,  947, 3846, 3861, 3872, 3878, 3889,
+     3895, 3910, 3913, 3921, 3934, 3937,  884, 1043, 1046,  999,
+     3952, 3958, 3969, 3975, 3986, 3992,  969, 1498, 1102, 4003,
+      971, 1493,  953, 4014, 4020, 1110, 1118, 4031,  973,  972,
+
+     1112, 1127, 4082, 4107,  611, 1490, 1462, 4046, 4091, 1484,
+     4092, 4107, 4113, 4128, 4129,  749, 4144, 4150, 1144, 1057,
+     1145, 1483, 4161, 4172, 4183, 1116, 1438, 1160, 1124, 1432,
+     1147, 1028, 1460, 1193, 4189, 1131, 1179, 1138, 1221, 1596,
+     4634, 1438, 1418, 1394, 4200, 4206, 4221, 4222, 4237, 1411,
+     4238, 4253, 1155, 1158, 1201, 4259, 4270, 4281, 1162, 1410,
+     1214, 1228, 1400, 1230, 1393, 1241, 1413, 1246, 1283, 1244,
+     1353, 1355, 1306, 4287, 4298, 4304, 1309, 4315, 1258,  104,
+     1264, 4326, 4332, 1271, 1251, 1295, 1284, 1234, 1286, 1232,
+     1299, 1319, 1310, 1301, 1218, 4634, 1185, 1208, 4347, 1323,
+
+     1339, 1334, 4348, 4363, 1232, 1164, 1345, 1313, 1109, 1347,
+        0, 1359, 1367, 1362, 1371, 1099, 1083, 1097, 4364, 1125,
+     1217, 1049,  934,  954, 1375,    0, 1428,  930, 1459, 1398,
+      880,  822,  791,  819, 1381,    0, 1378, 1469, 1523,  782,
+      743,  720,  732,  755, 1348,  753,  751,  723,  689,    0,
+      648,    0,  572,  605,  482,  436,  406,  394,  288,  273,
+      280,  165, 1250, 1566,  130,  119, 4634, 4634, 4416, 4428,
+     4440, 4452, 4464, 4476, 4487, 4489, 4500, 4512, 4524, 4535,
+     4546, 4551, 4556, 4560, 4565, 4569, 4574, 4578, 4582, 4586,
+     4589, 4593, 4604, 4610, 4621
+
+    } ;
+
+static yyconst flex_int16_t yy_def[796] =
+    {   0,
+      768,    1,  769,  769,  769,  769,  770,  770,  771,  771,
+      772,  772,  773,  773,  768,   15,   15,   17,  768,  768,
+      768,  768,  768,  774,  768,  775,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,  768,  768,  776,  768,  768,  777,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  778,
+      778,  768,  779,  779,  768,  768,  768,  768,  780,  768,
+      768,  781,  781,  768,  768,   25,  768,  768,  768,  782,
+      768,  768,  768,  768,  768,  768,  768,  768,  783,  768,
+
+      768,  774,  774,  768,  784,  768,  785,  775,  775,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  786,
+       36,   36,   36,   36,   36,   36,  787,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,  787,  787,   36,   36,   36,   36,   36,   36,   36,
+       36,  787,   36,   36,   36,   36,  787,   36,   36,   36,
+       36,  787,   36,   36,   36,   36,   36,   36,   36,   36,
+      787,   36,   36,  787,  787,   36,  768,  768,  788,  776,
+      768,  768,  768,  768,  777,  768,  768,  768,  778,  768,
+      779,  768,  780,   83,   83,  768,  768,  789,  782,  768,
+
+      790,  783,  768,  768,  791,  784,  792,  785,  768,  768,
+      793,  768,  768,  768,  768,  768,  768,  786,  794,   36,
+       36,   36,   36,   36,  794,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,  787,  787,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,  787,   36,   36,   36,
+      787,   36,   36,   36,   36,   36,  787,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,  787,   36,   36,
+       36,  787,  787,  787,   36,  788,  768,  768,  768,  768,
+      768,   83,   83,  789,  768,  790,  768,  791,  792,  768,
+
+      768,  768,  768,  793,  768,  768,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,  787,
+      787,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,  787,   36,   36,   36,  787,   36,   36,   36,   36,
+      787,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+      787,   36,   36,   36,   36,   36,  787,  787,  787,   36,
+      768,  768,  768,  768,  768,   83,  768,  768,   36,   36,
+       36,   36,  787,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+
+       36,  787,  787,  787,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,  787,   36,   36,   36,  787,   36,
+      218,   36,   36,  787,   36,   36,   36,   36,  787,  787,
+       36,   36,   36,  787,   36,  787,  787,  787,  768,  768,
+      768,   83,  768,  768,   36,   36,   36,  787,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,  787,  787,  787,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,  218,
+      787,   36,   36,  787,   36,  218,   36,   36,  787,   36,
+       36,   36,   36,  787,  787,   36,   36,  787,  787,  787,
+
+      787,  787,  768,  768,   83,  768,  768,   36,   36,  787,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,  787,  787,  787,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,  218,
+      787,   36,  787,   36,  218,   36,   36,  787,   36,   36,
+      787,  787,   36,  787,  787,  787,  787,  787,  768,   83,
+      768,  795,   36,   36,  787,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,  787,  787,  787,  787,
+       36,   36,   36,   36,   36,   36,  787,  218,  787,   36,
+      787,  218,  787,   36,   36,  787,  787,   36,  787,  787,
+
+      787,  787,  768,  768,   83,  768,  768,   36,   36,  787,
+       36,   36,   36,   36,   36,  218,   36,   36,  787,  787,
+      787,  787,   36,   36,   36,  787,  218,  787,  787,  218,
+      787,  218,  787,  787,   36,  787,  787,  787,  787,  768,
+      768,  780,  768,  768,   36,   36,   36,   36,   36,  218,
+       36,   36,  787,  787,  787,   36,   36,   36,  787,  218,
+      787,  787,  218,  787,  218,  787,  787,  787,  787,  787,
+      780,  768,  768,   36,   36,   36,  218,   36,  787,  787,
+      787,   36,   36,  787,  218,  787,  787,  218,  787,  218,
+      787,  787,  787,  787,  780,  768,  768,  218,   36,  787,
+
+      787,  787,   36,   36,  787,  218,  787,  787,  218,  787,
+      218,  787,  787,  787,  787,  780,  768,  218,   36,  787,
+      787,  787,  218,  787,  787,  218,  787,  787,  787,  787,
+      787,  780,  768,  218,  787,  218,  787,  787,  787,  787,
+      780,  768,  218,  787,  787,  787,  787,  780,  768,  218,
+      787,  780,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,    0,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768
+
+    } ;
+
+static yyconst flex_int16_t yy_nxt[4723] =
+    {   0,
+       20,   21,   22,   21,   21,   21,   23,   24,   20,   25,
+       26,   27,   20,   28,   27,   29,   30,   31,   32,   33,
+       33,   33,   33,   33,   33,   33,   34,   23,   35,   35,
+       20,   36,   37,   38,   39,   40,   41,   42,   43,   44,
+       43,   43,   43,   45,   46,   47,   48,   43,   49,   50,
+       51,   52,   53,   54,   43,   43,   43,   55,   56,   23,
+       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
+       57,   57,   58,   23,   27,   20,   20,   59,   61,   62,
+       62,   61,   62,   62,   61,   62,   62,   61,   62,   62,
+
+       71,   63,   66,   66,   63,   72,   71,   64,   74,   74,
+       64,   72,   67,   67,  100,  100,  114,   68,   68,  225,
+      104,  101,  101,  101,  101,  101,  225,  225,   69,   69,
+      100,  211,   75,   75,  767,   76,   76,  101,  101,  101,
+      101,  101,  140,  121,  212,  766,  100,  108,  108,  108,
+      108,  108,  106,  121,  701,  121,  100,  121,  100,  141,
+      225,  225,  121,  178,  108,  108,  110,  110,  110,  110,
+      110,  110,  110,  110,  196,  196,  196,  196,  196,  196,
+      196,  196,  196,  196,  245,  225,  402,  100,   77,   77,
+       78,   78,   79,   80,   81,   80,   80,   80,   79,   79,
+
+       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+      101,  101,  101,  101,  101,  261,  257,  225,   79,   79,
+       79,   79,   79,  100,  225,  194,  376,   83,  111,  121,
+      246,  110,  112,  112,  112,  112,  112,  112,  112,  121,
+      763,  121,  505,  121,  768,  225,  225,  194,  121,   79,
+       79,   79,  115,  121,  116,  116,  116,  116,  116,  116,
+      116,  116,  184,  121,  225,  121,  225,  121,  486,  225,
+      267,  117,  151,  330,   80,   79,   80,   79,   79,   79,
+       79,   80,   81,   80,   80,   80,   79,   79,   79,   79,
+       79,   79,   79,   79,   79,   79,   79,   79,  282,  152,
+
+      117,  278,  768,  303,  225,  303,   79,   79,   79,   79,
+       79,  121,  225,  342,  128,   83,  304,  121,  129,  768,
+      136,  121,  130,  121,  131,  121,  415,  121,  331,  121,
+      121,  121,  292,  293,  132,  121,  121,   79,   79,   79,
+      300,  133,  442,  194,  762,  134,  301,  121,  135,  121,
+      761,  768,  194,  346,  121,  101,  101,  101,  101,  101,
+      760,  361,   80,   79,   80,   79,   79,   79,   35,   84,
+       85,   84,   84,   84,   35,   35,   35,   86,   35,   35,
+       35,   35,   87,   88,   35,   89,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   90,
+
+       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
+       90,   90,   90,   90,   90,   91,   92,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
+       93,   35,   94,   35,   35,   35,   95,   96,   95,   95,
+       95,  225,  759,   97,   35,  144,  121,  225,  145,   35,
+       35,  225,   35,  225,  225,  225,  121,  146,  147,  758,
+      121,   98,  757,  148,  225,  121,   99,   99,   99,   99,
+       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+
+       99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+       99,   99,   35,   35,  121,  101,  101,  101,  101,  101,
+      368,  283,  419,  424,  121,  137,  138,  369,  121,  430,
+      149,  121,  121,  121,  284,  163,  139,   35,  150,   35,
+      100,  121,  121,  121,  121,  121,  121,  303,  367,  303,
+      121,  121,  196,  196,  196,  196,  196,  104,  756,  225,
+      304,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
+      105,  105,  105,  105,  105,  105,  105,  225,  225,  106,
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+
+      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
+      107,  107,  115,  121,  118,  118,  118,  118,  118,  118,
+      118,  118,  225,  121,  552,  121,  642,  121,  605,  153,
+      154,  117,  121,  155,  225,  194,  755,  436,  768,  121,
+      121,  121,  305,  156,  351,  142,  305,  225,  121,  754,
+      121,  225,  121,  543,  121,  194,  143,  225,  157,  121,
+      117,  120,  540,  225,  121,  121,  121,  121,  121,  121,
+      121,  121,  306,  225,  403,  225,  175,  121,  122,  121,
+      121,  121,  121,  121,  121,  121,  121,  121,  123,  121,
+      124,  121,  125,  121,  121,  121,  121,  126,  121,  121,
+
+      121,  121,  121,  438,  468,  437,  127,  127,  127,  127,
+      127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
+      127,  127,  127,  127,  127,  127,  127,  127,  158,  121,
+      225,  159,  305,  448,  225,  469,  305,  121,  225,  160,
+      164,  121,  225,  121,  165,  161,  225,  121,  121,  121,
+      168,  121,  225,  225,  225,  166,  121,  225,  169,  121,
+      167,  753,  306,  225,  768,  752,  225,  121,  225,  121,
+      225,  121,  162,  121,  750,  170,  548,  121,  121,  172,
+      121,  121,  650,  467,  749,  173,  121,  176,  748,  502,
+      121,  171,  121,  528,  121,  481,  121,  225,  489,  121,
+
+      181,  181,  181,  181,  181,  225,  121,  174,  121,  225,
+      121,  225,  495,  498,  484,  121,  501,  182,  182,  182,
+      182,  182,  182,  183,  183,  193,  181,  181,  181,  181,
+      181,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  193,  193,  182,  182,  182,  182,  182,  182,  183,
+      183,  193,  193,  193,  193,  193,  108,  108,  108,  108,
+      108,  225,  225,  225,  743,  209,  556,  742,  225,  494,
+      741,  500,  225,  108,  108,  439,  439,  439,  439,  439,
+      225,  225,  193,  193,  193,  115,  121,  116,  116,  116,
+      116,  116,  116,  116,  116,  225,  121,  225,  121,  225,
+
+      121,  225,  225,  220,  117,  121,  225,  225,  193,  225,
+      193,  193,  193,  193,  510,  541,  529,  527,  225,  193,
+      193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
+      193,  579,  555,  117,  551,  577,  225,  565,  225,  193,
+      193,  193,  193,  193,  115,  225,  213,  213,  213,  213,
+      213,  213,  213,  213,  578,  554,  557,  195,  441,  580,
+      225,  619,  225,  117,  593,  225,  225,  558,  225,  225,
+      193,  193,  193,  215,  215,  215,  215,  215,  215,  215,
+      215,  225,  225,  121,  225,  591,  225,  225,  225,  736,
+      117,  599,  117,  221,  589,  121,  193,  121,  193,  193,
+
+      193,  115,  121,  116,  116,  116,  116,  116,  116,  116,
+      116,  600,  225,  610,  225,  597,  216,  631,  216,  117,
+      117,  215,  215,  215,  215,  215,  215,  215,  215,  115,
+      601,  118,  118,  118,  118,  118,  118,  118,  118,  596,
+      121,  121,  637,  768,  626,  636,  602,  629,  117,  117,
+      121,  121,  121,  121,  121,  223,  121,  121,  225,  121,
+      121,  225,  226,  222,  225,  622,  121,  121,  121,  121,
+      121,  121,  225,  665,  224,  121,  121,  117,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+
+      121,  121,  215,  215,  215,  215,  215,  215,  215,  215,
+      121,  121,  121,  121,  121,  228,  121,  225,  227,  121,
+      121,  654,  121,  621,  620,  225,  121,  225,  121,  229,
+      121,  225,  121,  225,  121,  121,  121,  230,  121,  225,
+      225,  121,  225,  232,  121,  734,  225,  733,  121,  732,
+      121,  231,  121,  225,  121,  121,  121,  121,  121,  225,
+      225,  638,  225,  121,  726,  121,  233,  234,  121,  121,
+      225,  236,  235,  225,  121,  225,  633,  225,  121,  628,
+      121,  121,  121,  121,  659,  121,  662,  121,  121,  240,
+      121,  121,  237,  238,  225,  634,  664,  667,  121,  121,
+
+      121,  121,  241,  121,  639,  121,  242,  121,  225,  243,
+      239,  121,  121,  121,  723,  669,  225,  247,  121,  653,
+      655,  680,  121,  679,  121,  244,  121,  121,  668,  225,
+      121,  121,  225,  248,  684,  661,  225,  121,  121,  121,
+      121,  121,  121,  225,  121,  225,  121,  225,  121,  121,
+      121,  764,  249,  121,  250,  764,  225,  121,  718,  225,
+      717,  225,  716,  121,  121,  121,  711,  121,  666,  681,
+      251,  252,  121,  225,  121,  121,  121,  253,  121,  225,
+      765,  121,  686,  121,  709,  121,  225,  121,  735,  121,
+      706,  121,  121,  255,  121,  121,  670,  254,  225,  225,
+
+      121,  225,  256,  687,  121,  121,  121,  689,  121,  691,
+      225,  121,  694,  258,  225,  121,  225,  121,  121,  121,
+      121,  121,  121,  692,  121,  225,  259,  121,  225,  121,
+      700,  121,  121,  121,  225,  121,  702,  705,  225,  121,
+      121,  121,  121,  121,  121,  121,  121,  260,  121,  225,
+      262,  121,  708,  698,  225,  121,  121,  121,  693,  121,
+      225,  710,  225,  225,  121,  263,  121,  707,  121,  121,
+      121,  712,  265,  715,  225,  264,  266,  225,  714,  121,
+      697,  121,  225,  121,  268,  121,  225,  725,  121,  720,
+      225,  121,  696,  225,  713,  269,  225,  121,  695,  121,
+
+      722,  121,  121,  121,  121,  121,  270,  721,  121,  271,
+      121,  724,  121,  225,  121,  727,  121,  275,  121,  121,
+      121,  121,  121,  751,  273,  728,  272,  121,  225,  121,
+      121,  274,  690,  121,  730,  729,  121,  731,  121,  688,
+      121,  276,  121,  225,  121,  744,  121,  121,  121,  121,
+      121,  745,  737,  121,  685,  121,  677,  121,  673,  121,
+      279,  121,  672,  121,  740,  121,  277,  121,  121,  121,
+      280,  671,  121,  281,  225,  225,  663,  660,  121,  121,
+      121,  121,  121,  121,  225,  287,  285,  121,  121,  183,
+      183,  183,  183,  183,  183,  183,  183,  288,  225,  225,
+
+      738,  183,  183,  183,  183,  183,  183,  183,  183,  115,
+      644,  213,  213,  213,  213,  213,  213,  213,  213,  215,
+      215,  215,  215,  215,  215,  215,  215,  121,  117,  643,
+      307,  739,  630,  121,  627,  746,  606,  121,  225,  121,
+      225,  121,  592,  121,  588,  121,  121,  121,  562,  121,
+      121,  561,  121,  560,  545,  507,  506,  117,  120,  121,
+      308,  121,  121,  121,  121,  121,  444,  764,  121,  121,
+      443,  764,  375,  121,  378,  121,  121,  121,  309,  121,
+      310,  207,  205,  121,  121,  121,  121,  121,  121,  747,
+      121,  203,  121,  201,  377,  121,  765,  640,  640,  640,
+
+      640,  640,  198,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  219,  219,  219,  219,  219,
+      219,  219,  219,  219,  219,  121,  121,  194,  375,  179,
+      768,  225,  301,  207,  205,  121,  312,  121,  121,  121,
+      121,  121,  311,  297,  121,  121,  201,  295,  198,  121,
+      194,  121,  121,  121,  291,  121,  314,  313,  290,  121,
+      121,  121,  121,  121,  121,  121,  121,  289,  121,  315,
+      179,  121,  225,  121,  217,  121,  214,  121,  210,  316,
+      641,  207,  205,  121,  121,  121,  204,  121,  319,  121,
+      317,  318,  121,  203,  203,  121,  320,  201,  321,  121,
+
+      119,  121,  200,  121,  198,  121,  121,  121,  121,  121,
+      114,  197,  121,  192,  121,  190,  121,  114,  121,  322,
+      121,  188,  121,  121,  121,  121,  121,  187,  186,  121,
+      179,  121,  324,  121,  323,  121,  177,  121,  119,  121,
+      121,  121,  121,  121,  113,  103,  121,  100,  121,  327,
+      325,  100,  121,  326,  121,  768,  121,  121,  121,  121,
+      121,  768,  768,  768,  768,  121,  768,  121,  121,  121,
+      768,  121,  768,  768,  328,  768,  121,  768,  121,  329,
+      121,  121,  121,  768,  768,  768,  768,  121,  768,  121,
+      768,  121,  121,  121,  768,  121,  768,  768,  332,  121,
+
+      121,  333,  334,  121,  121,  335,  121,  121,  121,  768,
+      121,  121,  768,  121,  768,  768,  338,  336,  768,  121,
+      121,  121,  121,  121,  121,  121,  121,  121,  337,  121,
+      339,  121,  121,  768,  768,  768,  768,  768,  768,  121,
+      768,  121,  121,  121,  768,  121,  768,  768,  768,  121,
+      121,  121,  121,  121,  121,  121,  121,  768,  121,  768,
+      768,  340,  768,  121,  768,  341,  343,  121,  768,  121,
+      768,  768,  768,  121,  121,  121,  121,  121,  768,  344,
+      768,  768,  121,  768,  121,  768,  121,  121,  121,  768,
+      121,  345,  768,  768,  121,  121,  121,  121,  121,  121,
+
+      121,  121,  768,  121,  768,  347,  121,  768,  121,  768,
+      121,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  768,  121,  768,  121,  348,  121,  121,  121,  768,
+      121,  768,  768,  349,  121,  121,  121,  121,  121,  353,
+      121,  768,  768,  121,  350,  768,  768,  352,  121,  121,
+      121,  121,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  768,  768,  768,  354,  768,  121,
+      768,  121,  355,  121,  768,  121,  768,  121,  768,  121,
+      121,  121,  768,  121,  356,  121,  768,  121,  121,  121,
+      768,  121,  768,  768,  768,  121,  121,  121,  121,  121,
+
+      768,  768,  768,  357,  121,  768,  121,  768,  121,  768,
+      121,  768,  121,  768,  768,  358,  121,  121,  121,  121,
+      121,  768,  360,  359,  768,  121,  768,  121,  768,  121,
+      768,  121,  768,  121,  768,  768,  366,  121,  121,  121,
+      362,  121,  363,  121,  121,  768,  121,  364,  768,  768,
+      768,  768,  768,  121,  121,  121,  121,  121,  121,  121,
+      768,  365,  121,  121,  768,  370,  768,  768,  768,  121,
+      768,  121,  768,  121,  768,  768,  768,  768,  121,  371,
+      371,  371,  371,  371,  768,  768,  768,  373,  373,  373,
+      373,  373,  768,  768,  768,  768,  372,  372,  372,  372,
+
+      372,  372,  372,  372,  374,  374,  374,  374,  374,  374,
+      374,  374,  121,  121,  768,  768,  768,  768,  768,  768,
+      380,  768,  121,  121,  379,  121,  121,  121,  121,  768,
+      768,  121,  121,  768,  121,  768,  768,  768,  121,  381,
+      121,  768,  121,  768,  121,  121,  382,  121,  121,  768,
+      768,  121,  768,  121,  384,  121,  768,  121,  768,  121,
+      768,  121,  768,  121,  121,  121,  385,  121,  121,  386,
+      121,  768,  768,  768,  768,  768,  768,  121,  121,  121,
+      121,  121,  121,  121,  768,  768,  121,  121,  768,  768,
+      383,  121,  768,  121,  768,  121,  768,  121,  768,  121,
+
+      387,  121,  121,  121,  388,  121,  768,  768,  768,  121,
+      121,  121,  121,  121,  390,  121,  768,  389,  121,  768,
+      768,  768,  121,  121,  121,  121,  121,  121,  768,  121,
+      768,  391,  768,  121,  121,  392,  121,  121,  393,  121,
+      768,  394,  121,  768,  768,  768,  121,  768,  121,  121,
+      121,  121,  768,  121,  121,  121,  768,  395,  121,  768,
+      121,  768,  768,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  396,  768,  768,  121,  397,  121,
+      768,  121,  768,  121,  768,  121,  768,  121,  121,  121,
+      121,  121,  768,  398,  768,  768,  121,  768,  121,  768,
+
+      399,  768,  121,  121,  400,  768,  401,  121,  768,  121,
+      768,  768,  768,  121,  768,  121,  768,  121,  768,  121,
+      121,  121,  121,  121,  768,  768,  121,  768,  121,  768,
+      121,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  405,  121,  768,  768,  406,  768,
+      768,  121,  121,  121,  121,  121,  121,  121,  407,  768,
+      121,  121,  409,  121,  768,  404,  768,  121,  768,  121,
+      413,  121,  768,  121,  768,  121,  408,  121,  121,  410,
+      768,  121,  121,  411,  768,  768,  768,  768,  121,  121,
+      121,  121,  121,  121,  412,  121,  768,  121,  768,  121,
+
+      121,  121,  121,  121,  768,  768,  414,  768,  121,  768,
+      121,  416,  121,  121,  121,  768,  121,  768,  768,  768,
+      121,  121,  121,  121,  121,  121,  121,  121,  768,  121,
+      421,  417,  121,  768,  121,  768,  121,  420,  121,  418,
+      121,  768,  768,  768,  121,  121,  121,  121,  121,  768,
+      768,  768,  768,  121,  768,  121,  768,  121,  422,  121,
+      768,  121,  423,  121,  768,  121,  121,  121,  768,  121,
+      768,  121,  768,  121,  121,  121,  768,  121,  768,  121,
+      768,  121,  121,  121,  768,  121,  768,  768,  768,  121,
+      121,  121,  121,  121,  768,  426,  768,  425,  121,  768,
+
+      121,  768,  121,  121,  121,  768,  121,  768,  768,  768,
+      121,  121,  121,  121,  121,  427,  768,  121,  121,  121,
+      428,  121,  121,  768,  121,  768,  768,  768,  121,  768,
+      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+      121,  768,  121,  121,  768,  121,  768,  768,  768,  121,
+      768,  121,  121,  121,  431,  121,  121,  121,  121,  121,
+      768,  121,  121,  429,  432,  433,  768,  768,  121,  768,
+      768,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  768,  768,  768,  121,  768,  121,
+      768,  121,  768,  121,  768,  121,  435,  768,  121,  371,
+
+      371,  371,  371,  371,  434,  121,  768,  121,  768,  121,
+      768,  768,  768,  768,  121,  768,  372,  372,  372,  372,
+      372,  372,  372,  372,  439,  439,  439,  439,  439,  768,
+      768,  768,  373,  373,  373,  373,  373,  440,  768,  768,
+      768,  372,  372,  372,  372,  372,  372,  372,  372,  374,
+      374,  374,  374,  374,  374,  374,  374,  440,  768,  121,
+      768,  374,  374,  374,  374,  374,  374,  374,  374,  121,
+      768,  121,  768,  121,  121,  446,  768,  445,  121,  447,
+      121,  768,  768,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  121,  768,  768,  768,  768,  121,
+
+      768,  121,  768,  121,  768,  121,  768,  441,  449,  121,
+      121,  768,  121,  450,  768,  121,  768,  768,  451,  121,
+      768,  121,  121,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  768,  121,  121,  768,  768,  768,  768,  768,
+      121,  121,  121,  121,  121,  452,  768,  121,  768,  121,
+      768,  121,  121,  121,  121,  121,  768,  453,  768,  768,
+      121,  454,  121,  768,  121,  768,  121,  768,  121,  768,
+      768,  768,  455,  121,  121,  121,  121,  768,  456,  768,
+      768,  121,  457,  768,  768,  121,  121,  121,  458,  121,
+      768,  768,  121,  768,  121,  459,  121,  768,  121,  460,
+
+      121,  768,  121,  121,  121,  121,  121,  768,  768,  768,
+      768,  121,  768,  121,  121,  121,  768,  121,  768,  461,
+      768,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      463,  768,  462,  121,  768,  121,  768,  768,  768,  121,
+      768,  121,  768,  121,  768,  121,  121,  121,  121,  121,
+      768,  768,  121,  464,  121,  768,  121,  768,  121,  768,
+      121,  768,  121,  465,  466,  121,  121,  121,  121,  768,
+      768,  121,  768,  768,  768,  470,  768,  121,  121,  121,
+      121,  121,  121,  768,  768,  121,  121,  121,  121,  471,
+      768,  472,  768,  768,  768,  121,  768,  121,  121,  121,
+
+      121,  768,  121,  473,  121,  121,  121,  121,  474,  768,
+      768,  768,  768,  768,  768,  121,  121,  475,  121,  121,
+      121,  121,  768,  768,  121,  121,  768,  121,  768,  768,
+      477,  121,  768,  121,  768,  121,  768,  121,  121,  121,
+      476,  121,  479,  768,  768,  480,  121,  768,  121,  768,
+      121,  121,  121,  768,  768,  478,  768,  121,  768,  121,
+      768,  121,  121,  121,  768,  121,  768,  768,  768,  121,
+      121,  121,  121,  121,  121,  121,  121,  482,  121,  768,
+      768,  121,  768,  121,  768,  121,  768,  121,  768,  121,
+      768,  121,  768,  121,  121,  483,  768,  121,  768,  121,
+
+      768,  121,  121,  121,  768,  121,  768,  485,  768,  121,
+      121,  487,  121,  121,  768,  768,  768,  768,  121,  768,
+      768,  768,  121,  768,  121,  121,  121,  768,  121,  768,
+      488,  121,  490,  768,  768,  121,  121,  121,  121,  121,
+      491,  492,  121,  768,  121,  768,  121,  121,  121,  121,
+      121,  768,  768,  768,  768,  121,  768,  768,  768,  121,
+      121,  121,  768,  121,  768,  768,  121,  768,  121,  496,
+      121,  493,  121,  768,  121,  768,  121,  121,  121,  121,
+      121,  768,  768,  768,  768,  121,  768,  121,  121,  121,
+      768,  121,  768,  497,  768,  768,  121,  768,  121,  768,
+
+      121,  768,  121,  121,  768,  768,  768,  121,  503,  503,
+      503,  503,  503,  121,  768,  121,  768,  121,  768,  768,
+      768,  768,  121,  508,  121,  504,  504,  504,  504,  504,
+      504,  504,  504,  499,  121,  121,  121,  768,  121,  768,
+      768,  768,  768,  121,  768,  121,  121,  121,  768,  121,
+      768,  768,  121,  509,  121,  768,  121,  768,  511,  768,
+      121,  768,  121,  121,  121,  121,  121,  768,  768,  121,
+      512,  121,  513,  121,  768,  121,  768,  121,  768,  121,
+      768,  121,  121,  121,  514,  121,  121,  768,  121,  768,
+      768,  768,  768,  768,  768,  121,  121,  121,  515,  121,
+
+      121,  121,  768,  768,  121,  121,  768,  768,  768,  768,
+      768,  121,  121,  121,  517,  121,  768,  768,  121,  516,
+      121,  768,  121,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  768,  768,  121,  518,  121,  519,  768,
+      768,  121,  768,  520,  768,  121,  768,  121,  768,  121,
+      768,  121,  121,  121,  121,  121,  768,  522,  121,  768,
+      121,  768,  121,  768,  521,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  768,  121,  768,  121,  768,  121,
+      768,  121,  523,  121,  768,  121,  121,  121,  121,  121,
+      768,  768,  121,  768,  121,  768,  121,  768,  121,  525,
+
+      121,  768,  121,  524,  121,  121,  121,  526,  121,  121,
+      768,  121,  768,  530,  768,  768,  768,  768,  121,  121,
+      121,  121,  121,  121,  121,  768,  768,  121,  121,  768,
+      121,  531,  532,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  121,  768,  768,  121,  768,  121,
+      534,  121,  768,  121,  768,  121,  768,  121,  533,  121,
+      121,  121,  121,  535,  768,  768,  121,  768,  121,  536,
+      768,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  768,  768,  768,  121,  768,  121,
+      768,  121,  768,  121,  121,  537,  768,  538,  121,  768,
+
+      121,  768,  768,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  121,  768,  768,  539,  768,  121,
+      768,  121,  768,  121,  121,  121,  542,  121,  768,  768,
+      121,  768,  768,  768,  121,  121,  544,  121,  121,  121,
+      768,  121,  768,  121,  768,  121,  121,  121,  121,  121,
+      768,  547,  768,  546,  121,  768,  121,  768,  121,  768,
+      121,  768,  121,  768,  768,  768,  121,  121,  121,  768,
+      121,  121,  550,  768,  121,  121,  549,  121,  768,  768,
+      768,  121,  768,  121,  121,  121,  121,  121,  121,  121,
+      121,  121,  121,  121,  768,  121,  121,  768,  768,  768,
+
+      768,  768,  121,  768,  121,  121,  121,  121,  768,  121,
+      768,  121,  553,  768,  121,  503,  503,  503,  503,  503,
+      559,  768,  768,  768,  504,  504,  504,  504,  504,  504,
+      504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
+      121,  121,  768,  768,  768,  768,  768,  768,  564,  768,
+      121,  121,  121,  121,  121,  121,  121,  768,  563,  121,
+      121,  768,  121,  768,  768,  566,  121,  768,  121,  768,
+      121,  768,  121,  121,  121,  121,  121,  768,  768,  121,
+      768,  121,  768,  121,  768,  567,  568,  121,  768,  121,
+      121,  121,  121,  121,  768,  768,  121,  569,  121,  768,
+
+      121,  768,  121,  768,  121,  768,  121,  121,  121,  121,
+      121,  768,  768,  121,  768,  121,  768,  121,  768,  121,
+      570,  121,  768,  121,  768,  121,  121,  121,  121,  121,
+      571,  768,  121,  768,  768,  768,  768,  768,  121,  121,
+      121,  121,  121,  121,  121,  768,  768,  121,  121,  572,
+      121,  768,  768,  768,  121,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  121,  768,  768,  768,  573,  121,
+      768,  121,  121,  121,  768,  121,  768,  768,  575,  574,
+      121,  768,  121,  768,  121,  768,  121,  768,  121,  121,
+      121,  121,  121,  768,  768,  121,  768,  121,  768,  576,
+
+      768,  121,  581,  121,  768,  121,  121,  121,  121,  121,
+      768,  768,  768,  768,  121,  768,  121,  121,  121,  768,
+      121,  768,  768,  121,  582,  121,  768,  121,  768,  121,
+      768,  121,  768,  121,  121,  121,  121,  121,  768,  768,
+      121,  768,  121,  584,  121,  768,  121,  768,  121,  768,
+      121,  583,  121,  121,  121,  121,  121,  768,  768,  121,
+      768,  768,  768,  768,  768,  121,  121,  121,  121,  121,
+      121,  121,  586,  585,  121,  121,  768,  121,  768,  768,
+      768,  121,  768,  121,  768,  121,  768,  121,  121,  121,
+      121,  121,  768,  768,  121,  768,  121,  768,  590,  768,
+
+      121,  768,  121,  768,  121,  121,  121,  121,  121,  768,
+      768,  121,  768,  121,  768,  121,  768,  121,  768,  121,
+      768,  121,  587,  121,  121,  121,  121,  768,  768,  594,
+      121,  768,  121,  768,  768,  595,  121,  768,  121,  768,
+      121,  768,  121,  768,  121,  121,  121,  598,  121,  121,
+      609,  121,  603,  603,  603,  603,  603,  768,  121,  121,
+      121,  121,  121,  121,  768,  768,  768,  121,  121,  604,
+      604,  604,  604,  604,  604,  604,  604,  121,  121,  768,
+      768,  768,  768,  768,  608,  768,  768,  121,  121,  121,
+      121,  121,  121,  121,  611,  768,  121,  121,  768,  768,
+
+      768,  768,  768,  121,  121,  121,  768,  121,  768,  768,
+      121,  612,  121,  768,  121,  768,  613,  768,  121,  768,
+      121,  121,  614,  121,  121,  616,  768,  121,  768,  121,
+      768,  121,  768,  121,  615,  121,  768,  121,  768,  121,
+      121,  121,  121,  768,  768,  121,  121,  768,  617,  768,
+      768,  768,  121,  121,  121,  121,  121,  121,  768,  121,
+      768,  121,  768,  121,  121,  121,  121,  121,  768,  121,
+      768,  768,  121,  618,  768,  768,  121,  768,  121,  121,
+      121,  121,  768,  121,  121,  121,  768,  623,  121,  768,
+      121,  768,  768,  768,  121,  768,  121,  768,  121,  768,
+
+      121,  121,  121,  121,  121,  768,  768,  121,  768,  121,
+      768,  121,  768,  121,  768,  121,  768,  121,  121,  121,
+      121,  121,  768,  768,  121,  624,  121,  768,  121,  632,
+      121,  768,  121,  768,  121,  121,  121,  121,  121,  768,
+      768,  768,  625,  121,  768,  121,  121,  121,  768,  121,
+      768,  768,  121,  768,  121,  768,  121,  768,  121,  768,
+      121,  768,  121,  121,  121,  121,  121,  768,  768,  768,
+      768,  121,  768,  635,  768,  121,  768,  121,  121,  768,
+      768,  768,  121,  603,  603,  603,  603,  603,  121,  768,
+      121,  645,  121,  768,  768,  768,  768,  121,  768,  768,
+
+      604,  604,  604,  604,  604,  604,  604,  604,  640,  640,
+      640,  640,  640,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  121,  121,  604,  604,  604,  604,  604,
+      604,  604,  604,  121,  121,  121,  121,  121,  121,  121,
+      768,  768,  121,  121,  768,  121,  768,  768,  647,  121,
+      768,  121,  768,  121,  768,  121,  646,  121,  121,  121,
+      121,  121,  768,  768,  121,  648,  768,  768,  768,  768,
+      121,  121,  121,  649,  121,  121,  121,  768,  651,  121,
+      121,  768,  121,  768,  768,  768,  121,  768,  121,  768,
+      121,  641,  652,  121,  121,  121,  121,  768,  768,  768,
+
+      768,  121,  768,  121,  121,  121,  768,  121,  768,  656,
+      768,  768,  121,  768,  121,  121,  121,  657,  121,  768,
+      768,  121,  658,  121,  768,  121,  768,  121,  768,  121,
+      768,  121,  121,  121,  121,  121,  768,  768,  121,  768,
+      121,  768,  121,  768,  674,  768,  121,  768,  121,  768,
+      121,  121,  121,  121,  121,  675,  768,  121,  768,  768,
+      768,  768,  768,  121,  121,  121,  121,  121,  121,  121,
+      121,  768,  121,  121,  768,  768,  768,  768,  768,  121,
+      121,  121,  121,  121,  121,  121,  676,  768,  121,  121,
+      768,  121,  678,  768,  768,  121,  768,  121,  768,  121,
+
+      768,  121,  121,  121,  121,  121,  768,  768,  768,  768,
+      121,  768,  121,  121,  682,  768,  121,  768,  768,  121,
+      768,  121,  768,  121,  768,  121,  683,  121,  768,  121,
+      121,  121,  121,  121,  768,  768,  121,  768,  121,  768,
+      121,  768,  121,  768,  121,  768,  121,  121,  121,  121,
+      121,  768,  768,  768,  768,  121,  768,  121,  121,  121,
+      768,  121,  768,  768,  121,  699,  121,  768,  121,  768,
+      121,  768,  121,  768,  121,  703,  704,  121,  121,  121,
+      121,  768,  768,  121,  768,  768,  768,  768,  768,  121,
+      121,  121,  121,  121,  121,  121,  121,  768,  121,  121,
+
+      768,  768,  719,  768,  768,  121,  121,  121,  121,  121,
+      121,  768,  768,  768,  121,  121,   60,   60,   60,   60,
+       60,   60,   60,   60,   60,   60,   60,   60,   65,   65,
+       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   73,   73,   73,   73,   73,   73,   73,   73,
+       73,   73,   73,   73,   82,   82,   82,   82,   82,   82,
+       82,   82,   82,   82,   82,   82,  102,  102,  102,  102,
+      768,  102,  102,  102,  102,  102,  102,  102,  109,  109,
+      109,  768,  109,  768,  109,  180,  180,  768,  180,  180,
+
+      185,  185,  768,  768,  185,  185,  768,  185,  185,  185,
+      185,  185,  189,  189,  189,  189,  768,  189,  189,  189,
+      189,  189,  189,  189,  191,  191,  191,  191,  191,  191,
+      191,  191,  768,  191,  191,  193,  768,  768,  768,  193,
+      193,  193,  193,  193,  193,  193,  194,  768,  768,  768,
+      194,  194,  194,  194,  194,  194,  194,  199,  199,  768,
+      199,  199,  202,  202,  768,  202,  206,  206,  768,  206,
+      206,  208,  208,  768,  208,  208,  218,  768,  218,  218,
+      127,  127,  768,  127,  127,  286,  768,  286,  286,  294,
+      768,  294,  294,  296,  768,  296,  298,  768,  298,  298,
+
+      299,  768,  299,  299,  302,  302,  302,  302,  302,  302,
+      302,  302,  302,  302,  302,  302,  219,  219,  768,  219,
+      219,  607,  607,  768,  607,  607,  607,  607,  607,  607,
+      607,  607,  607,   19,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768
+    } ;
+
+static yyconst flex_int16_t yy_chk[4723] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
+        3,    4,    4,    4,    5,    5,    5,    6,    6,    6,
+
+        9,    3,    7,    8,    4,    9,   10,    5,   11,   12,
+        6,   10,    7,    8,   31,   56,   31,    7,    8,  680,
+      106,   21,   21,   21,   21,   21,  330,  142,    7,    8,
+       21,  111,   11,   12,  766,   11,   12,   22,   22,   22,
+       22,   22,   41,   41,  111,  765,   22,   26,   26,   26,
+       26,   26,  106,   41,  680,   41,   26,   41,   28,   41,
+      152,  157,   41,   56,   26,   26,   28,   28,   28,   28,
+       28,   28,   28,   28,   84,   84,   84,   84,   84,   85,
+       85,   85,   85,   85,  142,  143,  330,   59,   11,   12,
+       11,   12,   13,   13,   13,   13,   13,   13,   13,   13,
+
+       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+       95,   95,   95,   95,   95,  157,  152,  162,   13,   13,
+       13,   13,   13,   29,  245,  292,  292,   13,   29,   43,
+      143,   29,   29,   29,   29,   29,   29,   29,   29,   43,
+      762,   43,  442,   43,  421,  174,  171,  442,   43,   13,
+       13,   13,   32,   46,   32,   32,   32,   32,   32,   32,
+       32,   32,   59,   46,  257,   46,  342,   46,  421,  246,
+      162,   32,   46,  245,   13,   13,   13,   13,   13,   13,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,  174,   46,
+
+       32,  171,   86,  211,  261,  211,   14,   14,   14,   14,
+       14,   37,  278,  257,   37,   14,  211,   39,   37,   86,
+       39,   37,   37,   37,   37,   37,  342,   39,  246,   39,
+       37,   39,  195,  195,   37,   38,   39,   14,   14,   14,
+      209,   38,  376,  195,  761,   38,  209,   38,   38,   38,
+      760,   86,  376,  261,   38,   96,   96,   96,   96,   96,
+      759,  278,   14,   14,   14,   14,   14,   14,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+       15,   15,   15,   15,   15,   15,   17,   17,   17,   17,
+       17,  351,  758,   17,   17,   44,   44,  361,   44,   17,
+       17,  283,   17,  175,  284,  346,   44,   44,   44,  757,
+       44,   17,  756,   44,  282,   44,   17,   17,   17,   17,
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+
+       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
+       17,   17,   17,   17,   40,  101,  101,  101,  101,  101,
+      283,  175,  346,  351,   40,   40,   40,  284,   40,  361,
+       45,   45,   49,   40,  175,   49,   40,   17,   45,   17,
+       25,   45,   49,   45,   49,   45,   49,  304,  282,  304,
+       45,   49,  196,  196,  196,  196,  196,   25,  755,  495,
+      304,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   25,   25,   25,   25,   25,  267,  367,   25,
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+
+       25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
+       25,   25,   33,   42,   33,   33,   33,   33,   33,   33,
+       33,   33,  331,   42,  495,   42,  605,   42,  560,   47,
+       47,   33,   42,   47,  484,  560,  754,  367,  480,   47,
+       53,   47,  212,   47,  267,   42,  212,  368,   47,  753,
+       53,  403,   53,  484,   53,  605,   42,  369,   47,   53,
+       33,   36,  480,  751,   36,   36,   36,   36,   36,   36,
+       36,   36,  212,  383,  331,  404,   53,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+
+       36,   36,   36,  369,  403,  368,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   36,   36,
+       36,   36,   36,   36,   36,   36,   36,   36,   48,   48,
+      489,   48,  305,  383,  438,  404,  305,   50,  402,   48,
+       50,   48,  415,   48,   50,   48,  468,   50,   48,   50,
+       51,   50,  419,  424,  437,   50,   50,  434,   51,   51,
+       50,  749,  305,  430,  616,  748,  747,   52,  746,   51,
+      744,   51,   48,   51,  743,   51,  489,   52,   51,   52,
+       54,   52,  616,  402,  742,   52,   52,   54,  741,  438,
+       54,   51,   54,  468,   54,  415,  121,  740,  424,   54,
+
+       58,   58,   58,   58,   58,  500,  121,   52,  121,  429,
+      121,  436,  430,  434,  419,  121,  437,   58,   58,   58,
+       58,   58,   58,   58,   58,   82,  181,  181,  181,  181,
+      181,   82,   82,   82,   82,   82,   82,   82,   82,   82,
+       82,   82,   82,  181,  181,  181,  181,  181,  181,  181,
+      181,   82,   82,   82,   82,   82,  108,  108,  108,  108,
+      108,  448,  467,  469,  734,  108,  500,  733,  481,  429,
+      732,  436,  499,  108,  108,  439,  439,  439,  439,  439,
+      510,  494,   82,   82,   82,  110,  122,  110,  110,  110,
+      110,  110,  110,  110,  110,  731,  122,  528,  122,  577,
+
+      122,  527,  529,  122,  110,  122,  498,  501,   82,  548,
+       82,   82,   82,   83,  448,  481,  469,  467,  502,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+       83,  528,  499,  110,  494,  527,  543,  510,  555,   83,
+       83,   83,   83,   83,  112,  728,  112,  112,  112,  112,
+      112,  112,  112,  112,  527,  498,  501,   83,  439,  529,
+      541,  577,  565,  112,  548,  557,  556,  502,  593,  724,
+       83,   83,   83,  115,  115,  115,  115,  115,  115,  115,
+      115,  552,  551,  123,  587,  543,  591,  600,  599,  723,
+      115,  555,  112,  123,  541,  123,   83,  123,   83,   83,
+
+       83,  116,  123,  116,  116,  116,  116,  116,  116,  116,
+      116,  556,  558,  565,  580,  552,  117,  593,  117,  115,
+      116,  117,  117,  117,  117,  117,  117,  117,  117,  118,
+      557,  118,  118,  118,  118,  118,  118,  118,  118,  551,
+      124,  125,  600,  632,  587,  599,  558,  591,  118,  116,
+      124,  125,  124,  125,  124,  125,  126,  128,  578,  124,
+      125,  579,  128,  124,  722,  580,  126,  128,  126,  128,
+      126,  128,  620,  632,  126,  126,  128,  118,  120,  120,
+      120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
+      120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
+
+      129,  130,  215,  215,  215,  215,  215,  215,  215,  215,
+      129,  130,  129,  130,  129,  130,  131,  589,  129,  129,
+      130,  620,  132,  579,  578,  596,  131,  601,  131,  131,
+      131,  626,  132,  597,  132,  131,  132,  133,  133,  629,
+      720,  132,  602,  134,  134,  718,  636,  717,  133,  716,
+      133,  133,  133,  638,  134,  135,  134,  133,  134,  619,
+      621,  601,  631,  134,  709,  135,  135,  135,  136,  135,
+      653,  137,  136,  654,  135,  628,  596,  659,  136,  589,
+      136,  137,  136,  137,  626,  137,  629,  136,  139,  139,
+      137,  138,  138,  138,  637,  597,  631,  636,  139,  140,
+
+      139,  138,  139,  138,  602,  138,  139,  139,  634,  140,
+      138,  140,  141,  140,  706,  638,  655,  144,  140,  619,
+      621,  654,  141,  653,  141,  141,  141,  144,  637,  661,
+      145,  141,  721,  145,  659,  628,  639,  144,  146,  144,
+      145,  144,  145,  662,  145,  664,  144,  705,  146,  145,
+      146,  763,  146,  147,  147,  763,  666,  146,  698,  670,
+      697,  668,  695,  147,  148,  147,  690,  147,  634,  655,
+      147,  147,  147,  679,  148,  149,  148,  148,  148,  681,
+      763,  150,  661,  148,  688,  149,  684,  149,  721,  149,
+      685,  150,  151,  150,  149,  150,  639,  149,  669,  687,
+
+      150,  689,  151,  662,  151,  153,  151,  664,  154,  666,
+      686,  151,  670,  153,  691,  153,  694,  153,  154,  153,
+      154,  155,  154,  668,  153,  693,  154,  154,  708,  156,
+      679,  155,  158,  155,  692,  155,  681,  684,  700,  156,
+      155,  156,  158,  156,  158,  159,  158,  156,  156,  702,
+      158,  158,  687,  677,  701,  159,  160,  159,  669,  159,
+      707,  689,  710,  745,  159,  159,  160,  686,  160,  161,
+      160,  691,  161,  694,  712,  160,  161,  714,  693,  161,
+      673,  161,  713,  161,  163,  163,  715,  708,  161,  700,
+      725,  164,  672,  737,  692,  163,  735,  163,  671,  163,
+
+      702,  164,  165,  164,  163,  164,  164,  701,  166,  164,
+      164,  707,  165,  730,  165,  710,  165,  168,  166,  167,
+      166,  165,  166,  745,  166,  712,  165,  166,  667,  167,
+      168,  167,  665,  167,  714,  713,  169,  715,  167,  663,
+      168,  169,  168,  727,  168,  735,  169,  170,  169,  168,
+      169,  737,  725,  172,  660,  169,  650,  170,  644,  170,
+      172,  170,  643,  172,  730,  172,  170,  172,  176,  173,
+      173,  642,  172,  173,  729,  633,  630,  627,  176,  173,
+      176,  173,  176,  173,  738,  182,  176,  176,  173,  182,
+      182,  182,  182,  182,  182,  182,  182,  183,  622,  610,
+
+      727,  183,  183,  183,  183,  183,  183,  183,  183,  213,
+      607,  213,  213,  213,  213,  213,  213,  213,  213,  216,
+      216,  216,  216,  216,  216,  216,  216,  220,  213,  606,
+      220,  729,  592,  221,  588,  738,  561,  220,  739,  220,
+      554,  220,  545,  221,  540,  221,  220,  221,  507,  222,
+      223,  506,  221,  505,  486,  444,  443,  213,  218,  222,
+      223,  222,  223,  222,  223,  224,  378,  764,  222,  223,
+      377,  764,  375,  226,  306,  224,  227,  224,  224,  224,
+      226,  299,  298,  226,  224,  226,  227,  226,  227,  739,
+      227,  297,  226,  296,  295,  227,  764,  640,  640,  640,
+
+      640,  640,  294,  218,  218,  218,  218,  218,  218,  218,
+      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
+      218,  218,  218,  218,  218,  228,  229,  293,  290,  286,
+      225,  219,  210,  208,  206,  228,  229,  228,  229,  228,
+      229,  230,  228,  204,  228,  229,  202,  200,  199,  231,
+      194,  230,  232,  230,  192,  230,  231,  230,  187,  231,
+      230,  231,  232,  231,  232,  233,  232,  184,  231,  232,
+      180,  232,  127,  234,  119,  233,  113,  233,  109,  233,
+      640,  107,  105,  234,  233,  234,  104,  234,  235,  235,
+      234,  234,  234,  103,  100,  236,  235,   99,  236,  235,
+
+       98,  235,   97,  235,   90,  236,  237,  236,  235,  236,
+       89,   88,  238,   75,  236,   72,  237,   68,  237,  237,
+      237,   67,  238,  239,  238,  237,  238,   64,   63,  240,
+       57,  238,  240,  239,  239,  239,   55,  239,   34,  240,
+      241,  240,  239,  240,   30,   24,  242,   23,  240,  242,
+      241,   20,  241,  241,  241,   19,  242,  243,  242,  241,
+      242,    0,    0,    0,    0,  242,    0,  243,  244,  243,
+        0,  243,    0,    0,  243,    0,  243,    0,  244,  244,
+      244,  247,  244,    0,    0,    0,    0,  244,    0,  248,
+        0,  247,  249,  247,    0,  247,    0,    0,  247,  248,
+
+      247,  248,  249,  248,  249,  249,  249,  250,  248,    0,
+      251,  249,    0,  252,    0,    0,  252,  250,    0,  250,
+      251,  250,  251,  252,  251,  252,  250,  252,  251,  251,
+      253,  254,  252,    0,    0,    0,    0,    0,    0,  253,
+        0,  254,  255,  254,    0,  254,    0,    0,    0,  253,
+      254,  253,  255,  253,  255,  256,  255,    0,  253,    0,
+        0,  255,    0,  258,    0,  256,  258,  256,    0,  256,
+        0,    0,    0,  258,  256,  258,  259,  258,    0,  259,
+        0,    0,  258,    0,  260,    0,  259,  262,  259,    0,
+      259,  260,    0,    0,  260,  259,  260,  262,  260,  262,
+
+      263,  262,    0,  260,    0,  262,  262,    0,  264,    0,
+      263,    0,  263,    0,  263,    0,  265,    0,  264,  263,
+      264,    0,  264,    0,  266,  264,  265,  264,  265,    0,
+      265,    0,    0,  265,  266,  265,  266,  268,  266,  269,
+      269,    0,    0,  266,  266,    0,    0,  268,  270,  268,
+      269,  268,  269,    0,  269,    0,  268,    0,  270,  269,
+      270,  271,  270,    0,    0,    0,    0,  270,    0,  272,
+        0,  271,  272,  271,    0,  271,    0,  273,    0,  272,
+      271,  272,    0,  272,  273,  274,    0,  273,  272,  273,
+        0,  273,    0,    0,    0,  274,  273,  274,  275,  274,
+
+        0,    0,    0,  274,  274,    0,  276,    0,  275,    0,
+      275,    0,  275,    0,    0,  275,  276,  275,  276,  277,
+      276,    0,  277,  276,    0,  276,    0,  279,    0,  277,
+        0,  277,    0,  277,    0,    0,  281,  279,  277,  279,
+      279,  279,  279,  280,  281,    0,  279,  279,    0,    0,
+        0,    0,    0,  280,  281,  280,  281,  280,  281,  285,
+        0,  280,  280,  281,    0,  285,    0,    0,    0,  285,
+        0,  285,    0,  285,    0,    0,    0,    0,  285,  287,
+      287,  287,  287,  287,    0,    0,    0,  288,  288,  288,
+      288,  288,    0,    0,    0,    0,  287,  287,  287,  287,
+
+      287,  287,  287,  287,  288,  288,  288,  288,  288,  288,
+      288,  288,  307,  308,    0,    0,    0,    0,    0,    0,
+      308,    0,  307,  308,  307,  308,  307,  308,  309,    0,
+        0,  307,  308,    0,  310,    0,    0,    0,  309,  309,
+      309,    0,  309,    0,  310,  311,  310,  309,  310,    0,
+        0,  312,    0,  310,  312,  311,    0,  311,    0,  311,
+        0,  312,    0,  312,  311,  312,  313,  313,  314,  314,
+      312,    0,    0,    0,    0,    0,    0,  313,  314,  313,
+      314,  313,  314,  315,    0,    0,  313,  314,    0,    0,
+      311,  316,    0,  315,    0,  315,    0,  315,    0,  317,
+
+      315,  316,  315,  316,  316,  316,    0,    0,    0,  317,
+      316,  317,  319,  317,  318,  318,    0,  317,  317,    0,
+        0,    0,  319,  320,  319,  318,  319,  318,    0,  318,
+        0,  319,    0,  320,  318,  320,  321,  320,  321,  322,
+        0,  322,  320,    0,    0,    0,  321,    0,  321,  322,
+      321,  322,    0,  322,  323,  321,    0,  323,  322,    0,
+      324,    0,    0,    0,  323,    0,  323,    0,  323,    0,
+      324,  325,  324,  323,  324,    0,    0,  326,  325,  324,
+        0,  325,    0,  325,    0,  325,    0,  326,  327,  326,
+      325,  326,    0,  326,    0,    0,  326,    0,  327,    0,
+
+      327,    0,  327,  328,  327,    0,  328,  327,    0,  329,
+        0,    0,    0,  328,    0,  328,    0,  328,    0,  329,
+      332,  329,  328,  329,    0,    0,  333,    0,  329,    0,
+      332,    0,  332,    0,  332,    0,  333,    0,  333,  332,
+      333,  334,  335,    0,  333,  333,    0,    0,  334,    0,
+        0,  334,  335,  334,  335,  334,  335,  336,  335,    0,
+      334,  335,  337,  337,    0,  332,    0,  336,    0,  336,
+      339,  336,    0,  337,    0,  337,  336,  337,  338,  337,
+        0,  339,  337,  338,    0,    0,    0,    0,  338,  340,
+      338,  339,  338,  339,  338,  339,    0,  338,    0,  340,
+
+      339,  340,  341,  340,    0,    0,  340,    0,  340,    0,
+      343,  343,  341,  344,  341,    0,  341,    0,    0,    0,
+      343,  341,  343,  344,  343,  344,  345,  344,    0,  343,
+      348,  344,  344,    0,  347,    0,  345,  347,  345,  345,
+      345,    0,    0,    0,  347,  345,  347,  348,  347,    0,
+        0,    0,    0,  347,    0,  349,    0,  348,  349,  348,
+        0,  348,  350,  350,    0,  349,  348,  349,    0,  349,
+        0,  352,    0,  350,  349,  350,    0,  350,    0,  353,
+        0,  352,  350,  352,    0,  352,    0,    0,    0,  353,
+      352,  353,  354,  353,    0,  354,    0,  353,  353,    0,
+
+      355,    0,  354,  356,  354,    0,  354,    0,    0,    0,
+      355,  354,  355,  356,  355,  356,    0,  356,  358,  355,
+      357,  357,  356,    0,  359,    0,    0,    0,  358,    0,
+      358,  357,  358,  357,  359,  357,  359,  358,  359,  360,
+      357,    0,  362,  359,    0,  363,    0,    0,    0,  360,
+        0,  360,  362,  360,  362,  363,  362,  363,  360,  363,
+        0,  362,  364,  358,  363,  364,    0,    0,  365,    0,
+        0,    0,  364,    0,  364,    0,  364,    0,  365,  366,
+      365,  364,  365,    0,    0,    0,    0,  365,    0,  366,
+        0,  366,    0,  366,    0,  370,  366,    0,  366,  371,
+
+      371,  371,  371,  371,  365,  370,    0,  370,    0,  370,
+        0,    0,    0,    0,  370,    0,  371,  371,  371,  371,
+      371,  371,  371,  371,  372,  372,  372,  372,  372,    0,
+        0,    0,  373,  373,  373,  373,  373,  372,    0,    0,
+        0,  372,  372,  372,  372,  372,  372,  372,  372,  373,
+      373,  373,  373,  373,  373,  373,  373,  374,    0,  379,
+        0,  374,  374,  374,  374,  374,  374,  374,  374,  379,
+        0,  379,    0,  379,  380,  380,    0,  379,  379,  381,
+      381,    0,    0,    0,  380,    0,  380,    0,  380,    0,
+      381,  382,  381,  380,  381,    0,    0,    0,    0,  381,
+
+        0,  382,    0,  382,    0,  382,    0,  372,  384,  384,
+      382,    0,  385,  385,    0,  386,    0,    0,  386,  384,
+        0,  384,  385,  384,  385,  386,  385,  386,  384,  386,
+      387,  385,    0,  388,  386,    0,    0,    0,    0,    0,
+      387,  389,  387,  388,  387,  388,    0,  388,    0,  387,
+        0,  389,  388,  389,  390,  389,    0,  389,    0,    0,
+      389,  390,  391,    0,  390,    0,  390,    0,  390,    0,
+        0,    0,  391,  390,  391,  392,  391,    0,  392,    0,
+        0,  391,  392,    0,    0,  392,  393,  392,  393,  392,
+        0,    0,  394,    0,  392,  394,  393,    0,  393,  394,
+
+      393,    0,  394,  395,  394,  393,  394,    0,    0,    0,
+        0,  394,    0,  395,  396,  395,    0,  395,    0,  395,
+        0,    0,  395,    0,  396,    0,  396,    0,  396,  397,
+      397,    0,  396,  396,    0,  398,    0,    0,    0,  397,
+        0,  397,    0,  397,    0,  398,  399,  398,  397,  398,
+        0,    0,  400,  398,  398,    0,  399,    0,  399,    0,
+      399,    0,  400,  399,  400,  399,  400,  401,  405,    0,
+        0,  400,    0,    0,    0,  405,    0,  401,  405,  401,
+      405,  401,  405,    0,    0,  407,  401,  405,  406,  406,
+        0,  406,    0,    0,    0,  407,    0,  407,  406,  407,
+
+      406,    0,  406,  407,  407,  409,  408,  406,  408,    0,
+        0,    0,    0,    0,    0,  409,  408,  409,  408,  409,
+      408,  410,    0,    0,  409,  408,    0,  411,    0,    0,
+      411,  410,    0,  410,    0,  410,    0,  411,  412,  411,
+      410,  411,  413,    0,    0,  414,  411,    0,  412,    0,
+      412,  413,  412,    0,    0,  412,    0,  412,    0,  416,
+        0,  413,  414,  413,    0,  413,    0,    0,    0,  416,
+      413,  416,  414,  416,  414,  417,  414,  416,  416,    0,
+        0,  414,    0,  418,    0,  417,    0,  417,    0,  417,
+        0,  420,    0,  418,  417,  418,    0,  418,    0,  422,
+
+        0,  420,  418,  420,    0,  420,    0,  420,    0,  422,
+      420,  422,  423,  422,    0,    0,    0,    0,  422,    0,
+        0,    0,  423,    0,  423,  425,  423,    0,  426,    0,
+      423,  423,  425,    0,    0,  425,  427,  425,  426,  425,
+      426,  427,  426,    0,  425,    0,  427,  426,  427,  428,
+      427,    0,    0,    0,    0,  427,    0,    0,    0,  428,
+      431,  428,    0,  428,    0,    0,  432,    0,  428,  432,
+      431,  428,  431,    0,  431,    0,  432,  433,  432,  431,
+      432,    0,    0,    0,    0,  432,    0,  433,  435,  433,
+        0,  433,    0,  433,    0,    0,  433,    0,  435,    0,
+
+      435,    0,  435,  445,    0,    0,    0,  435,  440,  440,
+      440,  440,  440,  445,    0,  445,    0,  445,    0,    0,
+        0,    0,  445,  446,  446,  440,  440,  440,  440,  440,
+      440,  440,  440,  435,  446,  447,  446,    0,  446,    0,
+        0,    0,    0,  446,    0,  447,  449,  447,    0,  447,
+        0,    0,  450,  447,  447,    0,  449,    0,  449,    0,
+      449,    0,  450,  451,  450,  449,  450,    0,    0,  452,
+      450,  450,  452,  451,    0,  451,    0,  451,    0,  452,
+        0,  452,  451,  452,  453,  453,  454,    0,  452,    0,
+        0,    0,    0,    0,    0,  453,  454,  453,  454,  453,
+
+      454,  455,    0,    0,  453,  454,    0,    0,    0,    0,
+        0,  455,  456,  455,  456,  455,    0,    0,  457,  455,
+      455,    0,  456,    0,  456,    0,  456,    0,  457,    0,
+      457,  456,  457,    0,    0,  458,  457,  457,  458,    0,
+        0,  459,    0,  459,    0,  458,    0,  458,    0,  458,
+        0,  459,  460,  459,  458,  459,    0,  461,  461,    0,
+      459,    0,  460,    0,  460,    0,  460,    0,  461,  462,
+      461,  460,  461,    0,    0,  463,    0,  461,    0,  462,
+        0,  462,  463,  462,    0,  463,  464,  463,  462,  463,
+        0,    0,  465,    0,  463,    0,  464,    0,  464,  465,
+
+      464,    0,  465,  464,  465,  464,  465,  466,  466,  470,
+        0,  465,    0,  470,    0,    0,    0,    0,  466,  470,
+      466,  470,  466,  470,  471,    0,    0,  466,  470,    0,
+      472,  471,  472,    0,  471,    0,  471,    0,  471,    0,
+      472,  473,  472,  471,  472,    0,    0,  474,    0,  472,
+      474,  473,    0,  473,    0,  473,    0,  474,  473,  474,
+      473,  474,  475,  475,    0,    0,  474,    0,  476,  476,
+        0,    0,  475,    0,  475,    0,  475,    0,  476,  477,
+      476,  475,  476,    0,    0,    0,    0,  476,    0,  477,
+        0,  477,    0,  477,  478,  477,    0,  478,  477,    0,
+
+      479,    0,    0,    0,  478,    0,  478,    0,  478,    0,
+      479,  482,  479,  478,  479,    0,    0,  479,    0,  479,
+        0,  482,    0,  482,  485,  482,  483,  483,    0,    0,
+      482,    0,    0,    0,  485,  487,  485,  483,  485,  483,
+        0,  483,    0,  485,    0,  487,  483,  487,  488,  487,
+        0,  488,    0,  487,  487,    0,  490,    0,  488,    0,
+      488,    0,  488,    0,    0,    0,  490,  488,  490,    0,
+      490,  491,  491,    0,  492,  490,  490,  493,    0,    0,
+        0,  491,    0,  491,  492,  491,  492,  493,  492,  493,
+      491,  493,  496,  492,    0,  497,  493,    0,    0,    0,
+
+        0,    0,  496,    0,  496,  497,  496,  497,    0,  497,
+        0,  496,  497,    0,  497,  503,  503,  503,  503,  503,
+      504,    0,    0,    0,  504,  504,  504,  504,  504,  504,
+      504,  504,  503,  503,  503,  503,  503,  503,  503,  503,
+      508,  509,    0,    0,    0,    0,    0,    0,  509,    0,
+      508,  509,  508,  509,  508,  509,  511,    0,  508,  508,
+      509,    0,  512,    0,    0,  512,  511,    0,  511,    0,
+      511,    0,  512,  513,  512,  511,  512,    0,    0,  514,
+        0,  512,    0,  513,    0,  513,  514,  513,    0,  514,
+      515,  514,  513,  514,    0,    0,  516,  515,  514,    0,
+
+      515,    0,  515,    0,  515,    0,  516,  517,  516,  515,
+      516,    0,    0,  518,    0,  516,    0,  517,    0,  517,
+      518,  517,    0,  518,    0,  518,  517,  518,  519,  520,
+      519,    0,  518,    0,    0,    0,    0,    0,  519,  520,
+      519,  520,  519,  520,  521,    0,    0,  519,  520,  521,
+      522,    0,    0,    0,  521,    0,  521,    0,  521,    0,
+      522,  523,  522,  521,  522,    0,    0,    0,  522,  522,
+        0,  523,  524,  523,    0,  523,    0,    0,  525,  523,
+      523,    0,  524,    0,  524,    0,  524,    0,  525,  526,
+      525,  524,  525,    0,    0,  530,    0,  525,    0,  526,
+
+        0,  526,  530,  526,    0,  530,  531,  530,  526,  530,
+        0,    0,    0,    0,  530,    0,  531,  532,  531,    0,
+      531,    0,    0,  533,  531,  531,    0,  532,    0,  532,
+        0,  532,    0,  533,  534,  533,  532,  533,    0,    0,
+      535,    0,  533,  535,  534,    0,  534,    0,  534,    0,
+      535,  534,  535,  534,  535,  536,  537,    0,    0,  535,
+        0,    0,    0,    0,    0,  536,  537,  536,  537,  536,
+      537,  538,  538,  536,  536,  537,    0,  539,    0,    0,
+        0,  538,    0,  538,    0,  538,    0,  539,  542,  539,
+      538,  539,    0,    0,  544,    0,  539,    0,  542,    0,
+
+      542,    0,  542,    0,  544,  546,  544,  542,  544,    0,
+        0,  547,    0,  544,    0,  546,    0,  546,    0,  546,
+        0,  547,  539,  547,  546,  547,  549,    0,    0,  549,
+      547,    0,  550,    0,    0,  550,  549,    0,  549,    0,
+      549,    0,  550,    0,  550,  549,  550,  553,  553,  564,
+      564,  550,  559,  559,  559,  559,  559,    0,  553,  564,
+      553,  564,  553,  564,    0,    0,    0,  553,  564,  559,
+      559,  559,  559,  559,  559,  559,  559,  563,  566,    0,
+        0,    0,    0,    0,  563,    0,    0,  563,  566,  563,
+      566,  563,  566,  567,  566,    0,  563,  566,    0,    0,
+
+        0,    0,    0,  567,  568,  567,    0,  567,    0,    0,
+      569,  567,  567,    0,  568,    0,  568,    0,  568,    0,
+      569,  570,  569,  568,  569,  572,    0,  571,    0,  569,
+        0,  570,    0,  570,  570,  570,    0,  571,    0,  571,
+      570,  571,  572,    0,    0,  573,  571,    0,  573,    0,
+        0,    0,  572,  574,  572,  573,  572,  573,    0,  573,
+        0,  572,    0,  574,  573,  574,  575,  574,    0,  576,
+        0,    0,  574,  575,    0,    0,  575,    0,  575,  576,
+      575,  576,    0,  576,  581,  575,    0,  581,  576,    0,
+      582,    0,    0,    0,  581,    0,  581,    0,  581,    0,
+
+      582,  583,  582,  581,  582,    0,    0,  584,    0,  582,
+        0,  583,    0,  583,    0,  583,    0,  584,  585,  584,
+      583,  584,    0,    0,  586,  585,  584,    0,  585,  594,
+      585,    0,  585,    0,  586,  590,  586,  585,  586,    0,
+        0,    0,  586,  586,    0,  590,  594,  590,    0,  590,
+        0,    0,  595,    0,  590,    0,  594,    0,  594,    0,
+      594,    0,  595,  598,  595,  594,  595,    0,    0,    0,
+        0,  595,    0,  598,    0,  598,    0,  598,  608,    0,
+        0,    0,  598,  603,  603,  603,  603,  603,  608,    0,
+      608,  608,  608,    0,    0,    0,    0,  608,    0,    0,
+
+      603,  603,  603,  603,  603,  603,  603,  603,  604,  604,
+      604,  604,  604,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  609,  611,  604,  604,  604,  604,  604,
+      604,  604,  604,  609,  611,  609,  611,  609,  611,  612,
+        0,    0,  609,  611,    0,  613,    0,    0,  613,  612,
+        0,  612,    0,  612,    0,  613,  612,  613,  612,  613,
+      614,  615,    0,    0,  613,  614,    0,    0,    0,    0,
+      614,  615,  614,  615,  614,  615,  617,    0,  617,  614,
+      615,    0,  618,    0,    0,    0,  617,    0,  617,    0,
+      617,  604,  618,  623,  618,  617,  618,    0,    0,    0,
+
+        0,  618,    0,  623,  624,  623,    0,  623,    0,  623,
+        0,    0,  623,    0,  624,  625,  624,  624,  624,    0,
+        0,  635,  625,  624,    0,  625,    0,  625,    0,  625,
+        0,  635,  645,  635,  625,  635,    0,    0,  646,    0,
+      635,    0,  645,    0,  645,    0,  645,    0,  646,    0,
+      646,  645,  646,  647,  648,  647,    0,  646,    0,    0,
+        0,    0,    0,  647,  648,  647,  648,  647,  648,  649,
+      651,    0,  647,  648,    0,    0,    0,    0,    0,  649,
+      651,  649,  651,  649,  651,  652,  649,    0,  649,  651,
+        0,  656,  652,    0,    0,  652,    0,  652,    0,  652,
+
+        0,  656,  657,  656,  652,  656,    0,    0,    0,    0,
+      656,    0,  657,  658,  657,    0,  657,    0,    0,  674,
+        0,  657,    0,  658,    0,  658,  658,  658,    0,  674,
+      675,  674,  658,  674,    0,    0,  676,    0,  674,    0,
+      675,    0,  675,    0,  675,    0,  676,  678,  676,  675,
+      676,    0,    0,    0,    0,  676,    0,  678,  682,  678,
+        0,  678,    0,    0,  683,  678,  678,    0,  682,    0,
+      682,    0,  682,    0,  683,  682,  683,  682,  683,  699,
+      703,    0,    0,  683,    0,    0,    0,    0,    0,  699,
+      703,  699,  703,  699,  703,  704,  719,    0,  699,  703,
+
+        0,    0,  699,    0,    0,  704,  719,  704,  719,  704,
+      719,    0,    0,    0,  704,  719,  769,  769,  769,  769,
+      769,  769,  769,  769,  769,  769,  769,  769,  770,  770,
+      770,  770,  770,  770,  770,  770,  770,  770,  770,  770,
+      771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
+      771,  771,  772,  772,  772,  772,  772,  772,  772,  772,
+      772,  772,  772,  772,  773,  773,  773,  773,  773,  773,
+      773,  773,  773,  773,  773,  773,  774,  774,  774,  774,
+        0,  774,  774,  774,  774,  774,  774,  774,  775,  775,
+      775,    0,  775,    0,  775,  776,  776,    0,  776,  776,
+
+      777,  777,    0,    0,  777,  777,    0,  777,  777,  777,
+      777,  777,  778,  778,  778,  778,    0,  778,  778,  778,
+      778,  778,  778,  778,  779,  779,  779,  779,  779,  779,
+      779,  779,    0,  779,  779,  780,    0,    0,    0,  780,
+      780,  780,  780,  780,  780,  780,  781,    0,    0,    0,
+      781,  781,  781,  781,  781,  781,  781,  782,  782,    0,
+      782,  782,  783,  783,    0,  783,  784,  784,    0,  784,
+      784,  785,  785,    0,  785,  785,  786,    0,  786,  786,
+      787,  787,    0,  787,  787,  788,    0,  788,  788,  789,
+        0,  789,  789,  790,    0,  790,  791,    0,  791,  791,
+
+      792,    0,  792,  792,  793,  793,  793,  793,  793,  793,
+      793,  793,  793,  793,  793,  793,  794,  794,    0,  794,
+      794,  795,  795,    0,  795,  795,  795,  795,  795,  795,
+      795,  795,  795,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
+      768,  768
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[143] =
+    {   0,
+0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 
+    0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 
+    1, 0, 0,     };
+
+extern int asn1p__flex_debug;
+int asn1p__flex_debug = 1;
+
+static yyconst flex_int16_t yy_rule_linenum[142] =
+    {   0,
+       98,  100,  101,  103,  106,  109,  115,  118,  120,  121,
+      122,  125,  127,  128,  129,  141,  148,  155,  161,  170,
+      178,  186,  187,  189,  208,  214,  215,  216,  217,  218,
+      221,  227,  234,  241,  248,  255,  262,  263,  264,  272,
+      273,  274,  280,  281,  286,  287,  288,  289,  290,  291,
+      292,  293,  294,  295,  296,  305,  306,  307,  308,  309,
+      315,  316,  317,  318,  319,  320,  321,  322,  323,  324,
+      325,  326,  327,  328,  329,  330,  331,  332,  333,  334,
+      335,  336,  337,  338,  339,  340,  341,  342,  343,  344,
+      345,  346,  347,  348,  349,  350,  351,  352,  353,  354,
+
+      355,  356,  357,  358,  359,  360,  361,  362,  363,  364,
+      365,  366,  367,  372,  373,  378,  379,  380,  383,  388,
+      394,  402,  412,  417,  419,  420,  424,  429,  434,  440,
+      441,  443,  449,  462,  465,  490,  534,  535,  537,  539,
+      550
+    } ;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
+static char *yy_full_match;
+static int yy_lp;
+#define REJECT \
+{ \
+*yy_cp = (yy_hold_char); /* undo effects of setting up asn1p_text */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+++(yy_lp); \
+goto find_rule; \
+}
+
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *asn1p_text;
+#line 1 "asn1p_l.l"
+#line 2 "asn1p_l.l"
+
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+#include "asn1p_y.h"
+
+int asn1p_lex(void);
+void asn1p_lexer_hack_push_opaque_state(void);         /* Used in .y */
+void asn1p_lexer_hack_enable_with_syntax(void);                /* Used in .y */
+void asn1p_lexer_hack_push_encoding_control(void);     /* Used in .y */
+
+#define        YY_FATAL_ERROR(msg)     do {                    \
+               fprintf(stderr,                         \
+                       "lexer error at line %d, "      \
+                       "text \"%s\"\n",                \
+                       asn1p_lineno, asn1p_text);              \
+               exit(1);                                \
+       } while(0)
+
+int asn1p_lexer_pedantic_1990 = 0;
+int asn1p_lexer_types_year = 0;
+int asn1p_lexer_constructs_year = 0;
+int asn1p_lexer_extended_values = 0;
+
+int asn1p_as_pointer;
+
+static asn1c_integer_t _lex_atoi(const char *ptr);
+static double          _lex_atod(const char *ptr);
+
+/*
+ * Check that the type is defined in the year of the standard choosen.
+ */
+#define        TYPE_LIFETIME(fyr, lyr)                         \
+       (!asn1p_lexer_types_year                        \
+       || (fyr && fyr <= asn1p_lexer_types_year)       \
+       || (lyr && lyr  > asn1p_lexer_types_year))
+
+/*
+ * Check the the construction (or concept, i.e. CLASS) is defined in
+ * a given year.
+ */
+#define        CONSTRUCT_LIFETIME(fyr, lyr)                    \
+       (!asn1p_lexer_constructs_year                   \
+       || (fyr && fyr <= asn1p_lexer_constructs_year)  \
+       || (lyr && lyr  > asn1p_lexer_constructs_year))
+
+/*
+ * Append quoted string.
+ */
+#define        QAPPEND(text, tlen)     do {                            \
+               char *prev_text = asn1p_lval.tv_opaque.buf;     \
+               int prev_len = asn1p_lval.tv_opaque.len;        \
+               char *p;                                        \
+                                                               \
+               p = malloc((tlen) + prev_len + 1);              \
+               if(p == NULL) return -1;                        \
+                                                               \
+               if(prev_text) memcpy(p, prev_text, prev_len);   \
+               memcpy(p + prev_len, text, tlen);               \
+               p[prev_len + (tlen)] = '\0';                    \
+                                                               \
+               free(asn1p_lval.tv_opaque.buf);                 \
+               asn1p_lval.tv_opaque.buf = p;                   \
+               asn1p_lval.tv_opaque.len = (tlen) + prev_len;   \
+       } while(0)
+
+#define YY_NO_INPUT 1
+/* Performance penalty is OK */
+/* Controlled from within application */
+
+
+
+
+
+
+
+
+/* Newline */
+/* White-space */
+#line 2134 "asn1p_l.c"
+
+#define INITIAL 0
+#define dash_comment 1
+#define idash_comment 2
+#define cpp_comment 3
+#define quoted 4
+#define opaque 5
+#define encoding_control 6
+#define with_syntax 7
+#define extended_values 8
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+/* %if-c-only */
+#include <unistd.h>
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* %if-c-only Reentrant structure and macros (non-C++). */
+/* %if-reentrant */
+/* %if-c-only */
+
+static int yy_init_globals (void );
+
+/* %endif */
+/* %if-reentrant */
+/* %endif */
+/* %endif End reentrant structures and macros. */
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int asn1p_lex_destroy (void );
+
+int asn1p_get_debug (void );
+
+void asn1p_set_debug (int debug_flag  );
+
+YY_EXTRA_TYPE asn1p_get_extra (void );
+
+void asn1p_set_extra (YY_EXTRA_TYPE user_defined  );
+
+FILE *asn1p_get_in (void );
+
+void asn1p_set_in  (FILE * in_str  );
+
+FILE *asn1p_get_out (void );
+
+void asn1p_set_out  (FILE * out_str  );
+
+yy_size_t asn1p_get_leng (void );
+
+char *asn1p_get_text (void );
+
+int asn1p_get_lineno (void );
+
+void asn1p_set_lineno (int line_number  );
+
+/* %if-bison-bridge */
+/* %endif */
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int asn1p_wrap (void );
+#else
+extern int asn1p_wrap (void );
+#endif
+#endif
+
+/* %not-for-header */
+
+    static void yyunput (int c,char *buf_ptr  );
+    
+/* %ok-for-header */
+
+/* %endif */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+/* %if-c-only Standard (non-C++) definition */
+/* %not-for-header */
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+/* %ok-for-header */
+
+/* %endif */
+#endif
+
+/* %if-c-only */
+
+        static int yy_start_stack_ptr = 0;
+        static int yy_start_stack_depth = 0;
+        static int *yy_start_stack = NULL;
+    
+    static void yy_push_state (int new_state );
+    
+    static void yy_pop_state (void );
+    
+    static int yy_top_state (void );
+    
+/* %endif */
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* %if-c-only Standard (non-C++) definition */
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( asn1p_text, asn1p_leng, 1, asn1p_out )
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+               { \
+               int c = '*'; \
+               yy_size_t n; \
+               for ( n = 0; n < max_size && \
+                            (c = getc( asn1p_in )) != EOF && c != '\n'; ++n ) \
+                       buf[n] = (char) c; \
+               if ( c == '\n' ) \
+                       buf[n++] = (char) c; \
+               if ( c == EOF && ferror( asn1p_in ) ) \
+                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
+               result = n; \
+               } \
+       else \
+               { \
+               errno=0; \
+               while ( (result = fread(buf, 1, max_size, asn1p_in))==0 && ferror(asn1p_in)) \
+                       { \
+                       if( errno != EINTR) \
+                               { \
+                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
+                               break; \
+                               } \
+                       errno=0; \
+                       clearerr(asn1p_in); \
+                       } \
+               }\
+\
+/* %if-c++-only C++ definition \ */\
+/* %endif */
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+/* %if-c-only */
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+#endif
+
+/* %if-tables-serialization structures and prototypes */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %not-for-header */
+
+/* %tables-yydmap generated elements */
+/* %endif */
+/* end tables serialization structures and prototypes */
+
+/* %ok-for-header */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+/* %if-c-only Standard (non-C++) definition */
+
+extern int asn1p_lex (void);
+
+#define YY_DECL int asn1p_lex (void)
+/* %endif */
+/* %if-c++-only C++ definition */
+/* %endif */
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after asn1p_text and asn1p_leng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+/* %% [6.0] YY_RULE_SETUP definition goes here */
+#define YY_RULE_SETUP \
+       YY_USER_ACTION
+
+/* %not-for-header */
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp, *yy_bp;
+       register int yy_act;
+    
+/* %% [7.0] user's declarations go here */
+#line 96 "asn1p_l.l"
+
+
+#line 2397 "asn1p_l.c"
+
+       if ( !(yy_init) )
+               {
+               (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+               YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! (yy_state_buf) )
+            (yy_state_buf) = (yy_state_type *)asn1p_alloc(YY_STATE_BUF_SIZE  );
+            if ( ! (yy_state_buf) )
+                YY_FATAL_ERROR( "out of dynamic memory in asn1p_lex()" );
+
+               if ( ! (yy_start) )
+                       (yy_start) = 1; /* first start state */
+
+               if ( ! asn1p_in )
+/* %if-c-only */
+                       asn1p_in = stdin;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! asn1p_out )
+/* %if-c-only */
+                       asn1p_out = stdout;
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+               if ( ! YY_CURRENT_BUFFER ) {
+                       asn1p_ensure_buffer_stack ();
+                       YY_CURRENT_BUFFER_LVALUE =
+                               asn1p__create_buffer(asn1p_in,YY_BUF_SIZE );
+               }
+
+               asn1p__load_buffer_state( );
+               }
+
+       while ( 1 )             /* loops until end-of-file is reached */
+               {
+/* %% [8.0] yymore()-related code goes here */
+               yy_cp = (yy_c_buf_p);
+
+               /* Support of asn1p_text. */
+               *yy_cp = (yy_hold_char);
+
+               /* yy_bp points to the position in yy_ch_buf of the start of
+                * the current run.
+                */
+               yy_bp = yy_cp;
+
+/* %% [9.0] code to set up and find next match goes here */
+               yy_current_state = (yy_start);
+
+               (yy_state_ptr) = (yy_state_buf);
+               *(yy_state_ptr)++ = yy_current_state;
+
+yy_match:
+               do
+                       {
+                       register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+                       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                               {
+                               yy_current_state = (int) yy_def[yy_current_state];
+                               if ( yy_current_state >= 769 )
+                                       yy_c = yy_meta[(unsigned int) yy_c];
+                               }
+                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+                       *(yy_state_ptr)++ = yy_current_state;
+                       ++yy_cp;
+                       }
+               while ( yy_current_state != 768 );
+
+yy_find_action:
+/* %% [10.0] code to find the action number goes here */
+               yy_current_state = *--(yy_state_ptr);
+               (yy_lp) = yy_accept[yy_current_state];
+goto find_rule; /* Shut up GCC warning -Wall */
+find_rule: /* we branch to this label when backing up */
+               for ( ; ; ) /* until we find what rule we matched */
+                       {
+                       if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
+                               {
+                               yy_act = yy_acclist[(yy_lp)];
+                                       {
+                                       (yy_full_match) = yy_cp;
+                                       break;
+                                       }
+                               }
+                       --yy_cp;
+                       yy_current_state = *--(yy_state_ptr);
+                       (yy_lp) = yy_accept[yy_current_state];
+                       }
+
+               YY_DO_BEFORE_ACTION;
+
+/* %% [11.0] code for asn1p_lineno update goes here */
+
+               if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+                       {
+                       yy_size_t yyl;
+                       for ( yyl = 0; yyl < asn1p_leng; ++yyl )
+                               if ( asn1p_text[yyl] == '\n' )
+                                          
+    asn1p_lineno++;
+;
+                       }
+
+do_action:     /* This label is used only to access EOF actions. */
+
+/* %% [12.0] debug code goes here */
+               if ( asn1p__flex_debug )
+                       {
+                       if ( yy_act == 0 )
+                               fprintf( stderr, "--scanner backing up\n" );
+                       else if ( yy_act < 142 )
+                               fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
+                                        (long)yy_rule_linenum[yy_act], asn1p_text );
+                       else if ( yy_act == 142 )
+                               fprintf( stderr, "--accepting default rule (\"%s\")\n",
+                                        asn1p_text );
+                       else if ( yy_act == 143 )
+                               fprintf( stderr, "--(end of buffer or a NUL)\n" );
+                       else
+                               fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
+                       }
+
+               switch ( yy_act )
+       { /* beginning of action switch */
+/* %% [13.0] actions go here */
+case 1:
+YY_RULE_SETUP
+#line 98 "asn1p_l.l"
+return UTF8_BOM;
+       YY_BREAK
+case 2:
+/* rule 2 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up asn1p_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up asn1p_text again */
+YY_RULE_SETUP
+#line 100 "asn1p_l.l"
+/* Immediately terminated long comment */
+       YY_BREAK
+case 3:
+*yy_cp = (yy_hold_char); /* undo effects of setting up asn1p_text */
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up asn1p_text again */
+YY_RULE_SETUP
+#line 101 "asn1p_l.l"
+yy_push_state(idash_comment);  /* Incorrect, but acceptable */
+       YY_BREAK
+
+case 4:
+YY_RULE_SETUP
+#line 103 "asn1p_l.l"
+yy_pop_state(); /* Acceptable end of comment */
+       YY_BREAK
+
+case 5:
+YY_RULE_SETUP
+#line 106 "asn1p_l.l"
+asn1p_as_pointer = 1;
+       YY_BREAK
+
+case 6:
+YY_RULE_SETUP
+#line 109 "asn1p_l.l"
+{
+        yy_pop_state();
+        return TOK_ExtValue_BIT_STRING;
+    }
+       YY_BREAK
+
+case 7:
+YY_RULE_SETUP
+#line 115 "asn1p_l.l"
+yy_push_state(dash_comment);
+       YY_BREAK
+
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+#line 118 "asn1p_l.l"
+yy_pop_state();
+       YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 120 "asn1p_l.l"
+yy_pop_state();        /* End of comment */
+       YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 121 "asn1p_l.l"
+/* Eat single dash */
+       YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 122 "asn1p_l.l"
+/* Eat */
+       YY_BREAK
+
+case 12:
+YY_RULE_SETUP
+#line 125 "asn1p_l.l"
+yy_push_state(cpp_comment);
+       YY_BREAK
+
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+#line 127 "asn1p_l.l"
+/* Eat */
+       YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 128 "asn1p_l.l"
+yy_pop_state();
+       YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 129 "asn1p_l.l"
+/* Eat */
+       YY_BREAK
+
+/*
+        * This is state is being set from corresponding .y module when
+        * higher-level data is necessary to make proper parsing of the
+        * underlying data. Thus, we enter the <opaque> state and save
+        * everything for later processing.
+        */
+
+case 16:
+YY_RULE_SETUP
+#line 141 "asn1p_l.l"
+{
+                       yy_push_state(opaque);
+                       asn1p_lval.tv_opaque.buf = strdup(asn1p_text);
+                       asn1p_lval.tv_opaque.len = asn1p_leng;
+                       return TOK_opaque;
+               }
+       YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 148 "asn1p_l.l"
+{
+                       yy_pop_state();
+                       asn1p_lval.tv_opaque.buf = strdup(asn1p_text);
+                       asn1p_lval.tv_opaque.len = asn1p_leng;
+                       return TOK_opaque;
+               }
+       YY_BREAK
+case 18:
+/* rule 18 can match eol */
+YY_RULE_SETUP
+#line 155 "asn1p_l.l"
+{
+                       asn1p_lval.tv_opaque.buf = strdup(asn1p_text);
+                       asn1p_lval.tv_opaque.len = asn1p_leng;
+                       return TOK_opaque;
+               }
+       YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 161 "asn1p_l.l"
+{
+                       fprintf(stderr,
+                               "ASN.1 Parser synchronization failure: "
+                               "\"%s\" at line %d must not appear "
+                               "inside value definition\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+       YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 170 "asn1p_l.l"
+{
+                       asn1p_lval.tv_opaque.buf = strdup(asn1p_text);
+                       asn1p_lval.tv_opaque.len = asn1p_leng;
+                       return TOK_opaque;
+               }
+       YY_BREAK
+
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+#line 178 "asn1p_l.l"
+{
+                       asn1p_lval.tv_opaque.buf = 0;
+                       asn1p_lval.tv_opaque.len = 0;
+                       QAPPEND(asn1p_text+1, asn1p_leng-1);
+                       yy_push_state(quoted);
+               }
+       YY_BREAK
+
+case 22:
+YY_RULE_SETUP
+#line 186 "asn1p_l.l"
+{ QAPPEND(asn1p_text, asn1p_leng-1); } /* Add a single quote */
+       YY_BREAK
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+#line 187 "asn1p_l.l"
+{ QAPPEND(asn1p_text, asn1p_leng); }
+       YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 189 "asn1p_l.l"
+{
+                       yy_pop_state();
+                       /* Do not append last quote:
+                       // QAPPEND(asn1p_text, asn1p_leng); */
+
+                       if(asn1p_lexer_pedantic_1990
+                       && strchr(asn1p_text, '\n')) {
+                               fprintf(stderr, "%s: "
+                               "Newlines are prohibited by ASN.1:1990\n",
+                               asn1p_lval.tv_opaque.buf);
+                               return -1;
+                       }
+
+                       return TOK_cstring;
+               }
+       YY_BREAK
+
+
+case 25:
+YY_RULE_SETUP
+#line 208 "asn1p_l.l"
+{
+                       const char *s = "ENCODING-CONTROL";
+                       const char *p = s + sizeof("ENCODING-CONTROL") - 2;
+                       for(; p >= s; p--) unput(*p);
+                       yy_pop_state();
+               }
+       YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 214 "asn1p_l.l"
+unput('D'); unput('N'); unput('E'); yy_pop_state();
+       YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 215 "asn1p_l.l"
+
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 216 "asn1p_l.l"
+
+       YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 217 "asn1p_l.l"
+/* Eat everything else */
+       YY_BREAK
+case 30:
+/* rule 30 can match eol */
+YY_RULE_SETUP
+#line 218 "asn1p_l.l"
+
+       YY_BREAK
+
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+#line 221 "asn1p_l.l"
+{
+               /* " \t\r\n" weren't allowed in ASN.1:1990. */
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_hstring;
+       }
+       YY_BREAK
+case 32:
+/* rule 32 can match eol */
+YY_RULE_SETUP
+#line 227 "asn1p_l.l"
+{
+               /* " \t\r\n" weren't allowed in ASN.1:1990. */
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_bstring;
+       }
+       YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 234 "asn1p_l.l"
+{
+               asn1p_lval.a_int = _lex_atoi(asn1p_text);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number_negative;
+       }
+       YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 241 "asn1p_l.l"
+{
+               asn1p_lval.a_int = _lex_atoi(asn1p_text);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number;
+       }
+       YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 248 "asn1p_l.l"
+{
+               asn1p_lval.a_int = _lex_atoi(asn1p_text);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number;
+       }
+       YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 255 "asn1p_l.l"
+{
+               asn1p_lval.a_dbl = _lex_atod(asn1p_text);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_realnumber;
+       }
+       YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 262 "asn1p_l.l"
+return TOK_ABSENT;
+       YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 263 "asn1p_l.l"
+return TOK_ALL;
+       YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 264 "asn1p_l.l"
+{
+                               /* Appeared in 1990, removed in 1997 */
+                               if(TYPE_LIFETIME(1990, 1997))
+                                       return TOK_ANY; 
+                               fprintf(stderr, "Keyword \"%s\" at line %d "
+                                       "is obsolete\n", asn1p_text, asn1p_lineno);
+                               REJECT;
+                       }
+       YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 272 "asn1p_l.l"
+return TOK_APPLICATION;
+       YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 273 "asn1p_l.l"
+return TOK_AUTOMATIC;
+       YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 274 "asn1p_l.l"
+{
+        if(asn1p_lexer_extended_values) {
+            yy_push_state(extended_values);
+        }
+        return TOK_BEGIN;
+    }
+       YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 280 "asn1p_l.l"
+return TOK_BIT;
+       YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 281 "asn1p_l.l"
+{
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_BMPString;
+                               REJECT;
+                       }
+       YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 286 "asn1p_l.l"
+return TOK_BOOLEAN;
+       YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 287 "asn1p_l.l"
+return TOK_BY;
+       YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 288 "asn1p_l.l"
+return TOK_CHARACTER;
+       YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 289 "asn1p_l.l"
+return TOK_CHOICE;
+       YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 290 "asn1p_l.l"
+return TOK_CLASS;
+       YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 291 "asn1p_l.l"
+return TOK_COMPONENT;
+       YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 292 "asn1p_l.l"
+return TOK_COMPONENTS;
+       YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 293 "asn1p_l.l"
+return TOK_CONSTRAINED;
+       YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 294 "asn1p_l.l"
+return TOK_CONTAINING;
+       YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 295 "asn1p_l.l"
+return TOK_DEFAULT;
+       YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 296 "asn1p_l.l"
+{
+                               /* Appeared in 1990, removed in 1997 */
+                               if(TYPE_LIFETIME(1990, 1997))
+                                       return TOK_DEFINED;
+                               fprintf(stderr, "Keyword \"%s\" at line %d "
+                                       "is obsolete\n", asn1p_text, asn1p_lineno);
+                               /* Deprecated since */
+                               REJECT;
+                       }
+       YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 305 "asn1p_l.l"
+return TOK_DEFINITIONS;
+       YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 306 "asn1p_l.l"
+return TOK_EMBEDDED;
+       YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 307 "asn1p_l.l"
+return TOK_ENCODED;
+       YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 308 "asn1p_l.l"
+return TOK_ENCODING_CONTROL;
+       YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 309 "asn1p_l.l"
+{
+                   if(YYSTATE == extended_values) {
+                yy_pop_state();
+            }
+            return TOK_END;
+        }
+       YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 315 "asn1p_l.l"
+return TOK_ENUMERATED;
+       YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 316 "asn1p_l.l"
+return TOK_EXCEPT;
+       YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 317 "asn1p_l.l"
+return TOK_EXPLICIT;
+       YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 318 "asn1p_l.l"
+return TOK_EXPORTS;
+       YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 319 "asn1p_l.l"
+return TOK_EXTENSIBILITY;
+       YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 320 "asn1p_l.l"
+return TOK_EXTERNAL;
+       YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 321 "asn1p_l.l"
+return TOK_FALSE;
+       YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 322 "asn1p_l.l"
+return TOK_FROM;
+       YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 323 "asn1p_l.l"
+return TOK_GeneralizedTime;
+       YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 324 "asn1p_l.l"
+return TOK_GeneralString;
+       YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 325 "asn1p_l.l"
+return TOK_GraphicString;
+       YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 326 "asn1p_l.l"
+return TOK_IA5String;
+       YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 327 "asn1p_l.l"
+return TOK_IDENTIFIER;
+       YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 328 "asn1p_l.l"
+return TOK_IMPLICIT;
+       YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 329 "asn1p_l.l"
+return TOK_IMPLIED;
+       YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 330 "asn1p_l.l"
+return TOK_IMPORTS;
+       YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 331 "asn1p_l.l"
+return TOK_INCLUDES;
+       YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 332 "asn1p_l.l"
+return TOK_INSTANCE;
+       YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 333 "asn1p_l.l"
+return TOK_INSTRUCTIONS;
+       YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 334 "asn1p_l.l"
+return TOK_INTEGER;
+       YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 335 "asn1p_l.l"
+return TOK_INTERSECTION;
+       YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 336 "asn1p_l.l"
+return TOK_ISO646String;
+       YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 337 "asn1p_l.l"
+return TOK_MAX;
+       YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 338 "asn1p_l.l"
+return TOK_MIN;
+       YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 339 "asn1p_l.l"
+return TOK_MINUS_INFINITY;
+       YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 340 "asn1p_l.l"
+return TOK_NULL;
+       YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 341 "asn1p_l.l"
+return TOK_NumericString;
+       YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 342 "asn1p_l.l"
+return TOK_OBJECT;
+       YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 343 "asn1p_l.l"
+return TOK_ObjectDescriptor;
+       YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 344 "asn1p_l.l"
+return TOK_OCTET;
+       YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 345 "asn1p_l.l"
+return TOK_OF;
+       YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 346 "asn1p_l.l"
+return TOK_OPTIONAL;
+       YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 347 "asn1p_l.l"
+return TOK_PATTERN;
+       YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 348 "asn1p_l.l"
+return TOK_PDV;
+       YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 349 "asn1p_l.l"
+return TOK_PLUS_INFINITY;
+       YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 350 "asn1p_l.l"
+return TOK_PRESENT;
+       YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 351 "asn1p_l.l"
+return TOK_PrintableString;
+       YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 352 "asn1p_l.l"
+return TOK_PRIVATE;
+       YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 353 "asn1p_l.l"
+return TOK_REAL;
+       YY_BREAK
+case 100:
+YY_RULE_SETUP
+#line 354 "asn1p_l.l"
+return TOK_RELATIVE_OID;
+       YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 355 "asn1p_l.l"
+return TOK_SEQUENCE;
+       YY_BREAK
+case 102:
+YY_RULE_SETUP
+#line 356 "asn1p_l.l"
+return TOK_SET;
+       YY_BREAK
+case 103:
+YY_RULE_SETUP
+#line 357 "asn1p_l.l"
+return TOK_SIZE;
+       YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 358 "asn1p_l.l"
+return TOK_STRING;
+       YY_BREAK
+case 105:
+YY_RULE_SETUP
+#line 359 "asn1p_l.l"
+return TOK_SYNTAX;
+       YY_BREAK
+case 106:
+YY_RULE_SETUP
+#line 360 "asn1p_l.l"
+return TOK_T61String;
+       YY_BREAK
+case 107:
+YY_RULE_SETUP
+#line 361 "asn1p_l.l"
+return TOK_TAGS;
+       YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 362 "asn1p_l.l"
+return TOK_TeletexString;
+       YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 363 "asn1p_l.l"
+return TOK_TRUE;
+       YY_BREAK
+case 110:
+YY_RULE_SETUP
+#line 364 "asn1p_l.l"
+return TOK_UNION;
+       YY_BREAK
+case 111:
+YY_RULE_SETUP
+#line 365 "asn1p_l.l"
+return TOK_UNIQUE;
+       YY_BREAK
+case 112:
+YY_RULE_SETUP
+#line 366 "asn1p_l.l"
+return TOK_UNIVERSAL;
+       YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 367 "asn1p_l.l"
+{
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_UniversalString;
+                               REJECT;
+                       }
+       YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 372 "asn1p_l.l"
+return TOK_UTCTime;
+       YY_BREAK
+case 115:
+YY_RULE_SETUP
+#line 373 "asn1p_l.l"
+{
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_UTF8String;
+                               REJECT;
+                       }
+       YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 378 "asn1p_l.l"
+return TOK_VideotexString;
+       YY_BREAK
+case 117:
+YY_RULE_SETUP
+#line 379 "asn1p_l.l"
+return TOK_VisibleString;
+       YY_BREAK
+case 118:
+YY_RULE_SETUP
+#line 380 "asn1p_l.l"
+return TOK_WITH;
+       YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 383 "asn1p_l.l"
+{
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_typefieldreference;
+       }
+       YY_BREAK
+case 120:
+YY_RULE_SETUP
+#line 388 "asn1p_l.l"
+{
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_valuefieldreference;
+       }
+       YY_BREAK
+case 121:
+YY_RULE_SETUP
+#line 394 "asn1p_l.l"
+{
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_identifier;
+       }
+       YY_BREAK
+/*
+        * objectclassreference
+        */
+case 122:
+YY_RULE_SETUP
+#line 402 "asn1p_l.l"
+{
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_capitalreference;
+       }
+       YY_BREAK
+/*
+        * typereference, modulereference
+        * NOTE: TOK_objectclassreference must be combined
+        * with this token to produce true typereference.
+        */
+case 123:
+YY_RULE_SETUP
+#line 412 "asn1p_l.l"
+{
+               asn1p_lval.tv_str = strdup(asn1p_text);
+               return TOK_typereference;
+       }
+       YY_BREAK
+case 124:
+YY_RULE_SETUP
+#line 417 "asn1p_l.l"
+return TOK_PPEQ;
+       YY_BREAK
+case 125:
+YY_RULE_SETUP
+#line 419 "asn1p_l.l"
+return TOK_ThreeDots;
+       YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 420 "asn1p_l.l"
+return TOK_TwoDots;
+       YY_BREAK
+
+case 127:
+YY_RULE_SETUP
+#line 424 "asn1p_l.l"
+{
+                               asn1p_lval.tv_str = strdup(asn1p_text);
+                               return TOK_Literal;
+                       }
+       YY_BREAK
+case 128:
+YY_RULE_SETUP
+#line 429 "asn1p_l.l"
+{
+                               asn1p_lval.tv_str = strdup(asn1p_text);
+                               return TOK_Literal;
+                       }
+       YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 434 "asn1p_l.l"
+{
+                               yy_push_state(with_syntax);
+                               asn1p_lval.tv_str = strdup(asn1p_text);
+                               return TOK_Literal;
+                       }
+       YY_BREAK
+case 130:
+YY_RULE_SETUP
+#line 440 "asn1p_l.l"
+return '[';
+       YY_BREAK
+case 131:
+YY_RULE_SETUP
+#line 441 "asn1p_l.l"
+return ']';
+       YY_BREAK
+case 132:
+/* rule 132 can match eol */
+YY_RULE_SETUP
+#line 443 "asn1p_l.l"
+{
+                       asn1p_lval.tv_opaque.buf = strdup(asn1p_text);
+                       asn1p_lval.tv_opaque.len = asn1p_leng;
+                       return TOK_whitespace;
+                       }
+       YY_BREAK
+case 133:
+YY_RULE_SETUP
+#line 449 "asn1p_l.l"
+{
+                               yy_pop_state();
+                               if(YYSTATE == with_syntax) {
+                                       asn1p_lval.tv_str = strdup(asn1p_text);
+                                       return TOK_Literal;
+                               } else {
+                                       return '}';
+                               }
+                       }
+       YY_BREAK
+
+case 134:
+/* rule 134 can match eol */
+YY_RULE_SETUP
+#line 462 "asn1p_l.l"
+/* Ignore whitespace */
+       YY_BREAK
+case 135:
+/* rule 135 can match eol */
+YY_RULE_SETUP
+#line 465 "asn1p_l.l"
+{
+               asn1c_integer_t v1 = -1, v2 = -1;
+               char *p;
+               for(p = asn1p_text; *p; p++)
+                       if(*p >= '0' && *p <= '9')
+                       { v1 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;      /* Skip digits */
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v2 = _lex_atoi(p); break; }
+               if(v1 < 0 || v1 > 7) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
+                               "mandates 0..7 range for Tuple's TableColumn\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               if(v2 < 0 || v2 > 15) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
+                               "mandates 0..15 range for Tuple's TableRow\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               asn1p_lval.a_int = (v1 << 4) + v2;
+               return TOK_tuple;
+       }
+       YY_BREAK
+case 136:
+/* rule 136 can match eol */
+YY_RULE_SETUP
+#line 490 "asn1p_l.l"
+{
+               asn1c_integer_t v1 = -1, v2 = -1, v3 = -1, v4 = -1;
+               char *p;
+               for(p = asn1p_text; *p; p++)
+                       if(*p >= '0' && *p <= '9')
+                       { v1 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;      /* Skip digits */
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v2 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v3 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v4 = _lex_atoi(p); break; }
+               if(v1 < 0 || v1 > 127) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..127 range for Quadruple's Group\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               if(v2 < 0 || v2 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Plane\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               if(v3 < 0 || v3 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Row\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               if(v4 < 0 || v4 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Cell\n",
+                               asn1p_text, asn1p_lineno);
+                       return -1;
+               }
+               asn1p_lval.a_int = (v1 << 24) | (v2 << 16) | (v3 << 8) | v4;
+               return TOK_quadruple;
+       }
+       YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 534 "asn1p_l.l"
+return TOK_VBracketLeft;
+       YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 535 "asn1p_l.l"
+return TOK_VBracketRight;
+       YY_BREAK
+case 139:
+YY_RULE_SETUP
+#line 537 "asn1p_l.l"
+return asn1p_text[0];
+       YY_BREAK
+case 140:
+/* rule 140 can match eol */
+YY_RULE_SETUP
+#line 539 "asn1p_l.l"
+{
+               if(TYPE_LIFETIME(1994, 0))
+                       fprintf(stderr, "ERROR: ");
+               fprintf(stderr,
+               "Symbol '%c' at line %d is prohibited "
+               "by ASN.1:1994 and ASN.1:1997\n",
+                       asn1p_text[0], asn1p_lineno);
+               if(TYPE_LIFETIME(1994, 0))
+                       return -1;
+       }
+       YY_BREAK
+case 141:
+YY_RULE_SETUP
+#line 550 "asn1p_l.l"
+{
+               fprintf(stderr,
+                       "Unexpected token at line %d: \"%s\"\n",
+                       asn1p_lineno, asn1p_text);
+               while(YYSTATE != INITIAL)
+                       yy_pop_state();
+               if(0) {
+                       yy_top_state(); /* Just to use this function. */
+                       yy_fatal_error("Parse error");
+               }
+               return -1;
+}
+       YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(dash_comment):
+case YY_STATE_EOF(idash_comment):
+case YY_STATE_EOF(cpp_comment):
+case YY_STATE_EOF(quoted):
+case YY_STATE_EOF(opaque):
+case YY_STATE_EOF(encoding_control):
+case YY_STATE_EOF(with_syntax):
+case YY_STATE_EOF(extended_values):
+#line 563 "asn1p_l.l"
+{
+               while(YYSTATE != INITIAL)
+                       yy_pop_state();
+               yyterminate();
+       }
+       YY_BREAK
+case 142:
+YY_RULE_SETUP
+#line 570 "asn1p_l.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+       YY_BREAK
+#line 3545 "asn1p_l.c"
+
+       case YY_END_OF_BUFFER:
+               {
+               /* Amount of text matched not including the EOB char. */
+               int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+               /* Undo the effects of YY_DO_BEFORE_ACTION. */
+               *yy_cp = (yy_hold_char);
+               YY_RESTORE_YY_MORE_OFFSET
+
+               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+                       {
+                       /* We're scanning a new file or input source.  It's
+                        * possible that this happened because the user
+                        * just pointed asn1p_in at a new source and called
+                        * asn1p_lex().  If so, then we have to assure
+                        * consistency between YY_CURRENT_BUFFER and our
+                        * globals.  Here is the right place to do so, because
+                        * this is the first action (other than possibly a
+                        * back-up) that will match for the new input source.
+                        */
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = asn1p_in;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+                       }
+
+               /* Note that here we test for yy_c_buf_p "<=" to the position
+                * of the first EOB in the buffer, since yy_c_buf_p will
+                * already have been incremented past the NUL character
+                * (since all states make transitions on EOB to the
+                * end-of-buffer state).  Contrast this with the test
+                * in input().
+                */
+               if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       { /* This was really a NUL. */
+                       yy_state_type yy_next_state;
+
+                       (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+                       yy_current_state = yy_get_previous_state(  );
+
+                       /* Okay, we're now positioned to make the NUL
+                        * transition.  We couldn't have
+                        * yy_get_previous_state() go ahead and do it
+                        * for us because it doesn't know how to deal
+                        * with the possibility of jamming (and we don't
+                        * want to build jamming into it because then it
+                        * will run more slowly).
+                        */
+
+                       yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+                       yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+                       if ( yy_next_state )
+                               {
+                               /* Consume the NUL. */
+                               yy_cp = ++(yy_c_buf_p);
+                               yy_current_state = yy_next_state;
+                               goto yy_match;
+                               }
+
+                       else
+                               {
+/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
+                               yy_cp = (yy_c_buf_p);
+                               goto yy_find_action;
+                               }
+                       }
+
+               else switch ( yy_get_next_buffer(  ) )
+                       {
+                       case EOB_ACT_END_OF_FILE:
+                               {
+                               (yy_did_buffer_switch_on_eof) = 0;
+
+                               if ( asn1p_wrap( ) )
+                                       {
+                                       /* Note: because we've taken care in
+                                        * yy_get_next_buffer() to have set up
+                                        * asn1p_text, we can now set up
+                                        * yy_c_buf_p so that if some total
+                                        * hoser (like flex itself) wants to
+                                        * call the scanner after we return the
+                                        * YY_NULL, it'll still work - another
+                                        * YY_NULL will get returned.
+                                        */
+                                       (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+                                       yy_act = YY_STATE_EOF(YY_START);
+                                       goto do_action;
+                                       }
+
+                               else
+                                       {
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+                                       }
+                               break;
+                               }
+
+                       case EOB_ACT_CONTINUE_SCAN:
+                               (yy_c_buf_p) =
+                                       (yytext_ptr) + yy_amount_of_matched_text;
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_match;
+
+                       case EOB_ACT_LAST_MATCH:
+                               (yy_c_buf_p) =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+                               yy_current_state = yy_get_previous_state(  );
+
+                               yy_cp = (yy_c_buf_p);
+                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+                               goto yy_find_action;
+                       }
+               break;
+               }
+
+       default:
+               YY_FATAL_ERROR(
+                       "fatal flex scanner internal error--no action found" );
+       } /* end of action switch */
+               } /* end of scanning one token */
+} /* end of asn1p_lex */
+/* %ok-for-header */
+
+/* %if-c++-only */
+/* %not-for-header */
+
+/* %ok-for-header */
+
+/* %endif */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *     EOB_ACT_LAST_MATCH -
+ *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *     EOB_ACT_END_OF_FILE - end of file
+ */
+/* %if-c-only */
+static int yy_get_next_buffer (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+       register char *source = (yytext_ptr);
+       register int number_to_move, i;
+       int ret_val;
+
+       if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+               YY_FATAL_ERROR(
+               "fatal flex scanner internal error--end of buffer missed" );
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+               { /* Don't try to fill the buffer, so this is an EOF. */
+               if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+                       {
+                       /* We matched a single character, the EOB, so
+                        * treat this as a final EOF.
+                        */
+                       return EOB_ACT_END_OF_FILE;
+                       }
+
+               else
+                       {
+                       /* We matched some text prior to the EOB, first
+                        * process it.
+                        */
+                       return EOB_ACT_LAST_MATCH;
+                       }
+               }
+
+       /* Try to read more data. */
+
+       /* First move last chars to start of buffer. */
+       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+       for ( i = 0; i < number_to_move; ++i )
+               *(dest++) = *(source++);
+
+       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+               /* don't do the read, it's not guaranteed to return an EOF,
+                * just force an EOF
+                */
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+       else
+               {
+                       yy_size_t num_to_read =
+                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+               while ( num_to_read <= 0 )
+                       { /* Not enough room in the buffer - grow it. */
+
+                       YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+                       }
+
+               if ( num_to_read > YY_READ_BUF_SIZE )
+                       num_to_read = YY_READ_BUF_SIZE;
+
+               /* Read in more data. */
+               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+                       (yy_n_chars), num_to_read );
+
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       if ( (yy_n_chars) == 0 )
+               {
+               if ( number_to_move == YY_MORE_ADJ )
+                       {
+                       ret_val = EOB_ACT_END_OF_FILE;
+                       asn1p_restart(asn1p_in  );
+                       }
+
+               else
+                       {
+                       ret_val = EOB_ACT_LAST_MATCH;
+                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+                               YY_BUFFER_EOF_PENDING;
+                       }
+               }
+
+       else
+               ret_val = EOB_ACT_CONTINUE_SCAN;
+
+       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+               /* Extend the array by 50%, plus the number we really need. */
+               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) asn1p_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
+               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+       }
+
+       (yy_n_chars) += number_to_move;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+       (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+       return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+/* %if-c-only */
+/* %not-for-header */
+
+    static yy_state_type yy_get_previous_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       register yy_state_type yy_current_state;
+       register char *yy_cp;
+    
+/* %% [15.0] code to get the start state into yy_current_state goes here */
+       yy_current_state = (yy_start);
+
+       (yy_state_ptr) = (yy_state_buf);
+       *(yy_state_ptr)++ = yy_current_state;
+
+       for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+               {
+/* %% [16.0] code to find the next state goes here */
+               register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+               while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+                       {
+                       yy_current_state = (int) yy_def[yy_current_state];
+                       if ( yy_current_state >= 769 )
+                               yy_c = yy_meta[(unsigned int) yy_c];
+                       }
+               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+               *(yy_state_ptr)++ = yy_current_state;
+               }
+
+       return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *     next_state = yy_try_NUL_trans( current_state );
+ */
+/* %if-c-only */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       register int yy_is_jam;
+    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
+
+       register YY_CHAR yy_c = 1;
+       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+               {
+               yy_current_state = (int) yy_def[yy_current_state];
+               if ( yy_current_state >= 769 )
+                       yy_c = yy_meta[(unsigned int) yy_c];
+               }
+       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+       yy_is_jam = (yy_current_state == 768);
+       if ( ! yy_is_jam )
+               *(yy_state_ptr)++ = yy_current_state;
+
+       return yy_is_jam ? 0 : yy_current_state;
+}
+
+/* %if-c-only */
+
+    static void yyunput (int c, register char * yy_bp )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       register char *yy_cp;
+    
+    yy_cp = (yy_c_buf_p);
+
+       /* undo effects of setting up asn1p_text */
+       *yy_cp = (yy_hold_char);
+
+       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+               { /* need to shift things up to make room */
+               /* +2 for EOB chars. */
+               register yy_size_t number_to_move = (yy_n_chars) + 2;
+               register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+               register char *source =
+                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+                       *--dest = *--source;
+
+               yy_cp += (int) (dest - source);
+               yy_bp += (int) (dest - source);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
+               }
+
+       *--yy_cp = (char) c;
+
+/* %% [18.0] update asn1p_lineno here */
+
+    if ( c == '\n' ){
+        --asn1p_lineno;
+    }
+
+       (yytext_ptr) = yy_bp;
+       (yy_hold_char) = *yy_cp;
+       (yy_c_buf_p) = yy_cp;
+}
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c-only */
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (void)
+#else
+    static int input  (void)
+#endif
+
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       int c;
+    
+       *(yy_c_buf_p) = (yy_hold_char);
+
+       if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+               {
+               /* yy_c_buf_p now points to the character we want to return.
+                * If this occurs *before* the EOB characters, then it's a
+                * valid NUL; if not, then we've hit the end of the buffer.
+                */
+               if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+                       /* This was really a NUL. */
+                       *(yy_c_buf_p) = '\0';
+
+               else
+                       { /* need more input */
+                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+                       ++(yy_c_buf_p);
+
+                       switch ( yy_get_next_buffer(  ) )
+                               {
+                               case EOB_ACT_LAST_MATCH:
+                                       /* This happens because yy_g_n_b()
+                                        * sees that we've accumulated a
+                                        * token and flags that we need to
+                                        * try matching the token before
+                                        * proceeding.  But for input(),
+                                        * there's no matching to consider.
+                                        * So convert the EOB_ACT_LAST_MATCH
+                                        * to EOB_ACT_END_OF_FILE.
+                                        */
+
+                                       /* Reset buffer status. */
+                                       asn1p_restart(asn1p_in );
+
+                                       /*FALLTHROUGH*/
+
+                               case EOB_ACT_END_OF_FILE:
+                                       {
+                                       if ( asn1p_wrap( ) )
+                                               return 0;
+
+                                       if ( ! (yy_did_buffer_switch_on_eof) )
+                                               YY_NEW_FILE;
+#ifdef __cplusplus
+                                       return yyinput();
+#else
+                                       return input();
+#endif
+                                       }
+
+                               case EOB_ACT_CONTINUE_SCAN:
+                                       (yy_c_buf_p) = (yytext_ptr) + offset;
+                                       break;
+                               }
+                       }
+               }
+
+       c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
+       *(yy_c_buf_p) = '\0';   /* preserve asn1p_text */
+       (yy_hold_char) = *++(yy_c_buf_p);
+
+/* %% [19.0] update BOL and asn1p_lineno */
+       if ( c == '\n' )
+                  
+    asn1p_lineno++;
+;
+
+       return c;
+}
+/* %if-c-only */
+#endif /* ifndef YY_NO_INPUT */
+/* %endif */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * 
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+/* %if-c-only */
+    void asn1p_restart  (FILE * input_file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+       if ( ! YY_CURRENT_BUFFER ){
+        asn1p_ensure_buffer_stack ();
+               YY_CURRENT_BUFFER_LVALUE =
+            asn1p__create_buffer(asn1p_in,YY_BUF_SIZE );
+       }
+
+       asn1p__init_buffer(YY_CURRENT_BUFFER,input_file );
+       asn1p__load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * 
+ */
+/* %if-c-only */
+    void asn1p__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+       /* TODO. We should be able to replace this entire function body
+        * with
+        *              asn1p_pop_buffer_state();
+        *              asn1p_push_buffer_state(new_buffer);
+     */
+       asn1p_ensure_buffer_stack ();
+       if ( YY_CURRENT_BUFFER == new_buffer )
+               return;
+
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+       asn1p__load_buffer_state( );
+
+       /* We don't actually know whether we did this switch during
+        * EOF (asn1p_wrap()) processing, but the only time this flag
+        * is looked at is after asn1p_wrap() is called, so it's safe
+        * to go ahead and always set it.
+        */
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/* %if-c-only */
+static void asn1p__load_buffer_state  (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+       (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+       asn1p_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+       (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * 
+ * @return the allocated buffer state.
+ */
+/* %if-c-only */
+    YY_BUFFER_STATE asn1p__create_buffer  (FILE * file, int  size )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       YY_BUFFER_STATE b;
+    
+       b = (YY_BUFFER_STATE) asn1p_alloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in asn1p__create_buffer()" );
+
+       b->yy_buf_size = size;
+
+       /* yy_ch_buf has to be 2 characters longer than the size given because
+        * we need to put in 2 end-of-buffer characters.
+        */
+       b->yy_ch_buf = (char *) asn1p_alloc(b->yy_buf_size + 2  );
+       if ( ! b->yy_ch_buf )
+               YY_FATAL_ERROR( "out of dynamic memory in asn1p__create_buffer()" );
+
+       b->yy_is_our_buffer = 1;
+
+       asn1p__init_buffer(b,file );
+
+       return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with asn1p__create_buffer()
+ * 
+ */
+/* %if-c-only */
+    void asn1p__delete_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+    
+       if ( ! b )
+               return;
+
+       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+       if ( b->yy_is_our_buffer )
+               asn1p_free((void *) b->yy_ch_buf  );
+
+       asn1p_free((void *) b  );
+}
+
+/* %if-c-only */
+
+/* %endif */
+
+/* %if-c++-only */
+/* %endif */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a asn1p_restart() or at EOF.
+ */
+/* %if-c-only */
+    static void asn1p__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+{
+       int oerrno = errno;
+    
+       asn1p__flush_buffer(b );
+
+       b->yy_input_file = file;
+       b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then asn1p__init_buffer was _probably_
+     * called from asn1p_restart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+/* %if-c-only */
+
+        b->yy_is_interactive = 0;
+    
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+       errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * 
+ */
+/* %if-c-only */
+    void asn1p__flush_buffer (YY_BUFFER_STATE  b )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       if ( ! b )
+               return;
+
+       b->yy_n_chars = 0;
+
+       /* We always need two end-of-buffer characters.  The first causes
+        * a transition to the end-of-buffer state.  The second causes
+        * a jam in that state.
+        */
+       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+       b->yy_buf_pos = &b->yy_ch_buf[0];
+
+       b->yy_at_bol = 1;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       if ( b == YY_CURRENT_BUFFER )
+               asn1p__load_buffer_state( );
+}
+
+/* %if-c-or-c++ */
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  
+ */
+/* %if-c-only */
+void asn1p_push_buffer_state (YY_BUFFER_STATE new_buffer )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       if (new_buffer == NULL)
+               return;
+
+       asn1p_ensure_buffer_stack();
+
+       /* This block is copied from asn1p__switch_to_buffer. */
+       if ( YY_CURRENT_BUFFER )
+               {
+               /* Flush out information for old buffer. */
+               *(yy_c_buf_p) = (yy_hold_char);
+               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+               }
+
+       /* Only push if top exists. Otherwise, replace top. */
+       if (YY_CURRENT_BUFFER)
+               (yy_buffer_stack_top)++;
+       YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+       /* copied from asn1p__switch_to_buffer. */
+       asn1p__load_buffer_state( );
+       (yy_did_buffer_switch_on_eof) = 1;
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  
+ */
+/* %if-c-only */
+void asn1p_pop_buffer_state (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       if (!YY_CURRENT_BUFFER)
+               return;
+
+       asn1p__delete_buffer(YY_CURRENT_BUFFER );
+       YY_CURRENT_BUFFER_LVALUE = NULL;
+       if ((yy_buffer_stack_top) > 0)
+               --(yy_buffer_stack_top);
+
+       if (YY_CURRENT_BUFFER) {
+               asn1p__load_buffer_state( );
+               (yy_did_buffer_switch_on_eof) = 1;
+       }
+}
+/* %endif */
+
+/* %if-c-or-c++ */
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+/* %if-c-only */
+static void asn1p_ensure_buffer_stack (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       yy_size_t num_to_alloc;
+    
+       if (!(yy_buffer_stack)) {
+
+               /* First allocation is just for 2 elements, since we don't know if this
+                * scanner will even need a stack. We use 2 instead of 1 to avoid an
+                * immediate realloc on the next call.
+         */
+               num_to_alloc = 1;
+               (yy_buffer_stack) = (struct yy_buffer_state**)asn1p_alloc
+                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in asn1p_ensure_buffer_stack()" );
+                                                                 
+               memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+                               
+               (yy_buffer_stack_max) = num_to_alloc;
+               (yy_buffer_stack_top) = 0;
+               return;
+       }
+
+       if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+               /* Increase the buffer to prepare for a possible push. */
+               int grow_size = 8 /* arbitrary grow size */;
+
+               num_to_alloc = (yy_buffer_stack_max) + grow_size;
+               (yy_buffer_stack) = (struct yy_buffer_state**)asn1p_realloc
+                                                               ((yy_buffer_stack),
+                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
+                                                               );
+               if ( ! (yy_buffer_stack) )
+                       YY_FATAL_ERROR( "out of dynamic memory in asn1p_ensure_buffer_stack()" );
+
+               /* zero only the new slots.*/
+               memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+               (yy_buffer_stack_max) = num_to_alloc;
+       }
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * 
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE asn1p__scan_buffer  (char * base, yy_size_t  size )
+{
+       YY_BUFFER_STATE b;
+    
+       if ( size < 2 ||
+            base[size-2] != YY_END_OF_BUFFER_CHAR ||
+            base[size-1] != YY_END_OF_BUFFER_CHAR )
+               /* They forgot to leave room for the EOB's. */
+               return 0;
+
+       b = (YY_BUFFER_STATE) asn1p_alloc(sizeof( struct yy_buffer_state )  );
+       if ( ! b )
+               YY_FATAL_ERROR( "out of dynamic memory in asn1p__scan_buffer()" );
+
+       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
+       b->yy_buf_pos = b->yy_ch_buf = base;
+       b->yy_is_our_buffer = 0;
+       b->yy_input_file = 0;
+       b->yy_n_chars = b->yy_buf_size;
+       b->yy_is_interactive = 0;
+       b->yy_at_bol = 1;
+       b->yy_fill_buffer = 0;
+       b->yy_buffer_status = YY_BUFFER_NEW;
+
+       asn1p__switch_to_buffer(b  );
+
+       return b;
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan a string. The next call to asn1p_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * 
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       asn1p__scan_bytes() instead.
+ */
+YY_BUFFER_STATE asn1p__scan_string (yyconst char * yystr )
+{
+    
+       return asn1p__scan_bytes(yystr,strlen(yystr) );
+}
+/* %endif */
+
+/* %if-c-only */
+/** Setup the input buffer state to scan the given bytes. The next call to asn1p_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * 
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE asn1p__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
+{
+       YY_BUFFER_STATE b;
+       char *buf;
+       yy_size_t n, i;
+    
+       /* Get memory for full buffer, including space for trailing EOB's. */
+       n = _yybytes_len + 2;
+       buf = (char *) asn1p_alloc(n  );
+       if ( ! buf )
+               YY_FATAL_ERROR( "out of dynamic memory in asn1p__scan_bytes()" );
+
+       for ( i = 0; i < _yybytes_len; ++i )
+               buf[i] = yybytes[i];
+
+       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+       b = asn1p__scan_buffer(buf,n );
+       if ( ! b )
+               YY_FATAL_ERROR( "bad buffer in asn1p__scan_bytes()" );
+
+       /* It's okay to grow etc. this buffer, and we should throw it
+        * away when we're done.
+        */
+       b->yy_is_our_buffer = 1;
+
+       return b;
+}
+/* %endif */
+
+/* %if-c-only */
+    static void yy_push_state (int  new_state )
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
+               {
+               yy_size_t new_size;
+
+               (yy_start_stack_depth) += YY_START_STACK_INCR;
+               new_size = (yy_start_stack_depth) * sizeof( int );
+
+               if ( ! (yy_start_stack) )
+                       (yy_start_stack) = (int *) asn1p_alloc(new_size  );
+
+               else
+                       (yy_start_stack) = (int *) asn1p_realloc((void *) (yy_start_stack),new_size  );
+
+               if ( ! (yy_start_stack) )
+                       YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+               }
+
+       (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+
+       BEGIN(new_state);
+}
+
+/* %if-c-only */
+    static void yy_pop_state  (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       if ( --(yy_start_stack_ptr) < 0 )
+               YY_FATAL_ERROR( "start-condition stack underflow" );
+
+       BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+}
+
+/* %if-c-only */
+    static int yy_top_state  (void)
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+{
+       return (yy_start_stack)[(yy_start_stack_ptr) - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+/* %if-c-only */
+static void yy_fatal_error (yyconst char* msg )
+{
+       (void) fprintf( stderr, "%s\n", msg );
+       exit( YY_EXIT_FAILURE );
+}
+/* %endif */
+/* %if-c++-only */
+/* %endif */
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+       do \
+               { \
+               /* Undo effects of setting up asn1p_text. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+               asn1p_text[asn1p_leng] = (yy_hold_char); \
+               (yy_c_buf_p) = asn1p_text + yyless_macro_arg; \
+               (yy_hold_char) = *(yy_c_buf_p); \
+               *(yy_c_buf_p) = '\0'; \
+               asn1p_leng = yyless_macro_arg; \
+               } \
+       while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/* %if-c-only */
+/* %if-reentrant */
+/* %endif */
+
+/** Get the current line number.
+ * 
+ */
+int asn1p_get_lineno  (void)
+{
+        
+    return asn1p_lineno;
+}
+
+/** Get the input stream.
+ * 
+ */
+FILE *asn1p_get_in  (void)
+{
+        return asn1p_in;
+}
+
+/** Get the output stream.
+ * 
+ */
+FILE *asn1p_get_out  (void)
+{
+        return asn1p_out;
+}
+
+/** Get the length of the current token.
+ * 
+ */
+yy_size_t asn1p_get_leng  (void)
+{
+        return asn1p_leng;
+}
+
+/** Get the current token.
+ * 
+ */
+
+char *asn1p_get_text  (void)
+{
+        return asn1p_text;
+}
+
+/* %if-reentrant */
+/* %endif */
+
+/** Set the current line number.
+ * @param line_number
+ * 
+ */
+void asn1p_set_lineno (int  line_number )
+{
+    
+    asn1p_lineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * 
+ * @see asn1p__switch_to_buffer
+ */
+void asn1p_set_in (FILE *  in_str )
+{
+        asn1p_in = in_str ;
+}
+
+void asn1p_set_out (FILE *  out_str )
+{
+        asn1p_out = out_str ;
+}
+
+int asn1p_get_debug  (void)
+{
+        return asn1p__flex_debug;
+}
+
+void asn1p_set_debug (int  bdebug )
+{
+        asn1p__flex_debug = bdebug ;
+}
+
+/* %endif */
+
+/* %if-reentrant */
+/* %if-bison-bridge */
+/* %endif */
+/* %endif if-c-only */
+
+/* %if-c-only */
+static int yy_init_globals (void)
+{
+        /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from asn1p_lex_destroy(), so don't allocate here.
+     */
+
+    /* We do not touch asn1p_lineno unless the option is enabled. */
+    asn1p_lineno =  1;
+    
+    (yy_buffer_stack) = 0;
+    (yy_buffer_stack_top) = 0;
+    (yy_buffer_stack_max) = 0;
+    (yy_c_buf_p) = (char *) 0;
+    (yy_init) = 0;
+    (yy_start) = 0;
+
+    (yy_start_stack_ptr) = 0;
+    (yy_start_stack_depth) = 0;
+    (yy_start_stack) =  NULL;
+
+    (yy_state_buf) = 0;
+    (yy_state_ptr) = 0;
+    (yy_full_match) = 0;
+    (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    asn1p_in = stdin;
+    asn1p_out = stdout;
+#else
+    asn1p_in = (FILE *) 0;
+    asn1p_out = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * asn1p_lex_init()
+     */
+    return 0;
+}
+/* %endif */
+
+/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
+/* asn1p_lex_destroy is for both reentrant and non-reentrant scanners. */
+int asn1p_lex_destroy  (void)
+{
+    
+    /* Pop the buffer stack, destroying each element. */
+       while(YY_CURRENT_BUFFER){
+               asn1p__delete_buffer(YY_CURRENT_BUFFER  );
+               YY_CURRENT_BUFFER_LVALUE = NULL;
+               asn1p_pop_buffer_state();
+       }
+
+       /* Destroy the stack itself. */
+       asn1p_free((yy_buffer_stack) );
+       (yy_buffer_stack) = NULL;
+
+    /* Destroy the start condition stack. */
+        asn1p_free((yy_start_stack)  );
+        (yy_start_stack) = NULL;
+
+    asn1p_free ( (yy_state_buf) );
+    (yy_state_buf)  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * asn1p_lex() is called, initialization will occur. */
+    yy_init_globals( );
+
+/* %if-reentrant */
+/* %endif */
+    return 0;
+}
+/* %endif */
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+       register int i;
+       for ( i = 0; i < n; ++i )
+               s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+       register int n;
+       for ( n = 0; s[n]; ++n )
+               ;
+
+       return n;
+}
+#endif
+
+void *asn1p_alloc (yy_size_t  size )
+{
+       return (void *) malloc( size );
+}
+
+void *asn1p_realloc  (void * ptr, yy_size_t  size )
+{
+       /* The cast to (char *) in the following accommodates both
+        * implementations that use char* generic pointers, and those
+        * that use void* generic pointers.  It works with the latter
+        * because both ANSI C and C++ allow castless assignment from
+        * any pointer type to void*, and deal with argument conversions
+        * as though doing an assignment.
+        */
+       return (void *) realloc( (char *) ptr, size );
+}
+
+void asn1p_free (void * ptr )
+{
+       free( (char *) ptr );   /* see asn1p_realloc() for (char *) cast */
+}
+
+/* %if-tables-serialization definitions */
+/* %define-yytables   The name for this specific scanner's tables. */
+#define YYTABLES_NAME "yytables"
+/* %endif */
+
+/* %ok-for-header */
+
+#line 570 "asn1p_l.l"
+
+
+
+/*
+ * Very dirty but wonderful hack allowing to rule states from within .y file.
+ */
+void asn1p_lexer_hack_push_opaque_state() { yy_push_state(opaque); }
+
+/*
+ * Another hack which disables recognizing some tokens when inside WITH SYNTAX.
+ */
+void asn1p_lexer_hack_enable_with_syntax() { yy_push_state(with_syntax); }
+
+/* Yet another */
+void asn1p_lexer_hack_push_encoding_control() {
+       yy_push_state(encoding_control);
+}
+
+static asn1c_integer_t
+_lex_atoi(const char *ptr) {
+       asn1c_integer_t value;
+       if(asn1p_atoi(ptr, &value)) {
+               fprintf(stderr,
+                       "Value \"%s\" at line %d is too large "
+                       "for this compiler! Please contact the asn1c author.\n",
+                       ptr, asn1p_lineno);
+               errno = ERANGE;
+       }
+       return value;
+}
+
+static double
+_lex_atod(const char *ptr) {
+       double value;
+       errno = 0;
+       value = strtod(ptr, 0);
+       if(errno) {
+               fprintf(stderr,
+                       "Value \"%s\" at line %d is outside of `double` range "
+                       "in this compiler! Please contact the asn1c author.\n",
+                       ptr, asn1p_lineno);
+               errno = ERANGE;
+       }
+       return value;
+}
+
+
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
new file mode 100644 (file)
index 0000000..7757216
--- /dev/null
@@ -0,0 +1,614 @@
+%{
+
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+#include "asn1p_y.h"
+
+int asn1p_lex(void);
+void asn1p_lexer_hack_push_opaque_state(void);         /* Used in .y */
+void asn1p_lexer_hack_enable_with_syntax(void);                /* Used in .y */
+void asn1p_lexer_hack_push_encoding_control(void);     /* Used in .y */
+
+#define        YY_FATAL_ERROR(msg)     do {                    \
+               fprintf(stderr,                         \
+                       "lexer error at line %d, "      \
+                       "text \"%s\"\n",                \
+                       yylineno, yytext);              \
+               exit(1);                                \
+       } while(0)
+
+int asn1p_lexer_pedantic_1990 = 0;
+int asn1p_lexer_types_year = 0;
+int asn1p_lexer_constructs_year = 0;
+int asn1p_lexer_extended_values = 0;
+
+int asn1p_as_pointer;
+
+static asn1c_integer_t _lex_atoi(const char *ptr);
+static double          _lex_atod(const char *ptr);
+
+/*
+ * Check that the type is defined in the year of the standard choosen.
+ */
+#define        TYPE_LIFETIME(fyr, lyr)                         \
+       (!asn1p_lexer_types_year                        \
+       || (fyr && fyr <= asn1p_lexer_types_year)       \
+       || (lyr && lyr  > asn1p_lexer_types_year))
+
+/*
+ * Check the the construction (or concept, i.e. CLASS) is defined in
+ * a given year.
+ */
+#define        CONSTRUCT_LIFETIME(fyr, lyr)                    \
+       (!asn1p_lexer_constructs_year                   \
+       || (fyr && fyr <= asn1p_lexer_constructs_year)  \
+       || (lyr && lyr  > asn1p_lexer_constructs_year))
+
+/*
+ * Append quoted string.
+ */
+#define        QAPPEND(text, tlen)     do {                            \
+               char *prev_text = asn1p_lval.tv_opaque.buf;     \
+               int prev_len = asn1p_lval.tv_opaque.len;        \
+               char *p;                                        \
+                                                               \
+               p = malloc((tlen) + prev_len + 1);              \
+               if(p == NULL) return -1;                        \
+                                                               \
+               if(prev_text) memcpy(p, prev_text, prev_len);   \
+               memcpy(p + prev_len, text, tlen);               \
+               p[prev_len + (tlen)] = '\0';                    \
+                                                               \
+               free(asn1p_lval.tv_opaque.buf);                 \
+               asn1p_lval.tv_opaque.buf = p;                   \
+               asn1p_lval.tv_opaque.len = (tlen) + prev_len;   \
+       } while(0)
+
+%}
+
+%option        never-interactive
+%option        noinput 
+%option        noyywrap stack
+/* Performance penalty is OK */
+%option yylineno       
+/* Controlled from within application */
+%option debug          
+
+%pointer
+
+%x dash_comment
+%x idash_comment
+%x cpp_comment
+%x quoted
+%x opaque
+%x encoding_control
+%x with_syntax
+%x extended_values
+
+/* Newline */
+NL     [\r\v\f\n]
+/* White-space */
+WSP    [\t\r\v\f\n ]
+
+%%
+
+<INITIAL>"\xef\xbb\xbf"                return UTF8_BOM;
+
+-{3,}/[\r\n]   /* Immediately terminated long comment */
+-{3,}/[^-\r\n] yy_push_state(idash_comment);   /* Incorrect, but acceptable */
+<idash_comment>{
+       -{3,}   yy_pop_state(); /* Acceptable end of comment */
+}
+
+--<[ \t]*ASN1C.RepresentAsPointer[ \t]*>--     asn1p_as_pointer = 1;
+
+<extended_values>{
+    "#BIT STRING"    {
+        yy_pop_state();
+        return TOK_ExtValue_BIT_STRING;
+    }
+}
+
+<INITIAL,with_syntax>--                yy_push_state(dash_comment);
+<dash_comment,idash_comment>{
+
+       {NL}    yy_pop_state();
+
+       --      yy_pop_state(); /* End of comment */
+       -       /* Eat single dash */
+       [^\r\v\f\n-]+   /* Eat */
+}
+
+<INITIAL,cpp_comment,with_syntax>"/*"          yy_push_state(cpp_comment);
+<cpp_comment>{
+       [^*/<]  /* Eat */
+       "*/"    yy_pop_state();
+       .       /* Eat */
+}
+
+
+       /*
+        * This is state is being set from corresponding .y module when
+        * higher-level data is necessary to make proper parsing of the
+        * underlying data. Thus, we enter the <opaque> state and save
+        * everything for later processing.
+        */
+<opaque>{
+
+       "{"     {
+                       yy_push_state(opaque);
+                       asn1p_lval.tv_opaque.buf = strdup(yytext);
+                       asn1p_lval.tv_opaque.len = yyleng;
+                       return TOK_opaque;
+               }
+
+       "}"     {
+                       yy_pop_state();
+                       asn1p_lval.tv_opaque.buf = strdup(yytext);
+                       asn1p_lval.tv_opaque.len = yyleng;
+                       return TOK_opaque;
+               }
+
+       [^{}:=]+        {
+                       asn1p_lval.tv_opaque.buf = strdup(yytext);
+                       asn1p_lval.tv_opaque.len = yyleng;
+                       return TOK_opaque;
+               }
+
+       "::="   {
+                       fprintf(stderr,
+                               "ASN.1 Parser synchronization failure: "
+                               "\"%s\" at line %d must not appear "
+                               "inside value definition\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+
+       [:=]    {
+                       asn1p_lval.tv_opaque.buf = strdup(yytext);
+                       asn1p_lval.tv_opaque.len = yyleng;
+                       return TOK_opaque;
+               }
+
+       }
+
+\"[^\"]*               {
+                       asn1p_lval.tv_opaque.buf = 0;
+                       asn1p_lval.tv_opaque.len = 0;
+                       QAPPEND(yytext+1, yyleng-1);
+                       yy_push_state(quoted);
+               }
+<quoted>{
+
+       \"\"    { QAPPEND(yytext, yyleng-1); }  /* Add a single quote */
+       [^\"]+  { QAPPEND(yytext, yyleng); }
+
+       \"      {
+                       yy_pop_state();
+                       /* Do not append last quote:
+                       // QAPPEND(yytext, yyleng); */
+
+                       if(asn1p_lexer_pedantic_1990
+                       && strchr(yytext, '\n')) {
+                               fprintf(stderr, "%s: "
+                               "Newlines are prohibited by ASN.1:1990\n",
+                               asn1p_lval.tv_opaque.buf);
+                               return -1;
+                       }
+
+                       return TOK_cstring;
+               }
+
+       }
+
+<encoding_control>{
+       ENCODING-CONTROL        {
+                       const char *s = "ENCODING-CONTROL";
+                       const char *p = s + sizeof("ENCODING-CONTROL") - 2;
+                       for(; p >= s; p--) unput(*p);
+                       yy_pop_state();
+               }
+       END     unput('D'); unput('N'); unput('E'); yy_pop_state();
+       [^{} \t\r\v\f\n]+
+       [[:alnum:]]+
+       .       /* Eat everything else */
+       "\n"
+       }
+
+'[0-9A-F \t\r\v\f\n]+'H {
+               /* " \t\r\n" weren't allowed in ASN.1:1990. */
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_hstring;
+       }
+
+'[01 \t\r\v\f\n]+'B    {
+               /* " \t\r\n" weren't allowed in ASN.1:1990. */
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_bstring;
+       }
+
+
+-[1-9][0-9]*   {
+               asn1p_lval.a_int = _lex_atoi(yytext);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number_negative;
+       }
+
+[1-9][0-9]*    {
+               asn1p_lval.a_int = _lex_atoi(yytext);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number;
+       }
+
+"0"    {
+               asn1p_lval.a_int = _lex_atoi(yytext);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_number;
+       }
+
+[-+]?[0-9]+[.]?([eE][-+]?)?[0-9]+ {
+               asn1p_lval.a_dbl = _lex_atod(yytext);
+               if(errno == ERANGE)
+                       return -1;
+               return TOK_realnumber;
+       }
+
+ABSENT                 return TOK_ABSENT;
+ALL                    return TOK_ALL;
+ANY                    {
+                               /* Appeared in 1990, removed in 1997 */
+                               if(TYPE_LIFETIME(1990, 1997))
+                                       return TOK_ANY; 
+                               fprintf(stderr, "Keyword \"%s\" at line %d "
+                                       "is obsolete\n", yytext, yylineno);
+                               REJECT;
+                       }
+APPLICATION            return TOK_APPLICATION;
+AUTOMATIC              return TOK_AUTOMATIC;
+BEGIN                  {
+        if(asn1p_lexer_extended_values) {
+            yy_push_state(extended_values);
+        }
+        return TOK_BEGIN;
+    }
+BIT                    return TOK_BIT;
+BMPString              {
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_BMPString;
+                               REJECT;
+                       }
+BOOLEAN                        return TOK_BOOLEAN;
+BY                     return TOK_BY;
+CHARACTER              return TOK_CHARACTER;
+CHOICE                 return TOK_CHOICE;
+CLASS                  return TOK_CLASS;
+COMPONENT              return TOK_COMPONENT;
+COMPONENTS             return TOK_COMPONENTS;
+CONSTRAINED            return TOK_CONSTRAINED;
+CONTAINING             return TOK_CONTAINING;
+DEFAULT                        return TOK_DEFAULT;
+DEFINED                        {
+                               /* Appeared in 1990, removed in 1997 */
+                               if(TYPE_LIFETIME(1990, 1997))
+                                       return TOK_DEFINED;
+                               fprintf(stderr, "Keyword \"%s\" at line %d "
+                                       "is obsolete\n", yytext, yylineno);
+                               /* Deprecated since */
+                               REJECT;
+                       }
+DEFINITIONS            return TOK_DEFINITIONS;
+EMBEDDED               return TOK_EMBEDDED;
+ENCODED                        return TOK_ENCODED;
+ENCODING-CONTROL       return TOK_ENCODING_CONTROL;
+END                    {
+                   if(YYSTATE == extended_values) {
+                yy_pop_state();
+            }
+            return TOK_END;
+        }
+ENUMERATED             return TOK_ENUMERATED;
+EXCEPT                 return TOK_EXCEPT;
+EXPLICIT               return TOK_EXPLICIT;
+EXPORTS                        return TOK_EXPORTS;
+EXTENSIBILITY          return TOK_EXTENSIBILITY;
+EXTERNAL               return TOK_EXTERNAL;
+FALSE                  return TOK_FALSE;
+FROM                   return TOK_FROM;
+GeneralizedTime                return TOK_GeneralizedTime;
+GeneralString          return TOK_GeneralString;
+GraphicString          return TOK_GraphicString;
+IA5String              return TOK_IA5String;
+IDENTIFIER             return TOK_IDENTIFIER;
+IMPLICIT               return TOK_IMPLICIT;
+IMPLIED                        return TOK_IMPLIED;
+IMPORTS                        return TOK_IMPORTS;
+INCLUDES               return TOK_INCLUDES;
+INSTANCE               return TOK_INSTANCE;
+INSTRUCTIONS           return TOK_INSTRUCTIONS;
+INTEGER                        return TOK_INTEGER;
+INTERSECTION           return TOK_INTERSECTION;
+ISO646String           return TOK_ISO646String;
+MAX                    return TOK_MAX;
+MIN                    return TOK_MIN;
+MINUS-INFINITY         return TOK_MINUS_INFINITY;
+NULL                   return TOK_NULL;
+NumericString          return TOK_NumericString;
+OBJECT                 return TOK_OBJECT;
+ObjectDescriptor       return TOK_ObjectDescriptor;
+OCTET                  return TOK_OCTET;
+OF                     return TOK_OF;
+OPTIONAL               return TOK_OPTIONAL;
+PATTERN                        return TOK_PATTERN;
+PDV                    return TOK_PDV;
+PLUS-INFINITY          return TOK_PLUS_INFINITY;
+PRESENT                        return TOK_PRESENT;
+PrintableString                return TOK_PrintableString;
+PRIVATE                        return TOK_PRIVATE;
+REAL                   return TOK_REAL;
+RELATIVE-OID           return TOK_RELATIVE_OID;
+SEQUENCE               return TOK_SEQUENCE;
+SET                    return TOK_SET;
+SIZE                   return TOK_SIZE;
+STRING                 return TOK_STRING;
+SYNTAX                 return TOK_SYNTAX;
+T61String              return TOK_T61String;
+TAGS                   return TOK_TAGS;
+TeletexString          return TOK_TeletexString;
+TRUE                   return TOK_TRUE;
+UNION                  return TOK_UNION;
+UNIQUE                 return TOK_UNIQUE;
+UNIVERSAL              return TOK_UNIVERSAL;
+UniversalString                {
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_UniversalString;
+                               REJECT;
+                       }
+UTCTime                        return TOK_UTCTime;
+UTF8String             {
+                               if(TYPE_LIFETIME(1994, 0))
+                                       return TOK_UTF8String;
+                               REJECT;
+                       }
+VideotexString         return TOK_VideotexString;
+VisibleString          return TOK_VisibleString;
+WITH                   return TOK_WITH;
+
+
+<INITIAL,with_syntax>&[A-Z][A-Za-z0-9]*([-][A-Za-z0-9]+)*      {
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_typefieldreference;
+       }
+
+<INITIAL,with_syntax>&[a-z][a-zA-Z0-9]*([-][a-zA-Z0-9]+)*      {
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_valuefieldreference;
+       }
+
+
+[a-z][a-zA-Z0-9]*([-][a-zA-Z0-9]+)*    {
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_identifier;
+       }
+
+       /*
+        * objectclassreference
+        */
+<INITIAL,extended_values>[A-Z][A-Z0-9]*([-][A-Z0-9]+)* {
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_capitalreference;
+       }
+
+       /*
+        * typereference, modulereference
+        * NOTE: TOK_objectclassreference must be combined
+        * with this token to produce true typereference.
+        */
+[A-Z][A-Za-z0-9]*([-][A-Za-z0-9]+)*    {
+               asn1p_lval.tv_str = strdup(yytext);
+               return TOK_typereference;
+       }
+
+<INITIAL,extended_values>"::="         return TOK_PPEQ;
+
+"..."          return TOK_ThreeDots;
+".."           return TOK_TwoDots;
+
+<with_syntax>{
+
+       [A-Z][A-Za-z0-9]*([-][A-Za-z0-9]+)*     {
+                               asn1p_lval.tv_str = strdup(yytext);
+                               return TOK_Literal;
+                       }
+
+       ","             {
+                               asn1p_lval.tv_str = strdup(yytext);
+                               return TOK_Literal;
+                       }
+
+       "{"             {
+                               yy_push_state(with_syntax);
+                               asn1p_lval.tv_str = strdup(yytext);
+                               return TOK_Literal;
+                       }
+
+       "["             return '[';
+       "]"             return ']';
+
+       {WSP}+          {
+                       asn1p_lval.tv_opaque.buf = strdup(yytext);
+                       asn1p_lval.tv_opaque.len = yyleng;
+                       return TOK_whitespace;
+                       }
+
+       "}"             {
+                               yy_pop_state();
+                               if(YYSTATE == with_syntax) {
+                                       asn1p_lval.tv_str = strdup(yytext);
+                                       return TOK_Literal;
+                               } else {
+                                       return '}';
+                               }
+                       }
+
+}
+
+
+<INITIAL,extended_values>{WSP}+        /* Ignore whitespace */
+
+
+[{][\t\r\v\f\n ]*[0-7][,][\t\r\v\f\n ]*[0-9]+[\t\r\v\f\n ]*[}] {
+               asn1c_integer_t v1 = -1, v2 = -1;
+               char *p;
+               for(p = yytext; *p; p++)
+                       if(*p >= '0' && *p <= '9')
+                       { v1 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;      /* Skip digits */
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v2 = _lex_atoi(p); break; }
+               if(v1 < 0 || v1 > 7) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
+                               "mandates 0..7 range for Tuple's TableColumn\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               if(v2 < 0 || v2 > 15) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
+                               "mandates 0..15 range for Tuple's TableRow\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               asn1p_lval.a_int = (v1 << 4) + v2;
+               return TOK_tuple;
+       }
+
+[{][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[\t\r\v\f\n ]*[}]  {
+               asn1c_integer_t v1 = -1, v2 = -1, v3 = -1, v4 = -1;
+               char *p;
+               for(p = yytext; *p; p++)
+                       if(*p >= '0' && *p <= '9')
+                       { v1 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;      /* Skip digits */
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v2 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v3 = _lex_atoi(p); break; }
+               while(*p >= '0' && *p <= '9') p++;
+               for(; *p; p++) if(*p >= '0' && *p <= '9')
+                       { v4 = _lex_atoi(p); break; }
+               if(v1 < 0 || v1 > 127) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..127 range for Quadruple's Group\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               if(v2 < 0 || v2 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Plane\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               if(v3 < 0 || v3 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Row\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               if(v4 < 0 || v4 > 255) {
+                       fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
+                               "mandates 0..255 range for Quadruple's Cell\n",
+                               yytext, yylineno);
+                       return -1;
+               }
+               asn1p_lval.a_int = (v1 << 24) | (v2 << 16) | (v3 << 8) | v4;
+               return TOK_quadruple;
+       }
+
+
+"[["        return TOK_VBracketLeft;
+"]]"        return TOK_VBracketRight;
+
+[(){},;:|!.&@\[\]^]    return yytext[0];
+
+[^A-Za-z0-9:=,{}<.@()[]'\"|&^*;!-] {
+               if(TYPE_LIFETIME(1994, 0))
+                       fprintf(stderr, "ERROR: ");
+               fprintf(stderr,
+               "Symbol '%c' at line %d is prohibited "
+               "by ASN.1:1994 and ASN.1:1997\n",
+                       yytext[0], yylineno);
+               if(TYPE_LIFETIME(1994, 0))
+                       return -1;
+       }
+
+<*>.   {
+               fprintf(stderr,
+                       "Unexpected token at line %d: \"%s\"\n",
+                       yylineno, yytext);
+               while(YYSTATE != INITIAL)
+                       yy_pop_state();
+               if(0) {
+                       yy_top_state(); /* Just to use this function. */
+                       yy_fatal_error("Parse error");
+               }
+               return -1;
+}
+
+<*><<EOF>>      {
+               while(YYSTATE != INITIAL)
+                       yy_pop_state();
+               yyterminate();
+       }
+
+
+%%
+
+/*
+ * Very dirty but wonderful hack allowing to rule states from within .y file.
+ */
+void asn1p_lexer_hack_push_opaque_state() { yy_push_state(opaque); }
+
+/*
+ * Another hack which disables recognizing some tokens when inside WITH SYNTAX.
+ */
+void asn1p_lexer_hack_enable_with_syntax() { yy_push_state(with_syntax); }
+
+/* Yet another */
+void asn1p_lexer_hack_push_encoding_control() {
+       yy_push_state(encoding_control);
+}
+
+static asn1c_integer_t
+_lex_atoi(const char *ptr) {
+       asn1c_integer_t value;
+       if(asn1p_atoi(ptr, &value)) {
+               fprintf(stderr,
+                       "Value \"%s\" at line %d is too large "
+                       "for this compiler! Please contact the asn1c author.\n",
+                       ptr, yylineno);
+               errno = ERANGE;
+       }
+       return value;
+}
+
+static double
+_lex_atod(const char *ptr) {
+       double value;
+       errno = 0;
+       value = strtod(ptr, 0);
+       if(errno) {
+               fprintf(stderr,
+                       "Value \"%s\" at line %d is outside of `double` range "
+                       "in this compiler! Please contact the asn1c author.\n",
+                       ptr, yylineno);
+               errno = ERANGE;
+       }
+       return value;
+}
+
diff --git a/libasn1parser/asn1p_list.h b/libasn1parser/asn1p_list.h
new file mode 100644 (file)
index 0000000..858f24d
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Singly linked tail queue support.
+ */
+#ifndef        ASN1_PARSER_LIST_H
+#define        ASN1_PARSER_LIST_H
+
+#define        TQ_HEAD(type)                                   \
+       struct {                                        \
+               type *tq_head;                          \
+               type**tq_tail;                          \
+       }
+
+#define        TQ_MOVE(to, from)       do {                    \
+       if(&(TQ_FIRST(from)) == (from)->tq_tail) {      \
+               TQ_INIT(to);                            \
+       } else {                                        \
+               (to)->tq_head = (from)->tq_head;        \
+               (to)->tq_tail = (from)->tq_tail;        \
+       }                                               \
+       TQ_INIT(from);                                  \
+       } while(0)
+
+#define        TQ_ENTRY(type)                                  \
+       struct {                                        \
+               type *tq_next;                          \
+       }
+
+#define TQ_FIRST(headp)                ((headp)->tq_head)
+#define TQ_NEXT(el, field)     ((el)->field.tq_next)
+
+#define TQ_INIT(head) do {                             \
+       TQ_FIRST((head)) = 0;                           \
+       (head)->tq_tail = &TQ_FIRST((head));            \
+       } while(0)
+
+#define        TQ_FOR(var, head, field)                        \
+       for((var) = TQ_FIRST((head));                   \
+               (var); (var) = TQ_NEXT((var), field))
+
+/* MSVC does not have typeof(), cannot prevent side effects! */
+#define        TQ_ADD(head, xel, field) do {                   \
+       typeof(xel) __el = (xel);                       \
+       assert(TQ_NEXT((__el), field) == 0);            \
+        *(head)->tq_tail = (__el);                     \
+        (head)->tq_tail = &TQ_NEXT((__el), field);     \
+       } while(0)
+
+#define        TQ_CONCAT(head1, head2, field) do {             \
+       if(TQ_FIRST(head2)) {                           \
+               *(head1)->tq_tail = (head2)->tq_head;   \
+               (head1)->tq_tail = (head2)->tq_tail;    \
+               TQ_INIT(head2);                         \
+       }                                               \
+       } while(0)
+
+/*
+ * Remove the first element and return it.
+ */
+#define        TQ_REMOVE(head, field)  ({                      \
+       typeof(TQ_FIRST((head))) __fel;                 \
+       __fel = TQ_FIRST((head));                       \
+       if(__fel == 0                                   \
+       || (TQ_FIRST((head)) = TQ_NEXT(__fel, field))   \
+               == 0) {                                 \
+               (head)->tq_tail = &TQ_FIRST((head));    \
+       } else {                                        \
+               TQ_NEXT(__fel, field) = 0;              \
+       }                                               \
+       __fel; })
+
+
+#endif /* ASN1_PARSER_LIST_H */
diff --git a/libasn1parser/asn1p_module.c b/libasn1parser/asn1p_module.c
new file mode 100644 (file)
index 0000000..974668d
--- /dev/null
@@ -0,0 +1,98 @@
+#include <stdlib.h>
+#include <string.h>
+#include <genhash.h>
+
+#include "asn1parser.h"
+
+/*
+ * Construct a new empty module.
+ */
+asn1p_module_t *
+asn1p_module_new() {
+       asn1p_module_t *mod;
+
+       mod = calloc(1, sizeof *mod);
+       if(mod) {
+               TQ_INIT(&(mod->exports));
+               TQ_INIT(&(mod->imports));
+               TQ_INIT(&(mod->members));
+
+        mod->members_hash = genhash_new(cmpf_string, hashf_string, NULL, NULL);
+        assert(mod->members_hash);
+    }
+       return mod;
+}
+
+/*
+ * Destroy the module.
+ */
+void
+asn1p_module_free(asn1p_module_t *mod) {
+       if(mod) {
+               asn1p_expr_t *expr;
+               asn1p_xports_t *xports;
+
+               free(mod->ModuleName);
+               free(mod->source_file_name);
+
+               asn1p_oid_free(mod->module_oid);
+
+               while((xports = TQ_REMOVE(&(mod->exports), xp_next)))
+                       asn1p_xports_free(xports);
+
+               while((xports = TQ_REMOVE(&(mod->imports), xp_next)))
+                       asn1p_xports_free(xports);
+
+               while((expr = TQ_REMOVE(&(mod->members), next)))
+                       asn1p_expr_free(expr);
+
+        genhash_destroy(mod->members_hash);
+        mod->members_hash = NULL;
+
+               free(mod);
+       }
+}
+
+asn1p_t *
+asn1p_new() {
+       asn1p_t *asn;
+       asn = calloc(1, sizeof(*asn));
+       if(asn) {
+               TQ_INIT(&(asn->modules));
+       }
+       return asn;
+}
+
+
+void
+asn1p_delete(asn1p_t *asn) {
+       if(asn) {
+               asn1p_module_t *mod;
+               while((mod = TQ_REMOVE(&(asn->modules), mod_next)))
+                       asn1p_module_free(mod);
+               free(asn);
+       }
+}
+
+
+void
+asn1p_module_move_members(asn1p_module_t *to, asn1p_module_t *from) {
+    if(from) {
+        while(TQ_FIRST(&(from->members))) {
+            asn1p_expr_t *expr = TQ_REMOVE(&from->members, next);
+            TQ_ADD(&to->members, expr, next);
+            genhash_add(to->members_hash, expr->Identifier, expr);
+        }
+        assert(TQ_FIRST(&from->members) == 0);
+
+        genhash_empty(from->members_hash, 0, 0);
+    }
+}
+
+void
+asn1p_module_member_add(asn1p_module_t *mod, asn1p_expr_t *expr) {
+    if(expr) {
+        TQ_ADD(&mod->members, expr, next);
+        genhash_add(mod->members_hash, expr->Identifier, expr);
+    }
+}
diff --git a/libasn1parser/asn1p_module.h b/libasn1parser/asn1p_module.h
new file mode 100644 (file)
index 0000000..8315bf4
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * A Module definition structure used by the ASN.1 parser.
+ */
+#ifndef        ASN1_PARSER_MODULE_H
+#define        ASN1_PARSER_MODULE_H
+
+struct asn1p_module_s;
+
+/*
+ * A simple container for several modules.
+ */
+typedef struct asn1p_s {
+       TQ_HEAD(struct asn1p_module_s)  modules;
+} asn1p_t;
+
+asn1p_t *asn1p_new(void);
+void asn1p_delete(asn1p_t *asn);
+
+struct genhash_s;   /* Forward declaration */
+
+/*
+ * Flags specific to a module.
+ */
+typedef enum asn1p_module_flags {
+       MSF_NOFLAGS,
+       MSF_unk_INSTRUCTIONS            = 0x001,
+       MSF_TAG_INSTRUCTIONS            = 0x002,
+       MSF_XER_INSTRUCTIONS            = 0x004,
+       MSF_EXPLICIT_TAGS               = 0x010,
+       MSF_IMPLICIT_TAGS               = 0x020,
+       MSF_AUTOMATIC_TAGS              = 0x040,
+       MSF_EXTENSIBILITY_IMPLIED       = 0x100,
+} asn1p_module_flags_e;
+#define        MSF_MASK_INSTRUCTIONS           0x0f
+#define        MSF_MASK_TAGS                   0xf0
+
+/*
+ * === EXAMPLE ===
+ * MySyntax DEFINITIONS AUTOMATIC TAGS ::=
+ * BEGIN
+ * ...
+ * END
+ * === EOF ===
+ */
+typedef struct asn1p_module_s {
+
+       /*
+        * Human-readable module reference.
+        */
+       char *ModuleName;   /* Must be the first field */
+
+       /*
+        * Name of the source file.
+        */
+       char *source_file_name;
+
+       /*
+        * Unique module identifier, OID.
+        */
+       asn1p_oid_t *module_oid;        /* Optional OID of the module */
+
+       /*
+        * Module flags.
+        */
+       asn1p_module_flags_e module_flags;      /* AUTOMATIC TAGS? */
+
+       /*
+        * List of everything that this module EXPORTS.
+        */
+       TQ_HEAD(struct asn1p_xports_s)  exports;
+
+       /*
+        * List of everything that this module IMPORTS.
+        */
+       TQ_HEAD(struct asn1p_xports_s)  imports;
+
+       /*
+        * List of everything that this module defines itself.
+        */
+       TQ_HEAD(struct asn1p_expr_s)    members;   /* Do not access directly */
+    struct genhash_s *members_hash;
+
+       /*
+        * Next module in the list.
+        */
+       TQ_ENTRY(struct asn1p_module_s)
+               mod_next;
+
+       /* All modules */
+       asn1p_t *asn1p;
+
+       /*
+        * Internally useful properties.
+        */
+       enum {
+         MT_STANDARD_MODULE = 0x01,    /* Module came from standard-modules */
+       } _tags;
+} asn1p_module_t;
+
+/*
+ * Constructor and destructor.
+ */
+asn1p_module_t *asn1p_module_new(void);
+void asn1p_module_free(asn1p_module_t *mod);
+
+void asn1p_module_move_members(asn1p_module_t *to, asn1p_module_t *from);
+void asn1p_module_member_add(asn1p_module_t *mod, struct asn1p_expr_s *expr);
+
+
+#endif /* ASN1_PARSER_MODULE_H */
diff --git a/libasn1parser/asn1p_oid.c b/libasn1parser/asn1p_oid.c
new file mode 100644 (file)
index 0000000..a71c8c4
--- /dev/null
@@ -0,0 +1,114 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "asn1parser.h"
+
+asn1p_oid_t *
+asn1p_oid_construct(asn1p_oid_arc_t *arc, int narcs) {
+       asn1p_oid_t *oid;
+
+       if(narcs <= 0)
+               return NULL;
+
+       oid = asn1p_oid_new();
+       if(oid) {
+               for(; narcs--; arc++) {
+                       if(asn1p_oid_add_arc(oid, arc)) {
+                               asn1p_oid_free(oid);
+                               return NULL;
+                       }
+               }
+       }
+
+       return oid;
+}
+
+asn1p_oid_t *
+asn1p_oid_new() {
+       return calloc(1, sizeof(asn1p_oid_t));
+}
+
+int
+asn1p_oid_add_arc(asn1p_oid_t *oid, asn1p_oid_arc_t *template) {
+       void *p;
+       p = realloc(oid->arcs, (oid->arcs_count + 1) * sizeof(oid->arcs[0]));
+       if(p) {
+               oid->arcs = p;
+               oid->arcs[oid->arcs_count].name
+                               = template->name?strdup(template->name):0;
+               oid->arcs[oid->arcs_count].number = template->number;
+               oid->arcs_count++;
+               return 0;
+       } else {
+               return -1;
+       }
+}
+
+void
+asn1p_oid_free(asn1p_oid_t *oid) {
+       if(oid) {
+               if(oid->arcs) {
+                       while(oid->arcs_count--) {
+                               free(oid->arcs[oid->arcs_count].name);
+                       }
+                       free(oid->arcs);
+               }
+               free(oid);
+       }
+}
+
+asn1p_oid_arc_t *
+asn1p_oid_arc_new(const char *optName, asn1c_integer_t optNumber /* = -1 */) {
+       asn1p_oid_arc_t *arc;
+
+       arc = calloc(1, sizeof *arc);
+       if(arc) {
+               if(optName)
+                       arc->name = strdup(optName);
+               arc->number = optNumber;
+       }
+
+       return arc;
+}
+
+void
+asn1p_oid_arc_free(asn1p_oid_arc_t *arc) {
+       if(arc) {
+               free(arc->name);
+               free(arc);
+       }
+}
+
+int
+asn1p_oid_compare(const asn1p_oid_t *a, const asn1p_oid_t *b) {
+       int i;
+
+       for(i = 0; ; i++) {
+               asn1c_integer_t cmp;
+
+               if(b->arcs_count > i) {
+                       if(a->arcs_count <= i)
+                               return -1;
+               } else if(a->arcs_count > i) {
+                       if(b->arcs_count <= i)
+                               return 1;
+               } else if(b->arcs_count <= i && a->arcs_count <= i) {
+                       cmp = b->arcs_count - a->arcs_count;
+                       if(cmp < 0)
+                               return -1;
+                       else if(cmp > 0)
+                               return 1;
+                       return 0;
+               }
+
+               cmp = b->arcs[i].number - a->arcs[i].number;
+               if(cmp < 0)
+                       return -1;
+               else if(cmp > 0)
+                       return 1;
+       }
+
+}
+
+
diff --git a/libasn1parser/asn1p_oid.h b/libasn1parser/asn1p_oid.h
new file mode 100644 (file)
index 0000000..1b7ba52
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Object Identifier definition.
+ */
+#ifndef        ASN1_PARSER_OID_H
+#define        ASN1_PARSER_OID_H
+
+/********************************
+ * Single Object Identifier Arc *
+ ********************************/
+
+/*
+ * Object identifier arc (one number in the hierarchy).
+ */
+typedef struct asn1p_oid_arc_s {
+       asn1c_integer_t number; /* -1 if not yet defined */
+       char *name;     /* 0 if not defined */
+} asn1p_oid_arc_t;
+
+
+/*
+ * Arc constructor.
+ */
+asn1p_oid_arc_t *asn1p_oid_arc_new(
+       const char *optName, asn1c_integer_t optNumber /* = -1 */);
+/*
+ * Arc destructor.
+ */
+void asn1p_oid_arc_free(asn1p_oid_arc_t *);
+
+
+/**************************************************
+ * Object Identifier itself, a collection of arcs *
+ **************************************************/
+
+/*
+ * Object Identifier as a collection of arcs.
+ */
+typedef struct asn1p_oid_s {
+       asn1p_oid_arc_t *arcs;
+       int arcs_count;
+} asn1p_oid_t;
+
+/*
+ * OID constructors.
+ */
+asn1p_oid_t *asn1p_oid_new(void);
+asn1p_oid_t *asn1p_oid_construct(asn1p_oid_arc_t *, int narcs);
+
+/*
+ * Add another arc using given one as a template
+ */
+int asn1p_oid_add_arc(asn1p_oid_t *, asn1p_oid_arc_t *template);
+
+/*
+ * OID destructor.
+ */
+void asn1p_oid_free(asn1p_oid_t *);
+
+/*
+ * RETURN VALUES:
+ *     0: The specified OIDs are equal.
+ *     -1 or 1 otherwise.
+ */
+int asn1p_oid_compare(const asn1p_oid_t *a, const asn1p_oid_t *b);
+
+
+#endif /* ASN1_PARSER_OID_H */
diff --git a/libasn1parser/asn1p_param.c b/libasn1parser/asn1p_param.c
new file mode 100644 (file)
index 0000000..df6054e
--- /dev/null
@@ -0,0 +1,110 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+
+/*
+ * Construct a new empty parameters list.
+ */
+asn1p_paramlist_t *
+asn1p_paramlist_new(int _lineno) {
+       asn1p_paramlist_t *pl;
+
+       pl = calloc(1, sizeof *pl);
+       if(pl) {
+               pl->_lineno = _lineno;
+       }
+
+       return pl;
+}
+
+void
+asn1p_paramlist_free(asn1p_paramlist_t *pl) {
+       if(pl) {
+               if(pl->params) {
+                       int i = pl->params_count;
+                       while(i--) {
+                               asn1p_ref_free(pl->params[i].governor);
+                               free(pl->params[i].argument);
+                               pl->params[i].governor = 0;
+                               pl->params[i].argument = 0;
+                       }
+                       free(pl->params);
+                       pl->params = 0;
+               }
+
+               free(pl);
+       }
+}
+
+int
+asn1p_paramlist_add_param(asn1p_paramlist_t *pl, asn1p_ref_t *gov, char *arg) {
+
+       if(!pl || !arg) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * Make sure there's enough space to insert a new element.
+        */
+       if(pl->params_count == pl->params_size) {
+               int newsize = pl->params_size?pl->params_size<<2:4;
+               void *p;
+               p = realloc(pl->params,
+                       newsize * sizeof(pl->params[0]));
+               if(p) {
+                       pl->params = p;
+                       pl->params_size = newsize;
+                       memset(&pl->params[pl->params_count], 0,
+                               (newsize - pl->params_size)
+                               * sizeof(pl->params[0]));
+               } else {
+                       return -1;
+               }
+
+       }
+
+       if(gov) {
+               pl->params[pl->params_count].governor = asn1p_ref_clone(gov);
+               if(pl->params[pl->params_count].governor == NULL)
+                       return -1;
+       } else {
+               pl->params[pl->params_count].governor = 0;
+       }
+
+       pl->params[pl->params_count].argument = strdup(arg);
+       if(pl->params[pl->params_count].argument) {
+               pl->params_count++;
+               return 0;
+       } else {
+               asn1p_ref_free(pl->params[pl->params_count].governor);
+               return -1;
+       }
+}
+
+asn1p_paramlist_t *
+asn1p_paramlist_clone(asn1p_paramlist_t *pl) {
+       asn1p_paramlist_t *newpl;
+
+       newpl = asn1p_paramlist_new(pl->_lineno);
+       if(newpl) {
+               int i;
+               for(i = 0; i < pl->params_count; i++) {
+                       if(asn1p_paramlist_add_param(newpl,
+                               pl->params[i].governor,
+                               pl->params[i].argument
+                       )) {
+                               asn1p_paramlist_free(newpl);
+                               newpl = NULL;
+                               break;
+                       }
+               }
+       }
+
+       return newpl;
+}
+
diff --git a/libasn1parser/asn1p_param.h b/libasn1parser/asn1p_param.h
new file mode 100644 (file)
index 0000000..93db90d
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Structures and prototypes related to parameterization
+ */
+#ifndef        ASN1_PARSER_PARAMETERIZATION_H
+#define        ASN1_PARSER_PARAMETERIZATION_H
+
+struct asn1p_expr_s;   /* Forward declaration */
+
+typedef struct asn1p_paramlist_s {
+       struct asn1p_param_s {
+               /* Translated from */
+               asn1p_ref_t     *governor;
+               char            *argument;
+       } *params;
+       int params_count;
+       int params_size;
+       int _lineno;
+} asn1p_paramlist_t;
+
+/*
+ * Constructor and destructor.
+ */
+asn1p_paramlist_t *asn1p_paramlist_new(int _lineno);
+void asn1p_paramlist_free(asn1p_paramlist_t *);
+
+asn1p_paramlist_t *asn1p_paramlist_clone(asn1p_paramlist_t *ref);
+
+int asn1p_paramlist_add_param(asn1p_paramlist_t *,
+               asn1p_ref_t *opt_gov, char *arg);
+
+
+#endif /* ASN1_PARSER_PARAMETERIZATION_H */
diff --git a/libasn1parser/asn1p_value.c b/libasn1parser/asn1p_value.c
new file mode 100644 (file)
index 0000000..957b9e4
--- /dev/null
@@ -0,0 +1,346 @@
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+#include "asn1p_expr.h"
+
+void
+asn1p_value_set_source(asn1p_value_t *value, asn1p_module_t *module,
+                       int lineno) {
+    if(value) {
+        switch(value->type) {
+        case ATV_TYPE:
+            asn1p_expr_set_source(value->value.v_type, module, lineno);
+            break;
+        case ATV_REFERENCED:
+            asn1p_ref_set_source(value->value.reference, module, lineno);
+            break;
+        case ATV_VALUESET:
+            asn1p_constraint_set_source(value->value.constraint, module,
+                                        lineno);
+            break;
+        default:
+            break;
+        }
+    }
+}
+
+int
+asn1p_value_compare(const asn1p_value_t *a, const asn1p_value_t *b) {
+    if(a->type != b->type) {
+        return -1;
+    }
+
+    switch(a->type) {
+    case ATV_NULL:
+    case ATV_NOVALUE:
+    case ATV_MAX:
+    case ATV_MIN:
+    case ATV_FALSE:
+    case ATV_TRUE:
+        break;
+    case ATV_TYPE:
+        return asn1p_expr_compare(a->value.v_type, b->value.v_type);
+    case ATV_REAL:
+        return (a->value.v_double == b->value.v_double) ? 0 : -1;
+    case ATV_INTEGER:
+    case ATV_TUPLE:
+    case ATV_QUADRUPLE:
+        return (a->value.v_integer == b->value.v_integer) ? 0 : -1;
+    case ATV_STRING:
+    case ATV_UNPARSED:
+        if(a->value.string.size != b->value.string.size
+           || memcmp(a->value.string.buf, b->value.string.buf,
+                     a->value.string.size)
+                  != 0) {
+            return -1;
+        }
+        return 0;
+    case ATV_BITVECTOR:
+        if(a->value.binary_vector.size_in_bits
+               != b->value.binary_vector.size_in_bits
+           || memcmp(a->value.binary_vector.bits, b->value.binary_vector.bits,
+                     (a->value.binary_vector.size_in_bits+7) >> 3)
+                  != 0) {
+            return -1;
+        }
+        return 0;
+    case ATV_VALUESET:
+        return asn1p_constraint_compare(a->value.constraint,
+                                        b->value.constraint);
+    case ATV_REFERENCED:
+        return asn1p_ref_compare(a->value.reference, b->value.reference);
+    case ATV_CHOICE_IDENTIFIER:
+        if(strcmp(a->value.choice_identifier.identifier,
+                  b->value.choice_identifier.identifier)
+           != 0) {
+            return -1;
+        }
+        return asn1p_value_compare(a->value.choice_identifier.value,
+                                   b->value.choice_identifier.value);
+    }
+
+    return 0;
+}
+
+asn1p_value_t *
+asn1p_value_fromref(asn1p_ref_t *ref, int do_copy) {
+       if(ref) {
+               asn1p_value_t *v = calloc(1, sizeof *v);
+               if(v) {
+                       if(do_copy) {
+                               v->value.reference = asn1p_ref_clone(ref);
+                               if(v->value.reference == NULL) {
+                                       free(v);
+                                       return NULL;
+                               }
+                       } else {
+                               v->value.reference = ref;
+                       }
+                       v->type = ATV_REFERENCED;
+               }
+               return v;
+       } else {
+               errno = EINVAL;
+               return NULL;
+       }
+}
+
+asn1p_value_t *
+asn1p_value_fromconstr(asn1p_constraint_t *ct, int do_copy) {
+       if(ct) {
+               asn1p_value_t *v = calloc(1, sizeof *v);
+               if(v) {
+                       if(do_copy) {
+                               v->value.constraint
+                                       = asn1p_constraint_clone(ct);
+                               if(v->value.constraint == NULL) {
+                                       free(v);
+                                       return NULL;
+                               }
+                       } else {
+                               v->value.constraint = ct;
+                       }
+                       v->type = ATV_VALUESET;
+               }
+               return v;
+       } else {
+               errno = EINVAL;
+               return NULL;
+       }
+}
+
+asn1p_value_t *
+asn1p_value_frombits(uint8_t *bits, int size_in_bits, int do_copy) {
+       if(bits) {
+               asn1p_value_t *v = calloc(1, sizeof *v);
+               assert(size_in_bits >= 0);
+               if(v) {
+                       if(do_copy) {
+                               int size = ((size_in_bits + 7) >> 3);
+                               void *p;
+                               p = malloc(size + 1);
+                               if(p) {
+                                       memcpy(p, bits, size);
+                                       ((char *)p)[size] = '\0'; /* JIC */
+                               } else {
+                                       free(v);
+                                       return NULL;
+                               }
+                               v->value.binary_vector.bits = p;
+                       } else {
+                               v->value.binary_vector.bits = (void *)bits;
+                       }
+                       v->value.binary_vector.size_in_bits = size_in_bits;
+                       v->type = ATV_BITVECTOR;
+               }
+               return v;
+       } else {
+               errno = EINVAL;
+               return NULL;
+       }
+}
+
+asn1p_value_t *
+asn1p_value_frombuf(char *buffer, int size, int do_copy) {
+       if(buffer) {
+               asn1p_value_t *v = calloc(1, sizeof *v);
+               assert(size >= 0);
+               if(v) {
+                       if(do_copy) {
+                               void *p = malloc(size + 1);
+                               if(p) {
+                                       memcpy(p, buffer, size);
+                                       ((char *)p)[size] = '\0'; /* JIC */
+                               } else {
+                                       free(v);
+                                       return NULL;
+                               }
+                               v->value.string.buf = p;
+                       } else {
+                               v->value.string.buf = (uint8_t *)buffer;
+                       }
+                       v->value.string.size = size;
+                       v->type = ATV_STRING;
+               }
+               return v;
+       } else {
+               errno = EINVAL;
+               return NULL;
+       }
+}
+
+asn1p_value_t *
+asn1p_value_fromdouble(double d) {
+       asn1p_value_t *v = calloc(1, sizeof *v);
+       if(v) {
+               v->value.v_double = d;
+               v->type = ATV_REAL;
+       }
+       return v;
+}
+
+asn1p_value_t *
+asn1p_value_fromint(asn1c_integer_t i) {
+       asn1p_value_t *v = calloc(1, sizeof *v);
+       if(v) {
+               v->value.v_integer = i;
+               v->type = ATV_INTEGER;
+       }
+       return v;
+}
+
+asn1p_value_t *
+asn1p_value_fromtype(asn1p_expr_t *expr) {
+       asn1p_value_t *v = calloc(1, sizeof *v);
+       if(v) {
+               v->value.v_type = expr;
+               v->type = ATV_TYPE;
+               expr->ref_cnt++;
+       }
+       return v;
+}
+
+asn1p_value_t *
+asn1p_value_clone(asn1p_value_t *v) {
+       return asn1p_value_clone_with_resolver(v, 0, 0);
+}
+
+asn1p_value_t *
+asn1p_value_clone_with_resolver(asn1p_value_t *v,
+               asn1p_value_t *(*resolver)(asn1p_value_t *, void *rarg),
+               void *rarg) {
+       asn1p_value_t *clone = NULL;
+       if(v) {
+               switch(v->type) {
+               case ATV_NOVALUE:
+               case ATV_NULL:
+                       return calloc(1, sizeof(*clone));
+               case ATV_REAL:
+                       return asn1p_value_fromdouble(v->value.v_double);
+               case ATV_TYPE:
+                       return asn1p_value_fromtype(v->value.v_type);
+               case ATV_INTEGER:
+               case ATV_MIN:
+               case ATV_MAX:
+               case ATV_FALSE:
+               case ATV_TRUE:
+               case ATV_TUPLE:
+               case ATV_QUADRUPLE:
+                       clone = asn1p_value_fromint(v->value.v_integer);
+                       if(clone) clone->type = v->type;
+                       return clone;
+               case ATV_STRING:
+                       clone = asn1p_value_frombuf((char *)v->value.string.buf,
+                               v->value.string.size, 1);
+                       if(clone) clone->type = v->type;
+                       return clone;
+               case ATV_UNPARSED:
+                       clone = asn1p_value_frombuf((char *)v->value.string.buf,
+                               v->value.string.size, 1);
+                       if(clone) clone->type = ATV_UNPARSED;
+                       return clone;
+               case ATV_BITVECTOR:
+                       return asn1p_value_frombits(v->value.binary_vector.bits,
+                               v->value.binary_vector.size_in_bits, 1);
+               case ATV_REFERENCED:
+                       if(resolver) {
+                               clone = resolver(v, rarg);
+                               if(clone) return clone;
+                               else if(errno != ESRCH) return NULL;
+                       }
+                       return asn1p_value_fromref(v->value.reference, 1);
+               case ATV_VALUESET:
+                       if(resolver) {
+                               clone = resolver(v, rarg);
+                               if(clone) return clone;
+                               else if(errno != ESRCH) return NULL;
+                       }
+                       return asn1p_value_fromconstr(v->value.constraint, 1);
+               case ATV_CHOICE_IDENTIFIER: {
+                       char *id = v->value.choice_identifier.identifier;
+                       clone = calloc(1, sizeof(*clone));
+                       if(!clone) return NULL;
+                       clone->type = v->type;
+                       id = strdup(id);
+                       if(!id) { asn1p_value_free(clone); return NULL; }
+                       clone->value.choice_identifier.identifier = id;
+                       v = asn1p_value_clone(v->value.choice_identifier.value);
+                       if(!v) { asn1p_value_free(clone); return NULL; }
+                       clone->value.choice_identifier.value = v;
+                       return clone;
+                   }
+               }
+
+               assert(!"UNREACHABLE");
+       }
+       return v;
+}
+
+void
+asn1p_value_free(asn1p_value_t *v) {
+       if(v) {
+               switch(v->type) {
+               case ATV_NOVALUE:
+               case ATV_NULL:
+                       break;
+               case ATV_TYPE:
+                       asn1p_expr_free(v->value.v_type);
+                       break;
+               case ATV_REAL:
+               case ATV_INTEGER:
+               case ATV_MIN:
+               case ATV_MAX:
+               case ATV_FALSE:
+               case ATV_TRUE:
+               case ATV_TUPLE:
+               case ATV_QUADRUPLE:
+                       /* No freeing necessary */
+                       break;
+               case ATV_STRING:
+               case ATV_UNPARSED:
+                       assert(v->value.string.buf);
+                       free(v->value.string.buf);
+                       break;
+               case ATV_BITVECTOR:
+                       assert(v->value.binary_vector.bits);
+                       free(v->value.binary_vector.bits);
+                       break;
+               case ATV_REFERENCED:
+                       asn1p_ref_free(v->value.reference);
+                       break;
+               case ATV_VALUESET:
+                       asn1p_constraint_free(v->value.constraint);
+                       break;
+               case ATV_CHOICE_IDENTIFIER:
+                       free(v->value.choice_identifier.identifier);
+                       asn1p_value_free(v->value.choice_identifier.value);
+                       break;
+               }
+               memset(v, 0, sizeof(*v));
+               free(v);
+       }
+}
+
diff --git a/libasn1parser/asn1p_value.h b/libasn1parser/asn1p_value.h
new file mode 100644 (file)
index 0000000..c1167f3
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * A generic value of different syntaxes.
+ */
+#ifndef        ASN1_PARSER_VALUE_H
+#define        ASN1_PARSER_VALUE_H
+
+struct asn1p_constraint_s;     /* Forward declaration */
+struct asn1p_module_s;
+struct asn1p_expr_s;
+
+/*
+ * A wrapper around various kinds of values.
+ */
+typedef struct asn1p_value_s {
+       /*
+        * The value of the element.
+        */
+       enum {
+               ATV_NOVALUE,
+               ATV_TYPE,       /* A type (as in CONTAINING Type) */
+               ATV_NULL,       /* A "NULL" value of type NULL. */
+               ATV_REAL,       /* A constant floating-point value */
+               ATV_INTEGER,    /* An integer constant */
+               ATV_MAX,
+               ATV_MIN,
+               ATV_TRUE,
+               ATV_FALSE,
+               ATV_TUPLE,      /* { 1, 15 } */
+               ATV_QUADRUPLE,  /* { 0, 14, 0, 255 } */
+               ATV_STRING,     /* "abcdef" */
+               ATV_UNPARSED,
+               ATV_BITVECTOR,
+               ATV_VALUESET,   /* { 1 | 2 | 3 } */
+               ATV_REFERENCED, /* Reference to a value defined elsewhere */
+               ATV_CHOICE_IDENTIFIER,  /* ChoiceIdentifier value */
+       } type; /* Value type and location */
+
+       union {
+               struct asn1p_constraint_s *constraint;  /* ValueSet */
+               struct asn1p_expr_s     *v_type;        /* Type */
+               asn1p_ref_t     *reference;
+               asn1c_integer_t  v_integer;
+               double           v_double;
+               /*
+                * Binary bits vector.
+                */
+               struct {
+                       uint8_t *buf;
+                       int size;
+               } string;
+               struct {
+                       uint8_t *bits;
+                       int size_in_bits;
+               } binary_vector;
+               struct {
+                       char *identifier;
+                       struct asn1p_value_s *value;
+               } choice_identifier;
+       } value;
+} asn1p_value_t;
+
+/*
+ * Destructor and constructors for value.
+ * If ref, bits or buffer are omitted, the corresponding function returns
+ * (asn1p_value_t *)0 with errno = EINVAL.
+ * Allocated value (where applicable) is guaranteed to be NUL-terminated.
+ */
+void asn1p_value_free(asn1p_value_t *);
+asn1p_value_t *asn1p_value_fromref(asn1p_ref_t *ref, int do_copy);
+asn1p_value_t *asn1p_value_fromconstr(struct asn1p_constraint_s *ct, int dc);
+asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc);
+asn1p_value_t *asn1p_value_frombuf(char *buffer, int size, int do_copy);
+asn1p_value_t *asn1p_value_fromdouble(double);
+asn1p_value_t *asn1p_value_fromint(asn1c_integer_t);
+asn1p_value_t *asn1p_value_fromtype(struct asn1p_expr_s *);
+asn1p_value_t *asn1p_value_clone(asn1p_value_t *);
+asn1p_value_t *asn1p_value_clone_with_resolver(asn1p_value_t *,
+               asn1p_value_t *(*resolver)(asn1p_value_t *, void *rarg),
+               void *rarg);
+int asn1p_value_compare(const asn1p_value_t *, const asn1p_value_t *);
+void asn1p_value_set_source(asn1p_value_t *, struct asn1p_module_s *, int line);
+
+#endif /* ASN1_PARSER_VALUE_H */
diff --git a/libasn1parser/asn1p_xports.c b/libasn1parser/asn1p_xports.c
new file mode 100644 (file)
index 0000000..8ba511a
--- /dev/null
@@ -0,0 +1,38 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "asn1parser.h"
+
+/*
+ * Construct a new structure that would hold the EXPORTS or IMPORTS
+ * clause data.
+ */
+asn1p_xports_t *
+asn1p_xports_new() {
+       asn1p_xports_t *xp;
+
+       xp = calloc(1, sizeof *xp);
+       if(xp) {
+               TQ_INIT(&(xp->xp_members));
+       }
+
+       return xp;
+}
+
+/*
+ * Destroy the xports structure.
+ */
+void
+asn1p_xports_free(asn1p_xports_t *xp) {
+       if(xp) {
+               asn1p_expr_t *expr;
+
+               free(xp->fromModuleName);
+               asn1p_oid_free(xp->identifier.oid);
+
+               while((expr = TQ_REMOVE(&(xp->xp_members), next)))
+                       asn1p_expr_free(expr);
+
+               free(xp);
+       }
+}
diff --git a/libasn1parser/asn1p_xports.h b/libasn1parser/asn1p_xports.h
new file mode 100644 (file)
index 0000000..0c65be0
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Imports and exports structure.
+ */
+#ifndef        ASN1_PARSE_XPORTS_H
+#define        ASN1_PARSE_XPORTS_H
+
+
+typedef struct asn1p_xports_s {
+       /*
+        * Type of the xports structure.
+        */
+       enum asn1p_xports {
+               XPT_IMPORTS,
+               XPT_EXPORTS,
+       } xports_type;
+
+       /*
+        * Module name and optional OID, occur after FROM.
+        */
+       char *fromModuleName;           /* Name of the module */
+       struct AssignedIdentifier {
+               asn1p_oid_t *oid;       /* Optional OID of the module */
+               asn1p_value_t *value;   /* DefinedValue */
+       } identifier;
+
+       /*
+        * Number of entities to import.
+        */
+       TQ_HEAD(struct asn1p_expr_s)    xp_members;
+
+       /*
+        * Pointer to the next xports structure in whatever list.
+        */
+       TQ_ENTRY(struct asn1p_xports_s) xp_next;
+} asn1p_xports_t;
+
+/*
+ * Constructor and destructor.
+ */
+asn1p_xports_t *asn1p_xports_new(void);
+void asn1p_xports_free(asn1p_xports_t *);
+
+#endif /* ASN1_PARSE_XPORTS_H */
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
new file mode 100644 (file)
index 0000000..ceacc38
--- /dev/null
@@ -0,0 +1,5323 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse asn1p_parse
+#define yylex   asn1p_lex
+#define yyerror asn1p_error
+#define yylval  asn1p_lval
+#define yychar  asn1p_char
+#define yydebug asn1p_debug
+#define yynerrs asn1p_nerrs
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     TOK_PPEQ = 258,
+     TOK_VBracketLeft = 259,
+     TOK_VBracketRight = 260,
+     TOK_whitespace = 261,
+     TOK_opaque = 262,
+     TOK_bstring = 263,
+     TOK_cstring = 264,
+     TOK_hstring = 265,
+     TOK_identifier = 266,
+     TOK_number = 267,
+     TOK_number_negative = 268,
+     TOK_realnumber = 269,
+     TOK_tuple = 270,
+     TOK_quadruple = 271,
+     TOK_typereference = 272,
+     TOK_capitalreference = 273,
+     TOK_typefieldreference = 274,
+     TOK_valuefieldreference = 275,
+     TOK_Literal = 276,
+     TOK_ExtValue_BIT_STRING = 277,
+     TOK_ABSENT = 278,
+     TOK_ABSTRACT_SYNTAX = 279,
+     TOK_ALL = 280,
+     TOK_ANY = 281,
+     TOK_APPLICATION = 282,
+     TOK_AUTOMATIC = 283,
+     TOK_BEGIN = 284,
+     TOK_BIT = 285,
+     TOK_BMPString = 286,
+     TOK_BOOLEAN = 287,
+     TOK_BY = 288,
+     TOK_CHARACTER = 289,
+     TOK_CHOICE = 290,
+     TOK_CLASS = 291,
+     TOK_COMPONENT = 292,
+     TOK_COMPONENTS = 293,
+     TOK_CONSTRAINED = 294,
+     TOK_CONTAINING = 295,
+     TOK_DEFAULT = 296,
+     TOK_DEFINITIONS = 297,
+     TOK_DEFINED = 298,
+     TOK_EMBEDDED = 299,
+     TOK_ENCODED = 300,
+     TOK_ENCODING_CONTROL = 301,
+     TOK_END = 302,
+     TOK_ENUMERATED = 303,
+     TOK_EXPLICIT = 304,
+     TOK_EXPORTS = 305,
+     TOK_EXTENSIBILITY = 306,
+     TOK_EXTERNAL = 307,
+     TOK_FALSE = 308,
+     TOK_FROM = 309,
+     TOK_GeneralizedTime = 310,
+     TOK_GeneralString = 311,
+     TOK_GraphicString = 312,
+     TOK_IA5String = 313,
+     TOK_IDENTIFIER = 314,
+     TOK_IMPLICIT = 315,
+     TOK_IMPLIED = 316,
+     TOK_IMPORTS = 317,
+     TOK_INCLUDES = 318,
+     TOK_INSTANCE = 319,
+     TOK_INSTRUCTIONS = 320,
+     TOK_INTEGER = 321,
+     TOK_ISO646String = 322,
+     TOK_MAX = 323,
+     TOK_MIN = 324,
+     TOK_MINUS_INFINITY = 325,
+     TOK_NULL = 326,
+     TOK_NumericString = 327,
+     TOK_OBJECT = 328,
+     TOK_ObjectDescriptor = 329,
+     TOK_OCTET = 330,
+     TOK_OF = 331,
+     TOK_OPTIONAL = 332,
+     TOK_PATTERN = 333,
+     TOK_PDV = 334,
+     TOK_PLUS_INFINITY = 335,
+     TOK_PRESENT = 336,
+     TOK_PrintableString = 337,
+     TOK_PRIVATE = 338,
+     TOK_REAL = 339,
+     TOK_RELATIVE_OID = 340,
+     TOK_SEQUENCE = 341,
+     TOK_SET = 342,
+     TOK_SIZE = 343,
+     TOK_STRING = 344,
+     TOK_SYNTAX = 345,
+     TOK_T61String = 346,
+     TOK_TAGS = 347,
+     TOK_TeletexString = 348,
+     TOK_TRUE = 349,
+     TOK_TYPE_IDENTIFIER = 350,
+     TOK_UNIQUE = 351,
+     TOK_UNIVERSAL = 352,
+     TOK_UniversalString = 353,
+     TOK_UTCTime = 354,
+     TOK_UTF8String = 355,
+     TOK_VideotexString = 356,
+     TOK_VisibleString = 357,
+     TOK_WITH = 358,
+     UTF8_BOM = 359,
+     TOK_EXCEPT = 360,
+     TOK_INTERSECTION = 361,
+     TOK_UNION = 362,
+     TOK_TwoDots = 363,
+     TOK_ThreeDots = 364
+   };
+#endif
+/* Tokens.  */
+#define TOK_PPEQ 258
+#define TOK_VBracketLeft 259
+#define TOK_VBracketRight 260
+#define TOK_whitespace 261
+#define TOK_opaque 262
+#define TOK_bstring 263
+#define TOK_cstring 264
+#define TOK_hstring 265
+#define TOK_identifier 266
+#define TOK_number 267
+#define TOK_number_negative 268
+#define TOK_realnumber 269
+#define TOK_tuple 270
+#define TOK_quadruple 271
+#define TOK_typereference 272
+#define TOK_capitalreference 273
+#define TOK_typefieldreference 274
+#define TOK_valuefieldreference 275
+#define TOK_Literal 276
+#define TOK_ExtValue_BIT_STRING 277
+#define TOK_ABSENT 278
+#define TOK_ABSTRACT_SYNTAX 279
+#define TOK_ALL 280
+#define TOK_ANY 281
+#define TOK_APPLICATION 282
+#define TOK_AUTOMATIC 283
+#define TOK_BEGIN 284
+#define TOK_BIT 285
+#define TOK_BMPString 286
+#define TOK_BOOLEAN 287
+#define TOK_BY 288
+#define TOK_CHARACTER 289
+#define TOK_CHOICE 290
+#define TOK_CLASS 291
+#define TOK_COMPONENT 292
+#define TOK_COMPONENTS 293
+#define TOK_CONSTRAINED 294
+#define TOK_CONTAINING 295
+#define TOK_DEFAULT 296
+#define TOK_DEFINITIONS 297
+#define TOK_DEFINED 298
+#define TOK_EMBEDDED 299
+#define TOK_ENCODED 300
+#define TOK_ENCODING_CONTROL 301
+#define TOK_END 302
+#define TOK_ENUMERATED 303
+#define TOK_EXPLICIT 304
+#define TOK_EXPORTS 305
+#define TOK_EXTENSIBILITY 306
+#define TOK_EXTERNAL 307
+#define TOK_FALSE 308
+#define TOK_FROM 309
+#define TOK_GeneralizedTime 310
+#define TOK_GeneralString 311
+#define TOK_GraphicString 312
+#define TOK_IA5String 313
+#define TOK_IDENTIFIER 314
+#define TOK_IMPLICIT 315
+#define TOK_IMPLIED 316
+#define TOK_IMPORTS 317
+#define TOK_INCLUDES 318
+#define TOK_INSTANCE 319
+#define TOK_INSTRUCTIONS 320
+#define TOK_INTEGER 321
+#define TOK_ISO646String 322
+#define TOK_MAX 323
+#define TOK_MIN 324
+#define TOK_MINUS_INFINITY 325
+#define TOK_NULL 326
+#define TOK_NumericString 327
+#define TOK_OBJECT 328
+#define TOK_ObjectDescriptor 329
+#define TOK_OCTET 330
+#define TOK_OF 331
+#define TOK_OPTIONAL 332
+#define TOK_PATTERN 333
+#define TOK_PDV 334
+#define TOK_PLUS_INFINITY 335
+#define TOK_PRESENT 336
+#define TOK_PrintableString 337
+#define TOK_PRIVATE 338
+#define TOK_REAL 339
+#define TOK_RELATIVE_OID 340
+#define TOK_SEQUENCE 341
+#define TOK_SET 342
+#define TOK_SIZE 343
+#define TOK_STRING 344
+#define TOK_SYNTAX 345
+#define TOK_T61String 346
+#define TOK_TAGS 347
+#define TOK_TeletexString 348
+#define TOK_TRUE 349
+#define TOK_TYPE_IDENTIFIER 350
+#define TOK_UNIQUE 351
+#define TOK_UNIVERSAL 352
+#define TOK_UniversalString 353
+#define TOK_UTCTime 354
+#define TOK_UTF8String 355
+#define TOK_VideotexString 356
+#define TOK_VisibleString 357
+#define TOK_WITH 358
+#define UTF8_BOM 359
+#define TOK_EXCEPT 360
+#define TOK_INTERSECTION 361
+#define TOK_UNION 362
+#define TOK_TwoDots 363
+#define TOK_ThreeDots 364
+
+
+
+
+/* Copy the first part of user declarations.  */
+#line 1 "asn1p_y.y"
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+
+#define YYPARSE_PARAM  param
+#define YYPARSE_PARAM_TYPE     void **
+#define YYERROR_VERBOSE
+#define YYDEBUG 1
+#define YYFPRINTF   prefixed_fprintf
+
+/*
+ * Prefix parser debug with "PARSER: " for easier human eye scanning.
+ */
+static int
+__attribute__((format(printf, 2, 3)))
+prefixed_fprintf(FILE *f, const char *fmt, ...) {
+    static int line_ended = 1;
+    va_list ap;
+    va_start(ap, fmt);
+    if(line_ended) {
+        fprintf(f, "PARSER: ");
+        line_ended = 0;
+    }
+    size_t len = strlen(fmt);
+    if(len && fmt[len-1] == '\n') {
+        line_ended = 1;
+    }
+    int ret = vfprintf(f, fmt, ap);
+    va_end(ap);
+    return ret;
+}
+
+int yylex(void);
+static int yyerror(const char *msg);
+
+#ifdef YYBYACC
+int yyparse(void **param);     /* byacc does not produce a prototype */
+#endif
+void asn1p_lexer_hack_push_opaque_state(void);
+void asn1p_lexer_hack_enable_with_syntax(void);
+void asn1p_lexer_hack_push_encoding_control(void);
+#define        yylineno        asn1p_lineno
+extern int asn1p_lineno;
+const char *asn1p_parse_debug_filename;
+#define ASN_FILENAME asn1p_parse_debug_filename
+int ext_num = 1;
+
+/*
+ * Process directives as <ASN1C:RepresentAsPointer>
+ */
+extern int asn1p_as_pointer;
+
+/*
+ * This temporary variable is used to solve the shortcomings of 1-lookahead
+ * parser.
+ */
+static struct AssignedIdentifier *saved_aid;
+
+static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
+static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
+
+static asn1p_module_t *currentModule;
+#define        NEW_EXPR()      (asn1p_expr_new(yylineno, currentModule))
+
+#define        checkmem(ptr)   do {                                            \
+               if(!(ptr))                                              \
+               return yyerror("Memory failure");                       \
+       } while(0)
+
+#define        CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do {           \
+               if(arg1->type != constr_type) {                         \
+                       int __ret;                                      \
+                       root = asn1p_constraint_new(yylineno, currentModule);   \
+                       checkmem(root);                                 \
+                       root->type = constr_type;                       \
+                       __ret = asn1p_constraint_insert(root,           \
+                               arg1);                                  \
+                       checkmem(__ret == 0);                           \
+               } else {                                                \
+                       root = arg1;                                    \
+               }                                                       \
+               if(arg2) {                                              \
+                       int __ret                                       \
+                       = asn1p_constraint_insert(root, arg2);          \
+                       checkmem(__ret == 0);                           \
+               }                                                       \
+       } while(0)
+
+#ifdef AL_IMPORT
+#error AL_IMPORT DEFINED ELSEWHERE!
+#endif
+#define AL_IMPORT(to, where, from, field)                                      \
+    do {                                                                       \
+        if(!(from)) break;                                                     \
+        while(TQ_FIRST(&((from)->where))) {                                    \
+            TQ_ADD(&((to)->where), TQ_REMOVE(&((from)->where), field), field); \
+        }                                                                      \
+        assert(TQ_FIRST(&((from)->where)) == 0);                               \
+    } while(0)
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 115 "asn1p_y.y"
+{
+       asn1p_t                 *a_grammar;
+       asn1p_module_flags_e     a_module_flags;
+       asn1p_module_t          *a_module;
+       asn1p_expr_type_e        a_type;        /* ASN.1 Type */
+       asn1p_expr_t            *a_expr;        /* Constructed collection */
+       asn1p_constraint_t      *a_constr;      /* Constraint */
+       enum asn1p_constraint_type_e    a_ctype;/* Constraint type */
+       asn1p_xports_t          *a_xports;      /* IMports/EXports */
+       struct AssignedIdentifier a_aid;        /* Assigned Identifier */
+       asn1p_oid_t             *a_oid;         /* Object Identifier */
+       asn1p_oid_arc_t          a_oid_arc;     /* Single OID's arc */
+       struct asn1p_type_tag_s  a_tag;         /* A tag */
+       asn1p_ref_t             *a_ref;         /* Reference to custom type */
+       asn1p_wsyntx_t          *a_wsynt;       /* WITH SYNTAX contents */
+       asn1p_wsyntx_chunk_t    *a_wchunk;      /* WITH SYNTAX chunk */
+       struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
+       asn1p_value_t           *a_value;       /* Number, DefinedValue, etc */
+       struct asn1p_param_s     a_parg;        /* A parameter argument */
+       asn1p_paramlist_t       *a_plist;       /* A pargs list */
+       struct asn1p_expr_marker_s a_marker;    /* OPTIONAL/DEFAULT */
+       enum asn1p_constr_pres_e a_pres;        /* PRESENT/ABSENT/OPTIONAL */
+       asn1c_integer_t          a_int;
+       double                   a_dbl;
+       char    *tv_str;
+       struct {
+               char *buf;
+               int len;
+       }       tv_opaque;
+       struct {
+               char *name;
+               struct asn1p_type_tag_s tag;
+       } tv_nametag;
+}
+/* Line 193 of yacc.c.  */
+#line 465 "asn1p_y.c"
+       YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 216 of yacc.c.  */
+#line 478 "asn1p_y.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)                                       \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack, Stack, yysize);                          \
+       Stack = &yyptr->Stack;                                          \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  9
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   919
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  126
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  147
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  342
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  522
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   365
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   122,     2,     2,     2,     2,     2,     2,
+     115,   116,     2,     2,   118,     2,   123,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   119,   117,
+     124,     2,     2,     2,   125,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,   120,     2,   121,   106,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   113,   108,   114,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   107,   109,   110,   111,   112
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     6,     8,    10,    13,    14,    24,    25,
+      27,    31,    34,    36,    39,    41,    46,    48,    49,    51,
+      53,    56,    59,    62,    65,    68,    71,    72,    74,    78,
+      80,    83,    85,    87,    89,    90,    94,    96,    97,    99,
+     103,   106,   107,   109,   111,   114,   115,   117,   122,   124,
+     128,   130,   134,   136,   137,   139,   143,   147,   150,   152,
+     156,   158,   162,   164,   168,   173,   175,   180,   184,   188,
+     195,   202,   204,   208,   210,   214,   218,   222,   226,   228,
+     232,   234,   236,   238,   240,   241,   243,   245,   249,   255,
+     259,   262,   266,   268,   270,   274,   277,   279,   281,   287,
+     288,   290,   292,   296,   299,   304,   308,   312,   316,   320,
+     324,   325,   327,   328,   335,   337,   340,   342,   344,   346,
+     350,   352,   356,   360,   362,   365,   368,   371,   375,   376,
+     379,   381,   383,   385,   390,   395,   400,   407,   414,   416,
+     421,   425,   427,   429,   433,   437,   441,   443,   447,   449,
+     451,   453,   455,   459,   463,   465,   470,   472,   474,   475,
+     479,   481,   483,   485,   487,   489,   491,   493,   495,   499,
+     501,   503,   505,   507,   510,   512,   514,   516,   518,   520,
+     523,   526,   528,   530,   533,   536,   538,   540,   542,   544,
+     546,   548,   551,   553,   558,   563,   569,   574,   578,   580,
+     582,   584,   586,   588,   590,   592,   594,   596,   598,   600,
+     602,   604,   606,   608,   610,   612,   614,   615,   617,   618,
+     620,   621,   623,   625,   629,   631,   634,   636,   638,   640,
+     642,   644,   648,   654,   656,   660,   662,   666,   668,   672,
+     674,   678,   680,   684,   686,   688,   690,   692,   694,   696,
+     698,   701,   704,   707,   710,   714,   716,   718,   720,   722,
+     724,   726,   728,   731,   733,   737,   741,   743,   745,   747,
+     751,   757,   759,   763,   767,   768,   770,   772,   774,   776,
+     778,   780,   782,   783,   789,   792,   794,   797,   800,   804,
+     806,   808,   812,   817,   819,   823,   826,   830,   832,   836,
+     837,   839,   841,   844,   846,   850,   852,   854,   858,   863,
+     868,   870,   874,   879,   884,   886,   888,   892,   894,   899,
+     904,   906,   908,   910,   912,   914,   915,   917,   920,   925,
+     926,   928,   930,   932,   933,   935,   937,   939,   941,   942,
+     944,   946,   948
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     127,     0,    -1,   104,   128,    -1,   128,    -1,   129,    -1,
+     128,   129,    -1,    -1,   268,   130,   131,    42,   135,     3,
+      29,   138,    47,    -1,    -1,   132,    -1,   113,   133,   114,
+      -1,   113,   114,    -1,   134,    -1,   133,   134,    -1,   270,
+      -1,   270,   115,    12,   116,    -1,    12,    -1,    -1,   136,
+      -1,   137,    -1,   136,   137,    -1,    49,    92,    -1,    60,
+      92,    -1,    28,    92,    -1,    51,    61,    -1,    18,    65,
+      -1,    -1,   139,    -1,   151,   143,   140,    -1,   141,    -1,
+     140,   141,    -1,   158,    -1,   193,    -1,   156,    -1,    -1,
+      46,    18,   142,    -1,   204,    -1,    -1,   144,    -1,    62,
+     145,   117,    -1,    62,    54,    -1,    -1,   146,    -1,   148,
+      -1,   146,   148,    -1,    -1,   132,    -1,   149,    54,   268,
+     147,    -1,   150,    -1,   149,   118,   150,    -1,   268,    -1,
+     268,   113,   114,    -1,   270,    -1,    -1,   152,    -1,    50,
+     153,   117,    -1,    50,    25,   117,    -1,    50,   117,    -1,
+     154,    -1,   153,   118,   154,    -1,   268,    -1,   268,   113,
+     114,    -1,   270,    -1,   113,   214,   114,    -1,   268,   178,
+       3,   155,    -1,   187,    -1,   187,   113,   161,   114,    -1,
+     268,     3,   178,    -1,   268,     3,   168,    -1,   268,   113,
+     159,   114,     3,   178,    -1,   268,   113,   159,   114,     3,
+     168,    -1,   160,    -1,   159,   118,   160,    -1,   268,    -1,
+     268,   119,   270,    -1,   268,   119,   268,    -1,   201,   119,
+     270,    -1,   201,   119,   268,    -1,   162,    -1,   161,   118,
+     162,    -1,   181,    -1,   196,    -1,   197,    -1,   155,    -1,
+      -1,   164,    -1,   165,    -1,   164,   118,   165,    -1,   164,
+     118,     4,   164,     5,    -1,   270,   182,   250,    -1,   182,
+     250,    -1,    38,    76,   182,    -1,   177,    -1,   167,    -1,
+     166,   118,   167,    -1,   270,   182,    -1,   177,    -1,   182,
+      -1,    36,   113,   170,   114,   172,    -1,    -1,    96,    -1,
+     171,    -1,   170,   118,   171,    -1,    19,   250,    -1,    20,
+     178,   169,   250,    -1,    20,   191,   250,    -1,    20,   192,
+     250,    -1,    19,   191,   250,    -1,    19,   178,   250,    -1,
+      19,   192,   250,    -1,    -1,   173,    -1,    -1,   103,    90,
+     113,   174,   175,   114,    -1,   176,    -1,   175,   176,    -1,
+       6,    -1,    21,    -1,   190,    -1,   120,   175,   121,    -1,
+     111,    -1,   111,   122,   197,    -1,   111,   122,   261,    -1,
+     179,    -1,   263,   181,    -1,   157,   208,    -1,   185,   208,
+      -1,   263,   184,   208,    -1,    -1,   183,   185,    -1,   186,
+      -1,   157,    -1,   203,    -1,    35,   113,   166,   114,    -1,
+      86,   113,   163,   114,    -1,    87,   113,   163,   114,    -1,
+      86,   209,    76,   269,   263,   184,    -1,    87,   209,    76,
+     269,   263,   184,    -1,    26,    -1,    26,    43,    33,   270,
+      -1,    64,    76,   187,    -1,    17,    -1,    18,    -1,    17,
+     123,   268,    -1,    18,   123,   268,    -1,    18,   123,   188,
+      -1,   189,    -1,   188,   123,   189,    -1,   190,    -1,    19,
+      -1,    20,    -1,    19,    -1,   191,   123,    19,    -1,   191,
+     123,    20,    -1,    18,    -1,   270,   178,     3,   194,    -1,
+     196,    -1,   197,    -1,    -1,   113,   195,   199,    -1,    71,
+      -1,    53,    -1,    94,    -1,   261,    -1,   262,    -1,   198,
+      -1,   228,    -1,   272,    -1,   268,   123,   270,    -1,     9,
+      -1,    15,    -1,    16,    -1,   200,    -1,   199,     7,    -1,
+       7,    -1,   270,    -1,    32,    -1,    71,    -1,    84,    -1,
+      75,    89,    -1,    73,    59,    -1,    85,    -1,    52,    -1,
+      44,    79,    -1,    34,    89,    -1,    99,    -1,    55,    -1,
+     204,    -1,   202,    -1,    66,    -1,    48,    -1,    30,    89,
+      -1,   201,    -1,    66,   113,   254,   114,    -1,    48,   113,
+     258,   114,    -1,    30,    89,   113,   256,   114,    -1,    22,
+     113,   252,   114,    -1,    22,   113,   114,    -1,    31,    -1,
+      56,    -1,    57,    -1,    58,    -1,    67,    -1,    72,    -1,
+      82,    -1,    91,    -1,    93,    -1,    98,    -1,   100,    -1,
+     101,    -1,   102,    -1,    74,    -1,   108,    -1,   109,    -1,
+     106,    -1,   107,    -1,    -1,   210,    -1,    -1,   211,    -1,
+      -1,   210,    -1,   222,    -1,   115,   212,   116,    -1,   210,
+      -1,   211,   210,    -1,   213,    -1,   239,    -1,   214,    -1,
+     111,    -1,   215,    -1,   215,   118,   111,    -1,   215,   118,
+     111,   118,   215,    -1,   216,    -1,    25,   105,   219,    -1,
+     217,    -1,   216,   205,   217,    -1,   218,    -1,   217,   206,
+     218,    -1,   219,    -1,   219,   105,   219,    -1,   220,    -1,
+     115,   215,   116,    -1,   227,    -1,   229,    -1,   221,    -1,
+     222,    -1,   230,    -1,   223,    -1,   224,    -1,    54,   210,
+      -1,    88,   210,    -1,    78,     9,    -1,    78,   270,    -1,
+     225,   243,   226,    -1,   227,    -1,    69,    -1,   227,    -1,
+      68,    -1,   194,    -1,     8,    -1,    10,    -1,    63,   178,
+      -1,   180,    -1,   103,    37,   231,    -1,   103,    38,   232,
+      -1,   210,    -1,   233,    -1,   234,    -1,   113,   235,   114,
+      -1,   113,   111,   118,   235,   114,    -1,   236,    -1,   235,
+     118,   236,    -1,   272,   207,   237,    -1,    -1,   238,    -1,
+      81,    -1,    23,    -1,    77,    -1,   240,    -1,   244,    -1,
+     242,    -1,    -1,    39,    33,   113,   241,   199,    -1,    40,
+     178,    -1,   110,    -1,   110,   124,    -1,   124,   110,    -1,
+     124,   110,   124,    -1,   245,    -1,   246,    -1,   113,   268,
+     114,    -1,   245,   113,   247,   114,    -1,   248,    -1,   247,
+     118,   248,    -1,   125,   249,    -1,   125,   123,   249,    -1,
+     270,    -1,   249,   123,   270,    -1,    -1,   251,    -1,    77,
+      -1,    41,   194,    -1,   253,    -1,   252,   118,   253,    -1,
+     270,    -1,   255,    -1,   254,   118,   255,    -1,   270,   115,
+     261,   116,    -1,   270,   115,   197,   116,    -1,   257,    -1,
+     256,   118,   257,    -1,   270,   115,    12,   116,    -1,   270,
+     115,   197,   116,    -1,   259,    -1,   260,    -1,   259,   118,
+     260,    -1,   270,    -1,   270,   115,   261,   116,    -1,   270,
+     115,   197,   116,    -1,   261,    -1,   111,    -1,    12,    -1,
+      13,    -1,    14,    -1,    -1,   264,    -1,   265,   267,    -1,
+     120,   266,    12,   121,    -1,    -1,    97,    -1,    27,    -1,
+      83,    -1,    -1,    60,    -1,    49,    -1,    17,    -1,    18,
+      -1,    -1,   270,    -1,    11,    -1,   270,    -1,   271,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   414,   414,   417,   423,   428,   445,   445,   474,   475,
+     479,   482,   488,   494,   503,   507,   511,   521,   522,   531,
+     534,   543,   546,   549,   552,   556,   577,   578,   587,   600,
+     603,   620,   627,   641,   649,   648,   662,   675,   676,   679,
+     689,   695,   696,   699,   704,   711,   712,   716,   727,   732,
+     739,   745,   751,   761,   762,   774,   777,   780,   788,   793,
+     800,   806,   812,   821,   824,   844,   854,   874,   880,   896,
+     902,   910,   919,   930,   934,   942,   950,   958,   969,   974,
+     981,   982,   990,   998,  1021,  1022,  1025,  1030,  1034,  1042,
+    1049,  1055,  1062,  1068,  1073,  1080,  1085,  1088,  1095,  1105,
+    1106,  1110,  1117,  1127,  1137,  1148,  1158,  1169,  1179,  1190,
+    1202,  1203,  1210,  1209,  1218,  1222,  1229,  1233,  1236,  1240,
+    1246,  1254,  1263,  1274,  1277,  1284,  1307,  1330,  1354,  1361,
+    1380,  1381,  1384,  1385,  1391,  1397,  1403,  1413,  1423,  1429,
+    1441,  1456,  1464,  1472,  1483,  1494,  1516,  1524,  1533,  1537,
+    1542,  1551,  1556,  1561,  1569,  1592,  1602,  1603,  1604,  1604,
+    1612,  1617,  1622,  1627,  1628,  1629,  1630,  1634,  1635,  1653,
+    1657,  1662,  1670,  1679,  1694,  1695,  1701,  1702,  1703,  1704,
+    1705,  1706,  1707,  1708,  1709,  1710,  1711,  1712,  1713,  1720,
+    1721,  1722,  1726,  1732,  1737,  1742,  1747,  1752,  1761,  1762,
+    1766,  1770,  1771,  1772,  1773,  1774,  1778,  1779,  1780,  1781,
+    1785,  1786,  1793,  1793,  1794,  1794,  1798,  1799,  1803,  1804,
+    1808,  1809,  1810,  1814,  1820,  1821,  1830,  1830,  1832,  1835,
+    1839,  1840,  1846,  1857,  1858,  1864,  1865,  1871,  1872,  1879,
+    1880,  1886,  1887,  1898,  1904,  1910,  1911,  1913,  1914,  1915,
+    1920,  1925,  1930,  1935,  1947,  1956,  1957,  1963,  1964,  1969,
+    1972,  1977,  1985,  1991,  2003,  2006,  2012,  2013,  2013,  2014,
+    2016,  2029,  2034,  2040,  2054,  2055,  2059,  2062,  2065,  2073,
+    2074,  2075,  2080,  2079,  2091,  2100,  2101,  2102,  2103,  2106,
+    2109,  2118,  2134,  2140,  2146,  2160,  2171,  2187,  2190,  2210,
+    2214,  2218,  2222,  2229,  2234,  2240,  2249,  2254,  2261,  2269,
+    2279,  2284,  2291,  2299,  2309,  2324,  2329,  2336,  2343,  2351,
+    2359,  2366,  2377,  2381,  2388,  2419,  2420,  2424,  2431,  2437,
+    2438,  2439,  2440,  2444,  2445,  2446,  2450,  2454,  2462,  2463,
+    2469,  2476,  2483
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "TOK_PPEQ", "TOK_VBracketLeft",
+  "TOK_VBracketRight", "TOK_whitespace", "TOK_opaque", "TOK_bstring",
+  "TOK_cstring", "TOK_hstring", "\"identifier\"", "\"number\"",
+  "\"negative number\"", "TOK_realnumber", "TOK_tuple", "TOK_quadruple",
+  "TOK_typereference", "TOK_capitalreference", "TOK_typefieldreference",
+  "TOK_valuefieldreference", "TOK_Literal", "TOK_ExtValue_BIT_STRING",
+  "TOK_ABSENT", "TOK_ABSTRACT_SYNTAX", "TOK_ALL", "TOK_ANY",
+  "TOK_APPLICATION", "TOK_AUTOMATIC", "TOK_BEGIN", "TOK_BIT",
+  "TOK_BMPString", "TOK_BOOLEAN", "TOK_BY", "TOK_CHARACTER", "TOK_CHOICE",
+  "TOK_CLASS", "TOK_COMPONENT", "TOK_COMPONENTS", "TOK_CONSTRAINED",
+  "TOK_CONTAINING", "TOK_DEFAULT", "TOK_DEFINITIONS", "TOK_DEFINED",
+  "TOK_EMBEDDED", "TOK_ENCODED", "TOK_ENCODING_CONTROL", "TOK_END",
+  "TOK_ENUMERATED", "TOK_EXPLICIT", "TOK_EXPORTS", "TOK_EXTENSIBILITY",
+  "TOK_EXTERNAL", "TOK_FALSE", "TOK_FROM", "TOK_GeneralizedTime",
+  "TOK_GeneralString", "TOK_GraphicString", "TOK_IA5String",
+  "TOK_IDENTIFIER", "TOK_IMPLICIT", "TOK_IMPLIED", "TOK_IMPORTS",
+  "TOK_INCLUDES", "TOK_INSTANCE", "TOK_INSTRUCTIONS", "TOK_INTEGER",
+  "TOK_ISO646String", "TOK_MAX", "TOK_MIN", "TOK_MINUS_INFINITY",
+  "TOK_NULL", "TOK_NumericString", "TOK_OBJECT", "TOK_ObjectDescriptor",
+  "TOK_OCTET", "TOK_OF", "TOK_OPTIONAL", "TOK_PATTERN", "TOK_PDV",
+  "TOK_PLUS_INFINITY", "TOK_PRESENT", "TOK_PrintableString", "TOK_PRIVATE",
+  "TOK_REAL", "TOK_RELATIVE_OID", "TOK_SEQUENCE", "TOK_SET", "TOK_SIZE",
+  "TOK_STRING", "TOK_SYNTAX", "TOK_T61String", "TOK_TAGS",
+  "TOK_TeletexString", "TOK_TRUE", "TOK_TYPE_IDENTIFIER", "TOK_UNIQUE",
+  "TOK_UNIVERSAL", "TOK_UniversalString", "TOK_UTCTime", "TOK_UTF8String",
+  "TOK_VideotexString", "TOK_VisibleString", "TOK_WITH",
+  "\"UTF-8 byte order mark\"", "TOK_EXCEPT", "'^'", "TOK_INTERSECTION",
+  "'|'", "TOK_UNION", "\"..\"", "\"...\"", "\"concrete TypeDeclaration\"",
+  "'{'", "'}'", "'('", "')'", "';'", "','", "':'", "'['", "']'", "'!'",
+  "'.'", "'<'", "'@'", "$accept", "ParsedGrammar", "ModuleList",
+  "ModuleDefinition", "@1", "optObjectIdentifier", "ObjectIdentifier",
+  "ObjectIdentifierBody", "ObjectIdentifierElement",
+  "optModuleDefinitionFlags", "ModuleDefinitionFlags",
+  "ModuleDefinitionFlag", "optModuleBody", "ModuleBody", "AssignmentList",
+  "Assignment", "@2", "optImports", "ImportsDefinition",
+  "optImportsBundleSet", "ImportsBundleSet", "AssignedIdentifier",
+  "ImportsBundle", "ImportsList", "ImportsElement", "optExports",
+  "ExportsDefinition", "ExportsBody", "ExportsElement", "ValueSet",
+  "ValueSetTypeAssignment", "DefinedType", "DataTypeReference",
+  "ParameterArgumentList", "ParameterArgumentName", "ActualParameterList",
+  "ActualParameter", "optComponentTypeLists", "ComponentTypeLists",
+  "ComponentType", "AlternativeTypeLists", "AlternativeType",
+  "ObjectClass", "optUNIQUE", "FieldSpec", "ClassField", "optWithSyntax",
+  "WithSyntax", "@3", "WithSyntaxList", "WithSyntaxToken",
+  "ExtensionAndException", "Type", "TaggedType", "DefinedUntaggedType",
+  "UntaggedType", "MaybeIndirectTaggedType", "NSTD_IndirectMarker",
+  "MaybeIndirectTypeDeclaration", "TypeDeclaration",
+  "ConcreteTypeDeclaration", "ComplexTypeReference",
+  "ComplexTypeReferenceAmpList", "ComplexTypeReferenceElement",
+  "PrimitiveFieldReference", "FieldName", "DefinedObjectClass",
+  "ValueAssignment", "Value", "@4", "SimpleValue", "DefinedValue",
+  "RestrictedCharacterStringValue", "Opaque", "OpaqueFirstToken",
+  "BasicTypeId", "BasicTypeId_UniverationCompatible", "BuiltinType",
+  "BasicString", "UnionMark", "IntersectionMark", "optConstraint",
+  "optManyConstraints", "optSizeOrConstraint", "Constraint",
+  "ManyConstraints", "ConstraintSpec", "SubtypeConstraint",
+  "ElementSetSpecs", "ElementSetSpec", "Unions", "Intersections",
+  "IntersectionElements", "Elements", "SubtypeElements",
+  "PermittedAlphabet", "SizeConstraint", "PatternConstraint", "ValueRange",
+  "LowerEndValue", "UpperEndValue", "SingleValue", "BitStringValue",
+  "ContainedSubtype", "InnerTypeConstraints", "SingleTypeConstraint",
+  "MultipleTypeConstraints", "FullSpecification", "PartialSpecification",
+  "TypeConstraints", "NamedConstraint", "optPresenceConstraint",
+  "PresenceConstraint", "GeneralConstraint", "UserDefinedConstraint", "@5",
+  "ContentsConstraint", "ConstraintRangeSpec", "TableConstraint",
+  "SimpleTableConstraint", "ComponentRelationConstraint", "AtNotationList",
+  "AtNotationElement", "ComponentIdList", "optMarker", "Marker",
+  "IdentifierList", "IdentifierElement", "NamedNumberList", "NamedNumber",
+  "NamedBitList", "NamedBit", "Enumerations", "UniverationList",
+  "UniverationElement", "SignedNumber", "RealValue", "optTag", "Tag",
+  "TagTypeValue", "TagClass", "TagPlicit", "TypeRefName", "optIdentifier",
+  "Identifier", "IdentifierAsReference", "IdentifierAsValue", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,    94,   361,   124,   362,
+     363,   364,   365,   123,   125,    40,    41,    59,    44,    58,
+      91,    93,    33,    46,    60,    64
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint16 yyr1[] =
+{
+       0,   126,   127,   127,   128,   128,   130,   129,   131,   131,
+     132,   132,   133,   133,   134,   134,   134,   135,   135,   136,
+     136,   137,   137,   137,   137,   137,   138,   138,   139,   140,
+     140,   141,   141,   141,   142,   141,   141,   143,   143,   144,
+     144,   145,   145,   146,   146,   147,   147,   148,   149,   149,
+     150,   150,   150,   151,   151,   152,   152,   152,   153,   153,
+     154,   154,   154,   155,   156,   157,   157,   158,   158,   158,
+     158,   159,   159,   160,   160,   160,   160,   160,   161,   161,
+     162,   162,   162,   162,   163,   163,   164,   164,   164,   165,
+     165,   165,   165,   166,   166,   167,   167,   167,   168,   169,
+     169,   170,   170,   171,   171,   171,   171,   171,   171,   171,
+     172,   172,   174,   173,   175,   175,   176,   176,   176,   176,
+     177,   177,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   185,   186,   186,   186,   186,   186,   186,   186,   186,
+     186,   187,   187,   187,   187,   187,   188,   188,   189,   190,
+     190,   191,   191,   191,   192,   193,   194,   194,   195,   194,
+     196,   196,   196,   196,   196,   196,   196,   197,   197,   198,
+     198,   198,   199,   199,   200,   200,   201,   201,   201,   201,
+     201,   201,   201,   201,   201,   201,   201,   201,   201,   202,
+     202,   202,   203,   203,   203,   203,   203,   203,   204,   204,
+     204,   204,   204,   204,   204,   204,   204,   204,   204,   204,
+     204,   204,   205,   205,   206,   206,   207,   207,   208,   208,
+     209,   209,   209,   210,   211,   211,   212,   212,   213,   214,
+     214,   214,   214,   215,   215,   216,   216,   217,   217,   218,
+     218,   219,   219,   220,   220,   220,   220,   220,   220,   220,
+     221,   222,   223,   223,   224,   225,   225,   226,   226,   227,
+     228,   228,   229,   229,   230,   230,   231,   232,   232,   233,
+     234,   235,   235,   236,   237,   237,   238,   238,   238,   239,
+     239,   239,   241,   240,   242,   243,   243,   243,   243,   244,
+     244,   245,   246,   247,   247,   248,   248,   249,   249,   250,
+     250,   251,   251,   252,   252,   253,   254,   254,   255,   255,
+     256,   256,   257,   257,   258,   259,   259,   260,   260,   260,
+     260,   260,   261,   261,   262,   263,   263,   264,   265,   266,
+     266,   266,   266,   267,   267,   267,   268,   268,   269,   269,
+     270,   271,   272
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     2,     1,     1,     2,     0,     9,     0,     1,
+       3,     2,     1,     2,     1,     4,     1,     0,     1,     1,
+       2,     2,     2,     2,     2,     2,     0,     1,     3,     1,
+       2,     1,     1,     1,     0,     3,     1,     0,     1,     3,
+       2,     0,     1,     1,     2,     0,     1,     4,     1,     3,
+       1,     3,     1,     0,     1,     3,     3,     2,     1,     3,
+       1,     3,     1,     3,     4,     1,     4,     3,     3,     6,
+       6,     1,     3,     1,     3,     3,     3,     3,     1,     3,
+       1,     1,     1,     1,     0,     1,     1,     3,     5,     3,
+       2,     3,     1,     1,     3,     2,     1,     1,     5,     0,
+       1,     1,     3,     2,     4,     3,     3,     3,     3,     3,
+       0,     1,     0,     6,     1,     2,     1,     1,     1,     3,
+       1,     3,     3,     1,     2,     2,     2,     3,     0,     2,
+       1,     1,     1,     4,     4,     4,     6,     6,     1,     4,
+       3,     1,     1,     3,     3,     3,     1,     3,     1,     1,
+       1,     1,     3,     3,     1,     4,     1,     1,     0,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       1,     1,     1,     2,     1,     1,     1,     1,     1,     2,
+       2,     1,     1,     2,     2,     1,     1,     1,     1,     1,
+       1,     2,     1,     4,     4,     5,     4,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     1,     0,     1,
+       0,     1,     1,     3,     1,     2,     1,     1,     1,     1,
+       1,     3,     5,     1,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       2,     2,     2,     2,     3,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     3,     3,     1,     1,     1,     3,
+       5,     1,     3,     3,     0,     1,     1,     1,     1,     1,
+       1,     1,     0,     5,     2,     1,     2,     2,     3,     1,
+       1,     3,     4,     1,     3,     2,     3,     1,     3,     0,
+       1,     1,     2,     1,     3,     1,     1,     3,     4,     4,
+       1,     3,     4,     4,     1,     1,     3,     1,     4,     4,
+       1,     1,     1,     1,     1,     0,     1,     2,     4,     0,
+       1,     1,     1,     0,     1,     1,     1,     1,     0,     1,
+       1,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint16 yydefact[] =
+{
+       0,   336,   337,     0,     0,     3,     4,     6,     2,     1,
+       5,     8,     0,     0,     9,   340,    16,    11,     0,    12,
+      14,    17,    10,    13,     0,     0,     0,     0,     0,     0,
+       0,    18,    19,     0,    25,    23,    21,    24,    22,     0,
+      20,    15,    53,     0,     0,    27,    37,    54,     0,    57,
+       0,    58,    60,    62,     7,    41,     0,    38,    56,    55,
+       0,     0,    40,     0,    42,    43,     0,    48,    50,    52,
+     198,     0,   199,   200,   201,   202,   203,   211,   204,   205,
+     206,   207,   208,   209,   210,    28,    29,    33,    31,    32,
+      36,   325,   325,    59,    61,    39,    44,     0,     0,     0,
+      34,    30,   325,     0,   329,     0,   123,     0,   326,   333,
+       0,    45,    49,    51,    35,     0,    68,    67,     0,   176,
+       0,     0,   190,   182,   186,   189,   177,     0,     0,   178,
+     181,   185,     0,    71,     0,   188,   187,    73,   331,   332,
+     330,     0,     0,   141,   142,     0,   138,     0,     0,   190,
+       0,   189,   220,   220,   131,   124,   218,   130,    65,   192,
+     132,   335,   334,   327,     0,    46,    47,     0,   191,   184,
+     183,   180,   179,     0,     0,     0,     0,     0,     0,    64,
+       0,     0,     0,     0,   191,   325,     0,     0,     0,     0,
+     325,     0,     0,   221,   222,   325,     0,   126,   224,   219,
+       0,   260,   169,   261,   322,   323,   324,   170,   171,   161,
+     160,   162,   158,   155,   156,   157,   165,   166,   163,   164,
+       0,   341,   342,   167,   325,   325,     0,   101,   325,    72,
+      77,    76,    75,    74,   328,   141,   142,     0,     0,   325,
+     256,     0,     0,   229,     0,   218,   263,   259,     0,   230,
+     233,   235,   237,   239,   241,   245,   246,   248,   249,     0,
+     243,   244,   247,   143,   149,   150,   145,   146,   148,   144,
+     197,     0,   303,   305,     0,     0,   120,     0,    93,    96,
+      97,   128,   325,   321,     0,   314,   315,   320,   317,   140,
+       0,   306,     0,   251,     0,     0,    85,    86,    92,   299,
+     325,     0,   325,   158,     0,   226,   228,   227,   279,   281,
+     280,   289,   290,   338,     0,   338,   225,   160,    83,     0,
+      78,    80,    81,    82,     0,     0,   154,   151,     0,   301,
+     299,   299,   299,   103,   300,    99,   299,   299,   110,     0,
+      70,    69,     0,   250,   262,   252,   253,     0,     0,     0,
+     125,    63,     0,   212,   213,     0,   214,   215,     0,     0,
+     285,     0,     0,     0,   196,     0,   139,     0,   310,     0,
+       0,   133,   325,     0,   218,    95,   194,     0,     0,   193,
+       0,     0,   325,   134,   325,    90,   299,     0,   284,     0,
+     223,     0,   325,   339,   135,   325,    66,     0,   174,   159,
+     172,   175,   168,   302,   108,     0,   107,   109,   100,   299,
+     105,   106,     0,    98,   111,   102,   234,   266,   264,     0,
+     265,   267,   268,   242,   231,   236,   238,   240,   286,   287,
+     258,   254,   257,   147,   304,   195,     0,     0,   121,   122,
+      94,   129,   127,   316,     0,     0,   307,     0,     0,    91,
+     325,    87,    89,   282,   291,     0,     0,   293,   128,   128,
+      79,   173,   152,   153,   104,     0,     0,     0,   271,   216,
+       0,   288,   311,     0,     0,   319,   318,   309,   308,     0,
+       0,     0,   295,   297,   292,     0,   136,   137,   112,     0,
+     269,     0,   274,   217,   232,   312,   313,    88,   283,   296,
+       0,   294,     0,     0,   272,   277,   278,   276,   273,   275,
+     298,   116,   117,     0,     0,   114,   118,   270,     0,   113,
+     115,   119
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     4,     5,     6,    11,    13,    14,    18,    19,    30,
+      31,    32,    44,    45,    85,    86,   114,    56,    57,    63,
+      64,   166,    65,    66,    67,    46,    47,    50,    51,   318,
+      87,   245,    88,   132,   133,   319,   320,   295,   296,   297,
+     277,   278,   116,   409,   226,   227,   413,   414,   502,   514,
+     515,   298,   105,   106,   246,   321,   299,   373,   374,   156,
+     157,   158,   266,   267,   516,   331,   332,    89,   247,   324,
+     214,   215,   216,   399,   400,   159,   135,   160,   136,   355,
+     358,   492,   197,   192,   198,   199,   304,   305,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     431,   260,   217,   261,   262,   418,   420,   421,   422,   467,
+     468,   508,   509,   307,   308,   480,   309,   362,   310,   311,
+     312,   456,   457,   482,   333,   334,   271,   272,   290,   291,
+     367,   368,   284,   285,   286,   218,   219,   281,   108,   109,
+     141,   163,   220,   392,   221,   222,   223
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -296
+static const yytype_int16 yypact[] =
+{
+      51,  -296,  -296,   217,    41,   217,  -296,  -296,   217,  -296,
+    -296,   -63,    53,    43,  -296,  -296,  -296,  -296,    70,  -296,
+     -45,   204,  -296,  -296,    79,    32,    30,    38,   110,    87,
+     200,   204,  -296,    95,  -296,  -296,  -296,  -296,  -296,   198,
+    -296,  -296,   247,    12,   178,  -296,   174,  -296,   134,  -296,
+     140,  -296,   183,  -296,  -296,    72,   663,  -296,  -296,  -296,
+     213,   173,  -296,   187,   213,  -296,    50,  -296,   211,  -296,
+    -296,   293,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,   663,  -296,  -296,  -296,  -296,
+    -296,    19,   219,  -296,  -296,  -296,  -296,   217,   213,   227,
+    -296,  -296,    -2,   817,    68,   340,  -296,   740,  -296,   120,
+     356,   -63,  -296,  -296,  -296,   249,  -296,  -296,   272,  -296,
+     274,   285,  -296,  -296,  -296,  -296,  -296,   307,   278,  -296,
+    -296,  -296,    13,  -296,   250,  -296,  -296,   251,  -296,  -296,
+    -296,   359,   260,   264,   265,   261,   346,   301,   279,   281,
+     315,   294,   113,   135,  -296,  -296,   280,  -296,   295,  -296,
+    -296,  -296,  -296,  -296,   510,  -296,  -296,   290,  -296,  -296,
+    -296,  -296,  -296,   406,   817,   213,   213,   289,   368,  -296,
+     217,   309,    14,   378,   299,    29,   108,   318,   403,   280,
+      61,   229,   339,  -296,  -296,    61,   341,  -296,  -296,   280,
+     604,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+     296,  -296,  -296,  -296,    84,    28,    98,  -296,    -2,  -296,
+    -296,  -296,  -296,  -296,  -296,   264,   265,   311,   280,   219,
+    -296,   104,   300,  -296,   388,   280,  -296,  -296,   304,   302,
+     237,   241,  -296,   320,  -296,  -296,  -296,  -296,  -296,   -18,
+     -17,  -296,  -296,  -296,  -296,  -296,   303,  -296,  -296,  -296,
+    -296,   138,  -296,  -296,   403,   403,   305,   167,  -296,  -296,
+    -296,  -296,   219,  -296,   314,   312,  -296,  -296,   308,  -296,
+     170,  -296,   317,  -296,   353,   319,   316,  -296,  -296,    -3,
+     219,   402,   219,   217,   324,  -296,  -296,  -296,  -296,  -296,
+    -296,   323,  -296,   403,   331,   403,  -296,   329,  -296,   172,
+    -296,  -296,  -296,  -296,   282,   403,  -296,  -296,   510,  -296,
+      -3,    10,    -3,  -296,  -296,   351,    10,    -3,   345,   290,
+    -296,  -296,   496,  -296,  -296,  -296,  -296,   280,   336,   334,
+    -296,  -296,   342,  -296,  -296,   496,  -296,  -296,   496,   496,
+     328,   344,   262,   330,  -296,   403,  -296,   181,  -296,   343,
+     248,  -296,    29,   740,   280,  -296,  -296,   108,   248,  -296,
+     403,   248,   219,  -296,    24,  -296,    -3,   347,  -296,   349,
+    -296,   348,   219,  -296,  -296,   219,  -296,   604,  -296,   448,
+    -296,  -296,  -296,  -296,  -296,   332,  -296,  -296,  -296,    -3,
+    -296,  -296,   371,  -296,  -296,  -296,  -296,  -296,  -296,    25,
+    -296,  -296,  -296,  -296,   352,   241,  -296,  -296,  -296,   350,
+    -296,  -296,  -296,  -296,  -296,  -296,   403,   196,  -296,  -296,
+    -296,  -296,  -296,  -296,   361,   362,  -296,   364,   369,  -296,
+      42,  -296,  -296,  -296,  -296,    22,   188,  -296,  -296,  -296,
+    -296,  -296,  -296,  -296,  -296,   354,   357,   202,  -296,   280,
+     388,  -296,  -296,   370,   373,  -296,  -296,  -296,  -296,    16,
+     282,   403,   367,  -296,  -296,   348,  -296,  -296,  -296,   403,
+    -296,   403,    77,  -296,  -296,  -296,  -296,  -296,   448,   367,
+     403,  -296,    57,   207,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,  -296,    57,    36,  -296,  -296,  -296,    39,  -296,
+    -296,  -296
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+    -296,  -296,   461,   326,  -296,  -296,   376,  -296,   447,  -296,
+    -296,   441,  -296,  -296,  -296,   399,  -296,  -296,  -296,  -296,
+    -296,  -296,   428,  -296,   395,  -296,  -296,  -296,   434,   355,
+    -296,  -106,  -296,  -296,   321,  -296,    99,   322,    48,   115,
+    -296,   128,   287,  -296,  -296,   163,  -296,  -296,  -296,     3,
+    -196,  -172,   -82,  -296,  -296,   422,  -177,  -296,  -104,   157,
+    -296,   358,  -296,   168,  -164,   310,   313,  -296,  -140,  -296,
+    -191,  -188,  -296,    52,  -296,   -76,  -296,  -296,   -24,  -296,
+    -296,  -296,  -227,   380,  -150,  -296,  -296,  -296,   360,  -237,
+    -296,   179,   182,  -258,  -296,  -296,   205,  -296,  -296,  -296,
+    -296,   175,  -296,  -296,  -296,  -296,  -296,  -296,  -296,    47,
+      55,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,  -296,
+    -296,  -296,    54,    60,  -220,  -296,  -296,   177,  -296,   164,
+    -296,   107,  -296,  -296,   171,  -160,  -296,   -87,  -296,  -296,
+    -296,  -296,    11,   232,   -12,  -296,  -295
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -300
+static const yytype_int16 yytable[] =
+{
+      20,   154,   193,   193,   107,   107,    20,   349,   280,   322,
+     110,     7,   323,   279,     7,   107,     7,   268,   350,     7,
+     117,   497,   102,    15,   213,    15,   287,   134,   450,     1,
+       2,    53,    90,    15,   115,    15,    15,    48,   328,   293,
+      15,     9,   511,    69,    92,   511,   326,   327,    53,   316,
+      12,   328,    69,    15,    52,   264,   265,   512,   264,   265,
+     512,    90,   294,   511,    15,    16,    68,    91,     1,     2,
+      24,    52,    15,    92,   329,    68,   264,   265,   512,   385,
+     294,    15,    16,    15,   416,    21,    69,   329,   343,     1,
+       2,    33,   360,  -255,   154,   138,    91,    34,   134,   294,
+     505,   427,   326,   327,    97,   375,   361,  -255,   111,    68,
+     404,   406,   407,   345,   137,    15,   410,   411,   104,    15,
+     204,   205,    35,   386,   469,   328,    62,   173,   270,    49,
+      36,   174,   103,   405,   384,   276,   466,   107,   107,   104,
+     276,   107,   330,   335,   104,   481,   341,   442,   104,   104,
+     519,   139,   107,   276,   506,     3,   513,   344,   507,   513,
+     521,   329,   104,   231,   233,   140,   452,    17,    98,   161,
+     273,    37,   276,   282,   288,   -84,   292,   513,   300,    38,
+     162,   104,   438,   300,    22,   137,   230,   232,   403,   464,
+     444,   263,   269,   447,   469,   280,   469,   417,  -299,   268,
+     279,   189,  -299,    39,   104,   449,   322,    15,   473,   323,
+     439,    41,   338,     1,     2,   107,   339,   287,   445,   283,
+     388,   448,    25,   189,    15,    54,   190,    42,   191,   346,
+       1,     2,    26,   494,     1,     2,    55,   201,   202,   203,
+      15,   204,   205,   206,   207,   208,   235,   236,   195,   474,
+     191,    58,   364,    27,   237,    28,   365,    59,    60,    15,
+     204,   205,   366,   369,    29,     1,     2,   154,   301,   302,
+     201,   202,   203,    15,   204,   205,   206,   207,   208,     1,
+       2,   371,   209,   238,   379,   372,   396,    94,   380,   398,
+     397,   154,   239,    15,   -26,   435,    61,    43,   240,   436,
+     210,   393,   484,   393,    95,   458,   485,   241,   459,   224,
+     225,   100,   401,   402,   389,   209,   490,   189,   520,   493,
+     491,   517,   520,   211,    99,   491,     1,     2,   264,   265,
+     430,    10,   242,   210,    10,   143,   144,   347,   348,   104,
+     243,   113,   303,   142,   244,   353,   354,   356,   357,   264,
+     265,   462,   463,   273,   486,   487,   211,   194,   194,   164,
+     282,   168,   167,   169,   170,   288,   171,   172,   292,   175,
+     176,   177,   300,   178,   182,   212,   201,   202,   203,    15,
+     204,   205,   206,   207,   208,   235,   236,   180,   181,   183,
+     184,   187,   185,   237,   186,   191,   201,   202,   203,    15,
+     204,   205,   206,   207,   208,   235,   236,   188,   200,   228,
+     234,   274,   275,   237,    15,   313,   342,   315,   351,   325,
+     352,   209,   238,   378,   369,   359,   363,   370,   376,   382,
+     377,   239,   381,   383,   384,   387,   391,   240,   300,   210,
+     390,   209,   238,   483,  -177,   394,   241,   408,   412,   419,
+     423,   239,   428,   424,   429,   461,   189,   240,   437,   210,
+     453,   465,   211,   454,     8,    23,   241,   488,   401,   483,
+     470,   242,    40,   455,   471,   489,   189,   475,   476,   243,
+     477,   212,   211,   244,   101,   478,   495,   165,   510,   496,
+     500,   242,    96,   112,    93,   229,   460,   179,   479,   451,
+     440,   212,   415,   244,   201,   202,   203,    15,   204,   205,
+     206,   207,   208,   235,   236,   340,   518,   314,   201,   202,
+     203,    15,   204,   205,   206,   207,   208,     1,     2,   155,
+     441,   433,   498,   196,   425,   336,   503,   432,   337,   501,
+     426,   499,   434,   472,   446,   289,   504,   395,   443,   209,
+     238,   306,     0,     0,     0,     0,     0,     0,     0,   239,
+       0,     0,     0,   209,     0,   240,     0,   210,     0,     0,
+       0,     0,     0,     0,   241,     0,     0,     0,     0,     0,
+       0,   210,     0,     0,   189,     0,     0,     0,     0,     0,
+     211,     0,     0,     0,     0,     0,     0,     0,     0,   242,
+       0,     0,     0,     0,   211,     0,     0,     0,     0,   212,
+       0,   244,   201,   202,   203,    15,   204,   205,   206,   207,
+     208,   235,   236,   212,     0,     0,   145,     0,     0,     0,
+     146,     0,     0,     0,   147,    70,   119,     0,   120,   148,
+       0,     0,     0,     0,     0,     0,     0,     0,   121,     0,
+       0,     0,   149,     0,     0,     0,   123,   209,     0,   124,
+      72,    73,    74,     0,     0,     0,     0,     0,   150,     0,
+     151,    75,     0,     0,    15,   317,    76,   127,    77,   128,
+       1,     2,     0,     0,     0,     0,    78,     0,   129,   130,
+     152,   153,     0,     0,    70,    79,     0,    80,   211,     0,
+       0,     0,    81,   131,    82,    83,    84,     0,     0,    71,
+       0,     0,     0,     0,     0,     0,     0,   178,     0,    72,
+      73,    74,     0,     0,     0,     0,     0,     0,     0,     0,
+      75,     0,     0,     0,     0,    76,     0,    77,     0,     0,
+       0,     0,     0,     0,     0,    78,     0,     0,     0,     0,
+       0,     0,     0,     0,    79,     0,    80,   143,   144,     0,
+       0,    81,   145,    82,    83,    84,   146,     0,     0,     0,
+     147,    70,   119,     0,   120,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,   121,     0,     0,     0,   149,     0,
+       0,     0,   123,     0,     0,   124,    72,    73,    74,     0,
+       0,     0,     0,     0,   150,     0,   151,    75,     0,     0,
+       0,   126,    76,   127,    77,   128,     0,     0,     0,     0,
+       0,     0,    78,     0,   129,   130,   152,   153,     0,     0,
+       0,    79,     0,    80,     1,     2,     0,     0,    81,   131,
+      82,    83,    84,     0,     0,     0,     0,   118,    70,   119,
+       0,   120,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   121,     0,     0,     0,   122,     0,     0,     0,   123,
+       0,     0,   124,    72,    73,    74,     0,     0,     0,     0,
+       0,     0,     0,   125,    75,     0,     0,     0,   126,    76,
+     127,    77,   128,     0,     0,     0,     0,     0,     0,    78,
+       0,   129,   130,     0,     0,     0,     0,     0,    79,     0,
+      80,     0,     0,     0,     0,    81,   131,    82,    83,    84
+};
+
+static const yytype_int16 yycheck[] =
+{
+      12,   107,   152,   153,    91,    92,    18,   244,   185,   200,
+      92,     0,   200,   185,     3,   102,     5,   181,   245,     8,
+     102,     5,     3,    11,   164,    11,   186,   103,     4,    17,
+      18,    43,    56,    11,    36,    11,    11,    25,    41,   189,
+      11,     0,     6,    55,    56,     6,    18,    19,    60,   199,
+     113,    41,    64,    11,    43,    19,    20,    21,    19,    20,
+      21,    85,    38,     6,    11,    12,    55,    56,    17,    18,
+     115,    60,    11,    85,    77,    64,    19,    20,    21,   299,
+      38,    11,    12,    11,   342,    42,    98,    77,   238,    17,
+      18,    12,   110,   110,   200,    27,    85,    65,   174,    38,
+      23,   359,    18,    19,    54,   282,   124,   124,    97,    98,
+     330,   331,   332,     9,   103,    11,   336,   337,   120,    11,
+      12,    13,    92,   300,   419,    41,    54,   114,   114,   117,
+      92,   118,   113,   123,   118,   111,   111,   224,   225,   120,
+     111,   228,   224,   225,   120,   123,   228,   374,   120,   120,
+     114,    83,   239,   111,    77,   104,   120,   239,    81,   120,
+     121,    77,   120,   175,   176,    97,   386,   114,   118,    49,
+     182,    61,   111,   185,   186,   114,   188,   120,   190,    92,
+      60,   120,   370,   195,   114,   174,   175,   176,   328,   409,
+     378,   180,   181,   381,   489,   372,   491,   347,   114,   363,
+     372,    88,   118,     3,   120,   382,   397,    11,    12,   397,
+     370,   116,   114,    17,    18,   302,   118,   377,   378,   111,
+     302,   381,    18,    88,    11,    47,   113,    29,   115,   241,
+      17,    18,    28,   470,    17,    18,    62,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,   113,   437,
+     115,   117,   114,    49,    25,    51,   118,   117,   118,    11,
+      12,    13,   274,   275,    60,    17,    18,   373,    39,    40,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,   114,    53,    54,   114,   118,   114,   114,   118,     7,
+     118,   397,    63,    11,    47,   114,   113,    50,    69,   118,
+      71,   313,   114,   315,   117,   392,   118,    78,   395,    19,
+      20,    18,   324,   325,   303,    53,   114,    88,   514,   469,
+     118,   114,   518,    94,   113,   118,    17,    18,    19,    20,
+      68,     5,   103,    71,     8,    17,    18,    37,    38,   120,
+     111,   114,   113,     3,   115,   108,   109,   106,   107,    19,
+      20,    19,    20,   365,   458,   459,    94,   152,   153,     3,
+     372,    89,   113,    89,    79,   377,    59,    89,   380,   119,
+     119,    12,   384,   113,   113,   113,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,   123,   123,    43,
+      89,    76,   113,    25,   113,   115,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,   113,   113,     3,
+     121,    33,   113,    25,    11,    76,   105,    76,   114,   123,
+     118,    53,    54,   115,   436,   105,   123,   122,   114,    76,
+     118,    63,   115,   114,   118,    33,   113,    69,   450,    71,
+     116,    53,    54,   455,   115,   114,    78,    96,   103,   113,
+     116,    63,   124,   111,   110,     7,    88,    69,   115,    71,
+     113,    90,    94,   114,     3,    18,    78,   113,   480,   481,
+     118,   103,    31,   125,   124,   118,    88,   116,   116,   111,
+     116,   113,    94,   115,    85,   116,   116,   111,   500,   116,
+     123,   103,    64,    98,    60,   174,   397,   142,   450,   384,
+     372,   113,   339,   115,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,   228,   513,   195,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,   107,
+     373,   363,   480,   153,   355,   225,   489,   362,   225,   485,
+     358,   481,   365,   436,   380,   187,   491,   315,   377,    53,
+      54,   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,
+      -1,    -1,    -1,    53,    -1,    69,    -1,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    71,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,
+      -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   113,
+      -1,   115,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,   113,    -1,    -1,    22,    -1,    -1,    -1,
+      26,    -1,    -1,    -1,    30,    31,    32,    -1,    34,    35,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    52,    53,    -1,    55,
+      56,    57,    58,    -1,    -1,    -1,    -1,    -1,    64,    -1,
+      66,    67,    -1,    -1,    11,    71,    72,    73,    74,    75,
+      17,    18,    -1,    -1,    -1,    -1,    82,    -1,    84,    85,
+      86,    87,    -1,    -1,    31,    91,    -1,    93,    94,    -1,
+      -1,    -1,    98,    99,   100,   101,   102,    -1,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,    56,
+      57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    72,    -1,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    -1,    93,    17,    18,    -1,
+      -1,    98,    22,   100,   101,   102,    26,    -1,    -1,    -1,
+      30,    31,    32,    -1,    34,    35,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    48,    -1,
+      -1,    -1,    52,    -1,    -1,    55,    56,    57,    58,    -1,
+      -1,    -1,    -1,    -1,    64,    -1,    66,    67,    -1,    -1,
+      -1,    71,    72,    73,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    -1,    84,    85,    86,    87,    -1,    -1,
+      -1,    91,    -1,    93,    17,    18,    -1,    -1,    98,    99,
+     100,   101,   102,    -1,    -1,    -1,    -1,    30,    31,    32,
+      -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    44,    -1,    -1,    -1,    48,    -1,    -1,    -1,    52,
+      -1,    -1,    55,    56,    57,    58,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    71,    72,
+      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    91,    -1,
+      93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint16 yystos[] =
+{
+       0,    17,    18,   104,   127,   128,   129,   268,   128,     0,
+     129,   130,   113,   131,   132,    11,    12,   114,   133,   134,
+     270,    42,   114,   134,   115,    18,    28,    49,    51,    60,
+     135,   136,   137,    12,    65,    92,    92,    61,    92,     3,
+     137,   116,    29,    50,   138,   139,   151,   152,    25,   117,
+     153,   154,   268,   270,    47,    62,   143,   144,   117,   117,
+     118,   113,    54,   145,   146,   148,   149,   150,   268,   270,
+      31,    46,    56,    57,    58,    67,    72,    74,    82,    91,
+      93,    98,   100,   101,   102,   140,   141,   156,   158,   193,
+     204,   268,   270,   154,   114,   117,   148,    54,   118,   113,
+      18,   141,     3,   113,   120,   178,   179,   263,   264,   265,
+     178,   268,   150,   114,   142,    36,   168,   178,    30,    32,
+      34,    44,    48,    52,    55,    66,    71,    73,    75,    84,
+      85,    99,   159,   160,   201,   202,   204,   268,    27,    83,
+      97,   266,     3,    17,    18,    22,    26,    30,    35,    48,
+      64,    66,    86,    87,   157,   181,   185,   186,   187,   201,
+     203,    49,    60,   267,     3,   132,   147,   113,    89,    89,
+      79,    59,    89,   114,   118,   119,   119,    12,   113,   155,
+     123,   123,   113,    43,    89,   113,   113,    76,   113,    88,
+     113,   115,   209,   210,   222,   113,   209,   208,   210,   211,
+     113,     8,     9,    10,    12,    13,    14,    15,    16,    53,
+      71,    94,   113,   194,   196,   197,   198,   228,   261,   262,
+     268,   270,   271,   272,    19,    20,   170,   171,     3,   160,
+     268,   270,   268,   270,   121,    17,    18,    25,    54,    63,
+      69,    78,   103,   111,   115,   157,   180,   194,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     227,   229,   230,   268,    19,    20,   188,   189,   190,   268,
+     114,   252,   253,   270,    33,   113,   111,   166,   167,   177,
+     182,   263,   270,   111,   258,   259,   260,   261,   270,   187,
+     254,   255,   270,   210,    38,   163,   164,   165,   177,   182,
+     270,    39,    40,   113,   212,   213,   214,   239,   240,   242,
+     244,   245,   246,    76,   163,    76,   210,    71,   155,   161,
+     162,   181,   196,   197,   195,   123,    18,    19,    41,    77,
+     178,   191,   192,   250,   251,   178,   191,   192,   114,   118,
+     168,   178,   105,   210,   178,     9,   270,    37,    38,   215,
+     208,   114,   118,   108,   109,   205,   106,   107,   206,   105,
+     110,   124,   243,   123,   114,   118,   270,   256,   257,   270,
+     122,   114,   118,   183,   184,   182,   114,   118,   115,   114,
+     118,   115,    76,   114,   118,   250,   182,    33,   178,   268,
+     116,   113,   269,   270,   114,   269,   114,   118,     7,   199,
+     200,   270,   270,   194,   250,   123,   250,   250,    96,   169,
+     250,   250,   103,   172,   173,   171,   219,   210,   231,   113,
+     232,   233,   234,   116,   111,   217,   218,   219,   124,   110,
+      68,   226,   227,   189,   253,   114,   118,   115,   197,   261,
+     167,   185,   208,   260,   197,   261,   255,   197,   261,   182,
+       4,   165,   250,   113,   114,   125,   247,   248,   263,   263,
+     162,     7,    19,    20,   250,    90,   111,   235,   236,   272,
+     118,   124,   257,    12,   197,   116,   116,   116,   116,   164,
+     241,   123,   249,   270,   114,   118,   184,   184,   113,   118,
+     114,   118,   207,   210,   215,   116,   116,     5,   199,   249,
+     123,   248,   174,   235,   236,    23,    77,    81,   237,   238,
+     270,     6,    21,   120,   175,   176,   190,   114,   175,   114,
+     176,   121
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+#else
+static void
+yy_stack_print (bottom, top)
+    yytype_int16 *bottom;
+    yytype_int16 *top;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    YYFPRINTF (stderr, " %d", *bottom);
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+\f
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+/* The look-ahead symbol.  */
+int yychar;
+
+/* The semantic value of the look-ahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Look-ahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;            /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss);
+       YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     look-ahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to look-ahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a look-ahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the look-ahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+#line 414 "asn1p_y.y"
+    {
+               *(void **)param = (yyvsp[(2) - (2)].a_grammar);
+       }
+    break;
+
+  case 3:
+#line 417 "asn1p_y.y"
+    {
+               *(void **)param = (yyvsp[(1) - (1)].a_grammar);
+       }
+    break;
+
+  case 4:
+#line 423 "asn1p_y.y"
+    {
+               (yyval.a_grammar) = asn1p_new();
+               checkmem((yyval.a_grammar));
+               TQ_ADD(&((yyval.a_grammar)->modules), (yyvsp[(1) - (1)].a_module), mod_next);
+       }
+    break;
+
+  case 5:
+#line 428 "asn1p_y.y"
+    {
+               (yyval.a_grammar) = (yyvsp[(1) - (2)].a_grammar);
+               TQ_ADD(&((yyval.a_grammar)->modules), (yyvsp[(2) - (2)].a_module), mod_next);
+       }
+    break;
+
+  case 6:
+#line 445 "asn1p_y.y"
+    { currentModule = asn1p_module_new(); }
+    break;
+
+  case 7:
+#line 450 "asn1p_y.y"
+    {
+
+               (yyval.a_module) = currentModule;
+
+               if((yyvsp[(8) - (9)].a_module)) {
+                       asn1p_module_t tmp = *((yyval.a_module));
+                       *((yyval.a_module)) = *((yyvsp[(8) - (9)].a_module));
+                       *((yyvsp[(8) - (9)].a_module)) = tmp;
+                       asn1p_module_free((yyvsp[(8) - (9)].a_module));
+               } else {
+                       /* There's a chance that a module is just plain empty */
+               }
+
+               (yyval.a_module)->ModuleName = (yyvsp[(1) - (9)].tv_str);
+               (yyval.a_module)->module_oid = (yyvsp[(3) - (9)].a_oid);
+               (yyval.a_module)->module_flags = (yyvsp[(5) - (9)].a_module_flags);
+       }
+    break;
+
+  case 8:
+#line 474 "asn1p_y.y"
+    { (yyval.a_oid) = 0; }
+    break;
+
+  case 9:
+#line 475 "asn1p_y.y"
+    { (yyval.a_oid) = (yyvsp[(1) - (1)].a_oid); }
+    break;
+
+  case 10:
+#line 479 "asn1p_y.y"
+    {
+               (yyval.a_oid) = (yyvsp[(2) - (3)].a_oid);
+       }
+    break;
+
+  case 11:
+#line 482 "asn1p_y.y"
+    {
+               (yyval.a_oid) = 0;
+       }
+    break;
+
+  case 12:
+#line 488 "asn1p_y.y"
+    {
+               (yyval.a_oid) = asn1p_oid_new();
+               asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(1) - (1)].a_oid_arc));
+               if((yyvsp[(1) - (1)].a_oid_arc).name)
+                       free((yyvsp[(1) - (1)].a_oid_arc).name);
+       }
+    break;
+
+  case 13:
+#line 494 "asn1p_y.y"
+    {
+               (yyval.a_oid) = (yyvsp[(1) - (2)].a_oid);
+               asn1p_oid_add_arc((yyval.a_oid), &(yyvsp[(2) - (2)].a_oid_arc));
+               if((yyvsp[(2) - (2)].a_oid_arc).name)
+                       free((yyvsp[(2) - (2)].a_oid_arc).name);
+       }
+    break;
+
+  case 14:
+#line 503 "asn1p_y.y"
+    {                                  /* iso */
+               (yyval.a_oid_arc).name = (yyvsp[(1) - (1)].tv_str);
+               (yyval.a_oid_arc).number = -1;
+       }
+    break;
+
+  case 15:
+#line 507 "asn1p_y.y"
+    {          /* iso(1) */
+               (yyval.a_oid_arc).name = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_oid_arc).number = (yyvsp[(3) - (4)].a_int);
+       }
+    break;
+
+  case 16:
+#line 511 "asn1p_y.y"
+    {                                  /* 1 */
+               (yyval.a_oid_arc).name = 0;
+               (yyval.a_oid_arc).number = (yyvsp[(1) - (1)].a_int);
+       }
+    break;
+
+  case 17:
+#line 521 "asn1p_y.y"
+    { (yyval.a_module_flags) = MSF_NOFLAGS; }
+    break;
+
+  case 18:
+#line 522 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
+       }
+    break;
+
+  case 19:
+#line 531 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = (yyvsp[(1) - (1)].a_module_flags);
+       }
+    break;
+
+  case 20:
+#line 534 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = (yyvsp[(1) - (2)].a_module_flags) | (yyvsp[(2) - (2)].a_module_flags);
+       }
+    break;
+
+  case 21:
+#line 543 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = MSF_EXPLICIT_TAGS;
+       }
+    break;
+
+  case 22:
+#line 546 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = MSF_IMPLICIT_TAGS;
+       }
+    break;
+
+  case 23:
+#line 549 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = MSF_AUTOMATIC_TAGS;
+       }
+    break;
+
+  case 24:
+#line 552 "asn1p_y.y"
+    {
+               (yyval.a_module_flags) = MSF_EXTENSIBILITY_IMPLIED;
+       }
+    break;
+
+  case 25:
+#line 556 "asn1p_y.y"
+    {
+               /* X.680Amd1 specifies TAG and XER */
+               if(strcmp((yyvsp[(1) - (2)].tv_str), "TAG") == 0) {
+                       (yyval.a_module_flags) = MSF_TAG_INSTRUCTIONS;
+               } else if(strcmp((yyvsp[(1) - (2)].tv_str), "XER") == 0) {
+                       (yyval.a_module_flags) = MSF_XER_INSTRUCTIONS;
+               } else {
+                       fprintf(stderr,
+                               "WARNING: %s INSTRUCTIONS at %s:%d: "
+                               "Unrecognized encoding reference\n",
+                               (yyvsp[(1) - (2)].tv_str), ASN_FILENAME, yylineno);
+                       (yyval.a_module_flags) = MSF_unk_INSTRUCTIONS;
+               }
+               free((yyvsp[(1) - (2)].tv_str));
+       }
+    break;
+
+  case 26:
+#line 577 "asn1p_y.y"
+    { (yyval.a_module) = 0; }
+    break;
+
+  case 27:
+#line 578 "asn1p_y.y"
+    {
+               (yyval.a_module) = (yyvsp[(1) - (1)].a_module);
+       }
+    break;
+
+  case 28:
+#line 587 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               AL_IMPORT((yyval.a_module), exports, (yyvsp[(1) - (3)].a_module), xp_next);
+               AL_IMPORT((yyval.a_module), imports, (yyvsp[(2) - (3)].a_module), xp_next);
+               asn1p_module_move_members((yyval.a_module), (yyvsp[(3) - (3)].a_module));
+
+               asn1p_module_free((yyvsp[(1) - (3)].a_module));
+               asn1p_module_free((yyvsp[(2) - (3)].a_module));
+               asn1p_module_free((yyvsp[(3) - (3)].a_module));
+       }
+    break;
+
+  case 29:
+#line 600 "asn1p_y.y"
+    {
+               (yyval.a_module) = (yyvsp[(1) - (1)].a_module);
+       }
+    break;
+
+  case 30:
+#line 603 "asn1p_y.y"
+    {
+               if((yyvsp[(1) - (2)].a_module)) {
+                       (yyval.a_module) = (yyvsp[(1) - (2)].a_module);
+               } else {
+                       (yyval.a_module) = (yyvsp[(2) - (2)].a_module);
+                       break;
+               }
+        asn1p_module_move_members((yyval.a_module), (yyvsp[(2) - (2)].a_module));
+               asn1p_module_free((yyvsp[(2) - (2)].a_module));
+       }
+    break;
+
+  case 31:
+#line 620 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               checkmem((yyval.a_module));
+               assert((yyvsp[(1) - (1)].a_expr)->expr_type != A1TC_INVALID);
+               assert((yyvsp[(1) - (1)].a_expr)->meta_type != AMT_INVALID);
+               asn1p_module_member_add((yyval.a_module), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 32:
+#line 627 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               checkmem((yyval.a_module));
+               assert((yyvsp[(1) - (1)].a_expr)->expr_type != A1TC_INVALID);
+               assert((yyvsp[(1) - (1)].a_expr)->meta_type != AMT_INVALID);
+               asn1p_module_member_add((yyval.a_module), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 33:
+#line 641 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               checkmem((yyval.a_module));
+               assert((yyvsp[(1) - (1)].a_expr)->expr_type != A1TC_INVALID);
+               assert((yyvsp[(1) - (1)].a_expr)->meta_type != AMT_INVALID);
+               asn1p_module_member_add((yyval.a_module), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 34:
+#line 649 "asn1p_y.y"
+    { asn1p_lexer_hack_push_encoding_control(); }
+    break;
+
+  case 35:
+#line 650 "asn1p_y.y"
+    {
+               fprintf(stderr,
+                       "WARNING: ENCODING-CONTROL %s "
+                       "specification at %s:%d ignored\n",
+                       (yyvsp[(2) - (3)].tv_str), ASN_FILENAME, yylineno);
+               free((yyvsp[(2) - (3)].tv_str));
+               (yyval.a_module) = 0;
+       }
+    break;
+
+  case 36:
+#line 662 "asn1p_y.y"
+    {
+               return yyerror(
+                       "Attempt to redefine a standard basic string type, "
+                       "please comment out or remove this type redefinition.");
+       }
+    break;
+
+  case 37:
+#line 675 "asn1p_y.y"
+    { (yyval.a_module) = 0; }
+    break;
+
+  case 39:
+#line 679 "asn1p_y.y"
+    {
+               if(!saved_aid && 0)
+                       return yyerror("Unterminated IMPORTS FROM, "
+                                       "expected semicolon ';'");
+               saved_aid = 0;
+               (yyval.a_module) = (yyvsp[(2) - (3)].a_module);
+       }
+    break;
+
+  case 40:
+#line 689 "asn1p_y.y"
+    {
+               return yyerror("Empty IMPORTS list");
+       }
+    break;
+
+  case 41:
+#line 695 "asn1p_y.y"
+    { (yyval.a_module) = asn1p_module_new(); }
+    break;
+
+  case 43:
+#line 699 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               checkmem((yyval.a_module));
+               TQ_ADD(&((yyval.a_module)->imports), (yyvsp[(1) - (1)].a_xports), xp_next);
+       }
+    break;
+
+  case 44:
+#line 704 "asn1p_y.y"
+    {
+               (yyval.a_module) = (yyvsp[(1) - (2)].a_module);
+               TQ_ADD(&((yyval.a_module)->imports), (yyvsp[(2) - (2)].a_xports), xp_next);
+       }
+    break;
+
+  case 45:
+#line 711 "asn1p_y.y"
+    { memset(&(yyval.a_aid), 0, sizeof((yyval.a_aid))); }
+    break;
+
+  case 46:
+#line 712 "asn1p_y.y"
+    { (yyval.a_aid).oid = (yyvsp[(1) - (1)].a_oid); }
+    break;
+
+  case 47:
+#line 716 "asn1p_y.y"
+    {
+               (yyval.a_xports) = (yyvsp[(1) - (4)].a_xports);
+               (yyval.a_xports)->fromModuleName = (yyvsp[(3) - (4)].tv_str);
+               (yyval.a_xports)->identifier = (yyvsp[(4) - (4)].a_aid);
+               /* This stupid thing is used for look-back hack. */
+               saved_aid = (yyval.a_xports)->identifier.oid ? 0 : &((yyval.a_xports)->identifier);
+               checkmem((yyval.a_xports));
+       }
+    break;
+
+  case 48:
+#line 727 "asn1p_y.y"
+    {
+               (yyval.a_xports) = asn1p_xports_new();
+               checkmem((yyval.a_xports));
+               TQ_ADD(&((yyval.a_xports)->xp_members), (yyvsp[(1) - (1)].a_expr), next);
+       }
+    break;
+
+  case 49:
+#line 732 "asn1p_y.y"
+    {
+               (yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
+               TQ_ADD(&((yyval.a_xports)->xp_members), (yyvsp[(3) - (3)].a_expr), next);
+       }
+    break;
+
+  case 50:
+#line 739 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+       }
+    break;
+
+  case 51:
+#line 745 "asn1p_y.y"
+    {          /* Completely equivalent to above */
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+       }
+    break;
+
+  case 52:
+#line 751 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+       }
+    break;
+
+  case 53:
+#line 761 "asn1p_y.y"
+    { (yyval.a_module) = 0; }
+    break;
+
+  case 54:
+#line 762 "asn1p_y.y"
+    {
+               (yyval.a_module) = asn1p_module_new();
+               checkmem((yyval.a_module));
+               if((yyvsp[(1) - (1)].a_xports)) {
+                       TQ_ADD(&((yyval.a_module)->exports), (yyvsp[(1) - (1)].a_xports), xp_next);
+               } else {
+                       /* "EXPORTS ALL;" */
+               }
+       }
+    break;
+
+  case 55:
+#line 774 "asn1p_y.y"
+    {
+               (yyval.a_xports) = (yyvsp[(2) - (3)].a_xports);
+       }
+    break;
+
+  case 56:
+#line 777 "asn1p_y.y"
+    {
+               (yyval.a_xports) = 0;
+       }
+    break;
+
+  case 57:
+#line 780 "asn1p_y.y"
+    {
+               /* Empty EXPORTS clause effectively prohibits export. */
+               (yyval.a_xports) = asn1p_xports_new();
+               checkmem((yyval.a_xports));
+       }
+    break;
+
+  case 58:
+#line 788 "asn1p_y.y"
+    {
+               (yyval.a_xports) = asn1p_xports_new();
+               assert((yyval.a_xports));
+               TQ_ADD(&((yyval.a_xports)->xp_members), (yyvsp[(1) - (1)].a_expr), next);
+       }
+    break;
+
+  case 59:
+#line 793 "asn1p_y.y"
+    {
+               (yyval.a_xports) = (yyvsp[(1) - (3)].a_xports);
+               TQ_ADD(&((yyval.a_xports)->xp_members), (yyvsp[(3) - (3)].a_expr), next);
+       }
+    break;
+
+  case 60:
+#line 800 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_EXPORTVAR;
+       }
+    break;
+
+  case 61:
+#line 806 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_EXPORTVAR;
+       }
+    break;
+
+  case 62:
+#line 812 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+               (yyval.a_expr)->expr_type = A1TC_EXPORTVAR;
+       }
+    break;
+
+  case 63:
+#line 821 "asn1p_y.y"
+    { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
+    break;
+
+  case 64:
+#line 824 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
+               assert((yyval.a_expr)->Identifier == 0);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_VALUESET;
+               (yyval.a_expr)->constraints = (yyvsp[(4) - (4)].a_constr);
+       }
+    break;
+
+  case 65:
+#line 844 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->reference = (yyvsp[(1) - (1)].a_ref);
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+               (yyval.a_expr)->meta_type = AMT_TYPEREF;
+       }
+    break;
+
+  case 66:
+#line 854 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->reference = (yyvsp[(1) - (4)].a_ref);
+               (yyval.a_expr)->rhs_pspecs = (yyvsp[(3) - (4)].a_expr);
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+               (yyval.a_expr)->meta_type = AMT_TYPEREF;
+       }
+    break;
+
+  case 67:
+#line 874 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               assert((yyval.a_expr)->expr_type);
+               assert((yyval.a_expr)->meta_type);
+       }
+    break;
+
+  case 68:
+#line 880 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (3)].a_expr);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               assert((yyval.a_expr)->expr_type == A1TC_CLASSDEF);
+               assert((yyval.a_expr)->meta_type == AMT_OBJECTCLASS);
+       }
+    break;
+
+  case 69:
+#line 896 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
+               (yyval.a_expr)->lhs_params = (yyvsp[(3) - (6)].a_plist);
+       }
+    break;
+
+  case 70:
+#line 902 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(6) - (6)].a_expr);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (6)].tv_str);
+               (yyval.a_expr)->lhs_params = (yyvsp[(3) - (6)].a_plist);
+       }
+    break;
+
+  case 71:
+#line 910 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_plist) = asn1p_paramlist_new(yylineno);
+               checkmem((yyval.a_plist));
+               ret = asn1p_paramlist_add_param((yyval.a_plist), (yyvsp[(1) - (1)].a_parg).governor, (yyvsp[(1) - (1)].a_parg).argument);
+               checkmem(ret == 0);
+               asn1p_ref_free((yyvsp[(1) - (1)].a_parg).governor);
+               free((yyvsp[(1) - (1)].a_parg).argument);
+       }
+    break;
+
+  case 72:
+#line 919 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_plist) = (yyvsp[(1) - (3)].a_plist);
+               ret = asn1p_paramlist_add_param((yyval.a_plist), (yyvsp[(3) - (3)].a_parg).governor, (yyvsp[(3) - (3)].a_parg).argument);
+               checkmem(ret == 0);
+               asn1p_ref_free((yyvsp[(3) - (3)].a_parg).governor);
+               free((yyvsp[(3) - (3)].a_parg).argument);
+       }
+    break;
+
+  case 73:
+#line 930 "asn1p_y.y"
+    {
+               (yyval.a_parg).governor = NULL;
+               (yyval.a_parg).argument = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 74:
+#line 934 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_parg).governor, (yyvsp[(1) - (3)].tv_str), 0);
+               checkmem(ret == 0);
+               (yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
+               free((yyvsp[(1) - (3)].tv_str));
+       }
+    break;
+
+  case 75:
+#line 942 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_parg).governor, (yyvsp[(1) - (3)].tv_str), 0);
+               checkmem(ret == 0);
+               (yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
+               free((yyvsp[(1) - (3)].tv_str));
+       }
+    break;
+
+  case 76:
+#line 950 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_parg).governor,
+                       ASN_EXPR_TYPE2STR((yyvsp[(1) - (3)].a_type)), 1);
+               checkmem(ret == 0);
+               (yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
+       }
+    break;
+
+  case 77:
+#line 958 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_parg).governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_parg).governor,
+                       ASN_EXPR_TYPE2STR((yyvsp[(1) - (3)].a_type)), 1);
+               checkmem(ret == 0);
+               (yyval.a_parg).argument = (yyvsp[(3) - (3)].tv_str);
+       }
+    break;
+
+  case 78:
+#line 969 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 79:
+#line 974 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 81:
+#line 982 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("?");
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->value = (yyvsp[(1) - (1)].a_value);
+       }
+    break;
+
+  case 82:
+#line 990 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("?");
+               (yyval.a_expr)->expr_type = A1TC_REFERENCE;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->value = (yyvsp[(1) - (1)].a_value);
+       }
+    break;
+
+  case 83:
+#line 998 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               (yyval.a_expr)->expr_type = A1TC_VALUESET;
+               (yyval.a_expr)->meta_type = AMT_VALUESET;
+               (yyval.a_expr)->constraints = (yyvsp[(1) - (1)].a_constr);
+       }
+    break;
+
+  case 84:
+#line 1021 "asn1p_y.y"
+    { (yyval.a_expr) = NEW_EXPR(); }
+    break;
+
+  case 85:
+#line 1022 "asn1p_y.y"
+    { (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr); }
+    break;
+
+  case 86:
+#line 1025 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 87:
+#line 1030 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 88:
+#line 1034 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (5)].a_expr);
+               (yyvsp[(4) - (5)].a_expr)->meta_type = AMT_TYPE;
+               (yyvsp[(4) - (5)].a_expr)->expr_type = ASN_CONSTR_SEQUENCE;
+               (yyvsp[(4) - (5)].a_expr)->marker.flags |= EM_OPTIONAL;
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(4) - (5)].a_expr));
+       }
+    break;
+
+  case 89:
+#line 1042 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
+               assert((yyval.a_expr)->Identifier == 0);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyvsp[(3) - (3)].a_marker).flags |= (yyval.a_expr)->marker.flags;
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 90:
+#line 1049 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
+               (yyvsp[(2) - (2)].a_marker).flags |= (yyval.a_expr)->marker.flags;
+               (yyval.a_expr)->marker = (yyvsp[(2) - (2)].a_marker);
+               _fixup_anonymous_identifier((yyval.a_expr));
+       }
+    break;
+
+  case 91:
+#line 1055 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->meta_type = (yyvsp[(3) - (3)].a_expr)->meta_type;
+               (yyval.a_expr)->expr_type = A1TC_COMPONENTS_OF;
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 92:
+#line 1062 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
+       }
+    break;
+
+  case 93:
+#line 1068 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 94:
+#line 1073 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 95:
+#line 1080 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
+               assert((yyval.a_expr)->Identifier == 0);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (2)].tv_str);
+       }
+    break;
+
+  case 96:
+#line 1085 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
+       }
+    break;
+
+  case 97:
+#line 1088 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
+               _fixup_anonymous_identifier((yyval.a_expr));
+       }
+    break;
+
+  case 98:
+#line 1095 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (5)].a_expr);
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->with_syntax = (yyvsp[(5) - (5)].a_wsynt);
+               assert((yyval.a_expr)->expr_type == A1TC_CLASSDEF);
+               assert((yyval.a_expr)->meta_type == AMT_OBJECTCLASS);
+       }
+    break;
+
+  case 99:
+#line 1105 "asn1p_y.y"
+    { (yyval.a_int) = 0; }
+    break;
+
+  case 100:
+#line 1106 "asn1p_y.y"
+    { (yyval.a_int) = 1; }
+    break;
+
+  case 101:
+#line 1110 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_CLASSDEF;
+               (yyval.a_expr)->meta_type = AMT_OBJECTCLASS;
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 102:
+#line 1117 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 103:
+#line 1127 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (2)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_TFS;        /* TypeFieldSpec */
+               (yyval.a_expr)->marker = (yyvsp[(2) - (2)].a_marker);
+       }
+    break;
+
+  case 104:
+#line 1137 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_FTVFS;      /* FixedTypeValueFieldSpec */
+               (yyval.a_expr)->unique = (yyvsp[(3) - (4)].a_int);
+               (yyval.a_expr)->marker = (yyvsp[(4) - (4)].a_marker);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(2) - (4)].a_expr));
+       }
+    break;
+
+  case 105:
+#line 1148 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_VTVFS;
+               (yyval.a_expr)->reference = (yyvsp[(2) - (3)].a_ref);
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 106:
+#line 1158 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->reference = (yyvsp[(2) - (3)].a_ref);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_OFS;
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 107:
+#line 1169 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_VTVSFS;
+               (yyval.a_expr)->reference = (yyvsp[(2) - (3)].a_ref);
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 108:
+#line 1179 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_FTVSFS;
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(2) - (3)].a_expr));
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 109:
+#line 1190 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (3)].tv_str);
+               (yyval.a_expr)->reference = (yyvsp[(2) - (3)].a_ref);
+               (yyval.a_expr)->meta_type = AMT_OBJECTFIELD;
+               (yyval.a_expr)->expr_type = A1TC_CLASSFIELD_OSFS;
+               (yyval.a_expr)->marker = (yyvsp[(3) - (3)].a_marker);
+       }
+    break;
+
+  case 110:
+#line 1202 "asn1p_y.y"
+    { (yyval.a_wsynt) = 0; }
+    break;
+
+  case 111:
+#line 1203 "asn1p_y.y"
+    {
+               (yyval.a_wsynt) = (yyvsp[(1) - (1)].a_wsynt);
+       }
+    break;
+
+  case 112:
+#line 1210 "asn1p_y.y"
+    { asn1p_lexer_hack_enable_with_syntax(); }
+    break;
+
+  case 113:
+#line 1212 "asn1p_y.y"
+    {
+               (yyval.a_wsynt) = (yyvsp[(5) - (6)].a_wsynt);
+       }
+    break;
+
+  case 114:
+#line 1218 "asn1p_y.y"
+    {
+               (yyval.a_wsynt) = asn1p_wsyntx_new();
+               TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(1) - (1)].a_wchunk), next);
+       }
+    break;
+
+  case 115:
+#line 1222 "asn1p_y.y"
+    {
+               (yyval.a_wsynt) = (yyvsp[(1) - (2)].a_wsynt);
+               TQ_ADD(&((yyval.a_wsynt)->chunks), (yyvsp[(2) - (2)].a_wchunk), next);
+       }
+    break;
+
+  case 116:
+#line 1229 "asn1p_y.y"
+    {
+               (yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_opaque).buf, 0);
+               (yyval.a_wchunk)->type = WC_WHITESPACE;
+       }
+    break;
+
+  case 117:
+#line 1233 "asn1p_y.y"
+    {
+               (yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].tv_str), 0);
+       }
+    break;
+
+  case 118:
+#line 1236 "asn1p_y.y"
+    {
+               (yyval.a_wchunk) = asn1p_wsyntx_chunk_fromstring((yyvsp[(1) - (1)].a_refcomp).name, 0);
+               (yyval.a_wchunk)->type = WC_FIELD;
+       }
+    break;
+
+  case 119:
+#line 1240 "asn1p_y.y"
+    {
+               (yyval.a_wchunk) = asn1p_wsyntx_chunk_fromsyntax((yyvsp[(2) - (3)].a_wsynt));
+       }
+    break;
+
+  case 120:
+#line 1246 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("...");
+               checkmem((yyval.a_expr)->Identifier);
+               (yyval.a_expr)->expr_type = A1TC_EXTENSIBLE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 121:
+#line 1254 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("...");
+               checkmem((yyval.a_expr)->Identifier);
+               (yyval.a_expr)->value = (yyvsp[(3) - (3)].a_value);
+               (yyval.a_expr)->expr_type = A1TC_EXTENSIBLE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 122:
+#line 1263 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("...");
+               (yyval.a_expr)->value = (yyvsp[(3) - (3)].a_value);
+               checkmem((yyval.a_expr)->Identifier);
+               (yyval.a_expr)->expr_type = A1TC_EXTENSIBLE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 124:
+#line 1277 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
+        (yyval.a_expr)->tag = (yyvsp[(1) - (2)].a_tag);
+    }
+    break;
+
+  case 125:
+#line 1284 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if((yyval.a_expr)->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || (yyval.a_expr)->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&((yyval.a_expr)->members))->constraints);
+                       TQ_FIRST(&((yyval.a_expr)->members))->constraints = (yyvsp[(2) - (2)].a_constr);
+               } else {
+                       if((yyval.a_expr)->constraints) {
+                               assert(!(yyvsp[(2) - (2)].a_constr));
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free((yyvsp[(2) - (2)].a_constr));
+                       } else {
+                               (yyval.a_expr)->constraints = (yyvsp[(2) - (2)].a_constr);
+                       }
+               }
+       }
+    break;
+
+  case 126:
+#line 1307 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (2)].a_expr);
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if((yyval.a_expr)->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || (yyval.a_expr)->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&((yyval.a_expr)->members))->constraints);
+                       TQ_FIRST(&((yyval.a_expr)->members))->constraints = (yyvsp[(2) - (2)].a_constr);
+               } else {
+                       if((yyval.a_expr)->constraints) {
+                               assert(!(yyvsp[(2) - (2)].a_constr));
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free((yyvsp[(2) - (2)].a_constr));
+                       } else {
+                               (yyval.a_expr)->constraints = (yyvsp[(2) - (2)].a_constr);
+                       }
+               }
+       }
+    break;
+
+  case 127:
+#line 1330 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(2) - (3)].a_expr);
+               (yyval.a_expr)->tag = (yyvsp[(1) - (3)].a_tag);
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if((yyval.a_expr)->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || (yyval.a_expr)->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&((yyval.a_expr)->members))->constraints);
+                       TQ_FIRST(&((yyval.a_expr)->members))->constraints = (yyvsp[(3) - (3)].a_constr);
+               } else {
+                       if((yyval.a_expr)->constraints) {
+                               assert(!(yyvsp[(2) - (3)].a_expr));
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free((yyvsp[(3) - (3)].a_constr));
+                       } else {
+                               (yyval.a_expr)->constraints = (yyvsp[(3) - (3)].a_constr);
+                       }
+               }
+       }
+    break;
+
+  case 128:
+#line 1354 "asn1p_y.y"
+    {
+               (yyval.a_int) = asn1p_as_pointer ? EM_INDIRECT : 0;
+               asn1p_as_pointer = 0;
+       }
+    break;
+
+  case 129:
+#line 1361 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(2) - (2)].a_expr);
+               (yyval.a_expr)->marker.flags |= (yyvsp[(1) - (2)].a_int);
+
+               if(((yyval.a_expr)->marker.flags & EM_INDIRECT)
+               && ((yyval.a_expr)->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
+                       fprintf(stderr,
+                               "INFO: Directive <ASN1C:RepresentAsPointer> "
+                               "applied to %s at %s:%d\n",
+                               ASN_EXPR_TYPE2STR((yyval.a_expr)->expr_type)
+                                       ?  ASN_EXPR_TYPE2STR((yyval.a_expr)->expr_type)
+                                       : "member",
+                               ASN_FILENAME, (yyval.a_expr)->_lineno
+                       );
+               }
+    }
+    break;
+
+  case 133:
+#line 1385 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+               assert((yyval.a_expr)->expr_type == A1TC_INVALID);
+               (yyval.a_expr)->expr_type = ASN_CONSTR_CHOICE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 134:
+#line 1391 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+               assert((yyval.a_expr)->expr_type == A1TC_INVALID);
+               (yyval.a_expr)->expr_type = ASN_CONSTR_SEQUENCE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 135:
+#line 1397 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+               assert((yyval.a_expr)->expr_type == A1TC_INVALID);
+               (yyval.a_expr)->expr_type = ASN_CONSTR_SET;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 136:
+#line 1403 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->constraints = (yyvsp[(2) - (6)].a_constr);
+               (yyval.a_expr)->expr_type = ASN_CONSTR_SEQUENCE_OF;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+               (yyvsp[(6) - (6)].a_expr)->Identifier = (yyvsp[(4) - (6)].tv_str);
+               (yyvsp[(6) - (6)].a_expr)->tag = (yyvsp[(5) - (6)].a_tag);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(6) - (6)].a_expr));
+       }
+    break;
+
+  case 137:
+#line 1413 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->constraints = (yyvsp[(2) - (6)].a_constr);
+               (yyval.a_expr)->expr_type = ASN_CONSTR_SET_OF;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+               (yyvsp[(6) - (6)].a_expr)->Identifier = (yyvsp[(4) - (6)].tv_str);
+               (yyvsp[(6) - (6)].a_expr)->tag = (yyvsp[(5) - (6)].a_tag);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(6) - (6)].a_expr));
+       }
+    break;
+
+  case 138:
+#line 1423 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = ASN_TYPE_ANY;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 139:
+#line 1429 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->reference = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_expr)->reference,
+                       (yyvsp[(4) - (4)].tv_str), RLT_lowercase);
+               checkmem(ret == 0);
+               (yyval.a_expr)->expr_type = ASN_TYPE_ANY;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+               free((yyvsp[(4) - (4)].tv_str));
+       }
+    break;
+
+  case 140:
+#line 1441 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->reference = (yyvsp[(3) - (3)].a_ref);
+               (yyval.a_expr)->expr_type = A1TC_INSTANCE;
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 141:
+#line 1456 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               checkmem((yyval.a_ref));
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free((yyvsp[(1) - (1)].tv_str));
+       }
+    break;
+
+  case 142:
+#line 1464 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               checkmem((yyval.a_ref));
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_CAPITALS);
+               free((yyvsp[(1) - (1)].tv_str));
+               checkmem(ret == 0);
+       }
+    break;
+
+  case 143:
+#line 1472 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               checkmem((yyval.a_ref));
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free((yyvsp[(1) - (3)].tv_str));
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 144:
+#line 1483 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               checkmem((yyval.a_ref));
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free((yyvsp[(1) - (3)].tv_str));
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 145:
+#line 1494 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = (yyvsp[(3) - (3)].a_ref);
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (3)].tv_str), RLT_CAPITALS);
+               free((yyvsp[(1) - (3)].tv_str));
+               checkmem(ret == 0);
+               /*
+                * Move the last element infront.
+                */
+               {
+                       struct asn1p_ref_component_s tmp_comp;
+                       tmp_comp = (yyval.a_ref)->components[(yyval.a_ref)->comp_count-1];
+                       memmove(&(yyval.a_ref)->components[1],
+                               &(yyval.a_ref)->components[0],
+                               sizeof((yyval.a_ref)->components[0])
+                               * ((yyval.a_ref)->comp_count - 1));
+                       (yyval.a_ref)->components[0] = tmp_comp;
+               }
+       }
+    break;
+
+  case 146:
+#line 1516 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               checkmem((yyval.a_ref));
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].a_refcomp).name, (yyvsp[(1) - (1)].a_refcomp).lex_type);
+               free((yyvsp[(1) - (1)].a_refcomp).name);
+               checkmem(ret == 0);
+       }
+    break;
+
+  case 147:
+#line 1524 "asn1p_y.y"
+    {
+               int ret;
+               (yyval.a_ref) = (yyvsp[(1) - (3)].a_ref);
+               ret = asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].a_refcomp).name, (yyvsp[(3) - (3)].a_refcomp).lex_type);
+               free((yyvsp[(3) - (3)].a_refcomp).name);
+               checkmem(ret == 0);
+       }
+    break;
+
+  case 149:
+#line 1537 "asn1p_y.y"
+    {
+               (yyval.a_refcomp).lex_type = RLT_AmpUppercase;
+               (yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 150:
+#line 1542 "asn1p_y.y"
+    {
+               (yyval.a_refcomp).lex_type = RLT_Amplowercase;
+               (yyval.a_refcomp).name = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 151:
+#line 1551 "asn1p_y.y"
+    {
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_AmpUppercase);
+               free((yyvsp[(1) - (1)].tv_str));
+       }
+    break;
+
+  case 152:
+#line 1556 "asn1p_y.y"
+    {
+               (yyval.a_ref) = (yyval.a_ref);
+               asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_AmpUppercase);
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 153:
+#line 1561 "asn1p_y.y"
+    {
+               (yyval.a_ref) = (yyval.a_ref);
+               asn1p_ref_add_component((yyval.a_ref), (yyvsp[(3) - (3)].tv_str), RLT_Amplowercase);
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 154:
+#line 1569 "asn1p_y.y"
+    {
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_CAPITALS);
+               free((yyvsp[(1) - (1)].tv_str));
+       }
+    break;
+
+  case 155:
+#line 1592 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(2) - (4)].a_expr);
+               assert((yyval.a_expr)->Identifier == NULL);
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->value = (yyvsp[(4) - (4)].a_value);
+       }
+    break;
+
+  case 158:
+#line 1604 "asn1p_y.y"
+    { asn1p_lexer_hack_push_opaque_state(); }
+    break;
+
+  case 159:
+#line 1604 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_frombuf((yyvsp[(3) - (3)].tv_opaque).buf, (yyvsp[(3) - (3)].tv_opaque).len, 0);
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_UNPARSED;
+       }
+    break;
+
+  case 160:
+#line 1612 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint(0);
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_NULL;
+       }
+    break;
+
+  case 161:
+#line 1617 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint(0);
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_FALSE;
+       }
+    break;
+
+  case 162:
+#line 1622 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint(1);
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_TRUE;
+       }
+    break;
+
+  case 168:
+#line 1635 "asn1p_y.y"
+    {
+               asn1p_ref_t *ref;
+               int ret;
+               ref = asn1p_ref_new(yylineno, currentModule);
+               checkmem(ref);
+               ret = asn1p_ref_add_component(ref, (yyvsp[(1) - (3)].tv_str), RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component(ref, (yyvsp[(3) - (3)].tv_str), RLT_lowercase);
+               checkmem(ret == 0);
+               (yyval.a_value) = asn1p_value_fromref(ref, 0);
+               checkmem((yyval.a_value));
+               free((yyvsp[(1) - (3)].tv_str));
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 169:
+#line 1653 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_frombuf((yyvsp[(1) - (1)].tv_opaque).buf, (yyvsp[(1) - (1)].tv_opaque).len, 0);
+               checkmem((yyval.a_value));
+       }
+    break;
+
+  case 170:
+#line 1657 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_TUPLE;
+       }
+    break;
+
+  case 171:
+#line 1662 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
+               checkmem((yyval.a_value));
+               (yyval.a_value)->type = ATV_QUADRUPLE;
+       }
+    break;
+
+  case 172:
+#line 1670 "asn1p_y.y"
+    {
+               (yyval.tv_opaque).len = (yyvsp[(1) - (1)].tv_opaque).len + 1;
+               (yyval.tv_opaque).buf = malloc(1 + (yyval.tv_opaque).len + 1);
+               checkmem((yyval.tv_opaque).buf);
+               (yyval.tv_opaque).buf[0] = '{';
+               memcpy((yyval.tv_opaque).buf + 1, (yyvsp[(1) - (1)].tv_opaque).buf, (yyvsp[(1) - (1)].tv_opaque).len);
+               (yyval.tv_opaque).buf[(yyval.tv_opaque).len] = '\0';
+               free((yyvsp[(1) - (1)].tv_opaque).buf);
+    }
+    break;
+
+  case 173:
+#line 1679 "asn1p_y.y"
+    {
+               int newsize = (yyvsp[(1) - (2)].tv_opaque).len + (yyvsp[(2) - (2)].tv_opaque).len;
+               char *p = malloc(newsize + 1);
+               checkmem(p);
+               memcpy(p         , (yyvsp[(1) - (2)].tv_opaque).buf, (yyvsp[(1) - (2)].tv_opaque).len);
+               memcpy(p + (yyvsp[(1) - (2)].tv_opaque).len, (yyvsp[(2) - (2)].tv_opaque).buf, (yyvsp[(2) - (2)].tv_opaque).len);
+               p[newsize] = '\0';
+               free((yyvsp[(1) - (2)].tv_opaque).buf);
+               free((yyvsp[(2) - (2)].tv_opaque).buf);
+               (yyval.tv_opaque).buf = p;
+               (yyval.tv_opaque).len = newsize;
+       }
+    break;
+
+  case 175:
+#line 1695 "asn1p_y.y"
+    {
+        (yyval.tv_opaque).len = strlen((yyvsp[(1) - (1)].tv_str));
+        (yyval.tv_opaque).buf = (yyvsp[(1) - (1)].tv_str);
+    }
+    break;
+
+  case 176:
+#line 1701 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_BOOLEAN; }
+    break;
+
+  case 177:
+#line 1702 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_NULL; }
+    break;
+
+  case 178:
+#line 1703 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_REAL; }
+    break;
+
+  case 179:
+#line 1704 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_OCTET_STRING; }
+    break;
+
+  case 180:
+#line 1705 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_OBJECT_IDENTIFIER; }
+    break;
+
+  case 181:
+#line 1706 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_RELATIVE_OID; }
+    break;
+
+  case 182:
+#line 1707 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_EXTERNAL; }
+    break;
+
+  case 183:
+#line 1708 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_EMBEDDED_PDV; }
+    break;
+
+  case 184:
+#line 1709 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_CHARACTER_STRING; }
+    break;
+
+  case 185:
+#line 1710 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_UTCTime; }
+    break;
+
+  case 186:
+#line 1711 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_GeneralizedTime; }
+    break;
+
+  case 189:
+#line 1720 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_INTEGER; }
+    break;
+
+  case 190:
+#line 1721 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_ENUMERATED; }
+    break;
+
+  case 191:
+#line 1722 "asn1p_y.y"
+    { (yyval.a_type) = ASN_BASIC_BIT_STRING; }
+    break;
+
+  case 192:
+#line 1726 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = (yyvsp[(1) - (1)].a_type);
+               (yyval.a_expr)->meta_type = AMT_TYPE;
+       }
+    break;
+
+  case 193:
+#line 1732 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+        (yyval.a_expr)->expr_type = ASN_BASIC_INTEGER;
+        (yyval.a_expr)->meta_type = AMT_TYPE;
+    }
+    break;
+
+  case 194:
+#line 1737 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+        (yyval.a_expr)->expr_type = ASN_BASIC_ENUMERATED;
+        (yyval.a_expr)->meta_type = AMT_TYPE;
+    }
+    break;
+
+  case 195:
+#line 1742 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(4) - (5)].a_expr);
+        (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
+        (yyval.a_expr)->meta_type = AMT_TYPE;
+    }
+    break;
+
+  case 196:
+#line 1747 "asn1p_y.y"
+    {
+        (yyval.a_expr) = (yyvsp[(3) - (4)].a_expr);
+        (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
+        (yyval.a_expr)->meta_type = AMT_TYPE;
+    }
+    break;
+
+  case 197:
+#line 1752 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+        (yyval.a_expr)->expr_type = ASN_BASIC_BIT_STRING;
+        (yyval.a_expr)->meta_type = AMT_TYPE;
+    }
+    break;
+
+  case 198:
+#line 1761 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_BMPString; }
+    break;
+
+  case 199:
+#line 1762 "asn1p_y.y"
+    {
+               (yyval.a_type) = ASN_STRING_GeneralString;
+               fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
+       }
+    break;
+
+  case 200:
+#line 1766 "asn1p_y.y"
+    {
+               (yyval.a_type) = ASN_STRING_GraphicString;
+               fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
+       }
+    break;
+
+  case 201:
+#line 1770 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_IA5String; }
+    break;
+
+  case 202:
+#line 1771 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_ISO646String; }
+    break;
+
+  case 203:
+#line 1772 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_NumericString; }
+    break;
+
+  case 204:
+#line 1773 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_PrintableString; }
+    break;
+
+  case 205:
+#line 1774 "asn1p_y.y"
+    {
+               (yyval.a_type) = ASN_STRING_T61String;
+               fprintf(stderr, "WARNING: T61String is not fully supported\n");
+       }
+    break;
+
+  case 206:
+#line 1778 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_TeletexString; }
+    break;
+
+  case 207:
+#line 1779 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_UniversalString; }
+    break;
+
+  case 208:
+#line 1780 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_UTF8String; }
+    break;
+
+  case 209:
+#line 1781 "asn1p_y.y"
+    {
+               (yyval.a_type) = ASN_STRING_VideotexString;
+               fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
+       }
+    break;
+
+  case 210:
+#line 1785 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_VisibleString; }
+    break;
+
+  case 211:
+#line 1786 "asn1p_y.y"
+    { (yyval.a_type) = ASN_STRING_ObjectDescriptor; }
+    break;
+
+  case 216:
+#line 1798 "asn1p_y.y"
+    { (yyval.a_constr) = 0; }
+    break;
+
+  case 218:
+#line 1803 "asn1p_y.y"
+    { (yyval.a_constr) = 0; }
+    break;
+
+  case 220:
+#line 1808 "asn1p_y.y"
+    { (yyval.a_constr) = 0; }
+    break;
+
+  case 223:
+#line 1814 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(2) - (3)].a_constr), 0);
+    }
+    break;
+
+  case 225:
+#line 1821 "asn1p_y.y"
+    {
+        if((yyvsp[(2) - (2)].a_constr)->type == ACT_CA_SET && (yyvsp[(2) - (2)].a_constr)->el_count == 1) {
+            CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (2)].a_constr), (yyvsp[(2) - (2)].a_constr)->elements[0]);
+        } else {
+            CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_SET, (yyvsp[(1) - (2)].a_constr), (yyvsp[(2) - (2)].a_constr));
+        }
+       }
+    break;
+
+  case 229:
+#line 1835 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               (yyval.a_constr)->type = ACT_EL_EXT;
+       }
+    break;
+
+  case 231:
+#line 1840 "asn1p_y.y"
+    {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (3)].a_constr), ct);
+   }
+    break;
+
+  case 232:
+#line 1846 "asn1p_y.y"
+    {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (5)].a_constr), ct);
+       ct = (yyval.a_constr);
+       CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, ct, (yyvsp[(5) - (5)].a_constr));
+   }
+    break;
+
+  case 234:
+#line 1858 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_AEX, (yyvsp[(3) - (3)].a_constr), 0);
+       }
+    break;
+
+  case 236:
+#line 1865 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_UNI, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
+       }
+    break;
+
+  case 238:
+#line 1872 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_INT, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
+       }
+    break;
+
+  case 240:
+#line 1880 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_EXC, (yyvsp[(1) - (3)].a_constr), (yyvsp[(3) - (3)].a_constr));
+       }
+    break;
+
+  case 242:
+#line 1887 "asn1p_y.y"
+    {
+        int ret;
+        (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+        checkmem((yyval.a_constr));
+        (yyval.a_constr)->type = ACT_CA_SET;
+        ret = asn1p_constraint_insert((yyval.a_constr), (yyvsp[(2) - (3)].a_constr));
+        checkmem(ret == 0);
+    }
+    break;
+
+  case 243:
+#line 1898 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               (yyval.a_constr)->type = ACT_EL_VALUE;
+               (yyval.a_constr)->value = (yyvsp[(1) - (1)].a_value);
+       }
+    break;
+
+  case 244:
+#line 1904 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               (yyval.a_constr)->type = ACT_EL_TYPE;
+               (yyval.a_constr)->containedSubtype = (yyvsp[(1) - (1)].a_value);
+       }
+    break;
+
+  case 250:
+#line 1920 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_FROM, (yyvsp[(2) - (2)].a_constr), 0);
+       }
+    break;
+
+  case 251:
+#line 1925 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_SIZE, (yyvsp[(2) - (2)].a_constr), 0);
+       }
+    break;
+
+  case 252:
+#line 1930 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               (yyval.a_constr)->type = ACT_CT_PATTERN;
+               (yyval.a_constr)->value = asn1p_value_frombuf((yyvsp[(2) - (2)].tv_opaque).buf, (yyvsp[(2) - (2)].tv_opaque).len, 0);
+       }
+    break;
+
+  case 253:
+#line 1935 "asn1p_y.y"
+    {
+               asn1p_ref_t *ref;
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               (yyval.a_constr)->type = ACT_CT_PATTERN;
+               ref = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component(ref, (yyvsp[(2) - (2)].tv_str), RLT_lowercase);
+               (yyval.a_constr)->value = asn1p_value_fromref(ref, 0);
+               free((yyvsp[(2) - (2)].tv_str));
+       }
+    break;
+
+  case 254:
+#line 1947 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               (yyval.a_constr)->type = (yyvsp[(2) - (3)].a_ctype);
+               (yyval.a_constr)->range_start = (yyvsp[(1) - (3)].a_value);
+               (yyval.a_constr)->range_stop = (yyvsp[(3) - (3)].a_value);
+    }
+    break;
+
+  case 256:
+#line 1957 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint(-123);
+               (yyval.a_value)->type = ATV_MIN;
+    }
+    break;
+
+  case 258:
+#line 1964 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint(321);
+               (yyval.a_value)->type = ATV_MAX;
+    }
+    break;
+
+  case 260:
+#line 1972 "asn1p_y.y"
+    {
+               (yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'B');
+               checkmem((yyval.a_value));
+               free((yyvsp[(1) - (1)].tv_str));
+       }
+    break;
+
+  case 261:
+#line 1977 "asn1p_y.y"
+    {
+               (yyval.a_value) = _convert_bitstring2binary((yyvsp[(1) - (1)].tv_str), 'H');
+               checkmem((yyval.a_value));
+               free((yyvsp[(1) - (1)].tv_str));
+       }
+    break;
+
+  case 262:
+#line 1985 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
+               checkmem((yyval.a_value));
+               asn1p_expr_free((yyvsp[(2) - (2)].a_expr));
+    }
+    break;
+
+  case 263:
+#line 1991 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromtype((yyvsp[(1) - (1)].a_expr));
+               checkmem((yyval.a_value));
+               asn1p_expr_free((yyvsp[(1) - (1)].a_expr));
+    }
+    break;
+
+  case 264:
+#line 2003 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CT_WCOMP, (yyvsp[(3) - (3)].a_constr), 0);
+       }
+    break;
+
+  case 265:
+#line 2006 "asn1p_y.y"
+    {
+        assert((yyvsp[(3) - (3)].a_constr)->type == ACT_CA_CSV);
+        (yyvsp[(3) - (3)].a_constr)->type = ACT_CT_WCOMPS;
+        (yyval.a_constr) = (yyvsp[(3) - (3)].a_constr);
+       }
+    break;
+
+  case 269:
+#line 2014 "asn1p_y.y"
+    { (yyval.a_constr) = (yyvsp[(2) - (3)].a_constr); }
+    break;
+
+  case 270:
+#line 2016 "asn1p_y.y"
+    {
+        assert((yyvsp[(4) - (5)].a_constr)->type == ACT_CA_CSV);
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+        (yyval.a_constr)->type = ACT_CA_CSV;
+               asn1p_constraint_t *ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               ct->type = ACT_EL_EXT;
+        asn1p_constraint_insert((yyval.a_constr), ct);
+        for(unsigned i = 0; i < (yyvsp[(4) - (5)].a_constr)->el_count; i++) {
+            asn1p_constraint_insert((yyval.a_constr), (yyvsp[(4) - (5)].a_constr)->elements[i]);
+        }
+    }
+    break;
+
+  case 271:
+#line 2029 "asn1p_y.y"
+    {
+        (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+        (yyval.a_constr)->type = ACT_CA_CSV;
+        asn1p_constraint_insert((yyval.a_constr), (yyvsp[(1) - (1)].a_constr));
+    }
+    break;
+
+  case 272:
+#line 2034 "asn1p_y.y"
+    {
+        (yyval.a_constr) = (yyvsp[(1) - (3)].a_constr);
+        asn1p_constraint_insert((yyval.a_constr), (yyvsp[(3) - (3)].a_constr));
+       }
+    break;
+
+  case 273:
+#line 2040 "asn1p_y.y"
+    {
+        (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+        checkmem((yyval.a_constr));
+        (yyval.a_constr)->type = ACT_EL_VALUE;
+        (yyval.a_constr)->value = (yyvsp[(1) - (3)].a_value);
+        if((yyvsp[(2) - (3)].a_constr)) asn1p_constraint_insert((yyval.a_constr), (yyvsp[(2) - (3)].a_constr));
+        (yyval.a_constr)->presence = (yyvsp[(3) - (3)].a_pres);
+    }
+    break;
+
+  case 274:
+#line 2054 "asn1p_y.y"
+    { (yyval.a_pres) = ACPRES_DEFAULT; }
+    break;
+
+  case 275:
+#line 2055 "asn1p_y.y"
+    { (yyval.a_pres) = (yyvsp[(1) - (1)].a_pres); }
+    break;
+
+  case 276:
+#line 2059 "asn1p_y.y"
+    {
+               (yyval.a_pres) = ACPRES_PRESENT;
+       }
+    break;
+
+  case 277:
+#line 2062 "asn1p_y.y"
+    {
+               (yyval.a_pres) = ACPRES_ABSENT;
+       }
+    break;
+
+  case 278:
+#line 2065 "asn1p_y.y"
+    {
+               (yyval.a_pres) = ACPRES_OPTIONAL;
+       }
+    break;
+
+  case 282:
+#line 2080 "asn1p_y.y"
+    { asn1p_lexer_hack_push_opaque_state(); }
+    break;
+
+  case 283:
+#line 2080 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               (yyval.a_constr)->type = ACT_CT_CTDBY;
+               (yyval.a_constr)->value = asn1p_value_frombuf((yyvsp[(5) - (5)].tv_opaque).buf, (yyvsp[(5) - (5)].tv_opaque).len, 0);
+               checkmem((yyval.a_constr)->value);
+               (yyval.a_constr)->value->type = ATV_UNPARSED;
+       }
+    break;
+
+  case 284:
+#line 2091 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               (yyval.a_constr)->type = ACT_CT_CTNG;
+               (yyval.a_constr)->value = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
+               asn1p_expr_free((yyvsp[(2) - (2)].a_expr));
+       }
+    break;
+
+  case 285:
+#line 2100 "asn1p_y.y"
+    { (yyval.a_ctype) = ACT_EL_RANGE; }
+    break;
+
+  case 286:
+#line 2101 "asn1p_y.y"
+    { (yyval.a_ctype) = ACT_EL_RLRANGE; }
+    break;
+
+  case 287:
+#line 2102 "asn1p_y.y"
+    { (yyval.a_ctype) = ACT_EL_LLRANGE; }
+    break;
+
+  case 288:
+#line 2103 "asn1p_y.y"
+    { (yyval.a_ctype) = ACT_EL_ULRANGE; }
+    break;
+
+  case 289:
+#line 2106 "asn1p_y.y"
+    {
+               (yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
+       }
+    break;
+
+  case 290:
+#line 2109 "asn1p_y.y"
+    {
+               (yyval.a_constr) = (yyvsp[(1) - (1)].a_constr);
+       }
+    break;
+
+  case 291:
+#line 2118 "asn1p_y.y"
+    {
+               asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
+               asn1p_constraint_t *ct;
+               int ret;
+               ret = asn1p_ref_add_component(ref, (yyvsp[(2) - (3)].tv_str), 0);
+               checkmem(ret == 0);
+               ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               ct->type = ACT_EL_VALUE;
+               ct->value = asn1p_value_fromref(ref, 0);
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CRC, ct, 0);
+               free((yyvsp[(2) - (3)].tv_str));
+       }
+    break;
+
+  case 292:
+#line 2134 "asn1p_y.y"
+    {
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CRC, (yyvsp[(1) - (4)].a_constr), (yyvsp[(3) - (4)].a_constr));
+       }
+    break;
+
+  case 293:
+#line 2140 "asn1p_y.y"
+    {
+               (yyval.a_constr) = asn1p_constraint_new(yylineno, currentModule);
+               checkmem((yyval.a_constr));
+               (yyval.a_constr)->type = ACT_EL_VALUE;
+               (yyval.a_constr)->value = asn1p_value_fromref((yyvsp[(1) - (1)].a_ref), 0);
+       }
+    break;
+
+  case 294:
+#line 2146 "asn1p_y.y"
+    {
+               asn1p_constraint_t *ct;
+               ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem(ct);
+               ct->type = ACT_EL_VALUE;
+               ct->value = asn1p_value_fromref((yyvsp[(3) - (3)].a_ref), 0);
+               CONSTRAINT_INSERT((yyval.a_constr), ACT_CA_CSV, (yyvsp[(1) - (3)].a_constr), ct);
+       }
+    break;
+
+  case 295:
+#line 2160 "asn1p_y.y"
+    {
+               char *p = malloc(strlen((yyvsp[(2) - (2)].tv_str)) + 2);
+               int ret;
+               *p = '@';
+               strcpy(p + 1, (yyvsp[(2) - (2)].tv_str));
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_ref), p, 0);
+               checkmem(ret == 0);
+               free(p);
+               free((yyvsp[(2) - (2)].tv_str));
+       }
+    break;
+
+  case 296:
+#line 2171 "asn1p_y.y"
+    {
+               char *p = malloc(strlen((yyvsp[(3) - (3)].tv_str)) + 3);
+               int ret;
+               p[0] = '@';
+               p[1] = '.';
+               strcpy(p + 2, (yyvsp[(3) - (3)].tv_str));
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component((yyval.a_ref), p, 0);
+               checkmem(ret == 0);
+               free(p);
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 297:
+#line 2187 "asn1p_y.y"
+    {
+               (yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 298:
+#line 2190 "asn1p_y.y"
+    {
+               int l1 = strlen((yyvsp[(1) - (3)].tv_str));
+               int l3 = strlen((yyvsp[(3) - (3)].tv_str));
+               (yyval.tv_str) = malloc(l1 + 1 + l3 + 1);
+               memcpy((yyval.tv_str), (yyvsp[(1) - (3)].tv_str), l1);
+               (yyval.tv_str)[l1] = '.';
+               memcpy((yyval.tv_str) + l1 + 1, (yyvsp[(3) - (3)].tv_str), l3);
+               (yyval.tv_str)[l1 + 1 + l3] = '\0';
+               free((yyvsp[(1) - (3)].tv_str));
+               free((yyvsp[(3) - (3)].tv_str));
+       }
+    break;
+
+  case 299:
+#line 2210 "asn1p_y.y"
+    {
+               (yyval.a_marker).flags = EM_NOMARK;
+               (yyval.a_marker).default_value = 0;
+       }
+    break;
+
+  case 300:
+#line 2214 "asn1p_y.y"
+    { (yyval.a_marker) = (yyvsp[(1) - (1)].a_marker); }
+    break;
+
+  case 301:
+#line 2218 "asn1p_y.y"
+    {
+               (yyval.a_marker).flags = EM_OPTIONAL | EM_INDIRECT;
+               (yyval.a_marker).default_value = 0;
+       }
+    break;
+
+  case 302:
+#line 2222 "asn1p_y.y"
+    {
+               (yyval.a_marker).flags = EM_DEFAULT;
+               (yyval.a_marker).default_value = (yyvsp[(2) - (2)].a_value);
+       }
+    break;
+
+  case 303:
+#line 2229 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+    }
+    break;
+
+  case 304:
+#line 2234 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+    }
+    break;
+
+  case 305:
+#line 2240 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+    }
+    break;
+
+  case 306:
+#line 2249 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 307:
+#line 2254 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 308:
+#line 2261 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+       }
+    break;
+
+  case 309:
+#line 2269 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+       }
+    break;
+
+  case 310:
+#line 2279 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 311:
+#line 2284 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 312:
+#line 2291 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = asn1p_value_fromint((yyvsp[(3) - (4)].a_int));
+       }
+    break;
+
+  case 313:
+#line 2299 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+       }
+    break;
+
+  case 314:
+#line 2309 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (1)].a_expr);
+        asn1p_expr_t *first_memb = TQ_FIRST(&((yyval.a_expr)->members));
+        if(first_memb) {
+            if(first_memb->expr_type == A1TC_EXTENSIBLE) {
+                return yyerror(
+                    "The ENUMERATION cannot start with extension (...).");
+            }
+        } else {
+            return yyerror(
+                "The ENUMERATION list cannot be empty.");
+        }
+    }
+    break;
+
+  case 315:
+#line 2324 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(1) - (1)].a_expr));
+       }
+    break;
+
+  case 316:
+#line 2329 "asn1p_y.y"
+    {
+               (yyval.a_expr) = (yyvsp[(1) - (3)].a_expr);
+               asn1p_expr_add((yyval.a_expr), (yyvsp[(3) - (3)].a_expr));
+       }
+    break;
+
+  case 317:
+#line 2336 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 318:
+#line 2343 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+       }
+    break;
+
+  case 319:
+#line 2351 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->Identifier = (yyvsp[(1) - (4)].tv_str);
+               (yyval.a_expr)->value = (yyvsp[(3) - (4)].a_value);
+       }
+    break;
+
+  case 320:
+#line 2359 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->expr_type = A1TC_UNIVERVAL;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+               (yyval.a_expr)->value = (yyvsp[(1) - (1)].a_value);
+       }
+    break;
+
+  case 321:
+#line 2366 "asn1p_y.y"
+    {
+               (yyval.a_expr) = NEW_EXPR();
+               checkmem((yyval.a_expr));
+               (yyval.a_expr)->Identifier = strdup("...");
+               checkmem((yyval.a_expr)->Identifier);
+               (yyval.a_expr)->expr_type = A1TC_EXTENSIBLE;
+               (yyval.a_expr)->meta_type = AMT_VALUE;
+       }
+    break;
+
+  case 322:
+#line 2377 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
+               checkmem((yyval.a_value));
+       }
+    break;
+
+  case 323:
+#line 2381 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromint((yyvsp[(1) - (1)].a_int));
+               checkmem((yyval.a_value));
+       }
+    break;
+
+  case 324:
+#line 2388 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromdouble((yyvsp[(1) - (1)].a_dbl));
+               checkmem((yyval.a_value));
+       }
+    break;
+
+  case 325:
+#line 2419 "asn1p_y.y"
+    { memset(&(yyval.a_tag), 0, sizeof((yyval.a_tag))); }
+    break;
+
+  case 326:
+#line 2420 "asn1p_y.y"
+    { (yyval.a_tag) = (yyvsp[(1) - (1)].a_tag); }
+    break;
+
+  case 327:
+#line 2424 "asn1p_y.y"
+    {
+               (yyval.a_tag) = (yyvsp[(1) - (2)].a_tag);
+               (yyval.a_tag).tag_mode = (yyvsp[(2) - (2)].a_tag).tag_mode;
+       }
+    break;
+
+  case 328:
+#line 2431 "asn1p_y.y"
+    {
+               (yyval.a_tag) = (yyvsp[(2) - (4)].a_tag);
+               (yyval.a_tag).tag_value = (yyvsp[(3) - (4)].a_int);
+       }
+    break;
+
+  case 329:
+#line 2437 "asn1p_y.y"
+    { (yyval.a_tag).tag_class = TC_CONTEXT_SPECIFIC; }
+    break;
+
+  case 330:
+#line 2438 "asn1p_y.y"
+    { (yyval.a_tag).tag_class = TC_UNIVERSAL; }
+    break;
+
+  case 331:
+#line 2439 "asn1p_y.y"
+    { (yyval.a_tag).tag_class = TC_APPLICATION; }
+    break;
+
+  case 332:
+#line 2440 "asn1p_y.y"
+    { (yyval.a_tag).tag_class = TC_PRIVATE; }
+    break;
+
+  case 333:
+#line 2444 "asn1p_y.y"
+    { (yyval.a_tag).tag_mode = TM_DEFAULT; }
+    break;
+
+  case 334:
+#line 2445 "asn1p_y.y"
+    { (yyval.a_tag).tag_mode = TM_IMPLICIT; }
+    break;
+
+  case 335:
+#line 2446 "asn1p_y.y"
+    { (yyval.a_tag).tag_mode = TM_EXPLICIT; }
+    break;
+
+  case 336:
+#line 2450 "asn1p_y.y"
+    {
+               checkmem((yyvsp[(1) - (1)].tv_str));
+               (yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 337:
+#line 2454 "asn1p_y.y"
+    {
+               checkmem((yyvsp[(1) - (1)].tv_str));
+               (yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 338:
+#line 2462 "asn1p_y.y"
+    { (yyval.tv_str) = 0; }
+    break;
+
+  case 339:
+#line 2463 "asn1p_y.y"
+    {
+               (yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 340:
+#line 2469 "asn1p_y.y"
+    {
+               checkmem((yyvsp[(1) - (1)].tv_str));
+               (yyval.tv_str) = (yyvsp[(1) - (1)].tv_str);
+       }
+    break;
+
+  case 341:
+#line 2476 "asn1p_y.y"
+    {
+               (yyval.a_ref) = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component((yyval.a_ref), (yyvsp[(1) - (1)].tv_str), RLT_lowercase);
+               free((yyvsp[(1) - (1)].tv_str));
+    }
+    break;
+
+  case 342:
+#line 2483 "asn1p_y.y"
+    {
+               (yyval.a_value) = asn1p_value_fromref((yyvsp[(1) - (1)].a_ref), 0);
+    }
+    break;
+
+
+/* Line 1267 of yacc.c.  */
+#line 4957 "asn1p_y.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse look-ahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse look-ahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEOF && yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+#line 2487 "asn1p_y.y"
+
+
+
+/*
+ * Convert Xstring ('0101'B or '5'H) to the binary vector.
+ */
+static asn1p_value_t *
+_convert_bitstring2binary(char *str, int base) {
+       asn1p_value_t *val;
+       int slen;
+       int memlen;
+       int baselen;
+       int bits;
+       uint8_t *binary_vector;
+       uint8_t *bv_ptr;
+       uint8_t cur_val;
+
+       assert(str);
+       assert(str[0] == '\'');
+
+       switch(base) {
+       case 'B':
+               baselen = 1;
+               break;
+       case 'H':
+               baselen = 4;
+               break;
+       default:
+               assert(base == 'B' || base == 'H');
+               errno = EINVAL;
+               return NULL;
+       }
+
+       slen = strlen(str);
+       assert(str[slen - 1] == base);
+       assert(str[slen - 2] == '\'');
+
+       memlen = slen / (8 / baselen);  /* Conservative estimate */
+
+       bv_ptr = binary_vector = malloc(memlen + 1);
+       if(bv_ptr == NULL)
+               /* ENOMEM */
+               return NULL;
+
+       cur_val = 0;
+       bits = 0;
+       while(*(++str) != '\'') {
+               switch(baselen) {
+               case 1:
+                       switch(*str) {
+                       case '1':
+                               cur_val |= 1 << (7 - (bits % 8));
+                       case '0':
+                               break;
+                       default:
+                               assert(!"_y UNREACH1");
+                       case ' ': case '\r': case '\n':
+                               continue;
+                       }
+                       break;
+               case 4:
+                       switch(*str) {
+                       case '0': case '1': case '2': case '3': case '4':
+                       case '5': case '6': case '7': case '8': case '9':
+                               cur_val |= (*str - '0') << (4 - (bits % 8));
+                               break;
+                       case 'A': case 'B': case 'C':
+                       case 'D': case 'E': case 'F':
+                               cur_val |= ((*str - 'A') + 10)
+                                       << (4 - (bits % 8));
+                               break;
+                       default:
+                               assert(!"_y UNREACH2");
+                       case ' ': case '\r': case '\n':
+                               continue;
+                       }
+                       break;
+               }
+
+               bits += baselen;
+               if((bits % 8) == 0) {
+                       *bv_ptr++ = cur_val;
+                       cur_val = 0;
+               }
+       }
+
+       *bv_ptr = cur_val;
+       assert((bv_ptr - binary_vector) <= memlen);
+
+       val = asn1p_value_frombits(binary_vector, bits, 0);
+       if(val == NULL) {
+               free(binary_vector);
+       }
+
+       return val;
+}
+
+/*
+ * For unnamed types (used in old X.208 compliant modules)
+ * generate some sort of interim names, to not to force human being to fix
+ * the specification's compliance to modern ASN.1 standards.
+ */
+static void
+_fixup_anonymous_identifier(asn1p_expr_t *expr) {
+       char *p;
+       assert(expr->Identifier == 0);
+
+       /*
+        * Try to figure out the type name
+        * without going too much into details
+        */
+       expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
+       if(expr->reference && expr->reference->comp_count > 0)
+               expr->Identifier = expr->reference->components[0].name;
+
+       fprintf(stderr,
+               "WARNING: Line %d: expected lower-case member identifier, "
+               "found an unnamed %s.\n"
+               "WARNING: Obsolete X.208 syntax detected, "
+               "please give the member a name.\n",
+               yylineno, expr->Identifier ? expr->Identifier : "type");
+
+       if(!expr->Identifier)
+               expr->Identifier = "unnamed";
+       expr->Identifier = strdup(expr->Identifier);
+       assert(expr->Identifier);
+       /* Make a lowercase identifier from the type name */
+       for(p = expr->Identifier; *p; p++) {
+               switch(*p) {
+               case 'A' ... 'Z': *p += 32; break;
+               case ' ': *p = '_'; break;
+               case '-': *p = '_'; break;
+               }
+       }
+       fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
+                       "Name clash may occur later.\n",
+               expr->Identifier);
+}
+
+static int
+yyerror(const char *msg) {
+       extern char *asn1p_text;
+       fprintf(stderr,
+               "ASN.1 grammar parse error "
+               "near %s:%d (token \"%s\"): %s\n",
+               ASN_FILENAME, yylineno, asn1p_text, msg);
+       return -1;
+}
+
+
diff --git a/libasn1parser/asn1p_y.h b/libasn1parser/asn1p_y.h
new file mode 100644 (file)
index 0000000..8581bc8
--- /dev/null
@@ -0,0 +1,309 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   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, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     TOK_PPEQ = 258,
+     TOK_VBracketLeft = 259,
+     TOK_VBracketRight = 260,
+     TOK_whitespace = 261,
+     TOK_opaque = 262,
+     TOK_bstring = 263,
+     TOK_cstring = 264,
+     TOK_hstring = 265,
+     TOK_identifier = 266,
+     TOK_number = 267,
+     TOK_number_negative = 268,
+     TOK_realnumber = 269,
+     TOK_tuple = 270,
+     TOK_quadruple = 271,
+     TOK_typereference = 272,
+     TOK_capitalreference = 273,
+     TOK_typefieldreference = 274,
+     TOK_valuefieldreference = 275,
+     TOK_Literal = 276,
+     TOK_ExtValue_BIT_STRING = 277,
+     TOK_ABSENT = 278,
+     TOK_ABSTRACT_SYNTAX = 279,
+     TOK_ALL = 280,
+     TOK_ANY = 281,
+     TOK_APPLICATION = 282,
+     TOK_AUTOMATIC = 283,
+     TOK_BEGIN = 284,
+     TOK_BIT = 285,
+     TOK_BMPString = 286,
+     TOK_BOOLEAN = 287,
+     TOK_BY = 288,
+     TOK_CHARACTER = 289,
+     TOK_CHOICE = 290,
+     TOK_CLASS = 291,
+     TOK_COMPONENT = 292,
+     TOK_COMPONENTS = 293,
+     TOK_CONSTRAINED = 294,
+     TOK_CONTAINING = 295,
+     TOK_DEFAULT = 296,
+     TOK_DEFINITIONS = 297,
+     TOK_DEFINED = 298,
+     TOK_EMBEDDED = 299,
+     TOK_ENCODED = 300,
+     TOK_ENCODING_CONTROL = 301,
+     TOK_END = 302,
+     TOK_ENUMERATED = 303,
+     TOK_EXPLICIT = 304,
+     TOK_EXPORTS = 305,
+     TOK_EXTENSIBILITY = 306,
+     TOK_EXTERNAL = 307,
+     TOK_FALSE = 308,
+     TOK_FROM = 309,
+     TOK_GeneralizedTime = 310,
+     TOK_GeneralString = 311,
+     TOK_GraphicString = 312,
+     TOK_IA5String = 313,
+     TOK_IDENTIFIER = 314,
+     TOK_IMPLICIT = 315,
+     TOK_IMPLIED = 316,
+     TOK_IMPORTS = 317,
+     TOK_INCLUDES = 318,
+     TOK_INSTANCE = 319,
+     TOK_INSTRUCTIONS = 320,
+     TOK_INTEGER = 321,
+     TOK_ISO646String = 322,
+     TOK_MAX = 323,
+     TOK_MIN = 324,
+     TOK_MINUS_INFINITY = 325,
+     TOK_NULL = 326,
+     TOK_NumericString = 327,
+     TOK_OBJECT = 328,
+     TOK_ObjectDescriptor = 329,
+     TOK_OCTET = 330,
+     TOK_OF = 331,
+     TOK_OPTIONAL = 332,
+     TOK_PATTERN = 333,
+     TOK_PDV = 334,
+     TOK_PLUS_INFINITY = 335,
+     TOK_PRESENT = 336,
+     TOK_PrintableString = 337,
+     TOK_PRIVATE = 338,
+     TOK_REAL = 339,
+     TOK_RELATIVE_OID = 340,
+     TOK_SEQUENCE = 341,
+     TOK_SET = 342,
+     TOK_SIZE = 343,
+     TOK_STRING = 344,
+     TOK_SYNTAX = 345,
+     TOK_T61String = 346,
+     TOK_TAGS = 347,
+     TOK_TeletexString = 348,
+     TOK_TRUE = 349,
+     TOK_TYPE_IDENTIFIER = 350,
+     TOK_UNIQUE = 351,
+     TOK_UNIVERSAL = 352,
+     TOK_UniversalString = 353,
+     TOK_UTCTime = 354,
+     TOK_UTF8String = 355,
+     TOK_VideotexString = 356,
+     TOK_VisibleString = 357,
+     TOK_WITH = 358,
+     UTF8_BOM = 359,
+     TOK_EXCEPT = 360,
+     TOK_INTERSECTION = 361,
+     TOK_UNION = 362,
+     TOK_TwoDots = 363,
+     TOK_ThreeDots = 364
+   };
+#endif
+/* Tokens.  */
+#define TOK_PPEQ 258
+#define TOK_VBracketLeft 259
+#define TOK_VBracketRight 260
+#define TOK_whitespace 261
+#define TOK_opaque 262
+#define TOK_bstring 263
+#define TOK_cstring 264
+#define TOK_hstring 265
+#define TOK_identifier 266
+#define TOK_number 267
+#define TOK_number_negative 268
+#define TOK_realnumber 269
+#define TOK_tuple 270
+#define TOK_quadruple 271
+#define TOK_typereference 272
+#define TOK_capitalreference 273
+#define TOK_typefieldreference 274
+#define TOK_valuefieldreference 275
+#define TOK_Literal 276
+#define TOK_ExtValue_BIT_STRING 277
+#define TOK_ABSENT 278
+#define TOK_ABSTRACT_SYNTAX 279
+#define TOK_ALL 280
+#define TOK_ANY 281
+#define TOK_APPLICATION 282
+#define TOK_AUTOMATIC 283
+#define TOK_BEGIN 284
+#define TOK_BIT 285
+#define TOK_BMPString 286
+#define TOK_BOOLEAN 287
+#define TOK_BY 288
+#define TOK_CHARACTER 289
+#define TOK_CHOICE 290
+#define TOK_CLASS 291
+#define TOK_COMPONENT 292
+#define TOK_COMPONENTS 293
+#define TOK_CONSTRAINED 294
+#define TOK_CONTAINING 295
+#define TOK_DEFAULT 296
+#define TOK_DEFINITIONS 297
+#define TOK_DEFINED 298
+#define TOK_EMBEDDED 299
+#define TOK_ENCODED 300
+#define TOK_ENCODING_CONTROL 301
+#define TOK_END 302
+#define TOK_ENUMERATED 303
+#define TOK_EXPLICIT 304
+#define TOK_EXPORTS 305
+#define TOK_EXTENSIBILITY 306
+#define TOK_EXTERNAL 307
+#define TOK_FALSE 308
+#define TOK_FROM 309
+#define TOK_GeneralizedTime 310
+#define TOK_GeneralString 311
+#define TOK_GraphicString 312
+#define TOK_IA5String 313
+#define TOK_IDENTIFIER 314
+#define TOK_IMPLICIT 315
+#define TOK_IMPLIED 316
+#define TOK_IMPORTS 317
+#define TOK_INCLUDES 318
+#define TOK_INSTANCE 319
+#define TOK_INSTRUCTIONS 320
+#define TOK_INTEGER 321
+#define TOK_ISO646String 322
+#define TOK_MAX 323
+#define TOK_MIN 324
+#define TOK_MINUS_INFINITY 325
+#define TOK_NULL 326
+#define TOK_NumericString 327
+#define TOK_OBJECT 328
+#define TOK_ObjectDescriptor 329
+#define TOK_OCTET 330
+#define TOK_OF 331
+#define TOK_OPTIONAL 332
+#define TOK_PATTERN 333
+#define TOK_PDV 334
+#define TOK_PLUS_INFINITY 335
+#define TOK_PRESENT 336
+#define TOK_PrintableString 337
+#define TOK_PRIVATE 338
+#define TOK_REAL 339
+#define TOK_RELATIVE_OID 340
+#define TOK_SEQUENCE 341
+#define TOK_SET 342
+#define TOK_SIZE 343
+#define TOK_STRING 344
+#define TOK_SYNTAX 345
+#define TOK_T61String 346
+#define TOK_TAGS 347
+#define TOK_TeletexString 348
+#define TOK_TRUE 349
+#define TOK_TYPE_IDENTIFIER 350
+#define TOK_UNIQUE 351
+#define TOK_UNIVERSAL 352
+#define TOK_UniversalString 353
+#define TOK_UTCTime 354
+#define TOK_UTF8String 355
+#define TOK_VideotexString 356
+#define TOK_VisibleString 357
+#define TOK_WITH 358
+#define UTF8_BOM 359
+#define TOK_EXCEPT 360
+#define TOK_INTERSECTION 361
+#define TOK_UNION 362
+#define TOK_TwoDots 363
+#define TOK_ThreeDots 364
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 115 "asn1p_y.y"
+{
+       asn1p_t                 *a_grammar;
+       asn1p_module_flags_e     a_module_flags;
+       asn1p_module_t          *a_module;
+       asn1p_expr_type_e        a_type;        /* ASN.1 Type */
+       asn1p_expr_t            *a_expr;        /* Constructed collection */
+       asn1p_constraint_t      *a_constr;      /* Constraint */
+       enum asn1p_constraint_type_e    a_ctype;/* Constraint type */
+       asn1p_xports_t          *a_xports;      /* IMports/EXports */
+       struct AssignedIdentifier a_aid;        /* Assigned Identifier */
+       asn1p_oid_t             *a_oid;         /* Object Identifier */
+       asn1p_oid_arc_t          a_oid_arc;     /* Single OID's arc */
+       struct asn1p_type_tag_s  a_tag;         /* A tag */
+       asn1p_ref_t             *a_ref;         /* Reference to custom type */
+       asn1p_wsyntx_t          *a_wsynt;       /* WITH SYNTAX contents */
+       asn1p_wsyntx_chunk_t    *a_wchunk;      /* WITH SYNTAX chunk */
+       struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
+       asn1p_value_t           *a_value;       /* Number, DefinedValue, etc */
+       struct asn1p_param_s     a_parg;        /* A parameter argument */
+       asn1p_paramlist_t       *a_plist;       /* A pargs list */
+       struct asn1p_expr_marker_s a_marker;    /* OPTIONAL/DEFAULT */
+       enum asn1p_constr_pres_e a_pres;        /* PRESENT/ABSENT/OPTIONAL */
+       asn1c_integer_t          a_int;
+       double                   a_dbl;
+       char    *tv_str;
+       struct {
+               char *buf;
+               int len;
+       }       tv_opaque;
+       struct {
+               char *name;
+               struct asn1p_type_tag_s tag;
+       } tv_nametag;
+}
+/* Line 1529 of yacc.c.  */
+#line 302 "asn1p_y.h"
+       YYSTYPE;
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+# define YYSTYPE_IS_TRIVIAL 1
+#endif
+
+extern YYSTYPE asn1p_lval;
+
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
new file mode 100644 (file)
index 0000000..16c55de
--- /dev/null
@@ -0,0 +1,2637 @@
+%{
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "asn1parser.h"
+
+#define YYPARSE_PARAM  param
+#define YYPARSE_PARAM_TYPE     void **
+#define YYERROR_VERBOSE
+#define YYDEBUG 1
+#define YYFPRINTF   prefixed_fprintf
+
+/*
+ * Prefix parser debug with "PARSER: " for easier human eye scanning.
+ */
+static int
+__attribute__((format(printf, 2, 3)))
+prefixed_fprintf(FILE *f, const char *fmt, ...) {
+    static int line_ended = 1;
+    va_list ap;
+    va_start(ap, fmt);
+    if(line_ended) {
+        fprintf(f, "PARSER: ");
+        line_ended = 0;
+    }
+    size_t len = strlen(fmt);
+    if(len && fmt[len-1] == '\n') {
+        line_ended = 1;
+    }
+    int ret = vfprintf(f, fmt, ap);
+    va_end(ap);
+    return ret;
+}
+
+int yylex(void);
+static int yyerror(const char *msg);
+
+#ifdef YYBYACC
+int yyparse(void **param);     /* byacc does not produce a prototype */
+#endif
+void asn1p_lexer_hack_push_opaque_state(void);
+void asn1p_lexer_hack_enable_with_syntax(void);
+void asn1p_lexer_hack_push_encoding_control(void);
+#define        yylineno        asn1p_lineno
+extern int asn1p_lineno;
+const char *asn1p_parse_debug_filename;
+#define ASN_FILENAME asn1p_parse_debug_filename
+
+/*
+ * Process directives as <ASN1C:RepresentAsPointer>
+ */
+extern int asn1p_as_pointer;
+
+/*
+ * This temporary variable is used to solve the shortcomings of 1-lookahead
+ * parser.
+ */
+static struct AssignedIdentifier *saved_aid;
+
+static asn1p_value_t *_convert_bitstring2binary(char *str, int base);
+static void _fixup_anonymous_identifier(asn1p_expr_t *expr);
+
+static asn1p_module_t *currentModule;
+#define        NEW_EXPR()      (asn1p_expr_new(yylineno, currentModule))
+
+#define        checkmem(ptr)   do {                                            \
+               if(!(ptr))                                              \
+               return yyerror("Memory failure");                       \
+       } while(0)
+
+#define        CONSTRAINT_INSERT(root, constr_type, arg1, arg2) do {           \
+               if(arg1->type != constr_type) {                         \
+                       int __ret;                                      \
+                       root = asn1p_constraint_new(yylineno, currentModule);   \
+                       checkmem(root);                                 \
+                       root->type = constr_type;                       \
+                       __ret = asn1p_constraint_insert(root,           \
+                               arg1);                                  \
+                       checkmem(__ret == 0);                           \
+               } else {                                                \
+                       root = arg1;                                    \
+               }                                                       \
+               if(arg2) {                                              \
+                       int __ret                                       \
+                       = asn1p_constraint_insert(root, arg2);          \
+                       checkmem(__ret == 0);                           \
+               }                                                       \
+       } while(0)
+
+#ifdef AL_IMPORT
+#error AL_IMPORT DEFINED ELSEWHERE!
+#endif
+#define AL_IMPORT(to, where, from, field)                                      \
+    do {                                                                       \
+        if(!(from)) break;                                                     \
+        while(TQ_FIRST(&((from)->where))) {                                    \
+            TQ_ADD(&((to)->where), TQ_REMOVE(&((from)->where), field), field); \
+        }                                                                      \
+        assert(TQ_FIRST(&((from)->where)) == 0);                               \
+    } while(0)
+
+%}
+
+
+/*
+ * Token value definition.
+ * a_*:   ASN-specific types.
+ * tv_*:  Locally meaningful types.
+ */
+%union {
+       asn1p_t                 *a_grammar;
+       asn1p_module_flags_e     a_module_flags;
+       asn1p_module_t          *a_module;
+       asn1p_expr_type_e        a_type;        /* ASN.1 Type */
+       asn1p_expr_t            *a_expr;        /* Constructed collection */
+       asn1p_constraint_t      *a_constr;      /* Constraint */
+       enum asn1p_constraint_type_e    a_ctype;/* Constraint type */
+       asn1p_xports_t          *a_xports;      /* IMports/EXports */
+       struct AssignedIdentifier a_aid;        /* Assigned Identifier */
+       asn1p_oid_t             *a_oid;         /* Object Identifier */
+       asn1p_oid_arc_t          a_oid_arc;     /* Single OID's arc */
+       struct asn1p_type_tag_s  a_tag;         /* A tag */
+       asn1p_ref_t             *a_ref;         /* Reference to custom type */
+       asn1p_wsyntx_t          *a_wsynt;       /* WITH SYNTAX contents */
+       asn1p_wsyntx_chunk_t    *a_wchunk;      /* WITH SYNTAX chunk */
+       struct asn1p_ref_component_s a_refcomp; /* Component of a reference */
+       asn1p_value_t           *a_value;       /* Number, DefinedValue, etc */
+       struct asn1p_param_s     a_parg;        /* A parameter argument */
+       asn1p_paramlist_t       *a_plist;       /* A pargs list */
+       struct asn1p_expr_marker_s a_marker;    /* OPTIONAL/DEFAULT */
+       enum asn1p_constr_pres_e a_pres;        /* PRESENT/ABSENT/OPTIONAL */
+       asn1c_integer_t          a_int;
+       double                   a_dbl;
+       char    *tv_str;
+       struct {
+               char *buf;
+               int len;
+       }       tv_opaque;
+       struct {
+               char *name;
+               struct asn1p_type_tag_s tag;
+       } tv_nametag;
+};
+
+/*
+ * Token types returned by scanner.
+ */
+%token                 TOK_PPEQ        /* "::=", Pseudo Pascal EQuality */
+%token                 TOK_VBracketLeft TOK_VBracketRight      /* "[[", "]]" */
+%token <tv_opaque>     TOK_whitespace  /* A span of whitespace */
+%token <tv_opaque>     TOK_opaque      /* opaque data (driven from .y) */
+%token <tv_str>        TOK_bstring
+%token <tv_opaque>     TOK_cstring
+%token <tv_str>        TOK_hstring
+%token <tv_str>        TOK_identifier "identifier"
+%token <a_int>         TOK_number "number"
+%token <a_int>         TOK_number_negative "negative number"
+%token <a_dbl>         TOK_realnumber
+%token <a_int>         TOK_tuple
+%token <a_int>         TOK_quadruple
+%token <tv_str>        TOK_typereference
+%token <tv_str>        TOK_capitalreference            /* "CLASS1" */
+%token <tv_str>        TOK_typefieldreference          /* "&Pork" */
+%token <tv_str>        TOK_valuefieldreference         /* "&id" */
+%token <tv_str>        TOK_Literal                     /* "BY" */
+
+/*
+ * Tokens available with asn1p_lexer_hack_push_extended_values().
+ */
+%token              TOK_ExtValue_BIT_STRING
+
+/*
+ * Token types representing ASN.1 standard keywords.
+ */
+%token                 TOK_ABSENT
+%token                 TOK_ABSTRACT_SYNTAX
+%token                 TOK_ALL
+%token                 TOK_ANY
+%token                 TOK_APPLICATION
+%token                 TOK_AUTOMATIC
+%token                 TOK_BEGIN
+%token                 TOK_BIT
+%token                 TOK_BMPString
+%token                 TOK_BOOLEAN
+%token                 TOK_BY
+%token                 TOK_CHARACTER
+%token                 TOK_CHOICE
+%token                 TOK_CLASS
+%token                 TOK_COMPONENT
+%token                 TOK_COMPONENTS
+%token                 TOK_CONSTRAINED
+%token                 TOK_CONTAINING
+%token                 TOK_DEFAULT
+%token                 TOK_DEFINITIONS
+%token                 TOK_DEFINED
+%token                 TOK_EMBEDDED
+%token                 TOK_ENCODED
+%token                 TOK_ENCODING_CONTROL
+%token                 TOK_END
+%token                 TOK_ENUMERATED
+%token                 TOK_EXPLICIT
+%token                 TOK_EXPORTS
+%token                 TOK_EXTENSIBILITY
+%token                 TOK_EXTERNAL
+%token                 TOK_FALSE
+%token                 TOK_FROM
+%token                 TOK_GeneralizedTime
+%token                 TOK_GeneralString
+%token                 TOK_GraphicString
+%token                 TOK_IA5String
+%token                 TOK_IDENTIFIER
+%token                 TOK_IMPLICIT
+%token                 TOK_IMPLIED
+%token                 TOK_IMPORTS
+%token                 TOK_INCLUDES
+%token                 TOK_INSTANCE
+%token                 TOK_INSTRUCTIONS
+%token                 TOK_INTEGER
+%token                 TOK_ISO646String
+%token                 TOK_MAX
+%token                 TOK_MIN
+%token                 TOK_MINUS_INFINITY
+%token                 TOK_NULL
+%token                 TOK_NumericString
+%token                 TOK_OBJECT
+%token                 TOK_ObjectDescriptor
+%token                 TOK_OCTET
+%token                 TOK_OF
+%token                 TOK_OPTIONAL
+%token                 TOK_PATTERN
+%token                 TOK_PDV
+%token                 TOK_PLUS_INFINITY
+%token                 TOK_PRESENT
+%token                 TOK_PrintableString
+%token                 TOK_PRIVATE
+%token                 TOK_REAL
+%token                 TOK_RELATIVE_OID
+%token                 TOK_SEQUENCE
+%token                 TOK_SET
+%token                 TOK_SIZE
+%token                 TOK_STRING
+%token                 TOK_SYNTAX
+%token                 TOK_T61String
+%token                 TOK_TAGS
+%token                 TOK_TeletexString
+%token                 TOK_TRUE
+%token                 TOK_TYPE_IDENTIFIER
+%token                 TOK_UNIQUE
+%token                 TOK_UNIVERSAL
+%token                 TOK_UniversalString
+%token                 TOK_UTCTime
+%token                 TOK_UTF8String
+%token                 TOK_VideotexString
+%token                 TOK_VisibleString
+%token                 TOK_WITH
+%token                 UTF8_BOM    "UTF-8 byte order mark"
+
+%nonassoc              TOK_EXCEPT
+%left                  '^' TOK_INTERSECTION
+%left                  '|' TOK_UNION
+
+/* Misc tags */
+%token                 TOK_TwoDots             ".."
+%token                 TOK_ThreeDots   "..."
+
+
+/*
+ * Types defined herein.
+ */
+%type  <a_grammar>             ModuleList
+%type  <a_module>              ModuleDefinition
+%type  <a_module>              ModuleBody
+%type  <a_module>              AssignmentList
+%type  <a_module>              Assignment
+%type  <a_module>              optModuleBody   /* Optional */
+%type  <a_module_flags>        optModuleDefinitionFlags
+%type  <a_module_flags>        ModuleDefinitionFlags   /* Set of FL */
+%type  <a_module_flags>        ModuleDefinitionFlag            /* Single FL */
+%type  <a_module>              optImports
+%type  <a_module>              optExports
+%type  <a_module>              ImportsDefinition
+%type  <a_module>              optImportsBundleSet
+%type  <a_module>              ImportsBundleSet
+%type  <a_xports>              ImportsBundle
+%type  <a_xports>              ImportsList
+%type  <a_xports>              ExportsDefinition
+%type  <a_xports>              ExportsBody
+%type  <a_expr>                ImportsElement
+%type  <a_expr>                ExportsElement
+%type  <a_expr>                ExtensionAndException
+%type  <a_expr>                Type
+%type  <a_expr>                TaggedType
+%type  <a_expr>                MaybeIndirectTaggedType
+%type  <a_expr>                UntaggedType
+%type  <a_expr>                DefinedUntaggedType
+%type  <a_expr>                ConcreteTypeDeclaration "concrete TypeDeclaration"
+%type  <a_expr>                TypeDeclaration
+%type  <a_expr>                MaybeIndirectTypeDeclaration
+%type  <a_ref>                 ComplexTypeReference
+%type  <a_ref>                 ComplexTypeReferenceAmpList
+%type  <a_refcomp>             ComplexTypeReferenceElement
+%type  <a_refcomp>             PrimitiveFieldReference
+%type  <a_expr>                FieldSpec
+%type  <a_ref>                 FieldName
+%type  <a_ref>                 DefinedObjectClass
+%type  <a_expr>                ClassField
+%type  <a_expr>                ObjectClass
+%type  <a_expr>                DataTypeReference       /* Type1 ::= Type2 */
+%type  <a_expr>                DefinedType
+%type  <a_constr>              ValueSet                /* {a|b|c}*/
+%type  <a_expr>                ValueSetTypeAssignment  /* Val INTEGER ::= {1|2} */
+%type  <a_expr>                ValueAssignment         /* val INTEGER ::= 1*/
+%type  <a_value>               Value
+%type  <a_value>               SimpleValue
+%type  <a_value>               DefinedValue
+%type  <a_value>               SignedNumber
+%type  <a_value>               RealValue
+%type  <a_value>               BitStringValue
+%type  <a_expr>                optComponentTypeLists
+%type  <a_expr>                ComponentTypeLists
+%type  <a_expr>                ComponentType
+%type  <a_expr>                AlternativeTypeLists
+%type  <a_expr>                AlternativeType
+%type  <a_expr>                UniverationList
+%type  <a_expr>                Enumerations
+%type  <a_expr>                NamedBitList
+%type  <a_expr>                NamedBit
+%type  <a_expr>                NamedNumberList
+%type  <a_expr>                NamedNumber
+%type  <a_expr>                IdentifierList
+%type  <a_expr>                IdentifierElement
+%type  <a_expr>                UniverationElement
+%type  <tv_str>                TypeRefName
+%type  <tv_str>                Identifier
+%type  <a_ref>             IdentifierAsReference
+%type  <a_value>               IdentifierAsValue
+%type  <tv_str>                optIdentifier
+%type  <a_parg>                ParameterArgumentName
+%type  <a_plist>               ParameterArgumentList
+%type  <a_expr>                ActualParameter
+%type  <a_expr>                ActualParameterList
+%type  <a_aid>                 AssignedIdentifier      /* OID/DefinedValue */
+%type  <a_oid>                 ObjectIdentifier        /* OID */
+%type  <a_oid>                 optObjectIdentifier     /* Optional OID */
+%type  <a_oid>                 ObjectIdentifierBody
+%type  <a_oid_arc>             ObjectIdentifierElement
+%type  <a_expr>                BuiltinType
+%type  <a_type>                BasicTypeId
+%type  <a_type>                BasicTypeId_UniverationCompatible
+%type  <a_type>                BasicString
+%type  <tv_opaque>             Opaque
+%type  <tv_opaque>             OpaqueFirstToken
+%type  <a_tag>                 Tag             /* [UNIVERSAL 0] IMPLICIT */
+%type  <a_tag>                 TagClass TagTypeValue TagPlicit
+%type  <a_tag>                 optTag          /* [UNIVERSAL 0] IMPLICIT */
+%type  <a_constr>              optConstraint
+%type  <a_constr>              optManyConstraints  /* Only for Type */
+%type  <a_constr>              ManyConstraints
+%type  <a_constr>              optSizeOrConstraint
+%type  <a_constr>              Constraint
+%type  <a_constr>              PermittedAlphabet
+%type  <a_constr>              SizeConstraint
+%type  <a_constr>              SingleTypeConstraint
+%type  <a_constr>              MultipleTypeConstraints
+%type  <a_constr>              NamedConstraint
+%type  <a_constr>              FullSpecification
+%type  <a_constr>              PartialSpecification
+%type  <a_constr>              TypeConstraints
+%type  <a_constr>              ConstraintSpec
+%type  <a_constr>              SubtypeConstraint
+%type  <a_constr>              GeneralConstraint
+%type  <a_constr>              ElementSetSpecs         /* 1..2,...,3 */
+%type  <a_constr>              ElementSetSpec          /* 1..2 */
+%type  <a_constr>              Unions
+%type  <a_constr>              Intersections
+%type  <a_constr>              IntersectionElements
+%type  <a_constr>              Elements
+%type  <a_constr>              SubtypeElements /* 1..2 */
+%type  <a_constr>              SimpleTableConstraint
+%type  <a_constr>              UserDefinedConstraint
+%type  <a_constr>              TableConstraint
+%type  <a_constr>              ContentsConstraint
+%type  <a_constr>              PatternConstraint
+%type  <a_constr>              InnerTypeConstraints
+%type  <a_constr>              ValueRange
+%type  <a_constr>              ComponentRelationConstraint
+%type  <a_constr>              AtNotationList
+%type  <a_ref>                 AtNotationElement
+%type  <a_value>               SingleValue
+%type  <a_value>               LowerEndValue
+%type  <a_value>               UpperEndValue
+%type  <a_value>               ContainedSubtype
+%type  <a_ctype>               ConstraintRangeSpec
+%type  <a_value>               RestrictedCharacterStringValue
+%type  <a_wsynt>               optWithSyntax
+%type  <a_wsynt>               WithSyntax
+%type  <a_wsynt>               WithSyntaxList
+%type  <a_wchunk>              WithSyntaxToken
+%type  <a_marker>              optMarker Marker
+%type  <a_int>                 optUNIQUE
+%type  <a_pres>                optPresenceConstraint PresenceConstraint
+%type  <tv_str>                ComponentIdList
+%type  <a_int>                 NSTD_IndirectMarker
+
+%%
+
+
+ParsedGrammar:
+       UTF8_BOM ModuleList {
+               *(void **)param = $2;
+       }
+       | ModuleList {
+               *(void **)param = $1;
+       }
+       ;
+
+ModuleList:
+       ModuleDefinition {
+               $$ = asn1p_new();
+               checkmem($$);
+               TQ_ADD(&($$->modules), $1, mod_next);
+       }
+       | ModuleList ModuleDefinition {
+               $$ = $1;
+               TQ_ADD(&($$->modules), $2, mod_next);
+       }
+       ;
+
+/*
+ * ASN module definition.
+ * === EXAMPLE ===
+ * MySyntax DEFINITIONS AUTOMATIC TAGS ::=
+ * BEGIN
+ * ...
+ * END 
+ * === EOF ===
+ */
+
+ModuleDefinition:
+       TypeRefName { currentModule = asn1p_module_new(); }
+       optObjectIdentifier TOK_DEFINITIONS
+               optModuleDefinitionFlags
+               TOK_PPEQ TOK_BEGIN
+               optModuleBody
+               TOK_END {
+
+               $$ = currentModule;
+
+               if($8) {
+                       asn1p_module_t tmp = *($$);
+                       *($$) = *($8);
+                       *($8) = tmp;
+                       asn1p_module_free($8);
+               } else {
+                       /* There's a chance that a module is just plain empty */
+               }
+
+               $$->ModuleName = $1;
+               $$->module_oid = $3;
+               $$->module_flags = $5;
+       }
+       ;
+
+/*
+ * Object Identifier Definition
+ * { iso member-body(2) 3 }
+ */
+optObjectIdentifier:
+       { $$ = 0; }
+       | ObjectIdentifier { $$ = $1; }
+       ;
+       
+ObjectIdentifier:
+       '{' ObjectIdentifierBody '}' {
+               $$ = $2;
+       }
+       | '{' '}' {
+               $$ = 0;
+       }
+       ;
+
+ObjectIdentifierBody:
+       ObjectIdentifierElement {
+               $$ = asn1p_oid_new();
+               asn1p_oid_add_arc($$, &$1);
+               if($1.name)
+                       free($1.name);
+       }
+       | ObjectIdentifierBody ObjectIdentifierElement {
+               $$ = $1;
+               asn1p_oid_add_arc($$, &$2);
+               if($2.name)
+                       free($2.name);
+       }
+       ;
+
+ObjectIdentifierElement:
+       Identifier {                                    /* iso */
+               $$.name = $1;
+               $$.number = -1;
+       }
+       | Identifier '(' TOK_number ')' {               /* iso(1) */
+               $$.name = $1;
+               $$.number = $3;
+       }
+       | TOK_number {                                  /* 1 */
+               $$.name = 0;
+               $$.number = $1;
+       }
+       ;
+       
+/*
+ * Optional module flags.
+ */
+optModuleDefinitionFlags:
+       { $$ = MSF_NOFLAGS; }
+       | ModuleDefinitionFlags {
+               $$ = $1;
+       }
+       ;
+
+/*
+ * Module flags.
+ */
+ModuleDefinitionFlags:
+       ModuleDefinitionFlag {
+               $$ = $1;
+       }
+       | ModuleDefinitionFlags ModuleDefinitionFlag {
+               $$ = $1 | $2;
+       }
+       ;
+
+/*
+ * Single module flag.
+ */
+ModuleDefinitionFlag:
+       TOK_EXPLICIT TOK_TAGS {
+               $$ = MSF_EXPLICIT_TAGS;
+       }
+       | TOK_IMPLICIT TOK_TAGS {
+               $$ = MSF_IMPLICIT_TAGS;
+       }
+       | TOK_AUTOMATIC TOK_TAGS {
+               $$ = MSF_AUTOMATIC_TAGS;
+       }
+       | TOK_EXTENSIBILITY TOK_IMPLIED {
+               $$ = MSF_EXTENSIBILITY_IMPLIED;
+       }
+       /* EncodingReferenceDefault */
+       | TOK_capitalreference TOK_INSTRUCTIONS {
+               /* X.680Amd1 specifies TAG and XER */
+               if(strcmp($1, "TAG") == 0) {
+                       $$ = MSF_TAG_INSTRUCTIONS;
+               } else if(strcmp($1, "XER") == 0) {
+                       $$ = MSF_XER_INSTRUCTIONS;
+               } else {
+                       fprintf(stderr,
+                               "WARNING: %s INSTRUCTIONS at %s:%d: "
+                               "Unrecognized encoding reference\n",
+                               $1, ASN_FILENAME, yylineno);
+                       $$ = MSF_unk_INSTRUCTIONS;
+               }
+               free($1);
+       }
+       ;
+
+/*
+ * Optional module body.
+ */
+optModuleBody:
+       { $$ = 0; }
+       | ModuleBody {
+               $$ = $1;
+       }
+       ;
+
+/*
+ * ASN.1 Module body.
+ */
+ModuleBody:
+       optExports optImports AssignmentList {
+               $$ = asn1p_module_new();
+               AL_IMPORT($$, exports, $1, xp_next);
+               AL_IMPORT($$, imports, $2, xp_next);
+               asn1p_module_move_members($$, $3);
+
+               asn1p_module_free($1);
+               asn1p_module_free($2);
+               asn1p_module_free($3);
+       }
+       ;
+
+AssignmentList:
+       Assignment {
+               $$ = $1;
+       }
+       | AssignmentList Assignment {
+               if($1) {
+                       $$ = $1;
+               } else {
+                       $$ = $2;
+                       break;
+               }
+        asn1p_module_move_members($$, $2);
+               asn1p_module_free($2);
+       }
+       ;
+
+
+/*
+ * One of the elements of ASN.1 module specification.
+ */
+Assignment:
+       DataTypeReference {
+               $$ = asn1p_module_new();
+               checkmem($$);
+               assert($1->expr_type != A1TC_INVALID);
+               assert($1->meta_type != AMT_INVALID);
+               asn1p_module_member_add($$, $1);
+       }
+       | ValueAssignment {
+               $$ = asn1p_module_new();
+               checkmem($$);
+               assert($1->expr_type != A1TC_INVALID);
+               assert($1->meta_type != AMT_INVALID);
+               asn1p_module_member_add($$, $1);
+       }
+       /*
+        * Value set definition
+        * === EXAMPLE ===
+        * EvenNumbers INTEGER ::= { 2 | 4 | 6 | 8 }
+        * === EOF ===
+        * Also ObjectClassSet.
+        */
+       | ValueSetTypeAssignment {
+               $$ = asn1p_module_new();
+               checkmem($$);
+               assert($1->expr_type != A1TC_INVALID);
+               assert($1->meta_type != AMT_INVALID);
+               asn1p_module_member_add($$, $1);
+       }
+       | TOK_ENCODING_CONTROL TOK_capitalreference 
+               { asn1p_lexer_hack_push_encoding_control(); }
+                       {
+               fprintf(stderr,
+                       "WARNING: ENCODING-CONTROL %s "
+                       "specification at %s:%d ignored\n",
+                       $2, ASN_FILENAME, yylineno);
+               free($2);
+               $$ = 0;
+       }
+
+       /*
+        * Erroneous attemps
+        */
+       | BasicString {
+               return yyerror(
+                       "Attempt to redefine a standard basic string type, "
+                       "please comment out or remove this type redefinition.");
+       }
+       ;
+
+/*
+ * === EXAMPLE ===
+ * IMPORTS Type1, value FROM Module { iso standard(0) } ;
+ * === EOF ===
+ */
+optImports:
+       { $$ = 0; }
+       | ImportsDefinition;
+
+ImportsDefinition:
+       TOK_IMPORTS optImportsBundleSet ';' {
+               if(!saved_aid && 0)
+                       return yyerror("Unterminated IMPORTS FROM, "
+                                       "expected semicolon ';'");
+               saved_aid = 0;
+               $$ = $2;
+       }
+       /*
+        * Some error cases.
+        */
+       | TOK_IMPORTS TOK_FROM /* ... */ {
+               return yyerror("Empty IMPORTS list");
+       }
+       ;
+
+optImportsBundleSet:
+       { $$ = asn1p_module_new(); }
+       | ImportsBundleSet;
+
+ImportsBundleSet:
+       ImportsBundle {
+               $$ = asn1p_module_new();
+               checkmem($$);
+               TQ_ADD(&($$->imports), $1, xp_next);
+       }
+       | ImportsBundleSet ImportsBundle {
+               $$ = $1;
+               TQ_ADD(&($$->imports), $2, xp_next);
+       }
+       ;
+
+AssignedIdentifier:
+       { memset(&$$, 0, sizeof($$)); }
+       | ObjectIdentifier { $$.oid = $1; };
+       /* | DefinedValue { $$.value = $1; }; // Handled through saved_aid */
+
+ImportsBundle:
+       ImportsList TOK_FROM TypeRefName AssignedIdentifier {
+               $$ = $1;
+               $$->fromModuleName = $3;
+               $$->identifier = $4;
+               /* This stupid thing is used for look-back hack. */
+               saved_aid = $$->identifier.oid ? 0 : &($$->identifier);
+               checkmem($$);
+       }
+       ;
+
+ImportsList:
+       ImportsElement {
+               $$ = asn1p_xports_new();
+               checkmem($$);
+               TQ_ADD(&($$->xp_members), $1, next);
+       }
+       | ImportsList ',' ImportsElement {
+               $$ = $1;
+               TQ_ADD(&($$->xp_members), $3, next);
+       }
+       ;
+
+ImportsElement:
+       TypeRefName {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_REFERENCE;
+       }
+       | TypeRefName '{' '}' {         /* Completely equivalent to above */
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_REFERENCE;
+       }
+       | Identifier {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_REFERENCE;
+       }
+       ;
+
+
+optExports:
+       { $$ = 0; }
+       | ExportsDefinition {
+               $$ = asn1p_module_new();
+               checkmem($$);
+               if($1) {
+                       TQ_ADD(&($$->exports), $1, xp_next);
+               } else {
+                       /* "EXPORTS ALL;" */
+               }
+       }
+       ;
+
+ExportsDefinition:
+       TOK_EXPORTS ExportsBody ';' {
+               $$ = $2;
+       }
+       | TOK_EXPORTS TOK_ALL ';' {
+               $$ = 0;
+       }
+       | TOK_EXPORTS ';' {
+               /* Empty EXPORTS clause effectively prohibits export. */
+               $$ = asn1p_xports_new();
+               checkmem($$);
+       }
+       ;
+
+ExportsBody:
+       ExportsElement {
+               $$ = asn1p_xports_new();
+               assert($$);
+               TQ_ADD(&($$->xp_members), $1, next);
+       }
+       | ExportsBody ',' ExportsElement {
+               $$ = $1;
+               TQ_ADD(&($$->xp_members), $3, next);
+       }
+       ;
+
+ExportsElement:
+       TypeRefName {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_EXPORTVAR;
+       }
+       | TypeRefName '{' '}' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_EXPORTVAR;
+       }
+       | Identifier {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->expr_type = A1TC_EXPORTVAR;
+       }
+       ;
+
+
+ValueSet: '{' ElementSetSpecs '}' { $$ = $2; };
+
+ValueSetTypeAssignment:
+       TypeRefName Type TOK_PPEQ ValueSet {
+               $$ = $2;
+               assert($$->Identifier == 0);
+               $$->Identifier = $1;
+               $$->meta_type = AMT_VALUESET;
+               $$->constraints = $4;
+       }
+       ;
+
+DefinedType:
+       /*
+        * A DefinedType reference.
+        * "CLASS1.&id.&id2"
+        * or
+        * "Module.Type"
+        * or
+        * "Module.identifier"
+        * or
+        * "Type"
+        */
+       ComplexTypeReference {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->reference = $1;
+               $$->expr_type = A1TC_REFERENCE;
+               $$->meta_type = AMT_TYPEREF;
+       }
+       /*
+        * A parameterized assignment.
+        */
+       | ComplexTypeReference '{' ActualParameterList '}' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->reference = $1;
+               $$->rhs_pspecs = $3;
+               $$->expr_type = A1TC_REFERENCE;
+               $$->meta_type = AMT_TYPEREF;
+       }
+       ;
+
+/*
+ * Data Type Reference.
+ * === EXAMPLE ===
+ * Type3 ::= CHOICE { a Type1,  b Type 2 }
+ * === EOF ===
+ */
+DataTypeReference:
+       /*
+        * Optionally tagged type definition.
+        */
+       TypeRefName TOK_PPEQ Type {
+               $$ = $3;
+               $$->Identifier = $1;
+               assert($$->expr_type);
+               assert($$->meta_type);
+       }
+       | TypeRefName TOK_PPEQ ObjectClass {
+               $$ = $3;
+               $$->Identifier = $1;
+               assert($$->expr_type == A1TC_CLASSDEF);
+               assert($$->meta_type == AMT_OBJECTCLASS);
+       }
+       /*
+        * Parameterized <Type> declaration:
+        * === EXAMPLE ===
+        *   SIGNED { ToBeSigned } ::= SEQUENCE {
+        *      toBeSigned  ToBeSigned,
+        *      algorithm   AlgorithmIdentifier,
+        *      signature   BIT STRING
+        *   }
+        * === EOF ===
+        */
+       | TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ Type {
+               $$ = $6;
+               $$->Identifier = $1;
+               $$->lhs_params = $3;
+       }
+       /* Parameterized CLASS declaration */
+       | TypeRefName '{' ParameterArgumentList '}' TOK_PPEQ ObjectClass {
+               $$ = $6;
+               $$->Identifier = $1;
+               $$->lhs_params = $3;
+       }
+       ;
+
+ParameterArgumentList:
+       ParameterArgumentName {
+               int ret;
+               $$ = asn1p_paramlist_new(yylineno);
+               checkmem($$);
+               ret = asn1p_paramlist_add_param($$, $1.governor, $1.argument);
+               checkmem(ret == 0);
+               asn1p_ref_free($1.governor);
+               free($1.argument);
+       }
+       | ParameterArgumentList ',' ParameterArgumentName {
+               int ret;
+               $$ = $1;
+               ret = asn1p_paramlist_add_param($$, $3.governor, $3.argument);
+               checkmem(ret == 0);
+               asn1p_ref_free($3.governor);
+               free($3.argument);
+       }
+       ;
+       
+ParameterArgumentName:
+       TypeRefName {
+               $$.governor = NULL;
+               $$.argument = $1;
+       }
+       | TypeRefName ':' Identifier {
+               int ret;
+               $$.governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$.governor, $1, 0);
+               checkmem(ret == 0);
+               $$.argument = $3;
+               free($1);
+       }
+       | TypeRefName ':' TypeRefName {
+               int ret;
+               $$.governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$.governor, $1, 0);
+               checkmem(ret == 0);
+               $$.argument = $3;
+               free($1);
+       }
+       | BasicTypeId ':' Identifier {
+               int ret;
+               $$.governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$.governor,
+                       ASN_EXPR_TYPE2STR($1), 1);
+               checkmem(ret == 0);
+               $$.argument = $3;
+       }
+       | BasicTypeId ':' TypeRefName {
+               int ret;
+               $$.governor = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$.governor,
+                       ASN_EXPR_TYPE2STR($1), 1);
+               checkmem(ret == 0);
+               $$.argument = $3;
+       }
+       ;
+
+ActualParameterList:
+       ActualParameter {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | ActualParameterList ',' ActualParameter {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+ActualParameter:
+       UntaggedType    /* act. Type */
+       | SimpleValue {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("?");
+               $$->expr_type = A1TC_REFERENCE;
+               $$->meta_type = AMT_VALUE;
+               $$->value = $1;
+       }
+       | DefinedValue {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("?");
+               $$->expr_type = A1TC_REFERENCE;
+               $$->meta_type = AMT_VALUE;
+               $$->value = $1;
+       }
+       | ValueSet {
+               $$ = NEW_EXPR();
+               $$->expr_type = A1TC_VALUESET;
+               $$->meta_type = AMT_VALUESET;
+               $$->constraints = $1;
+       }
+       ;
+
+/*
+       | '{' ActualParameter '}' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $2);
+               $$->expr_type = A1TC_PARAMETRIZED;
+               $$->meta_type = AMT_TYPE;
+       }
+       ;
+*/
+
+/*
+ * A collection of constructed data type members.
+ */
+optComponentTypeLists:
+       { $$ = NEW_EXPR(); }
+       | ComponentTypeLists { $$ = $1; };
+
+ComponentTypeLists:
+       ComponentType {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | ComponentTypeLists ',' ComponentType {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       | ComponentTypeLists ',' TOK_VBracketLeft ComponentTypeLists TOK_VBracketRight {
+               $$ = $1;
+               $4->meta_type = AMT_TYPE;
+               $4->expr_type = ASN_CONSTR_SEQUENCE;
+               $4->marker.flags |= EM_OPTIONAL;
+               asn1p_expr_add($$, $4);
+       }
+       ;
+
+ComponentType:
+       Identifier MaybeIndirectTaggedType optMarker {
+               $$ = $2;
+               assert($$->Identifier == 0);
+               $$->Identifier = $1;
+               $3.flags |= $$->marker.flags;
+               $$->marker = $3;
+       }
+       | MaybeIndirectTaggedType optMarker {
+               $$ = $1;
+               $2.flags |= $$->marker.flags;
+               $$->marker = $2;
+               _fixup_anonymous_identifier($$);
+       }
+       | TOK_COMPONENTS TOK_OF MaybeIndirectTaggedType {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->meta_type = $3->meta_type;
+               $$->expr_type = A1TC_COMPONENTS_OF;
+               asn1p_expr_add($$, $3);
+       }
+       | ExtensionAndException {
+               $$ = $1;
+       }
+       ;
+
+AlternativeTypeLists:
+       AlternativeType {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | AlternativeTypeLists ',' AlternativeType {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+AlternativeType:
+       Identifier MaybeIndirectTaggedType {
+               $$ = $2;
+               assert($$->Identifier == 0);
+               $$->Identifier = $1;
+       }
+       | ExtensionAndException {
+               $$ = $1;
+       }
+       | MaybeIndirectTaggedType {
+               $$ = $1;
+               _fixup_anonymous_identifier($$);
+       }
+       ;
+
+ObjectClass:
+       TOK_CLASS '{' FieldSpec '}' optWithSyntax {
+               $$ = $3;
+               checkmem($$);
+               $$->with_syntax = $5;
+               assert($$->expr_type == A1TC_CLASSDEF);
+               assert($$->meta_type == AMT_OBJECTCLASS);
+       }
+       ;
+
+optUNIQUE:
+       { $$ = 0; }
+       | TOK_UNIQUE { $$ = 1; }
+       ;
+
+FieldSpec:
+       ClassField {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_CLASSDEF;
+               $$->meta_type = AMT_OBJECTCLASS;
+               asn1p_expr_add($$, $1);
+       }
+       | FieldSpec ',' ClassField {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+       /* X.681 */
+ClassField:
+
+       /* TypeFieldSpec ::= typefieldreference TypeOptionalitySpec? */
+       TOK_typefieldreference optMarker {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_TFS;    /* TypeFieldSpec */
+               $$->marker = $2;
+       }
+
+       /* FixedTypeValueFieldSpec ::= valuefieldreference Type UNIQUE ? ValueOptionalitySpec ? */
+       | TOK_valuefieldreference Type optUNIQUE optMarker {
+               $$ = NEW_EXPR();
+               $$->Identifier = $1;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_FTVFS;  /* FixedTypeValueFieldSpec */
+               $$->unique = $3;
+               $$->marker = $4;
+               asn1p_expr_add($$, $2);
+       }
+
+       /* VariableTypeValueFieldSpec ::= valuefieldreference FieldName ValueOptionalitySpec ? */
+       | TOK_valuefieldreference FieldName optMarker {
+               $$ = NEW_EXPR();
+               $$->Identifier = $1;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_VTVFS;
+               $$->reference = $2;
+               $$->marker = $3;
+       }
+
+       /*  ObjectFieldSpec ::= objectfieldreference DefinedObjectClass ObjectOptionalitySpec ? */
+       | TOK_valuefieldreference DefinedObjectClass optMarker {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->reference = $2;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_OFS;
+               $$->marker = $3;
+       }
+
+       /* VariableTypeValueSetFieldSpec ::= valuesetfieldreference FieldName ValueOptionalitySpec ? */
+       | TOK_typefieldreference FieldName optMarker {
+               $$ = NEW_EXPR();
+               $$->Identifier = $1;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_VTVSFS;
+               $$->reference = $2;
+               $$->marker = $3;
+       }
+
+       /* FixedTypeValueSetFieldSpec ::= valuesetfieldreference Type ValueSetOptionalitySpec ? */
+       | TOK_typefieldreference Type optMarker {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_FTVSFS;
+               asn1p_expr_add($$, $2);
+               $$->marker = $3;
+       }
+
+       /*  ObjectSetFieldSpec ::= objectsetfieldreference DefinedObjectClass ObjectOptionalitySpec ? */
+       | TOK_typefieldreference DefinedObjectClass optMarker {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = $1;
+               $$->reference = $2;
+               $$->meta_type = AMT_OBJECTFIELD;
+               $$->expr_type = A1TC_CLASSFIELD_OSFS;
+               $$->marker = $3;
+       }
+       ;
+
+optWithSyntax:
+       { $$ = 0; }
+       | WithSyntax {
+               $$ = $1;
+       }
+       ;
+
+WithSyntax:
+       TOK_WITH TOK_SYNTAX '{'
+               { asn1p_lexer_hack_enable_with_syntax(); }
+               WithSyntaxList
+               '}' {
+               $$ = $5;
+       }
+       ;
+
+WithSyntaxList:
+       WithSyntaxToken {
+               $$ = asn1p_wsyntx_new();
+               TQ_ADD(&($$->chunks), $1, next);
+       }
+       | WithSyntaxList WithSyntaxToken {
+               $$ = $1;
+               TQ_ADD(&($$->chunks), $2, next);
+       }
+       ;
+
+WithSyntaxToken:
+       TOK_whitespace {
+               $$ = asn1p_wsyntx_chunk_fromstring($1.buf, 0);
+               $$->type = WC_WHITESPACE;
+       }
+       | TOK_Literal {
+               $$ = asn1p_wsyntx_chunk_fromstring($1, 0);
+       }
+       | PrimitiveFieldReference {
+               $$ = asn1p_wsyntx_chunk_fromstring($1.name, 0);
+               $$->type = WC_FIELD;
+       }
+       | '[' WithSyntaxList ']' {
+               $$ = asn1p_wsyntx_chunk_fromsyntax($2);
+       }
+       ;
+
+ExtensionAndException:
+       TOK_ThreeDots {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("...");
+               checkmem($$->Identifier);
+               $$->expr_type = A1TC_EXTENSIBLE;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_ThreeDots '!' DefinedValue {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("...");
+               checkmem($$->Identifier);
+               $$->value = $3;
+               $$->expr_type = A1TC_EXTENSIBLE;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_ThreeDots '!' SignedNumber {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("...");
+               $$->value = $3;
+               checkmem($$->Identifier);
+               $$->expr_type = A1TC_EXTENSIBLE;
+               $$->meta_type = AMT_TYPE;
+       }
+       ;
+
+Type: TaggedType;
+
+TaggedType:
+    optTag UntaggedType {
+        $$ = $2;
+        $$->tag = $1;
+    }
+    ;
+
+DefinedUntaggedType:
+       DefinedType optManyConstraints {
+               $$ = $1;
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if($$->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || $$->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&($$->members))->constraints);
+                       TQ_FIRST(&($$->members))->constraints = $2;
+               } else {
+                       if($$->constraints) {
+                               assert(!$2);
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free($2);
+                       } else {
+                               $$->constraints = $2;
+                       }
+               }
+       }
+       ;
+
+UntaggedType:
+       TypeDeclaration optManyConstraints {
+               $$ = $1;
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if($$->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || $$->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&($$->members))->constraints);
+                       TQ_FIRST(&($$->members))->constraints = $2;
+               } else {
+                       if($$->constraints) {
+                               assert(!$2);
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free($2);
+                       } else {
+                               $$->constraints = $2;
+                       }
+               }
+       }
+       ;
+
+MaybeIndirectTaggedType:
+    optTag MaybeIndirectTypeDeclaration optManyConstraints {
+               $$ = $2;
+               $$->tag = $1;
+               /*
+                * Outer constraint for SEQUENCE OF and SET OF applies
+                * to the inner type.
+                */
+               if($$->expr_type == ASN_CONSTR_SEQUENCE_OF
+               || $$->expr_type == ASN_CONSTR_SET_OF) {
+                       assert(!TQ_FIRST(&($$->members))->constraints);
+                       TQ_FIRST(&($$->members))->constraints = $3;
+               } else {
+                       if($$->constraints) {
+                               assert(!$2);
+                               /* Check this : optManyConstraints is not used ?! */
+                               asn1p_constraint_free($3);
+                       } else {
+                               $$->constraints = $3;
+                       }
+               }
+       }
+    ;
+
+NSTD_IndirectMarker:
+       {
+               $$ = asn1p_as_pointer ? EM_INDIRECT : 0;
+               asn1p_as_pointer = 0;
+       }
+       ;
+
+MaybeIndirectTypeDeclaration:
+    NSTD_IndirectMarker TypeDeclaration {
+        $$ = $2;
+               $$->marker.flags |= $1;
+
+               if(($$->marker.flags & EM_INDIRECT)
+               && ($$->marker.flags & EM_OPTIONAL) != EM_OPTIONAL) {
+                       fprintf(stderr,
+                               "INFO: Directive <ASN1C:RepresentAsPointer> "
+                               "applied to %s at %s:%d\n",
+                               ASN_EXPR_TYPE2STR($$->expr_type)
+                                       ?  ASN_EXPR_TYPE2STR($$->expr_type)
+                                       : "member",
+                               ASN_FILENAME, $$->_lineno
+                       );
+               }
+    }
+    ;
+
+TypeDeclaration:
+    ConcreteTypeDeclaration
+    | DefinedType;
+
+ConcreteTypeDeclaration:
+       BuiltinType
+       | TOK_CHOICE '{' AlternativeTypeLists '}' {
+               $$ = $3;
+               assert($$->expr_type == A1TC_INVALID);
+               $$->expr_type = ASN_CONSTR_CHOICE;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_SEQUENCE '{' optComponentTypeLists '}' {
+               $$ = $3;
+               assert($$->expr_type == A1TC_INVALID);
+               $$->expr_type = ASN_CONSTR_SEQUENCE;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_SET '{' optComponentTypeLists '}' {
+               $$ = $3;
+               assert($$->expr_type == A1TC_INVALID);
+               $$->expr_type = ASN_CONSTR_SET;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_SEQUENCE optSizeOrConstraint TOK_OF optIdentifier optTag MaybeIndirectTypeDeclaration {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->constraints = $2;
+               $$->expr_type = ASN_CONSTR_SEQUENCE_OF;
+               $$->meta_type = AMT_TYPE;
+               $6->Identifier = $4;
+               $6->tag = $5;
+               asn1p_expr_add($$, $6);
+       }
+       | TOK_SET optSizeOrConstraint TOK_OF optIdentifier optTag MaybeIndirectTypeDeclaration {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->constraints = $2;
+               $$->expr_type = ASN_CONSTR_SET_OF;
+               $$->meta_type = AMT_TYPE;
+               $6->Identifier = $4;
+               $6->tag = $5;
+               asn1p_expr_add($$, $6);
+       }
+       | TOK_ANY                                       {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = ASN_TYPE_ANY;
+               $$->meta_type = AMT_TYPE;
+       }
+       | TOK_ANY TOK_DEFINED TOK_BY Identifier         {
+               int ret;
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->reference = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$->reference,
+                       $4, RLT_lowercase);
+               checkmem(ret == 0);
+               $$->expr_type = ASN_TYPE_ANY;
+               $$->meta_type = AMT_TYPE;
+               free($4);
+       }
+       | TOK_INSTANCE TOK_OF ComplexTypeReference {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->reference = $3;
+               $$->expr_type = A1TC_INSTANCE;
+               $$->meta_type = AMT_TYPE;
+       }
+       ;
+
+/*
+ * A type name consisting of several components.
+ * === EXAMPLE ===
+ * === EOF ===
+ */
+ComplexTypeReference:
+       TOK_typereference {
+               int ret;
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               checkmem($$);
+               ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free($1);
+       }
+       | TOK_capitalreference {
+               int ret;
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               checkmem($$);
+               ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+               free($1);
+               checkmem(ret == 0);
+       }
+       | TOK_typereference '.' TypeRefName {
+               int ret;
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               checkmem($$);
+               ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free($1);
+               free($3);
+       }
+       | TOK_capitalreference '.' TypeRefName {
+               int ret;
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               checkmem($$);
+               ret = asn1p_ref_add_component($$, $1, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               free($1);
+               free($3);
+       }
+       | TOK_capitalreference '.' ComplexTypeReferenceAmpList {
+               int ret;
+               $$ = $3;
+               ret = asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+               free($1);
+               checkmem(ret == 0);
+               /*
+                * Move the last element infront.
+                */
+               {
+                       struct asn1p_ref_component_s tmp_comp;
+                       tmp_comp = $$->components[$$->comp_count-1];
+                       memmove(&$$->components[1],
+                               &$$->components[0],
+                               sizeof($$->components[0])
+                               * ($$->comp_count - 1));
+                       $$->components[0] = tmp_comp;
+               }
+       }
+       ;
+
+ComplexTypeReferenceAmpList:
+       ComplexTypeReferenceElement {
+               int ret;
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               checkmem($$);
+               ret = asn1p_ref_add_component($$, $1.name, $1.lex_type);
+               free($1.name);
+               checkmem(ret == 0);
+       }
+       | ComplexTypeReferenceAmpList '.' ComplexTypeReferenceElement {
+               int ret;
+               $$ = $1;
+               ret = asn1p_ref_add_component($$, $3.name, $3.lex_type);
+               free($3.name);
+               checkmem(ret == 0);
+       }
+       ;
+
+ComplexTypeReferenceElement:   PrimitiveFieldReference;
+
+PrimitiveFieldReference:
+       /* "&Type1" */
+       TOK_typefieldreference {
+               $$.lex_type = RLT_AmpUppercase;
+               $$.name = $1;
+       }
+       /* "&id" */
+       | TOK_valuefieldreference {
+               $$.lex_type = RLT_Amplowercase;
+               $$.name = $1;
+       }
+       ;
+
+
+FieldName:
+       /* "&Type1" */
+       TOK_typefieldreference {
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
+               free($1);
+       }
+       | FieldName '.' TOK_typefieldreference {
+               $$ = $$;
+               asn1p_ref_add_component($$, $3, RLT_AmpUppercase);
+               free($3);
+       }
+       | FieldName '.' TOK_valuefieldreference {
+               $$ = $$;
+               asn1p_ref_add_component($$, $3, RLT_Amplowercase);
+               free($3);
+       }
+       ;
+
+DefinedObjectClass:
+       TOK_capitalreference {
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+               free($1);
+       }
+/*
+       | TypeRefName '.' TOK_capitalreference {
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
+               asn1p_ref_add_component($$, $3, RLT_CAPITALS);
+               free($1);
+               free($3);
+       }
+*/
+       ;
+
+
+/*
+ * === EXAMPLE ===
+ * value INTEGER ::= 1
+ * === EOF ===
+ */
+ValueAssignment:
+       Identifier Type TOK_PPEQ Value {
+               $$ = $2;
+               assert($$->Identifier == NULL);
+               $$->Identifier = $1;
+               $$->meta_type = AMT_VALUE;
+               $$->value = $4;
+       }
+       ;
+
+Value:
+       SimpleValue
+       | DefinedValue
+       | '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque {
+               $$ = asn1p_value_frombuf($3.buf, $3.len, 0);
+               checkmem($$);
+               $$->type = ATV_UNPARSED;
+       }
+    ;
+
+SimpleValue:
+       TOK_NULL {
+               $$ = asn1p_value_fromint(0);
+               checkmem($$);
+               $$->type = ATV_NULL;
+       }
+       | TOK_FALSE {
+               $$ = asn1p_value_fromint(0);
+               checkmem($$);
+               $$->type = ATV_FALSE;
+       }
+       | TOK_TRUE {
+               $$ = asn1p_value_fromint(1);
+               checkmem($$);
+               $$->type = ATV_TRUE;
+       }
+       | SignedNumber
+       | RealValue
+       | RestrictedCharacterStringValue
+       | BitStringValue
+       ;
+
+DefinedValue:
+       IdentifierAsValue
+       | TypeRefName '.' Identifier {
+               asn1p_ref_t *ref;
+               int ret;
+               ref = asn1p_ref_new(yylineno, currentModule);
+               checkmem(ref);
+               ret = asn1p_ref_add_component(ref, $1, RLT_UNKNOWN);
+               checkmem(ret == 0);
+               ret = asn1p_ref_add_component(ref, $3, RLT_lowercase);
+               checkmem(ret == 0);
+               $$ = asn1p_value_fromref(ref, 0);
+               checkmem($$);
+               free($1);
+               free($3);
+       }
+       ;
+
+
+RestrictedCharacterStringValue:
+       TOK_cstring {
+               $$ = asn1p_value_frombuf($1.buf, $1.len, 0);
+               checkmem($$);
+       }
+       | TOK_tuple {
+               $$ = asn1p_value_fromint($1);
+               checkmem($$);
+               $$->type = ATV_TUPLE;
+       }
+       | TOK_quadruple {
+               $$ = asn1p_value_fromint($1);
+               checkmem($$);
+               $$->type = ATV_QUADRUPLE;
+       }
+       ;
+
+Opaque:
+    OpaqueFirstToken {
+               $$.len = $1.len + 1;
+               $$.buf = malloc(1 + $$.len + 1);
+               checkmem($$.buf);
+               $$.buf[0] = '{';
+               memcpy($$.buf + 1, $1.buf, $1.len);
+               $$.buf[$$.len] = '\0';
+               free($1.buf);
+    }
+       | Opaque TOK_opaque {
+               int newsize = $1.len + $2.len;
+               char *p = malloc(newsize + 1);
+               checkmem(p);
+               memcpy(p         , $1.buf, $1.len);
+               memcpy(p + $1.len, $2.buf, $2.len);
+               p[newsize] = '\0';
+               free($1.buf);
+               free($2.buf);
+               $$.buf = p;
+               $$.len = newsize;
+       }
+       ;
+
+OpaqueFirstToken:
+    TOK_opaque
+    | Identifier {
+        $$.len = strlen($1);
+        $$.buf = $1;
+    };
+
+BasicTypeId:
+       TOK_BOOLEAN { $$ = ASN_BASIC_BOOLEAN; }
+       | TOK_NULL { $$ = ASN_BASIC_NULL; }
+       | TOK_REAL { $$ = ASN_BASIC_REAL; }
+       | TOK_OCTET TOK_STRING { $$ = ASN_BASIC_OCTET_STRING; }
+       | TOK_OBJECT TOK_IDENTIFIER { $$ = ASN_BASIC_OBJECT_IDENTIFIER; }
+       | TOK_RELATIVE_OID { $$ = ASN_BASIC_RELATIVE_OID; }
+       | TOK_EXTERNAL { $$ = ASN_BASIC_EXTERNAL; }
+       | TOK_EMBEDDED TOK_PDV { $$ = ASN_BASIC_EMBEDDED_PDV; }
+       | TOK_CHARACTER TOK_STRING { $$ = ASN_BASIC_CHARACTER_STRING; }
+       | TOK_UTCTime { $$ = ASN_BASIC_UTCTime; }
+       | TOK_GeneralizedTime { $$ = ASN_BASIC_GeneralizedTime; }
+       | BasicString
+       | BasicTypeId_UniverationCompatible
+       ;
+
+/*
+ * A type identifier which may be used with "{ a(1), b(2) }" clause.
+ */
+BasicTypeId_UniverationCompatible:
+       TOK_INTEGER { $$ = ASN_BASIC_INTEGER; }
+       | TOK_ENUMERATED { $$ = ASN_BASIC_ENUMERATED; }
+       | TOK_BIT TOK_STRING { $$ = ASN_BASIC_BIT_STRING; }
+       ;
+
+BuiltinType:
+       BasicTypeId {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = $1;
+               $$->meta_type = AMT_TYPE;
+       }
+    | TOK_INTEGER '{' NamedNumberList '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_INTEGER;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ENUMERATED '{' Enumerations '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_ENUMERATED;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_BIT TOK_STRING '{' NamedBitList '}' {
+        $$ = $4;
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ExtValue_BIT_STRING '{' IdentifierList '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ExtValue_BIT_STRING '{' '}' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
+       ;
+
+BasicString:
+       TOK_BMPString { $$ = ASN_STRING_BMPString; }
+       | TOK_GeneralString {
+               $$ = ASN_STRING_GeneralString;
+               fprintf(stderr, "WARNING: GeneralString is not fully supported\n");
+       }
+       | TOK_GraphicString {
+               $$ = ASN_STRING_GraphicString;
+               fprintf(stderr, "WARNING: GraphicString is not fully supported\n");
+       }
+       | TOK_IA5String { $$ = ASN_STRING_IA5String; }
+       | TOK_ISO646String { $$ = ASN_STRING_ISO646String; }
+       | TOK_NumericString { $$ = ASN_STRING_NumericString; }
+       | TOK_PrintableString { $$ = ASN_STRING_PrintableString; }
+       | TOK_T61String {
+               $$ = ASN_STRING_T61String;
+               fprintf(stderr, "WARNING: T61String is not fully supported\n");
+       }
+       | TOK_TeletexString { $$ = ASN_STRING_TeletexString; }
+       | TOK_UniversalString { $$ = ASN_STRING_UniversalString; }
+       | TOK_UTF8String { $$ = ASN_STRING_UTF8String; }
+       | TOK_VideotexString {
+               $$ = ASN_STRING_VideotexString;
+               fprintf(stderr, "WARNING: VideotexString is not fully supported\n");
+       }
+       | TOK_VisibleString { $$ = ASN_STRING_VisibleString; }
+       | TOK_ObjectDescriptor { $$ = ASN_STRING_ObjectDescriptor; }
+       ;
+
+
+/*
+ * Data type constraints.
+ */
+UnionMark:             '|' | TOK_UNION;
+IntersectionMark:      '^' | TOK_INTERSECTION;
+
+/* empty | Constraint */
+optConstraint:
+       { $$ = 0; }
+       | Constraint;
+
+/* empty | Constraint... */
+optManyConstraints:
+       { $$ = 0; }
+       | ManyConstraints;
+
+/* empty | Constraint | SIZE(...) */
+optSizeOrConstraint:
+       { $$ = 0; }
+       | Constraint
+       | SizeConstraint
+       ;
+
+Constraint:
+    '(' ConstraintSpec ')' {
+               CONSTRAINT_INSERT($$, ACT_CA_SET, $2, 0);
+    }
+    ;
+
+ManyConstraints:
+    Constraint
+       | ManyConstraints Constraint {
+        if($2->type == ACT_CA_SET && $2->el_count == 1) {
+            CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $2->elements[0]);
+        } else {
+            CONSTRAINT_INSERT($$, ACT_CA_SET, $1, $2);
+        }
+       }
+       ;
+
+ConstraintSpec: SubtypeConstraint | GeneralConstraint;
+
+SubtypeConstraint: ElementSetSpecs;
+
+ElementSetSpecs:
+       TOK_ThreeDots  {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               $$->type = ACT_EL_EXT;
+       }
+   | ElementSetSpec
+   | ElementSetSpec ',' TOK_ThreeDots {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
+   }
+   | ElementSetSpec ',' TOK_ThreeDots ',' ElementSetSpec {
+       asn1p_constraint_t *ct;
+       ct = asn1p_constraint_new(yylineno, currentModule);
+       ct->type = ACT_EL_EXT;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
+       ct = $$;
+       CONSTRAINT_INSERT($$, ACT_CA_CSV, ct, $5);
+   }
+;
+
+ElementSetSpec:
+       Unions
+       | TOK_ALL TOK_EXCEPT Elements {
+               CONSTRAINT_INSERT($$, ACT_CA_AEX, $3, 0);
+       }
+       ;
+
+Unions:
+       Intersections
+       | Unions UnionMark Intersections {
+               CONSTRAINT_INSERT($$, ACT_CA_UNI, $1, $3);
+       }
+       ;
+
+Intersections:
+       IntersectionElements
+       |  Intersections IntersectionMark IntersectionElements {
+               CONSTRAINT_INSERT($$, ACT_CA_INT, $1, $3);
+       }
+       ;
+
+
+IntersectionElements:
+       Elements
+       | Elements TOK_EXCEPT Elements {
+               CONSTRAINT_INSERT($$, ACT_CA_EXC, $1, $3);
+       }
+       ;
+
+Elements:
+    SubtypeElements
+    | '(' ElementSetSpec ')' {
+        int ret;
+        $$ = asn1p_constraint_new(yylineno, currentModule);
+        checkmem($$);
+        $$->type = ACT_CA_SET;
+        ret = asn1p_constraint_insert($$, $2);
+        checkmem(ret == 0);
+    }
+    ;
+
+SubtypeElements:
+       SingleValue {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               $$->type = ACT_EL_VALUE;
+               $$->value = $1;
+       }
+       | ContainedSubtype {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               $$->type = ACT_EL_TYPE;
+               $$->containedSubtype = $1;
+       }
+    | PermittedAlphabet /* FROM ... */
+    | SizeConstraint    /* SIZE ... */
+    /* | TypeConstraint is via ContainedSubtype */
+       | InnerTypeConstraints  /* WITH COMPONENT[S] ... */
+       | PatternConstraint     /* PATTERN ... */
+       | ValueRange
+       ;
+
+
+PermittedAlphabet:
+       TOK_FROM Constraint {
+               CONSTRAINT_INSERT($$, ACT_CT_FROM, $2, 0);
+       };
+
+SizeConstraint:
+       TOK_SIZE Constraint {
+               CONSTRAINT_INSERT($$, ACT_CT_SIZE, $2, 0);
+       };
+
+PatternConstraint:
+       TOK_PATTERN TOK_cstring {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               $$->type = ACT_CT_PATTERN;
+               $$->value = asn1p_value_frombuf($2.buf, $2.len, 0);
+       }
+       | TOK_PATTERN Identifier {
+               asn1p_ref_t *ref;
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               $$->type = ACT_CT_PATTERN;
+               ref = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component(ref, $2, RLT_lowercase);
+               $$->value = asn1p_value_fromref(ref, 0);
+               free($2);
+       }
+       ;
+
+ValueRange:
+    LowerEndValue ConstraintRangeSpec UpperEndValue {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               $$->type = $2;
+               $$->range_start = $1;
+               $$->range_stop = $3;
+    };
+
+LowerEndValue:
+    SingleValue
+    | TOK_MIN {
+               $$ = asn1p_value_fromint(-123);
+               $$->type = ATV_MIN;
+    };
+
+UpperEndValue:
+    SingleValue
+    | TOK_MAX {
+               $$ = asn1p_value_fromint(321);
+               $$->type = ATV_MAX;
+    };
+
+SingleValue: Value;
+
+BitStringValue:
+       TOK_bstring {
+               $$ = _convert_bitstring2binary($1, 'B');
+               checkmem($$);
+               free($1);
+       }
+       | TOK_hstring {
+               $$ = _convert_bitstring2binary($1, 'H');
+               checkmem($$);
+               free($1);
+       }
+       ;
+
+ContainedSubtype:
+    TOK_INCLUDES Type {
+               $$ = asn1p_value_fromtype($2);
+               checkmem($$);
+               asn1p_expr_free($2);
+    }
+    /* Can't put Type here because of conflicts. Simplified subset */
+    | DefinedUntaggedType {
+               $$ = asn1p_value_fromtype($1);
+               checkmem($$);
+               asn1p_expr_free($1);
+    }
+       ;
+
+/*
+ * X.680 08/2015
+ * #51.8.5
+ */
+InnerTypeConstraints:
+       TOK_WITH TOK_COMPONENT SingleTypeConstraint {
+               CONSTRAINT_INSERT($$, ACT_CT_WCOMP, $3, 0);
+       }
+       | TOK_WITH TOK_COMPONENTS MultipleTypeConstraints {
+        assert($3->type == ACT_CA_CSV);
+        $3->type = ACT_CT_WCOMPS;
+        $$ = $3;
+       }
+       ;
+SingleTypeConstraint: Constraint;
+MultipleTypeConstraints: FullSpecification | PartialSpecification;
+FullSpecification: '{' TypeConstraints '}' { $$ = $2; };
+PartialSpecification:
+    '{' TOK_ThreeDots ',' TypeConstraints '}' {
+        assert($4->type == ACT_CA_CSV);
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+        $$->type = ACT_CA_CSV;
+               asn1p_constraint_t *ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               ct->type = ACT_EL_EXT;
+        asn1p_constraint_insert($$, ct);
+        for(unsigned i = 0; i < $4->el_count; i++) {
+            asn1p_constraint_insert($$, $4->elements[i]);
+        }
+    };
+TypeConstraints:
+    NamedConstraint {
+        $$ = asn1p_constraint_new(yylineno, currentModule);
+        $$->type = ACT_CA_CSV;
+        asn1p_constraint_insert($$, $1);
+    }
+    | TypeConstraints ',' NamedConstraint {
+        $$ = $1;
+        asn1p_constraint_insert($$, $3);
+       }
+       ;
+NamedConstraint:
+       IdentifierAsValue optConstraint optPresenceConstraint {
+        $$ = asn1p_constraint_new(yylineno, currentModule);
+        checkmem($$);
+        $$->type = ACT_EL_VALUE;
+        $$->value = $1;
+        if($2) asn1p_constraint_insert($$, $2);
+        $$->presence = $3;
+    }
+    ;
+
+/*
+ * presence constraint for NamedConstraint
+ */
+optPresenceConstraint:
+       { $$ = ACPRES_DEFAULT; }
+       | PresenceConstraint { $$ = $1; }
+       ;
+
+PresenceConstraint:
+       TOK_PRESENT {
+               $$ = ACPRES_PRESENT;
+       }
+       | TOK_ABSENT {
+               $$ = ACPRES_ABSENT;
+       }
+       | TOK_OPTIONAL {
+               $$ = ACPRES_OPTIONAL;
+       }
+       ;
+
+
+/* X.682 */
+GeneralConstraint:
+       UserDefinedConstraint
+       | TableConstraint
+       | ContentsConstraint
+       ;
+
+UserDefinedConstraint:
+       TOK_CONSTRAINED TOK_BY '{'
+               { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               $$->type = ACT_CT_CTDBY;
+               $$->value = asn1p_value_frombuf($5.buf, $5.len, 0);
+               checkmem($$->value);
+               $$->value->type = ATV_UNPARSED;
+       }
+       ;
+
+ContentsConstraint:
+       TOK_CONTAINING Type {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               $$->type = ACT_CT_CTNG;
+               $$->value = asn1p_value_fromtype($2);
+               asn1p_expr_free($2);
+       }
+       ;
+
+ConstraintRangeSpec:
+       TOK_TwoDots             { $$ = ACT_EL_RANGE; }
+       | TOK_TwoDots '<'       { $$ = ACT_EL_RLRANGE; }
+       | '<' TOK_TwoDots       { $$ = ACT_EL_LLRANGE; }
+       | '<' TOK_TwoDots '<'   { $$ = ACT_EL_ULRANGE; }
+       ;
+TableConstraint:
+       SimpleTableConstraint {
+               $$ = $1;
+       }
+       | ComponentRelationConstraint {
+               $$ = $1;
+       }
+       ;
+
+/*
+ * "{ExtensionSet}"
+ */
+SimpleTableConstraint:
+       '{' TypeRefName '}' {
+               asn1p_ref_t *ref = asn1p_ref_new(yylineno, currentModule);
+               asn1p_constraint_t *ct;
+               int ret;
+               ret = asn1p_ref_add_component(ref, $2, 0);
+               checkmem(ret == 0);
+               ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               ct->type = ACT_EL_VALUE;
+               ct->value = asn1p_value_fromref(ref, 0);
+               CONSTRAINT_INSERT($$, ACT_CA_CRC, ct, 0);
+               free($2);
+       }
+       ;
+
+ComponentRelationConstraint:
+       SimpleTableConstraint '{' AtNotationList '}' {
+               CONSTRAINT_INSERT($$, ACT_CA_CRC, $1, $3);
+       }
+       ;
+
+AtNotationList:
+       AtNotationElement {
+               $$ = asn1p_constraint_new(yylineno, currentModule);
+               checkmem($$);
+               $$->type = ACT_EL_VALUE;
+               $$->value = asn1p_value_fromref($1, 0);
+       }
+       | AtNotationList ',' AtNotationElement {
+               asn1p_constraint_t *ct;
+               ct = asn1p_constraint_new(yylineno, currentModule);
+               checkmem(ct);
+               ct->type = ACT_EL_VALUE;
+               ct->value = asn1p_value_fromref($3, 0);
+               CONSTRAINT_INSERT($$, ACT_CA_CSV, $1, ct);
+       }
+       ;
+
+/*
+ * @blah
+ */
+AtNotationElement:
+       '@' ComponentIdList {
+               char *p = malloc(strlen($2) + 2);
+               int ret;
+               *p = '@';
+               strcpy(p + 1, $2);
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$, p, 0);
+               checkmem(ret == 0);
+               free(p);
+               free($2);
+       }
+       | '@' '.' ComponentIdList {
+               char *p = malloc(strlen($3) + 3);
+               int ret;
+               p[0] = '@';
+               p[1] = '.';
+               strcpy(p + 2, $3);
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               ret = asn1p_ref_add_component($$, p, 0);
+               checkmem(ret == 0);
+               free(p);
+               free($3);
+       }
+       ;
+
+/* identifier "." ... */
+ComponentIdList:
+       Identifier {
+               $$ = $1;
+       }
+       | ComponentIdList '.' Identifier {
+               int l1 = strlen($1);
+               int l3 = strlen($3);
+               $$ = malloc(l1 + 1 + l3 + 1);
+               memcpy($$, $1, l1);
+               $$[l1] = '.';
+               memcpy($$ + l1 + 1, $3, l3);
+               $$[l1 + 1 + l3] = '\0';
+               free($1);
+               free($3);
+       }
+       ;
+
+
+
+/*
+ * MARKERS
+ */
+
+optMarker:
+       {
+               $$.flags = EM_NOMARK;
+               $$.default_value = 0;
+       }
+       | Marker { $$ = $1; }
+       ;
+
+Marker:
+       TOK_OPTIONAL {
+               $$.flags = EM_OPTIONAL | EM_INDIRECT;
+               $$.default_value = 0;
+       }
+       | TOK_DEFAULT Value {
+               $$.flags = EM_DEFAULT;
+               $$.default_value = $2;
+       }
+       ;
+
+IdentifierList:
+    IdentifierElement {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+    }
+    | IdentifierList ',' IdentifierElement {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+    };
+
+IdentifierElement:
+    Identifier {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+    }
+
+NamedNumberList:
+       NamedNumber {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | NamedNumberList ',' NamedNumber {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+NamedNumber:
+       Identifier '(' SignedNumber ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = $3;
+       }
+       | Identifier '(' DefinedValue ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = $3;
+       };
+
+NamedBitList:
+       NamedBit {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | NamedBitList ',' NamedBit {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+NamedBit:
+       Identifier '(' TOK_number ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = asn1p_value_fromint($3);
+       }
+       | Identifier '(' DefinedValue ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = $3;
+       };
+
+Enumerations:
+    UniverationList {
+               $$ = $1;
+        asn1p_expr_t *first_memb = TQ_FIRST(&($$->members));
+        if(first_memb) {
+            if(first_memb->expr_type == A1TC_EXTENSIBLE) {
+                return yyerror(
+                    "The ENUMERATION cannot start with extension (...).");
+            }
+        } else {
+            return yyerror(
+                "The ENUMERATION list cannot be empty.");
+        }
+    }
+
+UniverationList:
+       UniverationElement {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               asn1p_expr_add($$, $1);
+       }
+       | UniverationList ',' UniverationElement {
+               $$ = $1;
+               asn1p_expr_add($$, $3);
+       }
+       ;
+
+UniverationElement:
+       Identifier {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+       }
+       | Identifier '(' SignedNumber ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = $3;
+       }
+       | Identifier '(' DefinedValue ')' {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->Identifier = $1;
+               $$->value = $3;
+       }
+       | SignedNumber {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->expr_type = A1TC_UNIVERVAL;
+               $$->meta_type = AMT_VALUE;
+               $$->value = $1;
+       }
+       | TOK_ThreeDots {
+               $$ = NEW_EXPR();
+               checkmem($$);
+               $$->Identifier = strdup("...");
+               checkmem($$->Identifier);
+               $$->expr_type = A1TC_EXTENSIBLE;
+               $$->meta_type = AMT_VALUE;
+       }
+       ;
+
+SignedNumber:
+       TOK_number {
+               $$ = asn1p_value_fromint($1);
+               checkmem($$);
+       }
+       | TOK_number_negative {
+               $$ = asn1p_value_fromint($1);
+               checkmem($$);
+       }
+       ;
+
+RealValue:
+       TOK_realnumber {
+               $$ = asn1p_value_fromdouble($1);
+               checkmem($$);
+       }
+       ;
+
+/*
+ * SEQUENCE definition.
+ * === EXAMPLE ===
+ * Struct1 ::= SEQUENCE {
+ *     memb1 Struct2,
+ *     memb2 SEQUENCE OF {
+ *             memb2-1 Struct 3
+ *     }
+ * }
+ * === EOF ===
+ */
+
+
+
+/*
+ * SET definition.
+ * === EXAMPLE ===
+ * Person ::= SET {
+ *     name [0] PrintableString (SIZE(1..20)),
+ *     country [1] PrintableString (SIZE(1..20)) DEFAULT default-country,
+ * }
+ * === EOF ===
+ */
+
+optTag:
+       { memset(&$$, 0, sizeof($$)); }
+       | Tag { $$ = $1; }
+       ;
+
+Tag:
+       TagTypeValue TagPlicit {
+               $$ = $1;
+               $$.tag_mode = $2.tag_mode;
+       }
+       ;
+
+TagTypeValue:
+       '[' TagClass TOK_number ']' {
+               $$ = $2;
+               $$.tag_value = $3;
+       };
+
+TagClass:
+       { $$.tag_class = TC_CONTEXT_SPECIFIC; }
+       | TOK_UNIVERSAL { $$.tag_class = TC_UNIVERSAL; }
+       | TOK_APPLICATION { $$.tag_class = TC_APPLICATION; }
+       | TOK_PRIVATE { $$.tag_class = TC_PRIVATE; }
+       ;
+
+TagPlicit:
+       { $$.tag_mode = TM_DEFAULT; }
+       | TOK_IMPLICIT { $$.tag_mode = TM_IMPLICIT; }
+       | TOK_EXPLICIT { $$.tag_mode = TM_EXPLICIT; }
+       ;
+
+TypeRefName:
+       TOK_typereference {
+               checkmem($1);
+               $$ = $1;
+       }
+       | TOK_capitalreference {
+               checkmem($1);
+               $$ = $1;
+       }
+       ;
+
+
+optIdentifier:
+       { $$ = 0; }
+       | Identifier {
+               $$ = $1;
+       }
+       ;
+
+Identifier:
+       TOK_identifier {
+               checkmem($1);
+               $$ = $1;
+       }
+       ;
+
+IdentifierAsReference:
+    Identifier {
+               $$ = asn1p_ref_new(yylineno, currentModule);
+               asn1p_ref_add_component($$, $1, RLT_lowercase);
+               free($1);
+    };
+
+IdentifierAsValue:
+    IdentifierAsReference {
+               $$ = asn1p_value_fromref($1, 0);
+    };
+
+%%
+
+
+/*
+ * Convert Xstring ('0101'B or '5'H) to the binary vector.
+ */
+static asn1p_value_t *
+_convert_bitstring2binary(char *str, int base) {
+       asn1p_value_t *val;
+       int slen;
+       int memlen;
+       int baselen;
+       int bits;
+       uint8_t *binary_vector;
+       uint8_t *bv_ptr;
+       uint8_t cur_val;
+
+       assert(str);
+       assert(str[0] == '\'');
+
+       switch(base) {
+       case 'B':
+               baselen = 1;
+               break;
+       case 'H':
+               baselen = 4;
+               break;
+       default:
+               assert(base == 'B' || base == 'H');
+               errno = EINVAL;
+               return NULL;
+       }
+
+       slen = strlen(str);
+       assert(str[slen - 1] == base);
+       assert(str[slen - 2] == '\'');
+
+       memlen = slen / (8 / baselen);  /* Conservative estimate */
+
+       bv_ptr = binary_vector = malloc(memlen + 1);
+       if(bv_ptr == NULL)
+               /* ENOMEM */
+               return NULL;
+
+       cur_val = 0;
+       bits = 0;
+       while(*(++str) != '\'') {
+               switch(baselen) {
+               case 1:
+                       switch(*str) {
+                       case '1':
+                               cur_val |= 1 << (7 - (bits % 8));
+                       case '0':
+                               break;
+                       default:
+                               assert(!"_y UNREACH1");
+                       case ' ': case '\r': case '\n':
+                               continue;
+                       }
+                       break;
+               case 4:
+                       switch(*str) {
+                       case '0': case '1': case '2': case '3': case '4':
+                       case '5': case '6': case '7': case '8': case '9':
+                               cur_val |= (*str - '0') << (4 - (bits % 8));
+                               break;
+                       case 'A': case 'B': case 'C':
+                       case 'D': case 'E': case 'F':
+                               cur_val |= ((*str - 'A') + 10)
+                                       << (4 - (bits % 8));
+                               break;
+                       default:
+                               assert(!"_y UNREACH2");
+                       case ' ': case '\r': case '\n':
+                               continue;
+                       }
+                       break;
+               }
+
+               bits += baselen;
+               if((bits % 8) == 0) {
+                       *bv_ptr++ = cur_val;
+                       cur_val = 0;
+               }
+       }
+
+       *bv_ptr = cur_val;
+       assert((bv_ptr - binary_vector) <= memlen);
+
+       val = asn1p_value_frombits(binary_vector, bits, 0);
+       if(val == NULL) {
+               free(binary_vector);
+       }
+
+       return val;
+}
+
+/*
+ * For unnamed types (used in old X.208 compliant modules)
+ * generate some sort of interim names, to not to force human being to fix
+ * the specification's compliance to modern ASN.1 standards.
+ */
+static void
+_fixup_anonymous_identifier(asn1p_expr_t *expr) {
+       char *p;
+       assert(expr->Identifier == 0);
+
+       /*
+        * Try to figure out the type name
+        * without going too much into details
+        */
+       expr->Identifier = ASN_EXPR_TYPE2STR(expr->expr_type);
+       if(expr->reference && expr->reference->comp_count > 0)
+               expr->Identifier = expr->reference->components[0].name;
+
+       fprintf(stderr,
+               "WARNING: Line %d: expected lower-case member identifier, "
+               "found an unnamed %s.\n"
+               "WARNING: Obsolete X.208 syntax detected, "
+               "please give the member a name.\n",
+               yylineno, expr->Identifier ? expr->Identifier : "type");
+
+       if(!expr->Identifier)
+               expr->Identifier = "unnamed";
+       expr->Identifier = strdup(expr->Identifier);
+       assert(expr->Identifier);
+       /* Make a lowercase identifier from the type name */
+       for(p = expr->Identifier; *p; p++) {
+               switch(*p) {
+               case 'A' ... 'Z': *p += 32; break;
+               case ' ': *p = '_'; break;
+               case '-': *p = '_'; break;
+               }
+       }
+       fprintf(stderr, "NOTE: Assigning temporary identifier \"%s\". "
+                       "Name clash may occur later.\n",
+               expr->Identifier);
+}
+
+static int
+yyerror(const char *msg) {
+       extern char *asn1p_text;
+       fprintf(stderr,
+               "ASN.1 grammar parse error "
+               "near %s:%d (token \"%s\"): %s\n",
+               ASN_FILENAME, yylineno, asn1p_text, msg);
+       return -1;
+}
+
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
new file mode 100644 (file)
index 0000000..fcc59b1
--- /dev/null
@@ -0,0 +1,183 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "asn1parser.h"
+#include "asn1p_list.h"
+
+int asn1p_parse(void **param);
+
+void *asn1p__scan_bytes(const char *, int len);
+void *asn1p__delete_buffer(void *);
+void *asn1p_restart(FILE *);
+
+extern int asn1p_lineno;
+
+static int _asn1p_set_flags(enum asn1p_flags flags);
+static int _asn1p_fix_modules(asn1p_t *a, const char *fname);
+
+/*
+ * Parse the given buffer.
+ */
+asn1p_t *
+asn1p_parse_buffer(const char *buffer, int size /* = -1 */, const char *debug_filename, int initial_lineno, enum asn1p_flags flags) {
+       asn1p_t *a = 0;
+       void *ap;
+       void *ybuf;
+       int ret;
+
+       if(_asn1p_set_flags(flags)) {
+               /* EINVAL */
+               return 0;
+       }
+
+       if(size < 0)
+               size = (int)strlen(buffer);
+
+       ybuf = asn1p__scan_bytes(buffer, size);
+       if(!ybuf) {
+               assert(ybuf);
+               return 0;
+       }
+
+       asn1p_lineno = initial_lineno;
+
+       ap = (void *)&a;
+       asn1p_parse_debug_filename = debug_filename;
+       ret = asn1p_parse(ap);
+       asn1p_parse_debug_filename = NULL;
+
+       asn1p__delete_buffer(ybuf);
+
+       if(ret == 0) {
+               assert(a);
+               if(_asn1p_fix_modules(a, "-")) {
+                       asn1p_delete(a);
+                       return NULL;    /* FIXME: destroy (a) */
+               }
+       } else if(a) {
+               asn1p_delete(a);
+               a = NULL;
+       }
+
+       return a;
+}
+
+
+/*
+ * Parse the file identified by its name.
+ */
+asn1p_t *
+asn1p_parse_file(const char *filename, enum asn1p_flags flags) {
+#ifndef        _WIN32
+       struct stat sb;
+#endif
+       asn1p_t *a = 0;
+       void *ap;
+       FILE *fp;
+       int ret;
+
+       if(_asn1p_set_flags(flags)) {
+               /* EINVAL */
+               return 0;
+       }
+
+       fp = fopen(filename, "r");
+       if(fp == NULL) {
+               perror(filename);
+               return NULL;
+       }
+
+#ifndef        _WIN32
+       if(fstat(fileno(fp), &sb)
+       || !S_ISREG(sb.st_mode)) {
+               fclose(fp);
+               fprintf(stderr, "%s file not recognized: Bad file format\n",
+                       filename);
+               errno = EINVAL;
+               return NULL;
+       }
+#endif /* _WIN32 */
+
+       asn1p_lineno = 1;
+
+       asn1p_restart(fp);
+
+       ap = (void *)&a;
+       asn1p_parse_debug_filename = filename;
+       ret = asn1p_parse(ap);
+       asn1p_parse_debug_filename = NULL;
+
+       fclose(fp);
+
+       if(ret == 0) {
+               assert(a);
+               if(_asn1p_fix_modules(a, filename)) {
+                       asn1p_delete(a);
+                       return NULL;    /* FIXME: destroy (a) */
+               }
+       } else if(a) {
+               asn1p_delete(a);
+               a = NULL;
+       }
+
+       return a;
+}
+
+extern int asn1p_lexer_types_year;
+extern int asn1p_lexer_constructs_year;
+extern int asn1p_lexer_extended_values;
+extern int asn1p__flex_debug;
+extern int asn1p_debug;
+
+static int
+_asn1p_set_flags(enum asn1p_flags flags) {
+
+       asn1p_lexer_types_year = 0;
+       asn1p_lexer_constructs_year = 0;
+       asn1p__flex_debug = 0;
+       asn1p_debug = 0;
+
+       if(flags & A1P_DEBUG_LEXER) {
+               flags &= ~A1P_DEBUG_LEXER;
+               asn1p__flex_debug = 1;
+    }
+
+       if(flags & A1P_DEBUG_PARSER) {
+               flags &= ~A1P_DEBUG_PARSER;
+               asn1p_debug = 1;
+    }
+
+    if(flags & A1P_EXTENDED_VALUES) {
+        flags &= ~A1P_EXTENDED_VALUES;
+        asn1p_lexer_extended_values = 1;
+    } else {
+        asn1p_lexer_extended_values = 0;
+    }
+
+    /*
+        * Check that we haven't missed an unknown flag.
+        */
+       if(flags) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       return 0;
+}
+
+static int
+_asn1p_fix_modules(asn1p_t *a, const char *fname) {
+       asn1p_module_t *mod;
+       TQ_FOR(mod, &(a->modules), mod_next) {
+               mod->source_file_name = strdup(fname);
+               if(mod->source_file_name == NULL)
+                       return -1;
+               mod->asn1p = a;
+       }
+       return 0;
+}
diff --git a/libasn1parser/asn1parser.h b/libasn1parser/asn1parser.h
new file mode 100644 (file)
index 0000000..0819816
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * This is a parser of the ASN.1 grammar.
+ */
+#ifndef        ASN1PARSER_H
+#define        ASN1PARSER_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#include "asn1_ref.h"
+#include "asn1_buffer.h"
+#include "asn1_namespace.h"
+
+#include "asn1p_integer.h"
+#include "asn1p_list.h"
+#include "asn1p_oid.h"         /* Object identifiers (OIDs) */
+#include "asn1p_module.h"      /* ASN.1 definition module */
+#include "asn1p_value.h"       /* Value definition */
+#include "asn1p_param.h"       /* Parameterization */
+#include "asn1p_constr.h"      /* Type Constraints */
+#include "asn1p_xports.h"      /* IMports/EXports */
+#include "asn1p_class.h"       /* CLASS-related stuff */
+#include "asn1p_expr.h"                /* A single ASN.1 expression */
+
+/*
+ * Parser flags.
+ */
+enum asn1p_flags {
+    A1P_NOFLAGS,
+    /*
+     * Enable verbose debugging output from lexer and parser.
+     */
+    A1P_DEBUG_LEXER = 0x01,
+    A1P_DEBUG_PARSER = 0x02,
+    /*
+     * Unlock internal helper value types.
+     */
+    A1P_EXTENDED_VALUES = 0x04
+};
+
+/*
+ * Perform low-level parsing of ASN.1 module[s]
+ * and return a list of module trees.
+ */
+asn1p_t        *asn1p_parse_file(const char *filename,
+       enum asn1p_flags);
+asn1p_t        *asn1p_parse_buffer(const char *buffer, int size /* = -1 */,
+       const char *debug_filename, int initial_lineno,
+       enum asn1p_flags);
+
+extern const char *asn1p_parse_debug_filename;
+
+int asn1p_lex_destroy();
+
+#endif /* ASN1PARSER_H */
diff --git a/libasn1parser/check_asn1p_integer.c b/libasn1parser/check_asn1p_integer.c
new file mode 100644 (file)
index 0000000..cb479ff
--- /dev/null
@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <assert.h>
+#include <errno.h>
+
+#include "asn1p_integer.h"
+
+static void check(int lineno, asn1c_integer_t value, const char *expected);
+
+struct {
+    uint8_t *buf; size_t size;
+} ff = {
+    (uint8_t *)"sdf", 3
+};
+
+int main() {
+
+    check(__LINE__, 0, "{ (uint8_t *)\"\\x00\\0\", 1 }");
+    check(__LINE__, 1, "{ (uint8_t *)\"\\x01\\0\", 1 }");
+    check(__LINE__, 127, "{ (uint8_t *)\"\\x7f\\0\", 1 }");
+    check(__LINE__, 128, "{ (uint8_t *)\"\\x00\\x80\\0\", 2 }");
+    check(__LINE__, 129, "{ (uint8_t *)\"\\x00\\x81\\0\", 2 }");
+
+    check(__LINE__, -1, "{ (uint8_t *)\"\\xff\\0\", 1 }");
+    check(__LINE__, -2, "{ (uint8_t *)\"\\xfe\\0\", 1 }");
+    check(__LINE__, -127, "{ (uint8_t *)\"\\x81\\0\", 1 }");
+    check(__LINE__, -128, "{ (uint8_t *)\"\\x80\\0\", 1 }");
+    check(__LINE__, -129, "{ (uint8_t *)\"\\xff\\x7f\\0\", 2 }");
+    check(__LINE__, -254, "{ (uint8_t *)\"\\xff\\x02\\0\", 2 }");
+    check(__LINE__, -255, "{ (uint8_t *)\"\\xff\\x01\\0\", 2 }");
+    check(__LINE__, -256, "{ (uint8_t *)\"\\xff\\x00\\0\", 2 }");
+    check(__LINE__, -257, "{ (uint8_t *)\"\\xfe\\xff\\0\", 2 }");
+
+    check(__LINE__, ~(asn1c_integer_t)0, "{ (uint8_t *)\"\\xff\\0\", 1 }");
+
+    switch(sizeof(asn1c_integer_t)) {
+    case 4:
+        check(__LINE__,
+              ~(asn1c_integer_t)0
+                  & ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
+              "{ (uint8_t *)\""
+              "\\x7f\\xff\\xff\\xff"
+              "\\0\", 4 }");
+        break;
+    case 8:
+        check(__LINE__,
+              ~(asn1c_integer_t)0
+                  & ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
+              "{ (uint8_t *)\""
+              "\\x7f\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
+              "\\0\", 8 }");
+        break;
+    case 16:
+        check(__LINE__,
+              ~(asn1c_integer_t)0
+                  & ~((asn1c_integer_t)1 << (8 * sizeof(asn1c_integer_t) - 1)),
+              "{ (uint8_t *)\""
+              "\\x7f\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
+              "\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff"
+              "\\0\", 16 }");
+
+        break;
+    default:
+        assert(!"Unreachable");
+    }
+
+    return 0;
+}
+
+static void check(int lineno, asn1c_integer_t value, const char *expected) {
+    abuf *ab;
+    ab = asn1p_integer_as_INTEGER(value);
+    assert(ab);
+    if(strcmp(ab->buffer, expected)) {
+        fprintf(stderr, "%02d: %s -> [%s], expected [%s]\n", lineno,
+                asn1p_itoa(value), ab->buffer, expected);
+        assert(strcmp(ab->buffer, expected) == 0);
+    }
+    printf("%02d: %s -> %s\n", lineno, asn1p_itoa(value), ab->buffer);
+    abuf_free(ab);
+}
diff --git a/libasn1parser/expr-h.pl b/libasn1parser/expr-h.pl
new file mode 100755 (executable)
index 0000000..99520b6
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env perl
+
+
+print<<EOM;
+/*
+ * This file is automatically generated by $0
+ * DO NOT EDIT MANUALLY, fix the $0 instead if necessary.
+ */
+#ifndef        ASN1_PARSER_EXPR_STR_H
+#define        ASN1_PARSER_EXPR_STR_H
+
+#include <assert.h>
+
+#ifndef        __GNUC__
+#define        __attribute__(x)        /* unused */
+#endif
+
+static char *asn1p_expr_type2str[] __attribute__ ((unused)) = {
+EOM
+
+while(<>) {
+       chomp;
+       next if(/TYPE_MAX/);
+       next unless(/^[ \t]+(ASN_[A-Z]+_([A-Za-z0-9_]+))/);
+
+       print "\t[ $1 ]\t = ";
+
+       $_ = $2;
+       if($_ eq "RELATIVE_OID") {
+               print '"RELATIVE-OID"';
+       } else {
+               s/_/ /;
+               print '"'.$_.'"';
+       }
+
+       print ",\n";
+}
+
+print<<EOM;
+};
+
+/*
+ * Convert the ASN.1 expression type back into the string representation.
+ */
+#define ASN_EXPR_TYPE2STR(type) _asn1p_expr_type2string(type)
+
+static inline char * __attribute__((unused))
+_asn1p_expr_type2string(asn1p_expr_type_e type) {
+    assert((signed int)type >= 0);
+    if(type < sizeof(asn1p_expr_type2str)/sizeof(asn1p_expr_type2str[0]))
+        return asn1p_expr_type2str[type];
+    return NULL;
+}
+
+#endif /* ASN1_PARSER_EXPR_STR_H */
+EOM
diff --git a/libasn1print/.deps/asn1print.Plo b/libasn1print/.deps/asn1print.Plo
new file mode 100644 (file)
index 0000000..c72bcb5
--- /dev/null
@@ -0,0 +1,181 @@
+asn1print.lo: asn1print.c /usr/include/stdc-predef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \
+ /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \
+ /usr/include/x86_64-linux-gnu/asm/errno.h \
+ /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \
+ /usr/include/assert.h ../libasn1common/asn1_buffer.h \
+ ../libasn1common/asn1_namespace.h ../libasn1parser/asn1parser.h \
+ ../config.h ../libasn1common/asn1_ref.h ../libasn1parser/asn1p_integer.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \
+ /usr/include/inttypes.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h \
+ /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ ../libasn1parser/asn1p_list.h ../libasn1parser/asn1p_oid.h \
+ ../libasn1parser/asn1p_module.h ../libasn1parser/asn1p_value.h \
+ ../libasn1parser/asn1p_param.h ../libasn1parser/asn1p_constr.h \
+ ../libasn1parser/asn1p_xports.h ../libasn1parser/asn1p_class.h \
+ ../libasn1parser/asn1p_expr.h ../libasn1parser/asn1p_expr_str.h \
+ ../libasn1parser/asn1p_expr2uclass.h ../libasn1fix/asn1fix_export.h \
+ ../libasn1fix/asn1fix_tags.h ../libasn1fix/asn1fix_crange.h asn1print.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+/usr/include/errno.h:
+
+/usr/include/x86_64-linux-gnu/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/x86_64-linux-gnu/asm/errno.h:
+
+/usr/include/asm-generic/errno.h:
+
+/usr/include/asm-generic/errno-base.h:
+
+/usr/include/assert.h:
+
+../libasn1common/asn1_buffer.h:
+
+../libasn1common/asn1_namespace.h:
+
+../libasn1parser/asn1parser.h:
+
+../config.h:
+
+../libasn1common/asn1_ref.h:
+
+../libasn1parser/asn1p_integer.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/inttypes.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h:
+
+/usr/include/stdint.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+../libasn1parser/asn1p_list.h:
+
+../libasn1parser/asn1p_oid.h:
+
+../libasn1parser/asn1p_module.h:
+
+../libasn1parser/asn1p_value.h:
+
+../libasn1parser/asn1p_param.h:
+
+../libasn1parser/asn1p_constr.h:
+
+../libasn1parser/asn1p_xports.h:
+
+../libasn1parser/asn1p_class.h:
+
+../libasn1parser/asn1p_expr.h:
+
+../libasn1parser/asn1p_expr_str.h:
+
+../libasn1parser/asn1p_expr2uclass.h:
+
+../libasn1fix/asn1fix_export.h:
+
+../libasn1fix/asn1fix_tags.h:
+
+../libasn1fix/asn1fix_crange.h:
+
+asn1print.h:
diff --git a/libasn1print/Makefile b/libasn1print/Makefile
new file mode 100644 (file)
index 0000000..4e4b02d
--- /dev/null
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# libasn1print/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = libasn1print
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1print_la_DEPENDENCIES =  \
+       $(top_builddir)/libasn1common/libasn1common.la
+am_libasn1print_la_OBJECTS = asn1print.lo
+libasn1print_la_OBJECTS = $(am_libasn1print_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1print_la_SOURCES)
+DIST_SOURCES = $(libasn1print_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/libasn1print
+abs_srcdir = /home/nokia/mouse07410/asn1c/libasn1print
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+AM_CFLAGS = 
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1print.la
+libasn1print_la_LIBADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1print_la_SOURCES = \
+    asn1print.c asn1print.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1print/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1print/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1print.la: $(libasn1print_la_OBJECTS) $(libasn1print_la_DEPENDENCIES) $(EXTRA_libasn1print_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1print_la_OBJECTS) $(libasn1print_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/asn1print.Plo
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/libasn1print/Makefile.am b/libasn1print/Makefile.am
new file mode 100644 (file)
index 0000000..a1bae71
--- /dev/null
@@ -0,0 +1,13 @@
+
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS =                       \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1print.la
+
+libasn1print_la_LIBADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1print_la_SOURCES =           \
+    asn1print.c asn1print.h
+
diff --git a/libasn1print/Makefile.in b/libasn1print/Makefile.in
new file mode 100644 (file)
index 0000000..9e56947
--- /dev/null
@@ -0,0 +1,624 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = libasn1print
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libasn1print_la_DEPENDENCIES =  \
+       $(top_builddir)/libasn1common/libasn1common.la
+am_libasn1print_la_OBJECTS = asn1print.lo
+libasn1print_la_OBJECTS = $(am_libasn1print_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1print_la_SOURCES)
+DIST_SOURCES = $(libasn1print_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+AM_CFLAGS = @ADD_CFLAGS@
+AM_CPPFLAGS = \
+    -I$(top_srcdir)/libasn1common   \
+    -I$(top_srcdir)/libasn1parser   \
+    -I$(top_srcdir)/libasn1fix
+
+noinst_LTLIBRARIES = libasn1print.la
+libasn1print_la_LIBADD = $(top_builddir)/libasn1common/libasn1common.la
+libasn1print_la_SOURCES = \
+    asn1print.c asn1print.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libasn1print/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign libasn1print/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1print.la: $(libasn1print_la_OBJECTS) $(libasn1print_la_DEPENDENCIES) $(EXTRA_libasn1print_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK)  $(libasn1print_la_OBJECTS) $(libasn1print_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1print.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/libasn1print/README b/libasn1print/README
new file mode 100644 (file)
index 0000000..5c1071c
--- /dev/null
@@ -0,0 +1,4 @@
+
+Ad hoc ASN tree printing procedures. Use for debugging purposes, this library
+isn't thought through enough to be universally useful or even accurate.
+
diff --git a/libasn1print/asn1print.c b/libasn1print/asn1print.c
new file mode 100644 (file)
index 0000000..61b9528
--- /dev/null
@@ -0,0 +1,1052 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+#include <asn1_buffer.h>
+#include <asn1_namespace.h>
+#include <asn1parser.h>
+#include <asn1fix_export.h>
+#include <asn1fix_crange.h>
+
+#include "asn1print.h"
+
+static abuf all_output_;
+
+typedef enum {
+    PRINT_STDOUT,
+    GLOBAL_BUFFER,
+} print_method_e;
+static print_method_e print_method_;
+
+#define        INDENT(fmt, args...)    do {        \
+        if(!(flags & APF_NOINDENT)) {       \
+            int tmp_i = level;              \
+            while(tmp_i--) safe_printf("    ");  \
+        }                                   \
+        safe_printf(fmt, ##args);                \
+    } while(0)
+
+static int asn1print_module(asn1p_t *asn, asn1p_module_t *mod, enum asn1print_flags flags);
+static int asn1print_oid(int prior_len, asn1p_oid_t *oid, enum asn1print_flags flags);
+static int asn1print_ref(const asn1p_ref_t *ref, enum asn1print_flags flags);
+static int asn1print_tag(const asn1p_expr_t *tc, enum asn1print_flags flags);
+static int asn1print_params(const asn1p_paramlist_t *pl,enum asn1print_flags flags);
+static int asn1print_with_syntax(const asn1p_wsyntx_t *wx, enum asn1print_flags flags);
+static int asn1print_constraint(const asn1p_constraint_t *, enum asn1print_flags);
+static int asn1print_value(const asn1p_value_t *val, enum asn1print_flags flags);
+static int asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level);
+static int asn1print_expr_dtd(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level);
+
+/* Check printf's error code, to be pedantic. */
+static int safe_printf(const char *fmt, ...) {
+    int ret = 0;
+    va_list ap;
+    va_start(ap, fmt);
+
+    switch(print_method_) {
+    case PRINT_STDOUT:
+        ret = vprintf(fmt, ap);
+        break;
+    case GLOBAL_BUFFER:
+        ret = abuf_vprintf(&all_output_, fmt, ap);
+        break;
+    }
+    assert(ret >= 0);
+    va_end(ap);
+
+    return ret;
+}
+
+/* Pedantically check fwrite's return value. */
+static size_t safe_fwrite(const void *ptr, size_t size) {
+    size_t ret;
+
+    switch(print_method_) {
+    case PRINT_STDOUT:
+        ret = fwrite(ptr, 1, size, stdout);
+        assert(ret == size);
+        break;
+    case GLOBAL_BUFFER:
+        abuf_add_bytes(&all_output_, ptr, size);
+        ret = size;
+        break;
+    }
+
+    return ret;
+}
+
+/*
+ * Print the contents of the parsed ASN tree.
+ */
+int
+asn1print(asn1p_t *asn, enum asn1print_flags flags) {
+       asn1p_module_t *mod;
+       int modno = 0;
+
+       if(asn == NULL) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(flags & APF_PRINT_XML_DTD)
+               safe_printf("<!-- XML DTD generated by asn1c-" VERSION " -->\n\n");
+
+       TQ_FOR(mod, &(asn->modules), mod_next) {
+               if(mod->_tags & MT_STANDARD_MODULE)
+                       return 0; /* Ignore modules imported from skeletons */
+               if(modno++) safe_printf("\n");
+               asn1print_module(asn, mod, flags);
+       }
+
+       if(flags & APF_PRINT_XML_DTD) {
+               /* Values for BOOLEAN */
+               safe_printf("<!ELEMENT true EMPTY>\n");
+               safe_printf("<!ELEMENT false EMPTY>\n");
+       }
+
+       return 0;
+}
+
+static int
+asn1print_module(asn1p_t *asn, asn1p_module_t *mod, enum asn1print_flags flags) {
+       asn1p_expr_t *tc;
+
+       if(flags & APF_PRINT_XML_DTD)
+               safe_printf("<!-- ASN.1 module\n");
+
+       safe_printf("%s ", mod->ModuleName);
+       if(mod->module_oid) {
+               asn1print_oid(strlen(mod->ModuleName), mod->module_oid, flags);
+               safe_printf("\n");
+       }
+
+       if(flags & APF_PRINT_XML_DTD) {
+               if(mod->source_file_name
+               && strcmp(mod->source_file_name, "-"))
+                       safe_printf("found in %s", mod->source_file_name);
+               safe_printf(" -->\n\n");
+
+               TQ_FOR(tc, &(mod->members), next) {
+                       asn1print_expr_dtd(asn, mod, tc, flags, 0);
+               }
+
+               return 0;
+       }
+
+       safe_printf("DEFINITIONS");
+
+       if(mod->module_flags & MSF_TAG_INSTRUCTIONS)
+               safe_printf(" TAG INSTRUCTIONS");
+       if(mod->module_flags & MSF_XER_INSTRUCTIONS)
+               safe_printf(" XER INSTRUCTIONS");
+       if(mod->module_flags & MSF_EXPLICIT_TAGS)
+               safe_printf(" EXPLICIT TAGS");
+       if(mod->module_flags & MSF_IMPLICIT_TAGS)
+               safe_printf(" IMPLICIT TAGS");
+       if(mod->module_flags & MSF_AUTOMATIC_TAGS)
+               safe_printf(" AUTOMATIC TAGS");
+       if(mod->module_flags & MSF_EXTENSIBILITY_IMPLIED)
+               safe_printf(" EXTENSIBILITY IMPLIED");
+
+       safe_printf(" ::=\n");
+       safe_printf("BEGIN\n\n");
+
+       TQ_FOR(tc, &(mod->members), next) {
+               asn1print_expr(asn, mod, tc, flags, 0);
+               if(flags & APF_PRINT_CONSTRAINTS)
+                       safe_printf("\n");
+               else
+                       safe_printf("\n\n");
+       }
+
+       safe_printf("END\n");
+
+       return 0;
+}
+
+static int
+asn1print_oid(int prior_len, asn1p_oid_t *oid, enum asn1print_flags flags) {
+       size_t accum = prior_len;
+       int ac;
+
+       (void)flags;    /* Unused argument */
+
+       safe_printf("{");
+       for(ac = 0; ac < oid->arcs_count; ac++) {
+               const char *arcname = oid->arcs[ac].name;
+
+               if(accum + strlen(arcname ? arcname : "") > 72) {
+                       safe_printf("\n\t");
+                       accum = 8;
+               } else {
+                       accum += safe_printf(" ");
+               }
+
+               if(arcname) {
+                       accum += safe_printf("%s", arcname);
+                       if(oid->arcs[ac].number >= 0) {
+                               accum += safe_printf("(%s)",
+                                       asn1p_itoa(oid->arcs[ac].number));
+                       }
+               } else {
+                       accum += safe_printf("%s", asn1p_itoa(oid->arcs[ac].number));
+               }
+       }
+       safe_printf(" }");
+
+       return 0;
+}
+
+static int
+asn1print_ref(const asn1p_ref_t *ref, enum asn1print_flags flags) {
+
+       (void)flags;    /* Unused argument */
+
+       for(size_t cc = 0; cc < ref->comp_count; cc++) {
+               if(cc) safe_printf(".");
+               safe_printf("%s", ref->components[cc].name);
+       }
+
+       return 0;
+}
+
+static int
+asn1print_tag(const asn1p_expr_t *tc, enum asn1print_flags flags) {
+       const struct asn1p_type_tag_s *tag = &tc->tag;
+
+       (void)flags;    /* Unused argument */
+
+       safe_printf("%s", asn1p_tag2string(tag, 0));
+
+       return 0;
+}
+
+static int
+asn1print_value(const asn1p_value_t *val, enum asn1print_flags flags) {
+
+       if(val == NULL)
+               return 0;
+
+       switch(val->type) {
+       case ATV_NOVALUE:
+               break;
+       case ATV_NULL:
+               safe_printf("NULL");
+               return 0;
+       case ATV_REAL:
+               safe_printf("%f", val->value.v_double);
+               return 0;
+       case ATV_TYPE:
+               asn1print_expr(val->value.v_type->module->asn1p,
+                       val->value.v_type->module,
+                       val->value.v_type, flags, 0);
+               return 0;
+       case ATV_INTEGER:
+               safe_printf("%s", asn1p_itoa(val->value.v_integer));
+               return 0;
+       case ATV_MIN: safe_printf("MIN"); return 0;
+       case ATV_MAX: safe_printf("MAX"); return 0;
+       case ATV_FALSE: safe_printf("FALSE"); return 0;
+       case ATV_TRUE: safe_printf("TRUE"); return 0;
+       case ATV_TUPLE:
+               safe_printf("{%d, %d}",
+                       (int)(val->value.v_integer >> 4),
+                       (int)(val->value.v_integer & 0x0f));
+               return 0;
+       case ATV_QUADRUPLE:
+               safe_printf("{%d, %d, %d, %d}",
+                       (int)((val->value.v_integer >> 24) & 0xff),
+                       (int)((val->value.v_integer >> 16) & 0xff),
+                       (int)((val->value.v_integer >> 8) & 0xff),
+                       (int)((val->value.v_integer >> 0) & 0xff)
+               );
+               return 0;
+       case ATV_STRING:
+               {
+                       char *p = (char *)val->value.string.buf;
+                       safe_printf("\"");
+                       if(strchr(p, '"')) {
+                               /* Mask quotes */
+                               for(; *p; p++) {
+                                       if(*p == '"')
+                                               safe_printf("%c", *p);
+                    safe_printf("%c", *p);
+                               }
+                       } else {
+                               safe_printf("%s", p);
+                       }
+                       safe_printf("\"");
+               }
+               return 0;
+       case ATV_UNPARSED:
+               safe_printf("%s", (char *)val->value.string.buf);
+               return 0;
+       case ATV_BITVECTOR:
+               {
+                       uint8_t *bitvector;
+                       int bits;
+                       int i;
+
+                       bitvector = val->value.binary_vector.bits;
+                       bits = val->value.binary_vector.size_in_bits;
+
+                       safe_printf("'");
+                       if(bits%8) {
+                               for(i = 0; i < bits; i++) {
+                                       uint8_t uc;
+                                       uc = bitvector[i>>3];
+                                       safe_printf("%c", ((uc >> (7-(i%8)))&1)?'1':'0');
+                               }
+                               safe_printf("'B");
+                       } else {
+                               char hextable[16] = "0123456789ABCDEF";
+                               for(i = 0; i < (bits>>3); i++) {
+                                       safe_printf("%c", hextable[bitvector[i] >> 4]);
+                                       safe_printf("%c", hextable[bitvector[i] & 0x0f]);
+                               }
+                               safe_printf("'H");
+                       }
+                       return 0;
+               }
+       case ATV_REFERENCED:
+               return asn1print_ref(val->value.reference, flags);
+       case ATV_VALUESET:
+               return asn1print_constraint(val->value.constraint, flags);
+       case ATV_CHOICE_IDENTIFIER:
+               safe_printf("%s: ", val->value.choice_identifier.identifier);
+               return asn1print_value(val->value.choice_identifier.value, flags);
+       }
+
+       assert(val->type || !"Unknown");
+
+       return 0;
+}
+
+const char *
+asn1p_constraint_string(const asn1p_constraint_t *ct) {
+    size_t old_len = all_output_.length;
+    print_method_e old_method = print_method_;
+    print_method_ = GLOBAL_BUFFER;
+    asn1print_constraint(ct, APF_NOINDENT);
+    print_method_ = old_method;
+    return &all_output_.buffer[old_len];
+}
+
+static int
+asn1print_constraint(const asn1p_constraint_t *ct, enum asn1print_flags flags) {
+       int symno = 0;
+       int perhaps_subconstraints = 0;
+
+       if(ct == 0) return 0;
+
+       switch(ct->type) {
+       case ACT_EL_TYPE:
+               asn1print_value(ct->containedSubtype, flags);
+               perhaps_subconstraints = 1;
+               break;
+       case ACT_EL_VALUE:
+               asn1print_value(ct->value, flags);
+               perhaps_subconstraints = 1;
+               break;
+       case ACT_EL_RANGE:
+       case ACT_EL_LLRANGE:
+       case ACT_EL_RLRANGE:
+       case ACT_EL_ULRANGE:
+               asn1print_value(ct->range_start, flags);
+                       switch(ct->type) {
+                       case ACT_EL_RANGE: safe_printf(".."); break;
+                       case ACT_EL_LLRANGE: safe_printf("<.."); break;
+                       case ACT_EL_RLRANGE: safe_printf("..<"); break;
+                       case ACT_EL_ULRANGE: safe_printf("<..<"); break;
+                       default: safe_printf("?..?"); break;
+                       }
+               asn1print_value(ct->range_stop, flags);
+               break;
+       case ACT_EL_EXT:
+               safe_printf("...");
+               break;
+       case ACT_CT_SIZE:
+       case ACT_CT_FROM:
+               switch(ct->type) {
+               case ACT_CT_SIZE: safe_printf("SIZE"); break;
+               case ACT_CT_FROM: safe_printf("FROM"); break;
+               default: safe_printf("??? "); break;
+               }
+               assert(ct->el_count != 0);
+               assert(ct->el_count == 1);
+               asn1print_constraint(ct->elements[0], flags);
+               break;
+       case ACT_CT_WCOMP:
+               assert(ct->el_count != 0);
+               assert(ct->el_count == 1);
+               safe_printf("WITH COMPONENT");
+               perhaps_subconstraints = 1;
+               break;
+       case ACT_CT_WCOMPS: {
+                       unsigned int i;
+                       safe_printf("WITH COMPONENTS { ");
+                       for(i = 0; i < ct->el_count; i++) {
+                               asn1p_constraint_t *cel = ct->elements[i];
+                               if(i) safe_printf(", ");
+                               asn1print_constraint(cel, flags);
+                               switch(cel->presence) {
+                               case ACPRES_DEFAULT: break;
+                               case ACPRES_PRESENT: safe_printf(" PRESENT"); break;
+                               case ACPRES_ABSENT: safe_printf(" ABSENT"); break;
+                               case ACPRES_OPTIONAL: safe_printf(" OPTIONAL");break;
+                               }
+                       }
+                       safe_printf(" }");
+               }
+               break;
+       case ACT_CT_CTDBY:
+               safe_printf("CONSTRAINED BY ");
+               assert(ct->value->type == ATV_UNPARSED);
+               safe_fwrite(ct->value->value.string.buf, ct->value->value.string.size);
+               break;
+       case ACT_CT_CTNG:
+               safe_printf("CONTAINING ");
+               asn1print_expr(ct->value->value.v_type->module->asn1p,
+                       ct->value->value.v_type->module,
+                       ct->value->value.v_type,
+                       flags, 1);
+               break;
+       case ACT_CT_PATTERN:
+               safe_printf("PATTERN ");
+               asn1print_value(ct->value, flags);
+               break;
+       case ACT_CA_SET: symno++;   /* Fall through */
+       case ACT_CA_CRC: symno++;   /* Fall through */
+       case ACT_CA_CSV: symno++;   /* Fall through */
+       case ACT_CA_UNI: symno++;   /* Fall through */
+       case ACT_CA_INT: symno++;   /* Fall through */
+       case ACT_CA_EXC:
+               {
+                       char *symtable[] = { " EXCEPT ", " ^ ", " | ", ",",
+                                       "", "(" };
+                       unsigned int i;
+            if(ct->type == ACT_CA_SET) safe_printf("(");
+                       for(i = 0; i < ct->el_count; i++) {
+                               if(i) safe_printf("%s", symtable[symno]);
+                               if(ct->type == ACT_CA_CRC) safe_printf("{");
+                               asn1print_constraint(ct->elements[i], flags);
+                               if(ct->type == ACT_CA_CRC) safe_printf("}");
+                               if(ct->type == ACT_CA_SET && i+1 < ct->el_count)
+                                       safe_printf(") ");
+                       }
+            if(ct->type == ACT_CA_SET) safe_printf(")");
+               }
+               break;
+       case ACT_CA_AEX:
+               assert(ct->el_count == 1);
+               safe_printf("ALL EXCEPT");
+               perhaps_subconstraints = 1;
+               break;
+       case ACT_INVALID:
+               assert(ct->type != ACT_INVALID);
+               break;
+       }
+
+    if(perhaps_subconstraints && ct->el_count) {
+        safe_printf(" ");
+        assert(ct->el_count == 1);
+        asn1print_constraint(ct->elements[0], flags);
+    }
+
+       return 0;
+}
+
+static int
+asn1print_params(const asn1p_paramlist_t *pl, enum asn1print_flags flags) {
+       if(pl) {
+               int i;
+               safe_printf("{");
+               for(i = 0; i < pl->params_count; i++) {
+                       if(i) safe_printf(", ");
+                       if(pl->params[i].governor) {
+                               asn1print_ref(pl->params[i].governor, flags);
+                               safe_printf(":");
+                       }
+                       safe_printf("%s", pl->params[i].argument);
+               }
+               safe_printf("}");
+       }
+
+       return 0;
+}
+
+static int
+asn1print_with_syntax(const asn1p_wsyntx_t *wx, enum asn1print_flags flags) {
+       if(wx) {
+               const asn1p_wsyntx_chunk_t *wc;
+               TQ_FOR(wc, &(wx->chunks), next) {
+                 switch(wc->type) {
+                 case WC_LITERAL:
+                 case WC_WHITESPACE:
+                 case WC_FIELD:
+                       safe_printf("%s", wc->content.token);
+                       break;
+                 case WC_OPTIONALGROUP:
+                       safe_printf("[");
+                       asn1print_with_syntax(wc->content.syntax,flags);
+                       safe_printf("]");
+                       break;
+                 }
+               }
+       }
+
+       return 0;
+}
+
+static int
+asn1print_crange_value(const asn1cnst_edge_t *edge, int as_char) {
+       switch(edge->type) {
+       case ARE_MIN: safe_printf("MIN"); break;
+       case ARE_MAX: safe_printf("MAX"); break;
+       case ARE_VALUE:
+               if(as_char) {
+                       safe_printf("\"%c\"", (unsigned char)edge->value);
+               } else {
+                       safe_printf("%s", asn1p_itoa(edge->value));
+               }
+       }
+       return 0;
+}
+
+static int
+asn1print_constraint_explain_type(const char *dbg_name, asn1p_expr_type_e expr_type, asn1p_constraint_t *ct, enum asn1p_constraint_type_e type, enum cpr_flags cpr) {
+       asn1cnst_range_t *range;
+       int as_char = (type==ACT_CT_FROM);
+       int i;
+
+       range = asn1constraint_compute_constraint_range(dbg_name, expr_type, ct, type, 0, 0, cpr);
+       if(!range) return -1;
+
+       if(range->incompatible) return 0;
+
+       if((cpr & CPR_strict_OER_visibility) && range->not_OER_visible) {
+               asn1constraint_range_free(range);
+               return 0;
+       }
+
+       if((cpr & CPR_strict_PER_visibility) && range->not_PER_visible) {
+               asn1constraint_range_free(range);
+               return 0;
+       }
+
+       switch(type) {
+       case ACT_CT_FROM: safe_printf("(FROM("); break;
+       case ACT_CT_SIZE: safe_printf("(SIZE("); break;
+       default: safe_printf("("); break;
+       }
+       for(i = -1; i < range->el_count; i++) {
+               asn1cnst_range_t *r;
+               if(i == -1) {
+                       if(range->el_count) continue;
+                       r = range;
+               } else {
+                       r = range->elements[i];
+               }
+               if(i > 0) {
+                       safe_printf(" | ");
+               }
+               asn1print_crange_value(&r->left, as_char);
+               if(r->left.type != r->right.type
+               || r->left.value != r->right.value) {
+                       safe_printf("..");
+                       asn1print_crange_value(&r->right, as_char);
+               }
+       }
+       if(range->extensible)
+               safe_printf(",...");
+       safe_printf(type==ACT_EL_RANGE?")":"))");
+
+       if(range->empty_constraint)
+               safe_printf(":Empty!");
+
+       asn1constraint_range_free(range);
+       return 0;
+}
+
+static int
+asn1print_constraint_explain(const char *dbg_name, asn1p_expr_type_e expr_type,
+               asn1p_constraint_t *ct, enum cpr_flags cpr) {
+
+       asn1print_constraint_explain_type(dbg_name, expr_type, ct, ACT_EL_RANGE, cpr);
+       safe_printf(" ");
+       asn1print_constraint_explain_type(dbg_name, expr_type, ct, ACT_CT_SIZE, cpr);
+       safe_printf(" ");
+       asn1print_constraint_explain_type(dbg_name, expr_type, ct, ACT_CT_FROM, cpr);
+
+       return 0;
+}
+
+static int
+asn1print_expr(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *tc, enum asn1print_flags flags, int level) {
+       int SEQ_OF = 0;
+    int has_space = 0;
+
+#define HAS_SPACE()    \
+    do {               \
+        has_space = 1; \
+    } while(0)
+#define ENSURE_SPACE()        \
+    do {                      \
+        if(!has_space) {      \
+            has_space = 1;    \
+            safe_printf(" "); \
+        }                     \
+    } while(0)
+#define WANT_SPACE()   \
+    do {               \
+        has_space = 0; \
+    } while(0)
+
+    if(flags & APF_LINE_COMMENTS && !(flags & APF_NOINDENT))
+               INDENT("-- #line %d\n", tc->_lineno);
+
+       /* Reconstruct compiler directive information */
+       if((tc->marker.flags & EM_INDIRECT)
+       && (tc->marker.flags & EM_OMITABLE) != EM_OMITABLE) {
+               if((flags & APF_NOINDENT))
+                       safe_printf(" --<ASN1C.RepresentAsPointer>-- ");
+               else
+                       INDENT("--<ASN1C.RepresentAsPointer>--\n");
+       }
+
+       if(tc->Identifier
+       && (!(tc->meta_type == AMT_VALUE && tc->expr_type == A1TC_REFERENCE)
+        || level == 0)) {
+               INDENT("%s", tc->Identifier);
+               WANT_SPACE();
+    }
+
+       if(tc->lhs_params) {
+               asn1print_params(tc->lhs_params, flags);
+       }
+
+       if(tc->meta_type != AMT_VALUE
+       && tc->meta_type != AMT_VALUESET
+       && tc->expr_type != A1TC_EXTENSIBLE) {
+               if(level) {
+                       if(tc->Identifier && !(flags & APF_NOINDENT))
+                               safe_printf("\t");
+               } else if(tc->Identifier) {
+                       ENSURE_SPACE();
+                       safe_printf("::=");
+                       WANT_SPACE();
+               }
+       }
+
+       if(tc->tag.tag_class) {
+               ENSURE_SPACE();
+               asn1print_tag(tc, flags);
+        WANT_SPACE();
+       }
+
+       switch(tc->expr_type) {
+       case A1TC_EXTENSIBLE:
+               if(tc->value) {
+                       safe_printf("!");
+                       asn1print_value(tc->value, flags);
+               }
+               break;
+       case A1TC_COMPONENTS_OF:
+               SEQ_OF = 1; /* Equivalent to SET OF for printint purposes */
+               safe_printf("    COMPONENTS OF");
+               WANT_SPACE();
+               break;
+       case A1TC_REFERENCE:
+       case A1TC_UNIVERVAL:
+               break;
+       case A1TC_CLASSDEF:
+               safe_printf(" CLASS");
+               WANT_SPACE();
+               break;
+       case A1TC_CLASSFIELD_TFS ... A1TC_CLASSFIELD_OSFS:
+               /* Nothing to print here */
+               break;
+       case ASN_CONSTR_SET_OF:
+       case ASN_CONSTR_SEQUENCE_OF:
+               SEQ_OF = 1;
+               ENSURE_SPACE();
+               if(tc->expr_type == ASN_CONSTR_SET_OF)
+                       safe_printf("SET");
+               else
+                       safe_printf("SEQUENCE");
+               if(tc->constraints) {
+                       safe_printf(" ");
+                       asn1print_constraint(tc->constraints, flags);
+               }
+               safe_printf(" OF");
+        WANT_SPACE();
+               break;
+       case A1TC_VALUESET:
+               break;
+       default:
+               {
+                       char *p = ASN_EXPR_TYPE2STR(tc->expr_type);
+                       ENSURE_SPACE();
+                       safe_printf("%s", p?p:"<unknown type!>");
+                       WANT_SPACE();
+               }
+               break;
+       }
+
+       /*
+        * Put the name of the referred type.
+        */
+       if(tc->reference) {
+               ENSURE_SPACE();
+               asn1print_ref(tc->reference, flags);
+               WANT_SPACE();
+       }
+
+       if(tc->meta_type == AMT_VALUESET && level == 0) {
+               ENSURE_SPACE();
+               safe_printf("::=");
+               WANT_SPACE();
+       }
+
+       /*
+        * Display the descendants (children) of the current type.
+        */
+       if(TQ_FIRST(&(tc->members))
+       || (tc->expr_type & ASN_CONSTR_MASK)
+       || tc->meta_type == AMT_OBJECT
+       || tc->meta_type == AMT_OBJECTCLASS
+       || tc->meta_type == AMT_OBJECTFIELD
+       ) {
+               asn1p_expr_t *se;       /* SubExpression */
+               int put_braces = (!SEQ_OF) /* Don't need 'em, if SET OF... */
+                       && (tc->meta_type != AMT_OBJECTFIELD);
+
+               if(put_braces) {
+                       if(flags & APF_NOINDENT) {
+                               safe_printf("{");
+                               if(!TQ_FIRST(&tc->members))
+                                       safe_printf("}");
+                       } else {
+                               safe_printf(" {");
+                               if(TQ_FIRST(&tc->members))
+                                       safe_printf("\n");
+                               else
+                                       safe_printf(" }");
+                       }
+               }
+
+               TQ_FOR(se, &(tc->members), next) {
+                       /*
+                        * Print the expression as it were a stand-alone type.
+                        */
+                       asn1print_expr(asn, mod, se, flags, level + 1);
+                       if((se->marker.flags & EM_DEFAULT) == EM_DEFAULT) {
+                               safe_printf(" DEFAULT ");
+                               asn1print_value(se->marker.default_value, flags);
+                       } else if((se->marker.flags & EM_OPTIONAL)
+                                       == EM_OPTIONAL) {
+                               safe_printf(" OPTIONAL");
+                       }
+                       if(TQ_NEXT(se, next)) {
+                               safe_printf(",");
+                               if(!(flags & APF_NOINDENT))
+                                       INDENT("\n");
+                       }
+               }
+
+               if(put_braces && TQ_FIRST(&tc->members)) {
+                       if(!(flags & APF_NOINDENT))
+                               safe_printf("\n");
+                       INDENT("}");
+               }
+       }
+
+       if(tc->with_syntax) {
+               safe_printf(" WITH SYNTAX {");
+               asn1print_with_syntax(tc->with_syntax, flags);
+               safe_printf("}\n");
+       }
+
+       /* Right hand specialization */
+       if(tc->rhs_pspecs) {
+               asn1p_expr_t *se;
+               safe_printf("{");
+               TQ_FOR(se, &(tc->rhs_pspecs->members), next) {
+                       asn1print_expr(asn, mod, se, flags, level + 1);
+                       if(TQ_NEXT(se, next)) safe_printf(", ");
+               }
+               safe_printf("}");
+       }
+
+       if(!SEQ_OF && tc->constraints) {
+               safe_printf(" ");
+               if(tc->meta_type == AMT_VALUESET)
+                       safe_printf("{");
+               asn1print_constraint(tc->constraints, flags);
+               if(tc->meta_type == AMT_VALUESET)
+                       safe_printf("}");
+       }
+
+       if(tc->unique) {
+               safe_printf(" UNIQUE");
+       }
+
+       if(tc->meta_type == AMT_VALUE
+       && tc->expr_type != A1TC_EXTENSIBLE) {
+               if(tc->expr_type == A1TC_UNIVERVAL) {
+                       if(tc->value) {
+                               safe_printf("(");
+                               asn1print_value(tc->value, flags);
+                               safe_printf(")");
+                       }
+               } else {
+                       if(level == 0 && tc->Identifier) safe_printf(" ::= ");
+                       asn1print_value(tc->value, flags);
+               }
+       }
+
+       /*
+        * The following section exists entirely for debugging.
+        */
+       if(flags & APF_PRINT_CONSTRAINTS
+       && tc->expr_type != A1TC_EXTENSIBLE) {
+               asn1p_expr_t *top_parent;
+
+               if(tc->combined_constraints) {
+                       safe_printf("\n-- Combined constraints: ");
+                       asn1print_constraint(tc->combined_constraints, flags);
+               }
+
+        top_parent = WITH_MODULE_NAMESPACE(
+            tc->module, tc_ns, asn1f_find_terminal_type_ex(asn, tc_ns, tc));
+        if(top_parent) {
+                       safe_printf("\n-- Practical constraints (%s): ",
+                               top_parent->Identifier);
+                       asn1print_constraint_explain(top_parent->Identifier,
+                               top_parent->expr_type,
+                               tc->combined_constraints, 0);
+                       safe_printf("\n-- OER-visible constraints (%s): ",
+                               top_parent->Identifier);
+                       asn1print_constraint_explain(top_parent->Identifier,
+                               top_parent->expr_type,
+                               tc->combined_constraints, CPR_strict_OER_visibility);
+                       safe_printf("\n-- PER-visible constraints (%s): ",
+                               top_parent->Identifier);
+                       asn1print_constraint_explain(top_parent->Identifier,
+                               top_parent->expr_type,
+                               tc->combined_constraints, CPR_strict_PER_visibility);
+               }
+               safe_printf("\n");
+       }
+
+       if(flags & APF_PRINT_CLASS_MATRIX) do {
+               size_t col, maxidlen;
+               if(tc->ioc_table == NULL) {
+            if(tc->expr_type == A1TC_CLASSDEF) {
+                safe_printf("\n-- Information Object Class table is empty");
+            }
+                       break;
+               }
+               safe_printf("\n-- Information Object Set has %d entr%s:\n",
+                               tc->ioc_table->rows,
+                               tc->ioc_table->rows==1 ? "y" : "ies");
+               maxidlen = asn1p_ioc_table_max_identifier_length(tc->ioc_table);
+               for(ssize_t r = -1; r < (ssize_t)tc->ioc_table->rows; r++) {
+                       asn1p_ioc_row_t *row;
+                       row = tc->ioc_table->row[r<0?0:r];
+                       if(r < 0) safe_printf("--    %s", r > 9 ? " " : "");
+            else
+                safe_printf("-- [%*d]", (tc->ioc_table->rows > 9) + 1, r + 1);
+            for(col = 0; col < row->columns; col++) {
+                               struct asn1p_ioc_cell_s *cell;
+                               cell = &row->column[col];
+                               if(r < 0) {
+                                       safe_printf("[%*s]", maxidlen,
+                                               cell->field->Identifier);
+                                       continue;
+                               }
+                               if(!cell->value) {
+                                       safe_printf(" %*s ", maxidlen, "<no entry>");
+                                       continue;
+                               }
+                               safe_printf(" %*s ", maxidlen,
+                                       cell->value->Identifier);
+                       }
+                       safe_printf("\n");
+               }
+        if(tc->ioc_table->extensible) {
+            safe_printf("-- [%*s] ...\n", (tc->ioc_table->rows>9)+1, "");
+        }
+    } while(0);
+
+       if(flags & APF_PRINT_CLASS_MATRIX
+       && tc->lhs_params) do {
+               int i;
+               if(tc->specializations.pspecs_count == 0) {
+                       safe_printf("\n-- No specializations found\n");
+                       break;
+               }
+               safe_printf("\n-- Specializations list has %d entr%s:\n",
+                       tc->specializations.pspecs_count,
+                       tc->specializations.pspecs_count == 1 ? "y" : "ies");
+               for(i = 0; i < tc->specializations.pspecs_count; i++) {
+                       asn1p_expr_t *se;
+                       struct asn1p_pspec_s *pspec;
+                       pspec = &tc->specializations.pspec[i];
+                       safe_printf("-- ");
+                       TQ_FOR(se, &(pspec->rhs_pspecs->members), next) {
+                               asn1print_expr(asn, mod, se, flags, level+1);
+                       }
+                       safe_printf("\n");
+               }
+       } while(0);
+
+       return 0;
+}
+
+
+static int
+asn1print_expr_dtd(asn1p_t *asn, asn1p_module_t *mod, asn1p_expr_t *expr, enum asn1print_flags flags, int level) {
+       asn1p_expr_t *se;
+       int expr_unordered = 0;
+       int dont_involve_children = 0;
+
+       switch(expr->meta_type) {
+       case AMT_TYPE:
+       case AMT_TYPEREF:
+               break;
+       default:
+               if(expr->expr_type == A1TC_UNIVERVAL)
+                       break;
+               return 0;
+       }
+
+       if(!expr->Identifier) return 0;
+
+       if(flags & APF_LINE_COMMENTS)
+               INDENT("<!-- #line %d -->\n", expr->_lineno);
+       INDENT("<!ELEMENT %s", expr->Identifier);
+
+       if(expr->expr_type == A1TC_REFERENCE) {
+               se = WITH_MODULE_NAMESPACE(expr->module, expr_ns, asn1f_find_terminal_type_ex(asn, expr_ns, expr));
+               if(!se) {
+                       safe_printf(" (ANY)");
+                       return 0;
+               }
+               expr = se;
+               dont_involve_children = 1;
+       }
+
+       if(expr->expr_type == ASN_CONSTR_CHOICE
+       || expr->expr_type == ASN_CONSTR_SEQUENCE_OF
+       || expr->expr_type == ASN_CONSTR_SET_OF
+       || expr->expr_type == ASN_CONSTR_SET
+       || expr->expr_type == ASN_BASIC_INTEGER
+       || expr->expr_type == ASN_BASIC_ENUMERATED) {
+               expr_unordered = 1;
+       }
+
+       if(TQ_FIRST(&expr->members)) {
+               int extensible = 0;
+               if(expr->expr_type == ASN_BASIC_BIT_STRING)
+                       dont_involve_children = 1;
+               safe_printf(" (");
+               TQ_FOR(se, &(expr->members), next) {
+                       if(se->expr_type == A1TC_EXTENSIBLE) {
+                               extensible = 1;
+                               continue;
+                       } else if(!se->Identifier
+                                       && se->expr_type == A1TC_REFERENCE) {
+                               asn1print_ref(se->reference, flags);
+                       } else if(se->Identifier) {
+                               safe_printf("%s", se->Identifier);
+                       } else {
+                               safe_printf("ANY");
+                       }
+                       if(expr->expr_type != ASN_CONSTR_SET
+                       && expr->expr_type != ASN_CONSTR_CHOICE
+                       && expr->expr_type != ASN_BASIC_INTEGER
+                       && expr->expr_type != ASN_BASIC_ENUMERATED) {
+                               if(expr_unordered)
+                                       safe_printf("*");
+                               else if(se->marker.flags)
+                                       safe_printf("?");
+                               else if(expr->expr_type == ASN_BASIC_BIT_STRING)
+                                       safe_printf("?");
+                       }
+                       if(TQ_NEXT(se, next)
+                       && TQ_NEXT(se, next)->expr_type != A1TC_EXTENSIBLE) {
+                               safe_printf(expr_unordered?"|":", ");
+                       }
+               }
+               if(extensible) {
+                       safe_printf(expr_unordered?"|":", ");
+                       safe_printf("ANY");
+                       if(expr->expr_type != ASN_CONSTR_SET
+                       && expr->expr_type != ASN_CONSTR_CHOICE
+                       && expr->expr_type != ASN_BASIC_INTEGER
+                       && expr->expr_type != ASN_BASIC_ENUMERATED)
+                               safe_printf("*");
+               }
+
+               safe_printf(")");
+               if(expr->expr_type == ASN_CONSTR_SET)
+                       safe_printf("*");
+
+       } else switch(expr->expr_type) {
+       case ASN_BASIC_BOOLEAN:
+               safe_printf(" (true|false)");
+               break;
+       case ASN_CONSTR_CHOICE:
+       case ASN_CONSTR_SET:
+       case ASN_CONSTR_SET_OF:
+       case ASN_CONSTR_SEQUENCE:
+       case ASN_CONSTR_SEQUENCE_OF:
+       case ASN_BASIC_NULL:
+       case A1TC_UNIVERVAL:
+               safe_printf(" EMPTY");
+               break;
+       case ASN_TYPE_ANY:
+               safe_printf(" ANY");
+               break;
+       case ASN_BASIC_BIT_STRING:
+       case ASN_BASIC_OCTET_STRING:
+       case ASN_BASIC_OBJECT_IDENTIFIER:
+       case ASN_BASIC_RELATIVE_OID:
+       case ASN_BASIC_INTEGER:
+       case ASN_BASIC_UTCTime:
+       case ASN_BASIC_GeneralizedTime:
+       case ASN_STRING_NumericString:
+       case ASN_STRING_PrintableString:
+               safe_printf(" (#PCDATA)");
+               break;
+       case ASN_STRING_VisibleString:
+       case ASN_STRING_ISO646String:
+               /* Entity references, but not XML elements may be present */
+               safe_printf(" (#PCDATA)");
+               break;
+       case ASN_BASIC_REAL:            /* e.g. <MINUS-INFINITY/> */
+       case ASN_BASIC_ENUMERATED:      /* e.g. <enumIdentifier1/> */
+       default:
+               /*
+                * XML elements are allowed.
+                * For example, a UTF8String may contain "<bel/>".
+                */
+               safe_printf(" ANY");
+       }
+       safe_printf(">\n");
+
+       /*
+        * Display the descendants (children) of the current type.
+        */
+       if(!dont_involve_children) {
+               TQ_FOR(se, &(expr->members), next) {
+                       if(se->expr_type == A1TC_EXTENSIBLE) continue;
+                       asn1print_expr_dtd(asn, mod, se, flags, level + 1);
+               }
+       }
+
+       return 0;
+}
diff --git a/libasn1print/asn1print.h b/libasn1print/asn1print.h
new file mode 100644 (file)
index 0000000..1666b99
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef        ASN1PRINT_H
+#define        ASN1PRINT_H
+
+enum asn1print_flags {
+       APF_NOFLAGS,
+       APF_NOINDENT            = 0x01, /* Disable indentation */
+       APF_LINE_COMMENTS       = 0x02, /* Include line comments */
+       APF_PRINT_XML_DTD       = 0x04, /* Generate XML DTD */
+       APF_PRINT_CONSTRAINTS   = 0x08, /* Explain constraints */
+       APF_PRINT_CLASS_MATRIX  = 0x10, /* Dump class matrix */
+};
+
+/*
+ * Print the contents of the parsed ASN.1 syntax tree.
+ */
+int asn1print(asn1p_t *asn, enum asn1print_flags flags);
+
+const char *asn1p_constraint_string(const asn1p_constraint_t *ct);
+
+#endif /* ASN1PRINT_H */
diff --git a/m4/ax_check_compile_and_link_flag.m4 b/m4/ax_check_compile_and_link_flag.m4
new file mode 100644 (file)
index 0000000..36d7eae
--- /dev/null
@@ -0,0 +1,72 @@
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_AND_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#   Copyright (c) 2017 Lev Walkin <vlm@lionet.info>
+#
+#   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 3 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, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 1
+
+AC_DEFUN([AX_CHECK_COMPILE_AND_LINK_FLAG],
+[AC_PREREQ(2.61)dnl
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]clflags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler and linker accept $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_AND_LINK_FLAG
+
diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
new file mode 100644 (file)
index 0000000..51df0c0
--- /dev/null
@@ -0,0 +1,74 @@
+# ===========================================================================
+#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+#   Check whether the given FLAG works with the current language's compiler
+#   or gives an error.  (Warnings, however, are ignored)
+#
+#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+#   success/failure.
+#
+#   If EXTRA-FLAGS is defined, it is added to the current language's default
+#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
+#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
+#   force the compiler to issue an error when a bad flag is given.
+#
+#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
+#
+#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.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 3 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, the respective Autoconf Macro's copyright owner
+#   gives unlimited permission to copy, distribute and modify the configure
+#   scripts that are the output of Autoconf when processing the Macro. You
+#   need not follow the terms of the GNU General Public License when using
+#   or distributing such scripts, even though portions of the text of the
+#   Macro appear in them. The GNU General Public License (GPL) does govern
+#   all other use of the material that constitutes the Autoconf Macro.
+#
+#   This special exception to the GPL applies to versions of the Autoconf
+#   Macro released by the Autoconf Archive. When you make and distribute a
+#   modified version of the Autoconf Macro, you may extend this special
+#   exception to the GPL to apply to your modified version as well.
+
+#serial 3
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+    [AS_VAR_SET(CACHEVAR,[yes])],
+    [AS_VAR_SET(CACHEVAR,[no])])
+  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+  [m4_default([$2], :)],
+  [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4/ax_code_coverage.m4 b/m4/ax_code_coverage.m4
new file mode 100644 (file)
index 0000000..869d470
--- /dev/null
@@ -0,0 +1,266 @@
+# ===========================================================================
+#     https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AX_CODE_COVERAGE()
+#
+# DESCRIPTION
+#
+#   Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS,
+#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included
+#   in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every
+#   build target (program or library) which should be built with code
+#   coverage support. Also defines CODE_COVERAGE_RULES which should be
+#   substituted in your Makefile; and $enable_code_coverage which can be
+#   used in subsequent configure output. CODE_COVERAGE_ENABLED is defined
+#   and substituted, and corresponds to the value of the
+#   --enable-code-coverage option, which defaults to being disabled.
+#
+#   Test also for gcov program and create GCOV variable that could be
+#   substituted.
+#
+#   Note that all optimization flags in CFLAGS must be disabled when code
+#   coverage is enabled.
+#
+#   Usage example:
+#
+#   configure.ac:
+#
+#     AX_CODE_COVERAGE
+#
+#   Makefile.am:
+#
+#     @CODE_COVERAGE_RULES@
+#     my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ...
+#     my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ...
+#     my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ...
+#     my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ...
+#
+#   This results in a "check-code-coverage" rule being added to any
+#   Makefile.am which includes "@CODE_COVERAGE_RULES@" (assuming the module
+#   has been configured with --enable-code-coverage). Running `make
+#   check-code-coverage` in that directory will run the module's test suite
+#   (`make check`) and build a code coverage report detailing the code which
+#   was touched, then print the URI for the report.
+#
+#   This code was derived from Makefile.decl in GLib, originally licenced
+#   under LGPLv2.1+.
+#
+# LICENSE
+#
+#   Copyright (c) 2012, 2016 Philip Withnall
+#   Copyright (c) 2012 Xan Lopez
+#   Copyright (c) 2012 Christian Persch
+#   Copyright (c) 2012 Paolo Borelli
+#   Copyright (c) 2012 Dan Winship
+#   Copyright (c) 2015 Bastien ROUCARIES
+#
+#   This library is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Lesser General Public License as published by
+#   the Free Software Foundation; either version 2.1 of the License, or (at
+#   your option) any later version.
+#
+#   This library 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 Lesser
+#   General Public License for more details.
+#
+#   You should have received a copy of the GNU Lesser General Public License
+#   along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+#serial 23
+
+AC_DEFUN([AX_CODE_COVERAGE],[
+       dnl Check for --enable-code-coverage
+       AC_REQUIRE([AC_PROG_SED])
+
+       # allow to override gcov location
+       AC_ARG_WITH([gcov],
+         [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],
+         [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])
+
+       AC_MSG_CHECKING([whether to build with code coverage support])
+       AC_ARG_ENABLE([code-coverage],
+         AS_HELP_STRING([--enable-code-coverage],
+         [enable code coverage statistics collection]),,
+         enable_code_coverage=no)
+
+       AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
+       AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
+       AC_MSG_RESULT($enable_code_coverage)
+
+       AS_IF([ test "$enable_code_coverage" = "yes" ], [
+               # check for gcov
+               AC_CHECK_TOOL([GCOV],
+                 [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],
+                 [:])
+               AS_IF([test "X$GCOV" = "X:"],
+                 [AC_MSG_ERROR([gcov is needed to do coverage])])
+               AC_SUBST([GCOV])
+
+               dnl Check if gcc is being used
+               AS_IF([ test "$GCC" = "no" ], [
+                       AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])
+               ])
+
+               AC_CHECK_PROG([LCOV], [lcov], [lcov])
+               AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
+
+               AS_IF([ test -z "$LCOV" ], [
+                       AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed])
+               ])
+
+               AS_IF([ test -z "$GENHTML" ], [
+                       AC_MSG_ERROR([Could not find genhtml from the lcov package])
+               ])
+
+               dnl Build the code coverage flags
+               CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
+               AX_CHECK_COMPILE_FLAG([-coverage], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -coverage"
+                       CODE_COVERAGE_LDFLAGS="-coverage"
+                       CODE_COVERAGE_LIBS=""
+               ], [
+                       CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+                       CODE_COVERAGE_LIBS="-lgcov"
+                       dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
+                       CODE_COVERAGE_LDFLAGS="$CODE_COVERAGE_LIBS"
+               ])
+
+               AC_SUBST([CODE_COVERAGE_CPPFLAGS])
+               AC_SUBST([CODE_COVERAGE_CFLAGS])
+               AC_SUBST([CODE_COVERAGE_CXXFLAGS])
+               AC_SUBST([CODE_COVERAGE_LIBS])
+               AC_SUBST([CODE_COVERAGE_LDFLAGS])
+
+               [CODE_COVERAGE_RULES_CHECK='
+       -$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
+       $(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
+']
+               [CODE_COVERAGE_RULES_CAPTURE='
+       $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
+       $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
+       -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
+       $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
+       @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
+']
+               [CODE_COVERAGE_RULES_CLEAN='
+clean: code-coverage-clean
+distclean: code-coverage-clean
+code-coverage-clean:
+       -$(LCOV) --directory $(top_builddir) -z
+       -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+       -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete
+']
+       ], [
+               [CODE_COVERAGE_RULES_CHECK='
+       @echo "Need to reconfigure with --enable-code-coverage"
+']
+               CODE_COVERAGE_RULES_CAPTURE="$CODE_COVERAGE_RULES_CHECK"
+               CODE_COVERAGE_RULES_CLEAN=''
+       ])
+
+[CODE_COVERAGE_RULES='
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:'"$CODE_COVERAGE_RULES_CHECK"'
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook'"$CODE_COVERAGE_RULES_CAPTURE"'
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+'"$CODE_COVERAGE_RULES_CLEAN"'
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+A''M_DISTCHECK_CONFIGURE_FLAGS ?=
+A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+']
+
+       AC_SUBST([CODE_COVERAGE_RULES])
+       m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])])
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644 (file)
index 0000000..10ab284
--- /dev/null
@@ -0,0 +1,8388 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# 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.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 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.
+
+# GNU Libtool 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 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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/>.
+])
+
+# serial 58 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+        distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Go],                        [_LT_LANG(GO)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS=$save_LDFLAGS
+    ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+       lt_cv_ld_force_load=yes
+      else
+       cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]][[,.]]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    m4_if([$1], [CXX],
+[   if test yes != "$lt_cv_apple_cc_single_mod"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+         /^0/ {
+             s/^0  *\([^ ]*\) *$/\1/
+             p
+         }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+case $ECHO in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([$with_sysroot])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE=32
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE=64
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           case `/usr/bin/file conftest.o` in
+             *x86-64*)
+               LD="${LD-ld} -m elf32_x86_64"
+               ;;
+             *)
+               LD="${LD-ld} -m elf_i386"
+               ;;
+           esac
+           ;;
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test 0 -eq "$ac_status"; then
+       # Ensure the archiver fails upon bogus file names.
+       rm -f conftest.$ac_objext libconftest.a
+       AC_TRY_EVAL([lt_ar_try])
+       if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+                = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+             test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+         if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+       }
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen=shl_load],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen=dlopen],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test no = "$hard_links"; then
+    AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+  [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+     test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+   test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[23]].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test yes = "$lt_cv_prog_gnu_ld"; then
+               version_type=linux # correct to gnu/linux during the next big refactor
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+        LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+        [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+    [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+    [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test no = "$withval" || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test no != "$with_gnu_ld" && break
+       ;;
+      *)
+       test yes != "$with_gnu_ld" && break
+       ;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+  [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break 2
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break 2
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[        ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[  ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t@_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_globsym_save_LIBS=$LIBS
+         lt_globsym_save_CFLAGS=$CFLAGS
+         LIBS=conftstm.$ac_objext
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+           pipe_works=yes
+         fi
+         LIBS=$lt_globsym_save_LIBS
+         CFLAGS=$lt_globsym_save_CFLAGS
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+    [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+    [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test ia64 = "$host_cpu"; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+       # This hack is so that the source file can tell whether it is being
+       # built for inclusion in a dll (and should export symbols for example).
+       m4_if([$1], [GCJ], [],
+         [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64, which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+           # IBM XL 8.0, 9.0 on PPC and BlueGene
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test yes = "$GCC"; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test ia64 = "$host_cpu"; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      nagfor*)
+       # NAG Fortran compiler
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+       # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       *Sun\ F* | *Sun*Fortran*)
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+         ;;
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+        *Intel*\ [[CF]]*Compiler*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+         ;;
+       *Portland\ Group*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+       # The AIX port of GNU ld has always aspired to compatibility
+       # with the native linker.  However, as the warning in the GNU ld
+       # block says, versions before 2.19.5* couldn't really create working
+       # shared libraries, regardless of the interface used.
+       case `$LD -v 2>&1` in
+         *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+         *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+         *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+         *)
+           lt_use_gnu_ld_interface=yes
+           ;;
+       esac
+       ;;
+      *)
+       lt_use_gnu_ld_interface=yes
+       ;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file, use it as
+       # is; otherwise, prepend EXPORTS...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test no = "$tmp_diet"
+      then
+       tmp_addflag=' $pic_flag'
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95* | pgfortran*)
+                                       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+       xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       nvcc*)  # Cuda Compiler Driver 2.2
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       tcc*)
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+         ;;
+       xlf* | bgf* | bgxlf* | mpixlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+         if test yes = "$supports_anon_versioning"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test ia64 = "$host_cpu"; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX nm.
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+       ;;
+      esac
+
+      if test yes = "$GCC"; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
+       fi
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
+      else
+       # not using gcc
+       if test ia64 = "$host_cpu"; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
+         else
+           shared_flag='$wl-bM:SRE'
+         fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+       if test ia64 = "$host_cpu"; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
+           # We only use this code for GNU lds that support --whole-archive.
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+         else
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         fi
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+       # Native MSVC
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       _LT_TAGVAR(always_export_symbols, $1)=yes
+       _LT_TAGVAR(file_list_spec, $1)='@'
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+       # The linker will not automatically build a static lib if we build a DLL.
+       # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+       # Don't use ranlib
+       _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+       _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+       ;;
+      *)
+       # Assume MSVC wrapper
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Tell ltmain to make .lib files, not .a files.
+       libext=lib
+       # Tell ltmain to make .dll files, not .so files.
+       shrext_cmds=.dll
+       # FIXME: Setting linknames here is a bad hack.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+       # The linker will automatically build a .lib file if we build a DLL.
+       _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+       # FIXME: Should let the user specify the lib program.
+       _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       ;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+       m4_if($1, [], [
+         # Older versions of the 11.00 compiler do not understand -b yet
+         # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+         _LT_LINKER_OPTION([if $CC understands -b],
+           _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+           [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+           [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+         [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+         ;;
+       esac
+      fi
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+       # This should be the same for all languages, so no per-tag cache variable.
+       AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+         [lt_cv_irix_exported_symbol],
+         [save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+          AC_LINK_IFELSE(
+            [AC_LANG_SOURCE(
+               [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+                             [C++], [[int foo (void) { return 0; }]],
+                             [Fortran 77], [[
+      subroutine foo
+      end]],
+                             [Fortran], [[
+      subroutine foo
+      end]])])],
+             [lt_cv_irix_exported_symbol=yes],
+             [lt_cv_irix_exported_symbol=no])
+           LDFLAGS=$save_LDFLAGS])
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+       fi
+       _LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+       else
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='$wl'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands '-z linker_flag'.  GCC discards it without '$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test yes = "$GCC"; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+       [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+       [$RM conftest*
+       echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+       if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+         soname=conftest
+         lib=conftest
+         libobjs=conftest.$ac_objext
+         deplibs=
+         wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+         pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+         compiler_flags=-v
+         linker_flags=-v
+         verstring=
+         output_objdir=.
+         libname=conftest
+         lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+         _LT_TAGVAR(allow_undefined_flag, $1)=
+         if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+         then
+           lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+         else
+           lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         fi
+         _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+       else
+         cat conftest.err 1>&5
+       fi
+       $RM conftest*
+       ])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting $shlibpath_var if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report what library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+             # With aix-soname=svr4, we create the lib.so.V shared archives only,
+             # so we don't have lib.a shared libs to link our executables.
+             # We have to force runtime linking in this case.
+             aix_use_runtimelinking=yes
+             LDFLAGS="$LDFLAGS -Wl,-brtl"
+           fi
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;      # no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          _LT_TAGVAR(hardcode_direct, $1)=no
+          _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+          ;;
+        esac
+
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`$CC -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
+         fi
+         # Need to ensure runtime linking is disabled for the traditional
+         # shared library, or the linker may eventually find shared libraries
+         # /with/ Import File - we do not want to mix them.
+         shared_flag_aix='-shared'
+         shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
+           else
+             shared_flag='$wl-bM:SRE'
+           fi
+           shared_flag_aix='$wl-bM:SRE'
+           shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+       if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX([$1])
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
+             # We only use this code for GNU lds that support --whole-archive.
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+           else
+             # Exported symbols can be pulled into shared objects from archives
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           fi
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+           # -brtl affects multiple linker settings, -berok does not and is overridden later
+           compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+           if test svr4 != "$with_aix_soname"; then
+             # This is similar to how AIX traditionally builds its shared
+             # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+           fi
+           if test aix != "$with_aix_soname"; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           else
+             # used by -dlpreopen to get the symbols
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+           fi
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+       case $GXX,$cc_basename in
+       ,cl* | no,cl*)
+         # Native MSVC
+         # hardcode_libdir_flag_spec is actually meaningless, as there is
+         # no search path for DLLs.
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         _LT_TAGVAR(always_export_symbols, $1)=yes
+         _LT_TAGVAR(file_list_spec, $1)='@'
+         # Tell ltmain to make .lib files, not .a files.
+         libext=lib
+         # Tell ltmain to make .dll files, not .so files.
+         shrext_cmds=.dll
+         # FIXME: Setting linknames here is a bad hack.
+         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+         # The linker will not automatically build a static lib if we build a DLL.
+         # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+         _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+         # Don't use ranlib
+         _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+         _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+         ;;
+       *)
+         # g++
+         # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+         # as there is no search path for DLLs.
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         _LT_TAGVAR(always_export_symbols, $1)=no
+         _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+         if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+           # If the export-symbols file already is a .def file, use it as
+           # is; otherwise, prepend EXPORTS...
+           _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+         ;;
+       esac
+       ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      os2*)
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       shrext_cmds=.dll
+       _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         prefix_cmds="$SED"~
+         if test EXPORTS = "`$SED 1q $export_symbols`"; then
+           prefix_cmds="$prefix_cmds -e 1d";
+         fi~
+         prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+         cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           *) # Version 6 and above use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           ;;
+         xl* | mpixl* | bgxl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+           if test yes = "$supports_anon_versioning"; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='func_echo_all'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd* | bitrig*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=func_echo_all
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           ;;
+         *)
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands '-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='func_echo_all'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test yes,no = "$GXX,$with_gnu_ld"; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require '-G' NOT '-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We CANNOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
+           _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+              '"$_LT_TAGVAR(reload_cmds, $1)"
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)=$GXX
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+        prev=$p
+        continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev in
+        -L | -R)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)=$prev$p
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+        fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)=$p
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)=$p
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test ia64 != "$host_cpu"; then
+         case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+         yes,aix,yes) ;;               # shared object as lib.so file only
+         yes,svr4,*) ;;                # shared object as lib.so archive member only
+         yes,*) enable_static=no ;;    # shared object in lib.a archive as well
+         esac
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)=$G77
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test ia64 != "$host_cpu"; then
+         case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+         yes,aix,yes) ;;               # shared object as lib.so file only
+         yes,svr4,*) ;;                # shared object as lib.so archive member only
+         yes,*) enable_static=no ;;    # shared object in lib.a archive as well
+         esac
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f "$lt_ac_sed" && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test 10 -lt "$lt_ac_count" && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test "$lt_ac_count" -gt "$lt_ac_max"; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644 (file)
index 0000000..94b0829
--- /dev/null
@@ -0,0 +1,437 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+#   Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# 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 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+                  [_LT_WITH_AIX_SONAME([aix])])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+       IFS=$lt_save_ifs
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'.  If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+  AC_MSG_CHECKING([which variant of shared library versioning to provide])
+  AC_ARG_WITH([aix-soname],
+    [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+      [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+    [case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname],
+    [AC_CACHE_VAL([lt_cv_with_aix_soname],
+      [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+    with_aix_soname=$lt_cv_with_aix_soname])
+  AC_MSG_RESULT([$with_aix_soname])
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+    [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'.  If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+       IFS=$lt_save_ifs
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644 (file)
index 0000000..48bc934
--- /dev/null
@@ -0,0 +1,124 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# 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 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644 (file)
index 0000000..fa04b52
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# 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.
+
+# @configure_input@
+
+# serial 4179 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644 (file)
index 0000000..c6b26f8
--- /dev/null
@@ -0,0 +1,99 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+#   Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# 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 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],        [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],                [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],        [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],   [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],              [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],               [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],              [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/skeletons/.deps/check_converter_c89_32_example-converter-example.Po b/skeletons/.deps/check_converter_c89_32_example-converter-example.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/check_converter_c89_example-converter-example.Po b/skeletons/.deps/check_converter_c89_example-converter-example.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/check_converter_example-converter-example.Po b/skeletons/.deps/check_converter_example-converter-example.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ANY.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ANY.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-BMPString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-BMPString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-BOOLEAN.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-BOOLEAN.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ENUMERATED.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ENUMERATED.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-GraphicString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-GraphicString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-IA5String.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-IA5String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ISO646String.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ISO646String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NULL.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NULL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeReal.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NativeReal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-NumericString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-NumericString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-PrintableString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-PrintableString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-REAL.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-REAL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-T61String.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-T61String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-TeletexString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-TeletexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-UTCTime.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-UTCTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-UTF8String.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-UTF8String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-UniversalString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-UniversalString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-VideotexString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-VideotexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-VisibleString.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-VisibleString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_application.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_application.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_bit_data.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_bit_data.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_internal.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_internal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_random_fill.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-asn_random_fill.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constr_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-constraints.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-constraints.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-der_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-der_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-oer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-per_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-per_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-per_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-per_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-per_opentype.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-per_opentype.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-per_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-per_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_32_la-xer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ANY.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ANY.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-BMPString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-BMPString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-BOOLEAN.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-BOOLEAN.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ENUMERATED.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ENUMERATED.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-GeneralString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-GeneralString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-GeneralizedTime.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-GeneralizedTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-GraphicString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-GraphicString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-IA5String.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-IA5String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-INTEGER.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-INTEGER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-INTEGER_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-INTEGER_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ISO646String.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ISO646String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NULL.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NULL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NativeInteger_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NativeReal.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NativeReal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-NumericString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-NumericString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ObjectDescriptor.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ObjectDescriptor.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-PrintableString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-PrintableString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-REAL.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-REAL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-RELATIVE-OID.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-RELATIVE-OID.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-T61String.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-T61String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-TeletexString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-TeletexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-UTCTime.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-UTCTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-UTF8String.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-UTF8String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-UniversalString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-UniversalString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-VideotexString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-VideotexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-VisibleString.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-VisibleString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_application.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_application.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_bit_data.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_bit_data.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_codecs_prim.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_codecs_prim.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_internal.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_internal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-asn_random_fill.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-asn_random_fill.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ber_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ber_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_length.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_length.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_tag.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-ber_tlv_tag.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constr_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constr_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-constraints.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-constraints.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-der_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-der_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-oer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-oer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-oer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-oer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-oer_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-oer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-per_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-per_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-per_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-per_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-per_opentype.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-per_opentype.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-per_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-per_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-xer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-xer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-xer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-xer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_c89_la-xer_support.Plo b/skeletons/.deps/libasn1cskeletons_c89_la-xer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ANY.Plo b/skeletons/.deps/libasn1cskeletons_la-ANY.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-BIT_STRING.Plo b/skeletons/.deps/libasn1cskeletons_la-BIT_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-BIT_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-BIT_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-BMPString.Plo b/skeletons/.deps/libasn1cskeletons_la-BMPString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-BOOLEAN.Plo b/skeletons/.deps/libasn1cskeletons_la-BOOLEAN.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ENUMERATED.Plo b/skeletons/.deps/libasn1cskeletons_la-ENUMERATED.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-GeneralString.Plo b/skeletons/.deps/libasn1cskeletons_la-GeneralString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-GeneralizedTime.Plo b/skeletons/.deps/libasn1cskeletons_la-GeneralizedTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-GraphicString.Plo b/skeletons/.deps/libasn1cskeletons_la-GraphicString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-IA5String.Plo b/skeletons/.deps/libasn1cskeletons_la-IA5String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-INTEGER.Plo b/skeletons/.deps/libasn1cskeletons_la-INTEGER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-INTEGER_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-INTEGER_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ISO646String.Plo b/skeletons/.deps/libasn1cskeletons_la-ISO646String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NULL.Plo b/skeletons/.deps/libasn1cskeletons_la-NULL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NativeEnumerated.Plo b/skeletons/.deps/libasn1cskeletons_la-NativeEnumerated.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NativeEnumerated_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-NativeEnumerated_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NativeInteger.Plo b/skeletons/.deps/libasn1cskeletons_la-NativeInteger.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NativeInteger_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-NativeInteger_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NativeReal.Plo b/skeletons/.deps/libasn1cskeletons_la-NativeReal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-NumericString.Plo b/skeletons/.deps/libasn1cskeletons_la-NumericString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo b/skeletons/.deps/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-OCTET_STRING.Plo b/skeletons/.deps/libasn1cskeletons_la-OCTET_STRING.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-OCTET_STRING_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-OCTET_STRING_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-OPEN_TYPE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ObjectDescriptor.Plo b/skeletons/.deps/libasn1cskeletons_la-ObjectDescriptor.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-PrintableString.Plo b/skeletons/.deps/libasn1cskeletons_la-PrintableString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-REAL.Plo b/skeletons/.deps/libasn1cskeletons_la-REAL.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-RELATIVE-OID.Plo b/skeletons/.deps/libasn1cskeletons_la-RELATIVE-OID.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-T61String.Plo b/skeletons/.deps/libasn1cskeletons_la-T61String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-TeletexString.Plo b/skeletons/.deps/libasn1cskeletons_la-TeletexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-UTCTime.Plo b/skeletons/.deps/libasn1cskeletons_la-UTCTime.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-UTF8String.Plo b/skeletons/.deps/libasn1cskeletons_la-UTF8String.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-UniversalString.Plo b/skeletons/.deps/libasn1cskeletons_la-UniversalString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-VideotexString.Plo b/skeletons/.deps/libasn1cskeletons_la-VideotexString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-VisibleString.Plo b/skeletons/.deps/libasn1cskeletons_la-VisibleString.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_application.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_application.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_bit_data.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_bit_data.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_codecs_prim.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_codecs_prim.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_internal.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_internal.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-asn_random_fill.Plo b/skeletons/.deps/libasn1cskeletons_la-asn_random_fill.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ber_decoder.Plo b/skeletons/.deps/libasn1cskeletons_la-ber_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ber_tlv_length.Plo b/skeletons/.deps/libasn1cskeletons_la-ber_tlv_length.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-ber_tlv_tag.Plo b/skeletons/.deps/libasn1cskeletons_la-ber_tlv_tag.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_CHOICE.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_CHOICE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_CHOICE_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_CHOICE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SET.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SET.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SET_OF.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SET_OF.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_SET_OF_oer.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_SET_OF_oer.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constr_TYPE.Plo b/skeletons/.deps/libasn1cskeletons_la-constr_TYPE.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-constraints.Plo b/skeletons/.deps/libasn1cskeletons_la-constraints.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-der_encoder.Plo b/skeletons/.deps/libasn1cskeletons_la-der_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-oer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_la-oer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-oer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_la-oer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-oer_support.Plo b/skeletons/.deps/libasn1cskeletons_la-oer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-per_decoder.Plo b/skeletons/.deps/libasn1cskeletons_la-per_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-per_encoder.Plo b/skeletons/.deps/libasn1cskeletons_la-per_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-per_opentype.Plo b/skeletons/.deps/libasn1cskeletons_la-per_opentype.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-per_support.Plo b/skeletons/.deps/libasn1cskeletons_la-per_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-xer_decoder.Plo b/skeletons/.deps/libasn1cskeletons_la-xer_decoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-xer_encoder.Plo b/skeletons/.deps/libasn1cskeletons_la-xer_encoder.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/.deps/libasn1cskeletons_la-xer_support.Plo b/skeletons/.deps/libasn1cskeletons_la-xer_support.Plo
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/skeletons/ANY.c b/skeletons/ANY.c
new file mode 100644 (file)
index 0000000..0b81557
--- /dev/null
@@ -0,0 +1,450 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ANY.h>
+#include <errno.h>
+
+asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs = {
+       sizeof(ANY_t),
+       offsetof(ANY_t, _asn_ctx),
+       ASN_OSUBV_ANY
+};
+asn_TYPE_operation_t asn_OP_ANY = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       ANY_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       0,
+       0,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0, 0, 0, 0,
+#else
+       ANY_decode_uper,
+       ANY_encode_uper,
+       ANY_decode_aper,
+       ANY_encode_aper,
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+       0,      /* Random fill is not defined for ANY type */
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_ANY = {
+       "ANY",
+       "ANY",
+       &asn_OP_ANY,
+       0, 0, 0, 0,
+       { 0, 0, asn_generic_no_constraint },    /* No constraints */
+       0, 0,   /* No members */
+       &asn_SPC_ANY_specs,
+};
+
+#undef RETURN
+#define RETURN(_code)                       \
+    do {                                    \
+        asn_dec_rval_t tmprval;             \
+        tmprval.code = _code;               \
+        tmprval.consumed = consumed_myself; \
+        return tmprval;                     \
+    } while(0)
+
+asn_enc_rval_t
+ANY_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+               enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+               void *app_key) {
+    if(flags & XER_F_CANONICAL) {
+               /*
+                * Canonical XER-encoding of ANY type is not supported.
+                */
+               ASN__ENCODE_FAILED;
+       }
+
+       /* Dump as binary */
+       return OCTET_STRING_encode_xer(td, sptr, ilevel, flags, cb, app_key);
+}
+
+struct _callback_arg {
+       uint8_t *buffer;
+       size_t offset;
+       size_t size;
+};
+
+static int ANY__consume_bytes(const void *buffer, size_t size, void *key);
+
+int
+ANY_fromType(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) {
+       struct _callback_arg arg;
+       asn_enc_rval_t erval = {0,0,0};
+
+       if(!st || !td) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(!sptr) {
+               if(st->buf) FREEMEM(st->buf);
+               st->size = 0;
+               return 0;
+       }
+
+       arg.offset = arg.size = 0;
+       arg.buffer = 0;
+
+       erval = der_encode(td, sptr, ANY__consume_bytes, &arg);
+       if(erval.encoded == -1) {
+               if(arg.buffer) FREEMEM(arg.buffer);
+               return -1;
+       }
+       assert((size_t)erval.encoded == arg.offset);
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = arg.buffer;
+       st->size = arg.offset;
+
+       return 0;
+}
+
+int
+ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) {
+       uint8_t *buffer = NULL;
+       ssize_t erval;
+
+       if(!st || !td) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(!sptr) {
+               if(st->buf) FREEMEM(st->buf);
+               st->size = 0;
+               return 0;
+       }
+
+       erval = aper_encode_to_new_buffer(td, td->encoding_constraints.per_constraints, sptr, (void**)&buffer);
+
+       if(erval == -1) {
+               if(buffer) FREEMEM(buffer);
+               return -1;
+       }
+       assert((size_t)erval > 0);
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = buffer;
+       st->size = erval;
+
+       return 0;
+}
+
+ANY_t *
+ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) {
+       ANY_t tmp;
+       ANY_t *st;
+
+       if(!td || !sptr) {
+               errno = EINVAL;
+               return 0;
+       }
+
+       memset(&tmp, 0, sizeof(tmp));
+
+       if(ANY_fromType(&tmp, td, sptr)) return 0;
+
+       st = (ANY_t *)CALLOC(1, sizeof(ANY_t));
+       if(st) {
+               *st = tmp;
+               return st;
+       } else {
+               FREEMEM(tmp.buf);
+               return 0;
+       }
+}
+
+ANY_t *
+ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) {
+       ANY_t tmp;
+       ANY_t *st;
+
+       if(!td || !sptr) {
+               errno = EINVAL;
+               return 0;
+       }
+
+       memset(&tmp, 0, sizeof(tmp));
+
+       if(ANY_fromType_aper(&tmp, td, sptr)) return 0;
+
+       st = (ANY_t *)CALLOC(1, sizeof(ANY_t));
+       if(st) {
+               *st = tmp;
+               return st;
+       } else {
+               FREEMEM(tmp.buf);
+               return 0;
+       }
+}
+
+int
+ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) {
+       asn_dec_rval_t rval;
+       void *newst = 0;
+
+       if(!st || !td || !struct_ptr) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(st->buf == 0) {
+               /* Nothing to convert, make it empty. */
+               *struct_ptr = (void *)0;
+               return 0;
+       }
+
+       rval = ber_decode(0, td, (void **)&newst, st->buf, st->size);
+       if(rval.code == RC_OK) {
+               *struct_ptr = newst;
+               return 0;
+       } else {
+               /* Remove possibly partially decoded data. */
+               ASN_STRUCT_FREE(*td, newst);
+               return -1;
+       }
+}
+
+int
+ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) {
+       asn_dec_rval_t rval;
+       void *newst = 0;
+
+       if(!st || !td || !struct_ptr) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(st->buf == 0) {
+               /* Nothing to convert, make it empty. */
+               *struct_ptr = (void *)0;
+               return 0;
+       }
+
+       rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0);
+       if(rval.code == RC_OK) {
+               *struct_ptr = newst;
+               return 0;
+       } else {
+               /* Remove possibly partially decoded data. */
+               ASN_STRUCT_FREE(*td, newst);
+               return -1;
+       }
+}
+
+static int ANY__consume_bytes(const void *buffer, size_t size, void *key) {
+       struct _callback_arg *arg = (struct _callback_arg *)key;
+
+       if((arg->offset + size) >= arg->size) {
+               size_t nsize = (arg->size ? arg->size << 2 : 16) + size;
+               void *p = REALLOC(arg->buffer, nsize);
+               if(!p) return -1;
+               arg->buffer = (uint8_t *)p;
+               arg->size = nsize;
+       }
+
+       memcpy(arg->buffer + arg->offset, buffer, size);
+       arg->offset += size;
+       assert(arg->offset < arg->size);
+
+       return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+ANY_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, void **sptr,
+                asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_ANY_specs;
+    size_t consumed_myself = 0;
+    int repeat;
+    ANY_t *st = (ANY_t *)*sptr;
+
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    /*
+     * Allocate the structure.
+     */
+    if(!st) {
+        st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) RETURN(RC_FAIL);
+    }
+
+    ASN_DEBUG("UPER Decoding ANY type");
+
+    st->size = 0;
+    do {
+        ssize_t raw_len;
+        ssize_t len_bytes;
+        ssize_t len_bits;
+        void *p;
+        int ret;
+
+        /* Get the PER length */
+        raw_len = uper_get_length(pd, -1, 0, &repeat);
+        if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+        ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len,
+                  repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len;
+        len_bits = len_bytes * 8;
+
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+        if(!p) RETURN(RC_FAIL);
+        st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+        consumed_myself += len_bits;
+        st->size += len_bytes;
+    } while(repeat);
+    st->buf[st->size] = 0; /* nul-terminate */
+
+    RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+ANY_encode_uper(const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, const void *sptr,
+                asn_per_outp_t *po) {
+    const ANY_t *st = (const ANY_t *)sptr;
+    asn_enc_rval_t er = {0, 0, 0};
+    const uint8_t *buf;
+    size_t size;
+    int ret;
+
+    (void)constraints;
+
+    if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED;
+
+    buf = st->buf;
+    size = st->size;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ret = per_put_many_bits(po, buf, may_save * 8);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save;
+        size -= may_save;
+        assert(!(may_save & 0x07) || !size);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size);
+
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+ANY_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, void **sptr,
+                asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_ANY_specs;
+    size_t consumed_myself = 0;
+    int repeat;
+    ANY_t *st = (ANY_t *)*sptr;
+
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    /*
+     * Allocate the structure.
+     */
+    if(!st) {
+        st = (ANY_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) RETURN(RC_FAIL);
+    }
+
+    ASN_DEBUG("APER Decoding ANY type");
+
+    st->size = 0;
+    do {
+        ssize_t raw_len;
+        ssize_t len_bytes;
+        ssize_t len_bits;
+        void *p;
+        int ret;
+
+        /* Get the PER length */
+        raw_len = aper_get_length(pd, -1, 0, &repeat);
+        if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+        ASN_DEBUG("Got PER length len %" ASN_PRI_SIZE ", %s (%s)", raw_len,
+                  repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len;
+        len_bits = len_bytes * 8;
+
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+        if(!p) RETURN(RC_FAIL);
+        st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+        consumed_myself += len_bits;
+        st->size += len_bytes;
+    } while(repeat);
+    st->buf[st->size] = 0; /* nul-terminate */
+
+    RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+ANY_encode_aper(const asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, const void *sptr,
+                asn_per_outp_t *po) {
+    const ANY_t *st = (const ANY_t *)sptr;
+    asn_enc_rval_t er = {0, 0, 0};
+    const uint8_t *buf;
+    size_t size;
+    int ret;
+
+    (void)constraints;
+
+    if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED;
+
+    buf = st->buf;
+    size = st->size;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ret = per_put_many_bits(po, buf, may_save * 8);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save;
+        size -= may_save;
+        assert(!(may_save & 0x07) || !size);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size);
+
+    ASN__ENCODED_OK(er);
+}
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
diff --git a/skeletons/ANY.h b/skeletons/ANY.h
new file mode 100644 (file)
index 0000000..b30381f
--- /dev/null
@@ -0,0 +1,65 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_TYPE_ANY_H
+#define ASN_TYPE_ANY_H
+
+#include <OCTET_STRING.h>      /* Implemented via OCTET STRING type */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ANY {
+       uint8_t *buf;   /* BER-encoded ANY contents */
+       int size;       /* Size of the above buffer */
+
+       asn_struct_ctx_t _asn_ctx;      /* Parsing across buffer boundaries */
+} ANY_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_ANY;
+extern asn_TYPE_operation_t asn_OP_ANY;
+extern asn_OCTET_STRING_specifics_t asn_SPC_ANY_specs;
+
+asn_struct_free_f ANY_free;
+asn_struct_print_f ANY_print;
+ber_type_decoder_f ANY_decode_ber;
+der_type_encoder_f ANY_encode_der;
+xer_type_encoder_f ANY_encode_xer;
+per_type_decoder_f ANY_decode_uper;
+per_type_encoder_f ANY_encode_uper;
+per_type_decoder_f ANY_decode_aper;
+per_type_encoder_f ANY_encode_aper;
+
+#define ANY_free         OCTET_STRING_free
+#define ANY_print        OCTET_STRING_print
+#define ANY_compare      OCTET_STRING_compare
+#define ANY_constraint   asn_generic_no_constraint
+#define ANY_decode_ber   OCTET_STRING_decode_ber
+#define ANY_encode_der   OCTET_STRING_encode_der
+#define ANY_decode_xer   OCTET_STRING_decode_xer_hex
+
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/* Convert another ASN.1 type into the ANY. This implies DER encoding. */
+int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr);
+int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr);
+ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr);
+ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr);
+
+/* Convert the contents of the ANY type into the specified type. */
+int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr);
+
+#define        ANY_fromBuf(s, buf, size)       OCTET_STRING_fromBuf((s), (buf), (size))
+#define        ANY_new_fromBuf(buf, size)      OCTET_STRING_new_fromBuf(       \
+                                               &asn_DEF_ANY, (buf), (size))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_TYPE_ANY_H */
diff --git a/skeletons/BIT_STRING.c b/skeletons/BIT_STRING.c
new file mode 100644 (file)
index 0000000..e8d7354
--- /dev/null
@@ -0,0 +1,656 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <BIT_STRING.h>
+#include <asn_internal.h>
+
+/*
+ * BIT STRING basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs = {
+       sizeof(BIT_STRING_t),
+       offsetof(BIT_STRING_t, _asn_ctx),
+       ASN_OSUBV_BIT
+};
+asn_TYPE_operation_t asn_OP_BIT_STRING = {
+       OCTET_STRING_free,         /* Implemented in terms of OCTET STRING */
+       BIT_STRING_print,
+       BIT_STRING_compare,
+       OCTET_STRING_decode_ber,   /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,   /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_decode_xer_binary,
+       BIT_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       BIT_STRING_decode_oer,
+       BIT_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       BIT_STRING_decode_uper, /* Unaligned PER decoder */
+       BIT_STRING_encode_uper, /* Unaligned PER encoder */
+       OCTET_STRING_decode_aper,       /* Aligned PER decoder */
+       OCTET_STRING_encode_aper,       /* Aligned PER encoder */
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+       BIT_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_BIT_STRING = {
+       "BIT STRING",
+       "BIT_STRING",
+       &asn_OP_BIT_STRING,
+       asn_DEF_BIT_STRING_tags,
+       sizeof(asn_DEF_BIT_STRING_tags)
+         / sizeof(asn_DEF_BIT_STRING_tags[0]),
+       asn_DEF_BIT_STRING_tags,        /* Same as above */
+       sizeof(asn_DEF_BIT_STRING_tags)
+         / sizeof(asn_DEF_BIT_STRING_tags[0]),
+       { 0, 0, BIT_STRING_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_BIT_STRING_specs
+};
+
+/*
+ * BIT STRING generic constraint.
+ */
+int
+BIT_STRING_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+
+       if(st && st->buf) {
+               if((st->size == 0 && st->bits_unused)
+               || st->bits_unused < 0 || st->bits_unused > 7) {
+                       ASN__CTFAIL(app_key, td, sptr,
+                               "%s: invalid padding byte (%s:%d)",
+                               td->name, __FILE__, __LINE__);
+                       return -1;
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
+
+static const char *_bit_pattern[16] = {
+       "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
+       "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
+};
+
+asn_enc_rval_t
+BIT_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int ilevel, enum xer_encoder_flags_e flags,
+                      asn_app_consume_bytes_f *cb, void *app_key) {
+       asn_enc_rval_t er = {0, 0, 0};
+       char scratch[128];
+       char *p = scratch;
+       char *scend = scratch + (sizeof(scratch) - 10);
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       int xcan = (flags & XER_F_CANONICAL);
+       uint8_t *buf;
+       uint8_t *end;
+
+       if(!st || !st->buf)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = 0;
+
+       buf = st->buf;
+       end = buf + st->size - 1;       /* Last byte is special */
+
+       /*
+        * Binary dump
+        */
+       for(; buf < end; buf++) {
+               int v = *buf;
+               int nline = xcan?0:(((buf - st->buf) % 8) == 0);
+               if(p >= scend || nline) {
+                       ASN__CALLBACK(scratch, p - scratch);
+                       p = scratch;
+                       if(nline) ASN__TEXT_INDENT(1, ilevel);
+               }
+               memcpy(p + 0, _bit_pattern[v >> 4], 4);
+               memcpy(p + 4, _bit_pattern[v & 0x0f], 4);
+               p += 8;
+       }
+
+       if(!xcan && ((buf - st->buf) % 8) == 0)
+               ASN__TEXT_INDENT(1, ilevel);
+       ASN__CALLBACK(scratch, p - scratch);
+       p = scratch;
+
+       if(buf == end) {
+               int v = *buf;
+               int ubits = st->bits_unused;
+               int i;
+               for(i = 7; i >= ubits; i--)
+                       *p++ = (v & (1 << i)) ? 0x31 : 0x30;
+               ASN__CALLBACK(scratch, p - scratch);
+       }
+
+       if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+
+/*
+ * BIT STRING specific contents printer.
+ */
+int
+BIT_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                 asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+       char scratch[64];
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       uint8_t *buf;
+       uint8_t *end;
+       char *p = scratch;
+
+       (void)td;       /* Unused argument */
+
+       if(!st || !st->buf)
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       ilevel++;
+       buf = st->buf;
+       end = buf + st->size;
+
+       /*
+        * Hexadecimal dump.
+        */
+       for(; buf < end; buf++) {
+               if((buf - st->buf) % 16 == 0 && (st->size > 16)
+                               && buf != st->buf) {
+                       _i_INDENT(1);
+                       /* Dump the string */
+                       if(cb(scratch, p - scratch, app_key) < 0) return -1;
+                       p = scratch;
+               }
+               *p++ = h2c[*buf >> 4];
+               *p++ = h2c[*buf & 0x0F];
+               *p++ = 0x20;
+       }
+
+       if(p > scratch) {
+               p--;    /* Eat the tailing space */
+
+               if((st->size > 16)) {
+                       _i_INDENT(1);
+               }
+
+               /* Dump the incomplete 16-bytes row */
+               if(cb(scratch, p - scratch, app_key) < 0)
+                       return -1;
+       }
+
+    if(st->bits_unused) {
+        int ret = snprintf(scratch, sizeof(scratch), " (%d bit%s unused)",
+                           st->bits_unused, st->bits_unused == 1 ? "" : "s");
+        assert(ret > 0 && ret < (ssize_t)sizeof(scratch));
+        if(ret > 0 && ret < (ssize_t)sizeof(scratch)
+           && cb(scratch, ret, app_key) < 0)
+            return -1;
+    }
+
+       return 0;
+}
+
+/*
+ * Non-destructively remove the trailing 0-bits from the given bit string.
+ */
+static const BIT_STRING_t *
+BIT_STRING__compactify(const BIT_STRING_t *st, BIT_STRING_t *tmp) {
+    const uint8_t *b;
+    union {
+        const uint8_t *c_buf;
+        uint8_t *nc_buf;
+    } unconst;
+
+    if(st->size == 0) {
+        assert(st->bits_unused == 0);
+        return st;
+    } else {
+        for(b = &st->buf[st->size - 1]; b > st->buf && *b == 0; b--) {
+            ;
+        }
+        /* b points to the last byte which may contain data */
+        if(*b) {
+            int unused = 7;
+            uint8_t v = *b;
+            v &= -(int8_t)v;
+            if(v & 0x0F) unused -= 4;
+            if(v & 0x33) unused -= 2;
+            if(v & 0x55) unused -= 1;
+            tmp->size = b-st->buf + 1;
+            tmp->bits_unused = unused;
+        } else {
+            tmp->size = b-st->buf;
+            tmp->bits_unused = 0;
+        }
+
+        assert(b >= st->buf);
+    }
+
+    unconst.c_buf = st->buf;
+    tmp->buf = unconst.nc_buf;
+    return tmp;
+}
+
+/*
+ * Lexicographically compare the common prefix of both strings,
+ * and if it is the same return -1 for the smallest string.
+ */
+int
+BIT_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                   const void *bptr) {
+    /*
+     * Remove information about trailing bits, since
+     * X.680 (08/2015) #22.7 "ensure that different semantics are not"
+     * "associated with [values that differ only in] the trailing 0 bits."
+     */
+    BIT_STRING_t compact_a, compact_b;
+    const BIT_STRING_t *a = BIT_STRING__compactify(aptr, &compact_a);
+    const BIT_STRING_t *b = BIT_STRING__compactify(bptr, &compact_b);
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics;
+
+    assert(specs && specs->subvariant == ASN_OSUBV_BIT);
+
+    if(a && b) {
+        size_t common_prefix_size = a->size <= b->size ? a->size : b->size;
+        int ret = memcmp(a->buf, b->buf, common_prefix_size);
+        if(ret == 0) {
+            /* Figure out which string with equal prefixes is longer. */
+            if(a->size < b->size) {
+                return -1;
+            } else if(a->size > b->size) {
+                return 1;
+            } else {
+                /* Figure out how many unused bits */
+                if(a->bits_unused > b->bits_unused) {
+                    return -1;
+                } else if(a->bits_unused < b->bits_unused) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        } else {
+            return ret;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+#undef  RETURN
+#define RETURN(_code)                       \
+    do {                                    \
+        asn_dec_rval_t tmprval;             \
+        tmprval.code = _code;               \
+        tmprval.consumed = consumed_myself; \
+        return tmprval;                     \
+    } while(0)
+
+static asn_per_constraint_t asn_DEF_BIT_STRING_constraint_size = {
+    APC_SEMI_CONSTRAINED, -1, -1, 0, 0};
+
+asn_dec_rval_t
+BIT_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr,
+                       asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+               : &asn_SPC_BIT_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+       const asn_per_constraint_t *csiz;
+       asn_dec_rval_t rval = { RC_OK, 0 };
+       BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+       ssize_t consumed_myself = 0;
+       int repeat;
+
+       (void)opt_codec_ctx;
+
+       if(pc) {
+               csiz = &pc->size;
+       } else {
+               csiz = &asn_DEF_BIT_STRING_constraint_size;
+       }
+
+       if(specs->subvariant != ASN_OSUBV_BIT) {
+               ASN_DEBUG("Subvariant %d is not BIT OSUBV_BIT", specs->subvariant);
+               RETURN(RC_FAIL);
+    }
+
+       /*
+        * Allocate the string.
+        */
+       if(!st) {
+               st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+               if(!st) RETURN(RC_FAIL);
+       }
+
+       ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+               csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+               csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+       if(csiz->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) RETURN(RC_WMORE);
+               if(inext) {
+                       csiz = &asn_DEF_BIT_STRING_constraint_size;
+               }
+       }
+
+       if(csiz->effective_bits >= 0) {
+               FREEMEM(st->buf);
+        st->size = (csiz->upper_bound + 7) >> 3;
+        st->buf = (uint8_t *)MALLOC(st->size + 1);
+               if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+       }
+
+       /* X.691, #16.5: zero-length encoding */
+       /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+       /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+       if(csiz->effective_bits == 0) {
+               int ret;
+        ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound);
+        ret = per_get_many_bits(pd, st->buf, 0, csiz->upper_bound);
+               if(ret < 0) RETURN(RC_WMORE);
+               consumed_myself += csiz->upper_bound;
+               st->buf[st->size] = 0;
+        st->bits_unused = (8 - (csiz->upper_bound & 0x7)) & 0x7;
+        RETURN(RC_OK);
+       }
+
+       st->size = 0;
+       do {
+               ssize_t raw_len;
+               ssize_t len_bytes;
+               ssize_t len_bits;
+               void *p;
+               int ret;
+
+               /* Get the PER length */
+               raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound,
+                                         &repeat);
+               if(raw_len < 0) RETURN(RC_WMORE);
+        if(raw_len == 0 && st->buf) break;
+
+               ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+                       (long)csiz->effective_bits, (long)raw_len,
+                       repeat ? "repeat" : "once", td->name);
+        len_bits = raw_len;
+        len_bytes = (len_bits + 7) >> 3;
+        if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7);
+        /* len_bits be multiple of 16K if repeat is set */
+        p = REALLOC(st->buf, st->size + len_bytes + 1);
+               if(!p) RETURN(RC_FAIL);
+               st->buf = (uint8_t *)p;
+
+        ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits);
+        if(ret < 0) RETURN(RC_WMORE);
+               st->size += len_bytes;
+       } while(repeat);
+       st->buf[st->size] = 0;  /* nul-terminate */
+
+       return rval;
+}
+
+asn_enc_rval_t
+BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_BIT_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+       const asn_per_constraint_t *csiz;
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       BIT_STRING_t compact_bstr;  /* Do not modify this directly! */
+       asn_enc_rval_t er = { 0, 0, 0 };
+       int inext = 0;          /* Lies not within extension root */
+       size_t size_in_bits;
+       const uint8_t *buf;
+       int ret;
+       int ct_extensible;
+
+       if(!st || (!st->buf && st->size))
+               ASN__ENCODE_FAILED;
+
+       if(specs->subvariant == ASN_OSUBV_BIT) {
+        if((st->size == 0 && st->bits_unused) || (st->bits_unused & ~7))
+            ASN__ENCODE_FAILED;
+    } else {
+               ASN__ENCODE_FAILED;
+    }
+
+       if(pc) {
+        csiz = &pc->size;
+    } else {
+               csiz = &asn_DEF_BIT_STRING_constraint_size;
+       }
+       ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+    /* Figure out the size without the trailing bits */
+    st = BIT_STRING__compactify(st, &compact_bstr);
+    size_in_bits = 8 * st->size - st->bits_unused;
+
+    ASN_DEBUG(
+        "Encoding %s into %" ASN_PRI_SIZE " bits"
+        " (%ld..%ld, effective %d)%s",
+        td->name, size_in_bits, csiz->lower_bound, csiz->upper_bound,
+        csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+    /* Figure out whether size lies within PER visible constraint */
+
+    if(csiz->effective_bits >= 0) {
+        if((ssize_t)size_in_bits > csiz->upper_bound) {
+            if(ct_extensible) {
+                csiz = &asn_DEF_BIT_STRING_constraint_size;
+                inext = 1;
+            } else {
+                ASN__ENCODE_FAILED;
+            }
+        }
+    } else {
+        inext = 0;
+    }
+
+    if(ct_extensible) {
+               /* Declare whether length is [not] within extension root */
+               if(per_put_few_bits(po, inext, 1))
+                       ASN__ENCODE_FAILED;
+       }
+
+    if(csiz->effective_bits >= 0 && !inext) {
+        int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound;
+        ASN_DEBUG(
+            "Encoding %" ASN_PRI_SIZE " bytes (%ld), length (in %d bits) trailer %d; actual "
+            "value %" ASN_PRI_SSIZE "",
+            st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits,
+            add_trailer,
+            add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound);
+        ret = per_put_few_bits(
+            po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound,
+            csiz->effective_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        ret = per_put_many_bits(po, st->buf, size_in_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        if(add_trailer) {
+            static const uint8_t zeros[16];
+            size_t trailing_zero_bits = csiz->lower_bound - size_in_bits;
+            while(trailing_zero_bits > 0) {
+                if(trailing_zero_bits > 8 * sizeof(zeros)) {
+                    ret = per_put_many_bits(po, zeros, 8 * sizeof(zeros));
+                    trailing_zero_bits -= 8 * sizeof(zeros);
+                } else {
+                    ret = per_put_many_bits(po, zeros, trailing_zero_bits);
+                    trailing_zero_bits = 0;
+                }
+                if(ret) ASN__ENCODE_FAILED;
+            }
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size);
+
+    buf = st->buf;
+    do {
+        int need_eom = 0;
+        ssize_t maySave = uper_put_length(po, size_in_bits, &need_eom);
+        if(maySave < 0) ASN__ENCODE_FAILED;
+
+        ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "", maySave, size_in_bits);
+
+        ret = per_put_many_bits(po, buf, maySave);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += maySave >> 3;
+        size_in_bits -= maySave;
+        assert(!(maySave & 0x07) || !size_in_bits);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size_in_bits);
+
+    ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+asn_random_fill_result_t
+BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                       const asn_encoding_constraints_t *constraints,
+                       size_t max_length) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_BIT_STRING_specs;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    static unsigned lengths[] = {0,     1,     2,     3,     4,     8,
+                                 126,   127,   128,   16383, 16384, 16385,
+                                 65534, 65535, 65536, 65537};
+    uint8_t *buf;
+    uint8_t *bend;
+    uint8_t *b;
+    size_t rnd_bits, rnd_len;
+    BIT_STRING_t *st;
+
+    if(max_length == 0) return result_skipped;
+
+    switch(specs->subvariant) {
+    case ASN_OSUBV_ANY:
+        return result_failed;
+    case ASN_OSUBV_BIT:
+        break;
+    default:
+        break;
+    }
+
+    /* Figure out how far we should go */
+    rnd_bits = lengths[asn_random_between(
+        0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_CONSTRAINED) {
+            long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length
+                                             ? pc->upper_bound
+                                             : (ssize_t)max_length;
+            if(max_length < (size_t)pc->lower_bound) {
+                return result_skipped;
+            }
+            if(pc->flags & APC_EXTENSIBLE) {
+                switch(asn_random_between(0, 5)) {
+                case 0:
+                    if(pc->lower_bound > 0) {
+                        rnd_bits = pc->lower_bound - 1;
+                        break;
+                    }
+                    /* Fall through */
+                case 1:
+                    rnd_bits = pc->upper_bound + 1;
+                    break;
+                case 2:
+                    /* Keep rnd_bits from the table */
+                    if(rnd_bits < max_length) {
+                        break;
+                    }
+                    /* Fall through */
+                default:
+                    rnd_bits = asn_random_between(pc->lower_bound,
+                                                  suggested_upper_bound);
+                }
+            } else {
+                rnd_bits =
+                    asn_random_between(pc->lower_bound, suggested_upper_bound);
+            }
+        } else {
+            rnd_bits = asn_random_between(0, max_length - 1);
+        }
+    } else if(rnd_bits >= max_length) {
+        rnd_bits = asn_random_between(0, max_length - 1);
+    }
+
+    rnd_len = (rnd_bits + 7) / 8;
+    buf = CALLOC(1, rnd_len + 1);
+    if(!buf) return result_failed;
+
+    bend = &buf[rnd_len];
+
+    for(b = buf; b < bend; b++) {
+        *(uint8_t *)b = asn_random_between(0, 255);
+    }
+    *b = 0; /* Zero-terminate just in case. */
+
+    if(*sptr) {
+        st = *sptr;
+        FREEMEM(st->buf);
+    } else {
+        st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) {
+            FREEMEM(buf);
+            return result_failed;
+        }
+    }
+
+    st->buf = buf;
+    st->size = rnd_len;
+    st->bits_unused = (8 - (rnd_bits & 0x7)) & 0x7;
+    if(st->bits_unused) {
+        assert(st->size > 0);
+        st->buf[st->size-1] &= 0xff << st->bits_unused;
+    }
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/skeletons/BIT_STRING.h b/skeletons/BIT_STRING.h
new file mode 100644 (file)
index 0000000..c1bdbbc
--- /dev/null
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BIT_STRING_H_
+#define        _BIT_STRING_H_
+
+#include <OCTET_STRING.h>      /* Some help from OCTET STRING */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct BIT_STRING_s {
+       uint8_t *buf;   /* BIT STRING body */
+       size_t size;    /* Size of the above buffer */
+
+       int bits_unused;/* Unused trailing bits in the last octet (0..7) */
+
+       asn_struct_ctx_t _asn_ctx;      /* Parsing across buffer boundaries */
+} BIT_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING;
+extern asn_TYPE_operation_t asn_OP_BIT_STRING;
+extern asn_OCTET_STRING_specifics_t asn_SPC_BIT_STRING_specs;
+
+asn_struct_print_f BIT_STRING_print;   /* Human-readable output */
+asn_struct_compare_f BIT_STRING_compare;
+asn_constr_check_f BIT_STRING_constraint;
+xer_type_encoder_f BIT_STRING_encode_xer;
+oer_type_decoder_f BIT_STRING_decode_oer;
+oer_type_encoder_f BIT_STRING_encode_oer;
+per_type_decoder_f BIT_STRING_decode_uper;
+per_type_encoder_f BIT_STRING_encode_uper;
+asn_random_fill_f  BIT_STRING_random_fill;
+
+#define BIT_STRING_free              OCTET_STRING_free
+#define BIT_STRING_decode_ber        OCTET_STRING_decode_ber
+#define BIT_STRING_encode_der        OCTET_STRING_encode_der
+#define BIT_STRING_decode_xer        OCTET_STRING_decode_xer_binary
+#define BIT_STRING_decode_aper       OCTET_STRING_decode_aper
+#define BIT_STRING_encode_aper       OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BIT_STRING_H_ */
diff --git a/skeletons/BIT_STRING_oer.c b/skeletons/BIT_STRING_oer.c
new file mode 100644 (file)
index 0000000..aff5075
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <BIT_STRING.h>
+#include <errno.h>
+
+asn_dec_rval_t
+BIT_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                      const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints, void **sptr,
+                      const void *ptr, size_t size) {
+    BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+    const asn_oer_constraints_t *cts =
+        constraints ? constraints : td->encoding_constraints.oer_constraints;
+    ssize_t ct_size = cts ? cts->size : -1;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    size_t expected_length = 0;
+
+    (void)opt_codec_ctx;
+
+    if(!st) {
+        st = (BIT_STRING_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+    if(ct_size >= 0) {
+        expected_length = (ct_size + 7) >> 3;
+        st->bits_unused = (8 - (ct_size & 7)) & 7;
+    } else {
+        /*
+         * X.696 (08/2015) #13.3.1
+         * Encode length determinant as _number of octets_, but only
+         * if upper bound is not equal to lower bound.
+         */
+        ssize_t len_len = oer_fetch_length(ptr, size, &expected_length);
+        if(len_len > 0) {
+            ptr = (const char *)ptr + len_len;
+            size -= len_len;
+        } else if(len_len == 0) {
+            ASN__DECODE_STARVED;
+        } else if(len_len < 0) {
+            ASN__DECODE_FAILED;
+        }
+
+        if(expected_length < 1) {
+            ASN__DECODE_FAILED;
+        } else if(expected_length > size) {
+            ASN__DECODE_STARVED;
+        }
+
+        st->bits_unused = ((const uint8_t *)ptr)[0];
+        if(st->bits_unused & ~7) {
+            ASN_DEBUG("%s: unused bits outside of 0..7 range", td->name);
+            ASN__DECODE_FAILED;
+        }
+        ptr = (const char *)ptr + 1;
+        size--;
+        expected_length--;
+        rval.consumed = len_len + 1;
+    }
+
+    if(size < expected_length) {
+        ASN__DECODE_STARVED;
+    } else {
+        uint8_t *buf = MALLOC(expected_length + 1);
+        if(buf == NULL) {
+            ASN__DECODE_FAILED;
+        } else {
+            memcpy(buf, ptr, expected_length);
+            buf[expected_length] = '\0';
+        }
+        FREEMEM(st->buf);
+        st->buf = buf;
+        st->size = expected_length;
+        if(expected_length > 0) {
+            buf[expected_length - 1] &= (0xff << st->bits_unused);
+        }
+
+        rval.consumed += expected_length;
+        return rval;
+    }
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+BIT_STRING_encode_oer(const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints,
+                      const void *sptr, asn_app_consume_bytes_f *cb,
+                      void *app_key) {
+    const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+    asn_enc_rval_t erval = {0, 0, 0};
+    const asn_oer_constraints_t *cts =
+        constraints ? constraints : td->encoding_constraints.oer_constraints;
+    ssize_t ct_size = cts ? cts->size : -1;
+    size_t trailing_zeros = 0;
+    int fix_last_byte = 0;
+
+    if(!st) ASN__ENCODE_FAILED;
+
+    if(st->bits_unused & ~7) {
+        ASN_DEBUG("BIT STRING unused bits %d out of 0..7 range",
+                  st->bits_unused);
+        ASN__ENCODE_FAILED;
+    }
+    if(st->bits_unused && !(st->size && st->buf)) {
+        ASN_DEBUG("BIT STRING %s size 0 can't support unused bits %d", td->name,
+                  st->bits_unused);
+        ASN__ENCODE_FAILED;
+    }
+
+    if(ct_size >= 0) {
+        size_t ct_bytes = (ct_size + 7) >> 3;
+        if(st->size > ct_bytes) {
+            ASN_DEBUG("More bits in BIT STRING %s (%" ASN_PRI_SSIZE ") than constrained %" ASN_PRI_SSIZE "",
+                      td->name, 8 * st->size - st->bits_unused, ct_size);
+            ASN__ENCODE_FAILED;
+        }
+        trailing_zeros = ct_bytes - st->size;   /* Allow larger constraint */
+    } else {
+        uint8_t ub = st->bits_unused & 7;
+        ssize_t len_len = oer_serialize_length(1 + st->size, cb, app_key);
+        if(len_len < 0) ASN__ENCODE_FAILED;
+        if(cb(&ub, 1, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        }
+        erval.encoded += len_len + 1;
+    }
+
+    if(st->bits_unused) {
+        if(st->buf[st->size - 1] & (0xff << st->bits_unused)) {
+            fix_last_byte = 1;
+        }
+    }
+
+    if(cb(st->buf, st->size - fix_last_byte, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    if(fix_last_byte) {
+        uint8_t b = st->buf[st->size - 1] & (0xff << st->bits_unused);
+        if(cb(&b, 1, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        }
+    }
+
+    erval.encoded += st->size;
+
+    if(trailing_zeros) {
+        static uint8_t zeros[16];
+        while(trailing_zeros > 0) {
+            int ret;
+            if(trailing_zeros < sizeof(zeros)) {
+                ret = cb(zeros, trailing_zeros, app_key);
+                erval.encoded += trailing_zeros;
+            } else {
+                ret = cb(zeros, sizeof(zeros), app_key);
+                erval.encoded += sizeof(zeros);
+            }
+            if(ret < 0) ASN__ENCODE_FAILED;
+        }
+    }
+
+    return erval;
+}
+
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c
new file mode 100644 (file)
index 0000000..6b80ae7
--- /dev/null
@@ -0,0 +1,233 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <BMPString.h>
+#include <UTF8String.h>
+
+/*
+ * BMPString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_BMPString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (30 << 2)),  /* [UNIVERSAL 30] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_OCTET_STRING_specifics_t asn_SPC_BMPString_specs = {
+       sizeof(BMPString_t),
+       offsetof(BMPString_t, _asn_ctx),
+       ASN_OSUBV_U16   /* 16-bits character */
+};
+static asn_per_constraints_t asn_DEF_BMPString_per_constraints = {
+       { APC_CONSTRAINED, 16, 16, 0, 65535 },
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_BMPString = {
+       OCTET_STRING_free,          /* Implemented in terms of OCTET STRING */
+       BMPString_print,
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,
+       OCTET_STRING_encode_der,
+       BMPString_decode_xer,           /* Convert from UTF-8 */
+       BMPString_encode_xer,           /* Convert to UTF-8 */
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_BMPString = {
+       "BMPString",
+       "BMPString",
+       &asn_OP_BMPString,
+       asn_DEF_BMPString_tags,
+       sizeof(asn_DEF_BMPString_tags)
+         / sizeof(asn_DEF_BMPString_tags[0]) - 1,
+       asn_DEF_BMPString_tags,
+       sizeof(asn_DEF_BMPString_tags)
+         / sizeof(asn_DEF_BMPString_tags[0]),
+       { 0, &asn_DEF_BMPString_per_constraints, BMPString_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_BMPString_specs
+};
+
+int
+BMPString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                     asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const BMPString_t *st = (const BMPString_t *)sptr;
+
+    if(st && st->buf) {
+        if(st->size & 1) {
+            ASN__CTFAIL(app_key, td, sptr,
+                        "%s: invalid size %" ASN_PRI_SIZE " not divisible by 2 (%s:%d)",
+                        td->name, st->size, __FILE__, __LINE__);
+            return -1;
+        }
+    } else {
+        ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name,
+                    __FILE__, __LINE__);
+        return -1;
+    }
+
+    return 0;
+}
+
+/*
+ * BMPString specific contents printer.
+ */
+static ssize_t
+BMPString__dump(const BMPString_t *st,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+       char scratch[128];                      /* Scratchpad buffer */
+       char *p = scratch;
+       ssize_t wrote = 0;
+       uint8_t *ch;
+       uint8_t *end;
+
+       ch = st->buf;
+       end = (st->buf + st->size);
+       for(end--; ch < end; ch += 2) {
+               uint16_t wc = (ch[0] << 8) | ch[1];     /* 2 bytes */
+               if(sizeof(scratch) - (p - scratch) < 3) {
+                       wrote += p - scratch;
+                       if(cb(scratch, p - scratch, app_key) < 0)
+                               return -1;
+                       p = scratch;
+               }
+               if(wc < 0x80) {
+                       *p++ = (char)wc;
+               } else if(wc < 0x800) {
+                       *p++ = 0xc0 | ((wc >> 6));
+                       *p++ = 0x80 | ((wc & 0x3f));
+               } else {
+                       *p++ = 0xe0 | ((wc >> 12));
+                       *p++ = 0x80 | ((wc >> 6) & 0x3f);
+                       *p++ = 0x80 | ((wc & 0x3f));
+               }
+       }
+
+       wrote += p - scratch;
+       if(cb(scratch, p - scratch, app_key) < 0)
+               return -1;
+
+       return wrote;
+}
+
+asn_dec_rval_t
+BMPString_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const char *opt_mname, const void *buf_ptr, size_t size) {
+    asn_dec_rval_t rc;
+
+       rc = OCTET_STRING_decode_xer_utf8(opt_codec_ctx, td, sptr, opt_mname,
+               buf_ptr, size);
+       if(rc.code == RC_OK) {
+               /*
+                * Now we have a whole string in UTF-8 format.
+                * Convert it into UCS-2.
+                */
+               uint32_t *wcs;
+               size_t wcs_len;
+               UTF8String_t *st;
+
+               assert(*sptr);
+               st = (UTF8String_t *)*sptr;
+               assert(st->buf);
+               wcs_len = UTF8String_to_wcs(st, 0, 0);
+
+               wcs = (uint32_t *)MALLOC(4 * (wcs_len + 1));
+               if(wcs == 0 || UTF8String_to_wcs(st, wcs, wcs_len) != wcs_len) {
+                       rc.code = RC_FAIL;
+                       rc.consumed = 0;
+                       return rc;
+               } else {
+                       wcs[wcs_len] = 0;       /* nul-terminate */
+               }
+
+               if(1) {
+                       /* Swap byte order and trim encoding to 2 bytes */
+                       uint32_t *wc = wcs;
+                       uint32_t *wc_end = wcs + wcs_len;
+                       uint16_t *dstwc = (uint16_t *)wcs;
+                       for(; wc < wc_end; wc++, dstwc++) {
+                               uint32_t wch = *wc;
+                               if(wch > 0xffff) {
+                                       FREEMEM(wcs);
+                                       rc.code = RC_FAIL;
+                                       rc.consumed = 0;
+                                       return rc;
+                               }
+                               *((uint8_t *)dstwc + 0) = wch >> 8;
+                               *((uint8_t *)dstwc + 1) = wch;
+                       }
+                       dstwc = (uint16_t *)REALLOC(wcs, 2 * (wcs_len + 1));
+                       if(!dstwc) {
+                               FREEMEM(wcs);
+                               rc.code = RC_FAIL;
+                               rc.consumed = 0;
+                               return rc;
+                       } else {
+                               dstwc[wcs_len] = 0;     /* nul-terminate */
+                               wcs = (uint32_t *)(void *)dstwc; /* Alignment OK */
+                       }
+               }
+
+               FREEMEM(st->buf);
+               st->buf = (uint8_t *)wcs;
+               st->size = 2 * wcs_len;
+       }
+       return rc;
+}
+
+asn_enc_rval_t
+BMPString_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                     int ilevel, enum xer_encoder_flags_e flags,
+                     asn_app_consume_bytes_f *cb, void *app_key) {
+    const BMPString_t *st = (const BMPString_t *)sptr;
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)ilevel;
+       (void)flags;
+
+       if(!st || !st->buf)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = BMPString__dump(st, cb, app_key);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+int
+BMPString_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                asn_app_consume_bytes_f *cb, void *app_key) {
+    const BMPString_t *st = (const BMPString_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(!st || !st->buf)
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       if(BMPString__dump(st, cb, app_key) < 0)
+               return -1;
+
+       return 0;
+}
+
diff --git a/skeletons/BMPString.h b/skeletons/BMPString.h
new file mode 100644 (file)
index 0000000..af14588
--- /dev/null
@@ -0,0 +1,39 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BMPString_H_
+#define        _BMPString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t BMPString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_BMPString;
+extern asn_TYPE_operation_t asn_OP_BMPString;
+extern asn_OCTET_STRING_specifics_t asn_SPC_BMPString_specs;
+
+asn_struct_print_f BMPString_print;    /* Human-readable output */
+asn_constr_check_f BMPString_constraint;
+xer_type_decoder_f BMPString_decode_xer;
+xer_type_encoder_f BMPString_encode_xer;
+
+#define BMPString_free          OCTET_STRING_free
+#define BMPString_print         BMPString_print
+#define BMPString_compare       OCTET_STRING_compare
+#define BMPString_decode_ber    OCTET_STRING_decode_ber
+#define BMPString_encode_der    OCTET_STRING_encode_der
+#define BMPString_decode_uper   OCTET_STRING_decode_uper
+#define BMPString_encode_uper   OCTET_STRING_encode_uper
+#define BMPString_decode_aper   OCTET_STRING_decode_aper
+#define BMPString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BMPString_H_ */
diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
new file mode 100644 (file)
index 0000000..25831e2
--- /dev/null
@@ -0,0 +1,492 @@
+/*-
+ * Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <BOOLEAN.h>
+
+/*
+ * BOOLEAN basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (1 << 2))
+};
+asn_TYPE_operation_t asn_OP_BOOLEAN = {
+       BOOLEAN_free,
+       BOOLEAN_print,
+       BOOLEAN_compare,
+       BOOLEAN_decode_ber,
+       BOOLEAN_encode_der,
+       BOOLEAN_decode_xer,
+       BOOLEAN_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       BOOLEAN_decode_oer,
+       BOOLEAN_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       BOOLEAN_decode_uper,    /* Unaligned PER decoder */
+       BOOLEAN_encode_uper,    /* Unaligned PER encoder */
+       BOOLEAN_decode_aper,    /* Aligned PER decoder */
+       BOOLEAN_encode_aper,    /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       BOOLEAN_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_BOOLEAN = {
+       "BOOLEAN",
+       "BOOLEAN",
+       &asn_OP_BOOLEAN,
+       asn_DEF_BOOLEAN_tags,
+       sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+       asn_DEF_BOOLEAN_tags,   /* Same as above */
+       sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+/*
+ * Decode BOOLEAN type.
+ */
+asn_dec_rval_t
+BOOLEAN_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **bool_value,
+                   const void *buf_ptr, size_t size, int tag_mode) {
+    BOOLEAN_t *st = (BOOLEAN_t *)*bool_value;
+       asn_dec_rval_t rval;
+       ber_tlv_len_t length;
+       ber_tlv_len_t lidx;
+
+       if(st == NULL) {
+               st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st)));
+               if(st == NULL) {
+                       rval.code = RC_FAIL;
+                       rval.consumed = 0;
+                       return rval;
+               }
+       }
+
+       ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)",
+               td->name, tag_mode);
+
+       /*
+        * Check tags.
+        */
+       rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+               tag_mode, 0, &length, 0);
+       if(rval.code != RC_OK)
+               return rval;
+
+       ASN_DEBUG("Boolean length is %d bytes", (int)length);
+
+       buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+       size -= rval.consumed;
+       if(length > (ber_tlv_len_t)size) {
+               rval.code = RC_WMORE;
+               rval.consumed = 0;
+               return rval;
+       }
+
+       /*
+        * Compute boolean value.
+        */
+       for(*st = 0, lidx = 0;
+               (lidx < length) && *st == 0; lidx++) {
+               /*
+                * Very simple approach: read bytes until the end or
+                * value is already TRUE.
+                * BOOLEAN is not supposed to contain meaningful data anyway.
+                */
+               *st |= ((const uint8_t *)buf_ptr)[lidx];
+       }
+
+       rval.code = RC_OK;
+       rval.consumed += length;
+
+       ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d",
+               (long)rval.consumed, (long)length,
+               td->name, *st);
+       
+       return rval;
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                   void *app_key) {
+       asn_enc_rval_t erval = {0,0,0};
+       const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+
+       erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key);
+       if(erval.encoded == -1) {
+               erval.failed_type = td;
+               erval.structure_ptr = sptr;
+               return erval;
+       }
+
+       if(cb) {
+               uint8_t bool_value;
+
+               bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */
+
+               if(cb(&bool_value, 1, app_key) < 0) {
+                       erval.encoded = -1;
+                       erval.failed_type = td;
+                       erval.structure_ptr = sptr;
+                       return erval;
+               }
+       }
+
+       erval.encoded += 1;
+
+       ASN__ENCODED_OK(erval);
+}
+
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+static enum xer_pbd_rval
+BOOLEAN__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                         const void *chunk_buf, size_t chunk_size) {
+    BOOLEAN_t *st = (BOOLEAN_t *)sptr;
+       const char *p = (const char *)chunk_buf;
+
+       (void)td;
+
+       if(chunk_size && p[0] == 0x3c /* '<' */) {
+               switch(xer_check_tag(chunk_buf, chunk_size, "false")) {
+               case XCT_BOTH:
+                       /* "<false/>" */
+                       *st = 0;
+                       break;
+               case XCT_UNKNOWN_BO:
+                       if(xer_check_tag(chunk_buf, chunk_size, "true")
+                                       != XCT_BOTH)
+                               return XPBD_BROKEN_ENCODING;
+                       /* "<true/>" */
+                       *st = 1;        /* Or 0xff as in DER?.. */
+                       break;
+               default:
+                       return XPBD_BROKEN_ENCODING;
+               }
+               return XPBD_BODY_CONSUMED;
+       } else {
+               return XPBD_BROKEN_ENCODING;
+       }
+}
+
+
+asn_dec_rval_t
+BOOLEAN_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **sptr,
+                   const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size,
+               BOOLEAN__xer_body_decode);
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+       int ilevel, enum xer_encoder_flags_e flags,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+       const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+       asn_enc_rval_t er = {0, 0, 0};
+
+       (void)ilevel;
+       (void)flags;
+
+       if(!st) ASN__ENCODE_FAILED;
+
+       if(*st) {
+               ASN__CALLBACK("<true/>", 7);
+       } else {
+               ASN__CALLBACK("<false/>", 8);
+       }
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+int
+BOOLEAN_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+              asn_app_consume_bytes_f *cb, void *app_key) {
+    const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+       const char *buf;
+       size_t buflen;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(st) {
+               if(*st) {
+                       buf = "TRUE";
+                       buflen = 4;
+               } else {
+                       buf = "FALSE";
+                       buflen = 5;
+               }
+       } else {
+               buf = "<absent>";
+               buflen = 8;
+       }
+
+       return (cb(buf, buflen, app_key) < 0) ? -1 : 0;
+}
+
+void
+BOOLEAN_free(const asn_TYPE_descriptor_t *td, void *ptr,
+             enum asn_struct_free_method method) {
+    if(td && ptr) {
+        switch(method) {
+        case ASFM_FREE_EVERYTHING:
+            FREEMEM(ptr);
+            break;
+        case ASFM_FREE_UNDERLYING:
+            break;
+        case ASFM_FREE_UNDERLYING_AND_RESET:
+            memset(ptr, 0, sizeof(BOOLEAN_t));
+            break;
+        }
+    }
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+BOOLEAN_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+       BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
+
+       (void)opt_codec_ctx;
+    (void)td;
+       (void)constraints;
+
+       if(!st) {
+               st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       /*
+        * Extract a single bit
+        */
+       switch(per_get_few_bits(pd, 1)) {
+       case 1: *st = 1; break;
+       case 0: *st = 0; break;
+       case -1: default: ASN__DECODE_STARVED;
+       }
+
+       ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE");
+
+       rv.code = RC_OK;
+       rv.consumed = 1;
+       return rv;
+}
+
+
+asn_enc_rval_t
+BOOLEAN_encode_uper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, const void *sptr,
+                    asn_per_outp_t *po) {
+    const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+
+       (void)constraints;
+
+       if(!st) ASN__ENCODE_FAILED;
+
+       if(per_put_few_bits(po, *st ? 1 : 0, 1))
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+BOOLEAN_decode_aper(const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       asn_dec_rval_t rv;
+       BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
+
+       (void)opt_codec_ctx;
+       (void)constraints;
+       (void)td;
+
+       if(!st) {
+               st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       /*
+        * Extract a single bit
+        */
+       switch(per_get_few_bits(pd, 1)) {
+       case 1:
+               *st = 1;
+               break;
+       case 0:
+               *st = 0;
+               break;
+       case -1:
+       default:
+               ASN__DECODE_STARVED;
+       }
+
+       ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE");
+
+       rv.code = RC_OK;
+       rv.consumed = 1;
+       return rv;
+}
+
+asn_enc_rval_t
+BOOLEAN_encode_aper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints,
+                    const void *sptr, asn_per_outp_t *po) {
+       const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+
+       (void)constraints;
+
+       if(!st) ASN__ENCODE_FAILED;
+
+       if(per_put_few_bits(po, *st ? 1 : 0, 1))
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
+#ifndef  ASN_DISABLE_OER_SUPPORT
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+BOOLEAN_encode_oer(const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, const void *sptr,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = { 1, 0, 0 };
+    const BOOLEAN_t *st = sptr;
+    uint8_t bool_value = *st ? 0xff : 0; /* 0xff mandated by OER */
+
+    (void)td;
+    (void)constraints;  /* Constraints are unused in OER */
+
+    if(cb(&bool_value, 1, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    } else {
+        ASN__ENCODED_OK(er);
+    }
+}
+
+asn_dec_rval_t
+BOOLEAN_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, void **sptr,
+                   const void *ptr, size_t size) {
+    asn_dec_rval_t ok = {RC_OK, 1};
+    BOOLEAN_t *st;
+
+    (void)opt_codec_ctx;
+    (void)td;
+    (void)constraints; /* Constraints are unused in OER */
+
+    if(size < 1) {
+        ASN__DECODE_STARVED;
+    }
+
+    if(!(st = *sptr)) {
+        st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+    *st = *(const uint8_t *)ptr;
+
+    return ok;
+}
+
+
+
+#endif
+
+int
+BOOLEAN_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                const void *bptr) {
+    const BOOLEAN_t *a = aptr;
+    const BOOLEAN_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        if(!*a == !*b) {    /* TRUE can be encoded by any non-zero byte. */
+            return 0;
+        } else if(!*a) {
+            return -1;
+        } else {
+            return 1;
+        }
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+asn_random_fill_result_t
+BOOLEAN_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constraints,
+                    size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    BOOLEAN_t *st = *sptr;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (BOOLEAN_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->value;
+        if(pc->flags & APC_CONSTRAINED) {
+            *st = asn_random_between(pc->lower_bound, pc->upper_bound);
+            return result_ok;
+        }
+    }
+
+    /* Simulate booleans that are sloppily set and biased. */
+    switch(asn_random_between(0, 7)) {
+    case 0:
+    case 1:
+    case 2:
+        *st = 0; break;
+    case 3: *st = -1; break;
+    case 4: *st = 1; break;
+    case 5: *st = INT_MIN; break;
+    case 6: *st = INT_MAX; break;
+    default:
+        *st = asn_random_between(INT_MIN, INT_MAX);
+        break;
+    }
+    return result_ok;
+}
diff --git a/skeletons/BOOLEAN.h b/skeletons/BOOLEAN.h
new file mode 100644 (file)
index 0000000..620acf7
--- /dev/null
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BOOLEAN_H_
+#define        _BOOLEAN_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The underlying integer may contain various values, but everything
+ * non-zero is capped to 0xff by the DER encoder. The BER decoder may
+ * yield non-zero values different from 1, beware.
+ */
+typedef int BOOLEAN_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN;
+extern asn_TYPE_operation_t asn_OP_BOOLEAN;
+
+asn_struct_free_f BOOLEAN_free;
+asn_struct_print_f BOOLEAN_print;
+asn_struct_compare_f BOOLEAN_compare;
+ber_type_decoder_f BOOLEAN_decode_ber;
+der_type_encoder_f BOOLEAN_encode_der;
+oer_type_decoder_f BOOLEAN_decode_oer;
+oer_type_encoder_f BOOLEAN_encode_oer;
+per_type_decoder_f BOOLEAN_decode_uper;
+per_type_encoder_f BOOLEAN_encode_uper;
+per_type_decoder_f BOOLEAN_decode_aper;
+per_type_encoder_f BOOLEAN_encode_aper;
+xer_type_decoder_f BOOLEAN_decode_xer;
+xer_type_encoder_f BOOLEAN_encode_xer;
+asn_random_fill_f  BOOLEAN_random_fill;
+
+#define BOOLEAN_constraint     asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BOOLEAN_H_ */
diff --git a/skeletons/ENUMERATED.c b/skeletons/ENUMERATED.c
new file mode 100644 (file)
index 0000000..e16cdd9
--- /dev/null
@@ -0,0 +1,180 @@
+/*-
+ * Copyright (c) 2003, 2005, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ENUMERATED.h>
+#include <NativeEnumerated.h>
+#include <asn_codecs_prim.h>   /* Encoder and decoder of a primitive type */
+
+/*
+ * ENUMERATED basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_ENUMERATED_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_operation_t asn_OP_ENUMERATED = {
+       ASN__PRIMITIVE_TYPE_free,
+       INTEGER_print,                  /* Implemented in terms of INTEGER */
+       INTEGER_compare,                /* Implemented in terms of INTEGER */
+       ber_decode_primitive,
+       INTEGER_encode_der,             /* Implemented in terms of INTEGER */
+       INTEGER_decode_xer,             /* This is temporary! */
+       INTEGER_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       ENUMERATED_decode_oer,
+       ENUMERATED_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       ENUMERATED_decode_uper,         /* Unaligned PER decoder */
+       ENUMERATED_encode_uper,         /* Unaligned PER encoder */
+       ENUMERATED_decode_aper,         /* Aligned PER decoder */
+       ENUMERATED_encode_aper,         /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       ENUMERATED_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_ENUMERATED = {
+       "ENUMERATED",
+       "ENUMERATED",
+       &asn_OP_ENUMERATED,
+       asn_DEF_ENUMERATED_tags,
+       sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
+       asn_DEF_ENUMERATED_tags,        /* Same as above */
+       sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+#ifndef  ASN_DISABLE_OER_SUPPORT
+
+asn_dec_rval_t
+ENUMERATED_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                      const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints, void **sptr,
+                      const void *ptr, size_t size) {
+    asn_dec_rval_t rval;
+    ENUMERATED_t *st = (ENUMERATED_t *)*sptr;
+    long value;
+    void *vptr = &value;
+
+    if(!st) {
+        st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+    rval = NativeEnumerated_decode_oer(opt_codec_ctx, td, constraints,
+                                       (void **)&vptr, ptr, size);
+    if(rval.code == RC_OK) {
+        if(asn_long2INTEGER(st, value)) {
+            rval.code = RC_FAIL;
+        }
+    }
+    return rval;
+}
+
+asn_enc_rval_t
+ENUMERATED_encode_oer(const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints,
+                      const void *sptr, asn_app_consume_bytes_f *cb,
+                      void *app_key) {
+    const ENUMERATED_t *st = sptr;
+       long value;
+
+       if(asn_INTEGER2long(st, &value)) {
+        ASN__ENCODE_FAILED;
+    }
+
+    return NativeEnumerated_encode_oer(td, constraints, &value, cb, app_key);
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+ENUMERATED_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr,
+                       asn_per_data_t *pd) {
+    asn_dec_rval_t rval;
+    ENUMERATED_t *st = (ENUMERATED_t *)*sptr;
+    long value;
+    void *vptr = &value;
+
+    if(!st) {
+        st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(!st) ASN__DECODE_FAILED;
+       }
+
+    rval = NativeEnumerated_decode_uper(opt_codec_ctx, td, constraints,
+                                        (void **)&vptr, pd);
+    if(rval.code == RC_OK) {
+        if(asn_long2INTEGER(st, value)) {
+            rval.code = RC_FAIL;
+        }
+    }
+    return rval;
+}
+
+asn_enc_rval_t
+ENUMERATED_encode_uper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+    const ENUMERATED_t *st = (const ENUMERATED_t *)sptr;
+    long value;
+
+    if(asn_INTEGER2long(st, &value)) {
+        ASN__ENCODE_FAILED;
+    }
+
+    return NativeEnumerated_encode_uper(td, constraints, &value, po);
+}
+
+asn_dec_rval_t
+ENUMERATED_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       asn_dec_rval_t rval;
+       ENUMERATED_t *st = (ENUMERATED_t *)*sptr;
+       long value;
+       void *vptr = &value;
+
+       if(!st) {
+               st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       rval = NativeEnumerated_decode_aper(opt_codec_ctx, td, constraints,
+                                           (void **)&vptr, pd);
+       if(rval.code == RC_OK)
+               if(asn_long2INTEGER(st, value))
+                       rval.code = RC_FAIL;
+       return rval;
+}
+
+asn_enc_rval_t
+ENUMERATED_encode_aper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+       const ENUMERATED_t *st = (const ENUMERATED_t *)sptr;
+       long value;
+
+       if(asn_INTEGER2long(st, &value))
+               ASN__ENCODE_FAILED;
+
+       return NativeEnumerated_encode_aper(td, constraints, &value, po);
+}
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
diff --git a/skeletons/ENUMERATED.h b/skeletons/ENUMERATED.h
new file mode 100644 (file)
index 0000000..8fd04de
--- /dev/null
@@ -0,0 +1,40 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _ENUMERATED_H_
+#define        _ENUMERATED_H_
+
+#include <INTEGER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef INTEGER_t ENUMERATED_t;                /* Implemented via INTEGER */
+
+extern asn_TYPE_descriptor_t asn_DEF_ENUMERATED;
+extern asn_TYPE_operation_t asn_OP_ENUMERATED;
+
+oer_type_decoder_f ENUMERATED_decode_oer;
+oer_type_encoder_f ENUMERATED_encode_oer;
+per_type_decoder_f ENUMERATED_decode_uper;
+per_type_encoder_f ENUMERATED_encode_uper;
+per_type_decoder_f ENUMERATED_decode_aper;
+per_type_encoder_f ENUMERATED_encode_aper;
+
+#define ENUMERATED_free       ASN__PRIMITIVE_TYPE_free
+#define ENUMERATED_print      INTEGER_print
+#define ENUMERATED_compare    INTEGER_compare
+#define ENUMERATED_constraint asn_generic_no_constraint
+#define ENUMERATED_decode_ber ber_decode_primitive
+#define ENUMERATED_encode_der INTEGER_encode_der
+#define ENUMERATED_decode_xer INTEGER_decode_xer
+#define ENUMERATED_encode_xer INTEGER_encode_xer
+#define ENUMERATED_random_fill INTEGER_random_fill
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ENUMERATED_H_ */
diff --git a/skeletons/GeneralString.c b/skeletons/GeneralString.c
new file mode 100644 (file)
index 0000000..cc35a3a
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <GeneralString.h>
+
+/*
+ * GeneralString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_GeneralString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (27 << 2)),  /* [UNIVERSAL 27] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_GeneralString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,         /* non-ascii string */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_GeneralString = {
+       "GeneralString",
+       "GeneralString",
+       &asn_OP_GeneralString,
+       asn_DEF_GeneralString_tags,
+       sizeof(asn_DEF_GeneralString_tags)
+         / sizeof(asn_DEF_GeneralString_tags[0]) - 1,
+       asn_DEF_GeneralString_tags,
+       sizeof(asn_DEF_GeneralString_tags)
+         / sizeof(asn_DEF_GeneralString_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/skeletons/GeneralString.h b/skeletons/GeneralString.h
new file mode 100644 (file)
index 0000000..fb5de1c
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _GeneralString_H_
+#define        _GeneralString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t GeneralString_t;        /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_GeneralString;
+extern asn_TYPE_operation_t asn_OP_GeneralString;
+
+#define GeneralString_free          OCTET_STRING_free
+#define GeneralString_print         OCTET_STRING_print
+#define GeneralString_compare       OCTET_STRING_compare
+#define GeneralString_constraint    asn_generic_unknown_constraint
+#define GeneralString_decode_ber    OCTET_STRING_decode_ber
+#define GeneralString_encode_der    OCTET_STRING_encode_der
+#define GeneralString_decode_xer    OCTET_STRING_decode_xer_hex
+#define GeneralString_encode_xer    OCTET_STRING_encode_xer
+#define GeneralString_decode_uper   OCTET_STRING_decode_uper
+#define GeneralString_encode_uper   OCTET_STRING_encode_uper
+#define GeneralString_decode_aper   OCTET_STRING_decode_aper
+#define GeneralString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GeneralString_H_ */
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
new file mode 100644 (file)
index 0000000..f1095a2
--- /dev/null
@@ -0,0 +1,833 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#define        _POSIX_PTHREAD_SEMANTICS        /* for Sun */
+#define        _REENTRANT                      /* for Sun */
+#define __EXTENSIONS__                  /* for Sun */
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE     /* for timegm(3) */
+#endif
+#include <asn_internal.h>
+#include <GeneralizedTime.h>
+
+#ifdef __CYGWIN__
+#include "/usr/include/time.h"
+#else
+#include <time.h>
+#endif /* __CYGWIN__ */
+
+#include <stdio.h>
+#include <errno.h>
+
+#if    defined(_WIN32)
+#pragma message( "PLEASE STOP AND READ!")
+#pragma message( "  localtime_r is implemented via localtime(), which may be not thread-safe.")
+#pragma message( "  gmtime_r is implemented via gmtime(), which may be not thread-safe.")
+#pragma message( "  ")
+#pragma message( "  You must fix the code by inserting appropriate locking")
+#pragma message( "  if you want to use asn_GT2time() or asn_UT2time().")
+#pragma message( "PLEASE STOP AND READ!")
+
+static struct tm *localtime_r(const time_t *tloc, struct tm *result) {
+       struct tm *tm;
+       if((tm = localtime(tloc)))
+               return memcpy(result, tm, sizeof(struct tm));
+       return 0;
+}
+
+static struct tm *gmtime_r(const time_t *tloc, struct tm *result) {
+       struct tm *tm;
+       if((tm = gmtime(tloc)))
+               return memcpy(result, tm, sizeof(struct tm));
+       return 0;
+}
+
+#define        tzset() _tzset()
+#define        putenv(c)       _putenv(c)
+#define        _EMULATE_TIMEGM
+
+#endif /* _WIN32 */
+
+#if    defined(sun) || defined(__sun) || defined(__solaris__)
+#define        _EMULATE_TIMEGM
+#endif
+
+/*
+ * Where to look for offset from GMT, Phase I.
+ * Several platforms are known.
+ */
+#if defined(__FreeBSD__)                               \
+       || (defined(__GNUC__) && defined(__APPLE_CC__)) \
+       || (defined __GLIBC__ && __GLIBC__ >= 2)
+#undef HAVE_TM_GMTOFF
+#define        HAVE_TM_GMTOFF
+#endif /* BSDs and newer glibc */
+
+/*
+ * Where to look for offset from GMT, Phase II.
+ */
+#ifdef HAVE_TM_GMTOFF
+#define        GMTOFF(tm)      ((tm).tm_gmtoff)
+#else  /* HAVE_TM_GMTOFF */
+#define        GMTOFF(tm)      (-timezone)
+#endif /* HAVE_TM_GMTOFF */
+
+#if    defined(_WIN32)
+#pragma message( "PLEASE STOP AND READ!")
+#pragma message( "  timegm() is implemented via getenv(\"TZ\")/setenv(\"TZ\"), which may be not thread-safe.")
+#pragma message( "  ")
+#pragma message( "  You must fix the code by inserting appropriate locking")
+#pragma message( "  if you want to use asn_GT2time() or asn_UT2time().")
+#pragma message( "PLEASE STOP AND READ!")
+#else
+#if    (defined(_EMULATE_TIMEGM) || !defined(HAVE_TM_GMTOFF))
+#warning "PLEASE STOP AND READ!"
+#warning "  timegm() is implemented via getenv(\"TZ\")/setenv(\"TZ\"), which may be not thread-safe."
+#warning "  "
+#warning "  You must fix the code by inserting appropriate locking"
+#warning "  if you want to use asn_GT2time() or asn_UT2time()."
+#warning "PLEASE STOP AND READ!"
+#endif /* _EMULATE_TIMEGM */
+#endif
+
+/*
+ * Override our GMTOFF decision for other known platforms.
+ */
+#ifdef __CYGWIN__
+#undef GMTOFF
+static long GMTOFF(struct tm a){
+       struct tm *lt;
+       time_t local_time, gmt_time;
+       long zone;
+
+       tzset();
+       gmt_time = time (NULL);
+
+       lt = gmtime(&gmt_time);
+
+       local_time = mktime(lt);
+       return (gmt_time - local_time);
+}
+#define        _EMULATE_TIMEGM
+
+#endif /* __CYGWIN__ */
+
+#define        ATZVARS do {                                                    \
+       char tzoldbuf[64];                                              \
+       char *tzold
+#define        ATZSAVETZ do {                                                  \
+       tzold = getenv("TZ");                                           \
+       if(tzold) {                                                     \
+               size_t tzlen = strlen(tzold);                           \
+               if(tzlen < sizeof(tzoldbuf)) {                          \
+                       tzold = memcpy(tzoldbuf, tzold, tzlen + 1);     \
+               } else {                                                \
+                       char *dupptr = tzold;                           \
+                       tzold = MALLOC(tzlen + 1);                      \
+                       if(tzold) memcpy(tzold, dupptr, tzlen + 1);     \
+               }                                                       \
+               setenv("TZ", "UTC", 1);                                 \
+       }                                                               \
+       tzset();                                                        \
+} while(0)
+#define        ATZOLDTZ do {                                                   \
+       if (tzold) {                                                    \
+               setenv("TZ", tzold, 1);                                 \
+               *tzoldbuf = 0;                                          \
+               if(tzold != tzoldbuf)                                   \
+                       FREEMEM(tzold);                                 \
+       } else {                                                        \
+               unsetenv("TZ");                                         \
+       }                                                               \
+       tzset();                                                        \
+} while(0); } while(0);
+
+#ifndef HAVE_TIMEGM
+#ifdef _EMULATE_TIMEGM
+#include <stdlib.h>
+static time_t timegm(struct tm *tm) {
+       time_t tloc;
+       ATZVARS;
+       ATZSAVETZ;
+       tloc = mktime(tm);
+       ATZOLDTZ;
+       return tloc;
+}
+#endif /* _EMULATE_TIMEGM */
+#endif
+
+
+#ifndef        ASN___INTERNAL_TEST_MODE
+
+/*
+ * GeneralizedTime basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_GeneralizedTime_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (24 << 2)),  /* [UNIVERSAL 24] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),  /* [UNIVERSAL 26] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static asn_per_constraints_t asn_DEF_GeneralizedTime_per_constraints = {
+       { APC_CONSTRAINED, 7, 7, 0x20, 0x7e },  /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_GeneralizedTime = {
+       OCTET_STRING_free,
+       GeneralizedTime_print,
+       GeneralizedTime_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       GeneralizedTime_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       GeneralizedTime_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       GeneralizedTime_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_GeneralizedTime = {
+       "GeneralizedTime",
+       "GeneralizedTime",
+       &asn_OP_GeneralizedTime,
+       asn_DEF_GeneralizedTime_tags,
+       sizeof(asn_DEF_GeneralizedTime_tags)
+         / sizeof(asn_DEF_GeneralizedTime_tags[0]) - 2,
+       asn_DEF_GeneralizedTime_tags,
+       sizeof(asn_DEF_GeneralizedTime_tags)
+         / sizeof(asn_DEF_GeneralizedTime_tags[0]),
+       { 0, &asn_DEF_GeneralizedTime_per_constraints, GeneralizedTime_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+#endif /* ASN___INTERNAL_TEST_MODE */
+
+/*
+ * Check that the time looks like the time.
+ */
+int
+GeneralizedTime_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr;
+       time_t tloc;
+
+       errno = EPERM;                  /* Just an unlikely error code */
+       tloc = asn_GT2time(st, 0, 0);
+       if(tloc == -1 && errno != EPERM) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: Invalid time format: %s (%s:%d)",
+                       td->name, strerror(errno), __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
+
+asn_enc_rval_t
+GeneralizedTime_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           int tag_mode, ber_tlv_tag_t tag,
+                           asn_app_consume_bytes_f *cb, void *app_key) {
+    GeneralizedTime_t *st;
+       asn_enc_rval_t erval = {0,0,0};
+       int fv, fd;     /* seconds fraction value and number of digits */
+       struct tm tm;
+       time_t tloc;
+
+       /*
+        * Encode as a canonical DER.
+        */
+    errno = EPERM;
+    tloc = asn_GT2time_frac((const GeneralizedTime_t *)sptr, &fv, &fd, &tm,
+                            1); /* Recognize time */
+    if(tloc == -1 && errno != EPERM) {
+        /* Failed to recognize time. Fail completely. */
+               ASN__ENCODE_FAILED;
+    }
+
+    st = asn_time2GT_frac(0, &tm, fv, fd, 1); /* Save time canonically */
+    if(!st) ASN__ENCODE_FAILED;               /* Memory allocation failure. */
+
+    erval = OCTET_STRING_encode_der(td, st, tag_mode, tag, cb, app_key);
+
+    ASN_STRUCT_FREE(*td, st);
+
+    return erval;
+}
+
+#ifndef        ASN___INTERNAL_TEST_MODE
+
+asn_enc_rval_t
+GeneralizedTime_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           int ilevel, enum xer_encoder_flags_e flags,
+                           asn_app_consume_bytes_f *cb, void *app_key) {
+    if(flags & XER_F_CANONICAL) {
+               GeneralizedTime_t *gt;
+               asn_enc_rval_t rv;
+               int fv, fd;             /* fractional parts */
+               struct tm tm;
+
+               errno = EPERM;
+               if(asn_GT2time_frac((const GeneralizedTime_t *)sptr,
+                                       &fv, &fd, &tm, 1) == -1
+                               && errno != EPERM)
+                       ASN__ENCODE_FAILED;
+
+               gt = asn_time2GT_frac(0, &tm, fv, fd, 1);
+               if(!gt) ASN__ENCODE_FAILED;
+       
+               rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags,
+                       cb, app_key);
+               ASN_STRUCT_FREE(asn_DEF_GeneralizedTime, gt);
+               return rv;
+       } else {
+               return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags,
+                       cb, app_key);
+       }
+}
+
+#endif /* ASN___INTERNAL_TEST_MODE */
+
+int
+GeneralizedTime_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const GeneralizedTime_t *st = (const GeneralizedTime_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(st && st->buf) {
+               char buf[32];
+               struct tm tm;
+               int ret;
+
+               errno = EPERM;
+               if(asn_GT2time(st, &tm, 1) == -1 && errno != EPERM)
+                       return (cb("<bad-value>", 11, app_key) < 0) ? -1 : 0;
+
+               ret = snprintf(buf, sizeof(buf),
+                       "%04d-%02d-%02d %02d:%02d:%02d (GMT)",
+                       tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+                       tm.tm_hour, tm.tm_min, tm.tm_sec);
+               assert(ret > 0 && ret < (int)sizeof(buf));
+               return (cb(buf, ret, app_key) < 0) ? -1 : 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+time_t
+asn_GT2time(const GeneralizedTime_t *st, struct tm *ret_tm, int as_gmt) {
+       return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt);
+}
+
+time_t
+asn_GT2time_prec(const GeneralizedTime_t *st, int *frac_value, int frac_digits, struct tm *ret_tm, int as_gmt) {
+       time_t tloc;
+       int fv, fd = 0;
+
+       if(frac_value)
+               tloc = asn_GT2time_frac(st, &fv, &fd, ret_tm, as_gmt);
+       else
+               return asn_GT2time_frac(st, 0, 0, ret_tm, as_gmt);
+       if(fd == 0 || frac_digits <= 0) {
+               *frac_value = 0;
+       } else {
+               while(fd > frac_digits)
+                       fv /= 10, fd--;
+               while(fd < frac_digits) {
+                       if(fv < INT_MAX / 10) {
+                               fv *= 10;
+                               fd++;
+                       } else {
+                               /* Too long precision request */
+                               fv = 0;
+                               break;
+                       }
+               }
+
+               *frac_value = fv;
+       }
+
+       return tloc;
+}
+
+time_t
+asn_GT2time_frac(const GeneralizedTime_t *st, int *frac_value, int *frac_digits, struct tm *ret_tm, int as_gmt) {
+       struct tm tm_s;
+       uint8_t *buf;
+       uint8_t *end;
+       int gmtoff_h = 0;
+       int gmtoff_m = 0;
+       int gmtoff = 0; /* h + m */
+       int offset_specified = 0;
+       int fvalue = 0;
+       int fdigits = 0;
+       time_t tloc;
+
+       if(!st || !st->buf) {
+               errno = EINVAL;
+               return -1;
+       } else {
+               buf = st->buf;
+               end = buf + st->size;
+       }
+
+       if(st->size < 10) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * Decode first 10 bytes: "AAAAMMJJhh"
+        */
+       memset(&tm_s, 0, sizeof(tm_s));
+#undef B2F
+#undef B2T
+#define        B2F(var)        do {                                    \
+               unsigned ch = *buf;                             \
+               if(ch < 0x30 || ch > 0x39) {                    \
+                       errno = EINVAL;                         \
+                       return -1;                              \
+               } else {                                        \
+                       var = var * 10 + (ch - 0x30);           \
+                       buf++;                                  \
+               }                                               \
+       } while(0)
+#define        B2T(var)        B2F(tm_s.var)
+
+       B2T(tm_year);   /* 1: A */
+       B2T(tm_year);   /* 2: A */
+       B2T(tm_year);   /* 3: A */
+       B2T(tm_year);   /* 4: A */
+       B2T(tm_mon);    /* 5: M */
+       B2T(tm_mon);    /* 6: M */
+       B2T(tm_mday);   /* 7: J */
+       B2T(tm_mday);   /* 8: J */
+       B2T(tm_hour);   /* 9: h */
+       B2T(tm_hour);   /* 0: h */
+
+       if(buf == end) goto local_finish;
+
+       /*
+        * Parse [mm[ss[(.|,)ffff]]]
+        *        ^^
+        */
+       switch(*buf) {
+       case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+               tm_s.tm_min = (*buf++) - 0x30;
+               if(buf == end) { errno = EINVAL; return -1; }
+               B2T(tm_min);
+               break;
+       case 0x2B: case 0x2D:   /* +, - */
+               goto offset;
+       case 0x5A:              /* Z */
+               goto utc_finish;
+       default:
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(buf == end) goto local_finish;
+
+       /*
+        * Parse [mm[ss[(.|,)ffff]]]
+        *           ^^
+        */
+       switch(*buf) {
+       case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+               tm_s.tm_sec = (*buf++) - 0x30;
+               if(buf == end) { errno = EINVAL; return -1; }
+               B2T(tm_sec);
+               break;
+       case 0x2B: case 0x2D:   /* +, - */
+               goto offset;
+       case 0x5A:              /* Z */
+               goto utc_finish;
+       default:
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(buf == end) goto local_finish;
+
+       /*
+        * Parse [mm[ss[(.|,)ffff]]]
+        *               ^ ^
+        */
+       switch(*buf) {
+       case 0x2C: case 0x2E: /* (.|,) */
+               /*
+                * Process fractions of seconds.
+                */
+               for(buf++; buf < end; buf++) {
+                       int v = *buf;
+                       /* GCC 4.x is being too smart without volatile */
+                       switch(v) {
+                       case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+                       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+                               if(fvalue < INT_MAX/10) {
+                                       fvalue = fvalue * 10 + (v - 0x30);
+                                       fdigits++;
+                               } else {
+                                       /* Not enough precision, ignore */
+                               }
+                               continue;
+                       default:
+                               break;
+                       }
+                       break;
+               }
+       }
+
+       if(buf == end) goto local_finish;
+
+       switch(*buf) {
+       case 0x2B: case 0x2D:   /* +, - */
+               goto offset;
+       case 0x5A:              /* Z */
+               goto utc_finish;
+       default:
+               errno = EINVAL;
+               return -1;
+       }
+
+
+offset:
+
+       if(end - buf < 3) {
+               errno = EINVAL;
+               return -1;
+       }
+       buf++;
+       B2F(gmtoff_h);
+       B2F(gmtoff_h);
+       if(buf[-3] == 0x2D)     /* Negative */
+               gmtoff = -1;
+       else
+               gmtoff = 1;
+
+       if((end - buf) == 2) {
+               B2F(gmtoff_m);
+               B2F(gmtoff_m);
+       } else if(end != buf) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       gmtoff = gmtoff * (3600 * gmtoff_h + 60 * gmtoff_m);
+
+       /* Fall through */
+utc_finish:
+
+       offset_specified = 1;
+
+       /* Fall through */
+local_finish:
+
+       /*
+        * Validation.
+        */
+       if((tm_s.tm_mon > 12 || tm_s.tm_mon < 1)
+       || (tm_s.tm_mday > 31 || tm_s.tm_mday < 1)
+       || (tm_s.tm_hour > 23)
+       || (tm_s.tm_sec > 60)
+       ) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /* Canonicalize */
+       tm_s.tm_mon -= 1;       /* 0 - 11 */
+       tm_s.tm_year -= 1900;
+       tm_s.tm_isdst = -1;
+
+       tm_s.tm_sec -= gmtoff;
+
+       /*** AT THIS POINT tm_s is either GMT or local (unknown) ****/
+
+       if(offset_specified) {
+               tloc = timegm(&tm_s);
+       } else {
+               /*
+                * Without an offset (or "Z"),
+                * we can only guess that it is a local zone.
+                * Interpret it in this fashion.
+                */
+               tloc = mktime(&tm_s);
+       }
+       if(tloc == -1) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(ret_tm) {
+               if(as_gmt) {
+                       if(offset_specified) {
+                               *ret_tm = tm_s;
+                       } else {
+                               if(gmtime_r(&tloc, ret_tm) == 0) {
+                                       errno = EINVAL;
+                                       return -1;
+                               }
+                       }
+               } else {
+                       if(localtime_r(&tloc, ret_tm) == 0) {
+                               errno = EINVAL;
+                               return -1;
+                       }
+               }
+       }
+
+       /* Fractions of seconds */
+       if(frac_value) *frac_value = fvalue;
+       if(frac_digits) *frac_digits = fdigits;
+
+       return tloc;
+}
+
+GeneralizedTime_t *
+asn_time2GT(GeneralizedTime_t *opt_gt, const struct tm *tm, int force_gmt) {
+       return asn_time2GT_frac(opt_gt, tm, 0, 0, force_gmt);
+}
+
+GeneralizedTime_t *
+asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, int frac_value, int frac_digits, int force_gmt) {
+       struct tm tm_s;
+       long gmtoff = 0;
+       const unsigned int buf_size =
+               4 + 2 + 2       /* yyyymmdd */
+               + 2 + 2 + 2     /* hhmmss */
+               + 1 + 9         /* .fffffffff */
+               + 1 + 4         /* +hhmm */
+               + 1             /* '\0' */
+               ;
+       char *buf = NULL;
+       char *p = NULL;
+       int size = 0;
+
+       /* Check arguments */
+       if(!tm) {
+               errno = EINVAL;
+               return 0;
+       }
+
+       /* Pre-allocate a buffer of sufficient yet small length */
+       buf = (char *)MALLOC(buf_size);
+       if(!buf) return 0;
+
+       gmtoff = GMTOFF(*tm);
+
+       if(force_gmt && gmtoff) {
+               tm_s = *tm;
+               tm_s.tm_sec -= gmtoff;
+               timegm(&tm_s);  /* Fix the time */
+               tm = &tm_s;
+#ifdef HAVE_TM_GMTOFF
+               assert(!GMTOFF(tm_s));  /* Will fix itself */
+#else  /* !HAVE_TM_GMTOFF */
+               gmtoff = 0;
+#endif
+       }
+
+       size = snprintf(buf, buf_size, "%04d%02d%02d%02d%02d%02d",
+               tm->tm_year + 1900,
+               tm->tm_mon + 1,
+               tm->tm_mday,
+               tm->tm_hour,
+               tm->tm_min,
+               tm->tm_sec
+       );
+       if(size != 14) {
+               /* Could be assert(size == 14); */
+               FREEMEM(buf);
+               errno = EINVAL;
+               return 0;
+       }
+
+       p = buf + size;
+
+       /*
+        * Deal with fractions.
+        */
+       if(frac_value > 0 && frac_digits > 0) {
+               char *end = p + 1 + 9;  /* '.' + maximum 9 digits */
+               char *z = p;
+               long fbase;
+               *z++ = '.';
+
+               /* Place bounds on precision */
+               while(frac_digits-- > 9)
+                       frac_value /= 10;
+
+               /* emulate fbase = pow(10, frac_digits) */
+               for(fbase = 1; frac_digits--;)
+                       fbase *= 10;
+
+               do {
+                       int digit = frac_value / fbase;
+                       if(digit > 9) { z = 0; break; }
+                       *z++ = digit + 0x30;
+                       frac_value %= fbase;
+                       fbase /= 10;
+               } while(fbase > 0 && frac_value > 0 && z < end);
+               if(z) {
+                       for(--z; *z == 0x30; --z);      /* Strip zeroes */
+                       p = z + (*z != '.');
+                       size = p - buf;
+               }
+       }
+
+       if(force_gmt) {
+               *p++ = 0x5a;    /* "Z" */
+               *p++ = 0;
+               size++;
+       } else {
+               int ret;
+               gmtoff %= 86400;
+               ret = snprintf(p, buf_size - size, "%+03ld%02ld",
+                       gmtoff / 3600, labs(gmtoff % 3600) / 60);
+               if(ret != 5) {
+                       FREEMEM(buf);
+                       errno = EINVAL;
+                       return 0;
+               }
+               size += ret;
+       }
+
+       if(opt_gt) {
+               if(opt_gt->buf)
+                       FREEMEM(opt_gt->buf);
+       } else {
+               opt_gt = (GeneralizedTime_t *)CALLOC(1, sizeof *opt_gt);
+               if(!opt_gt) { FREEMEM(buf); return 0; }
+       }
+
+       opt_gt->buf = (unsigned char *)buf;
+       opt_gt->size = size;
+
+       return opt_gt;
+}
+
+asn_random_fill_result_t
+GeneralizedTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                              const asn_encoding_constraints_t *constraints,
+                              size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    static const char *values[] = {
+        "19700101000000",    "19700101000000-0000",   "19700101000000+0000",
+        "19700101000000Z",   "19700101000000.3Z",     "19821106210623.3",
+        "19821106210629.3Z", "19691106210827.3-0500", "19821106210629.456",
+    };
+    size_t rnd = asn_random_between(0, sizeof(values)/sizeof(values[0])-1);
+
+    (void)constraints;
+
+    if(max_length < sizeof("yyyymmddhhmmss") && !*sptr) {
+        return result_skipped;
+    }
+
+    if(*sptr) {
+        if(OCTET_STRING_fromBuf(*sptr, values[rnd], -1) != 0) {
+            if(!sptr) return result_failed;
+        }
+    } else {
+        *sptr = OCTET_STRING_new_fromBuf(td, values[rnd], -1);
+        if(!sptr) return result_failed;
+    }
+
+    return result_ok;
+}
+
+int
+GeneralizedTime_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                        const void *bptr) {
+    const GeneralizedTime_t *a = aptr;
+    const GeneralizedTime_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        int afrac_value, afrac_digits;
+        int bfrac_value, bfrac_digits;
+        int aerr, berr;
+        time_t at, bt;
+
+        errno = EPERM;
+        at = asn_GT2time_frac(a, &afrac_value, &afrac_digits, 0, 0);
+        aerr = errno;
+        errno = EPERM;
+        bt = asn_GT2time_frac(b, &bfrac_value, &bfrac_digits, 0, 0);
+        berr = errno;
+
+        if(at == -1 && aerr != EPERM) {
+            if(bt == -1 && berr != EPERM) {
+                return OCTET_STRING_compare(td, aptr, bptr);
+            } else {
+                return -1;
+            }
+        } else if(bt == -1 && berr != EPERM) {
+            return 1;
+        } else {
+            /* Both values are valid. */
+        }
+
+        if(at < bt) {
+            return -1;
+        } else if(at > bt) {
+            return 1;
+        } else if(afrac_digits == bfrac_digits) {
+            if(afrac_value == bfrac_value) {
+                return 0;
+            }
+            if(afrac_value < bfrac_value) {
+                return -1;
+            } else {
+                return 1;
+            }
+        } else if(afrac_digits == 0) {
+            return -1;
+        } else if(bfrac_digits == 0) {
+            return 1;
+        } else {
+            double afrac = (double)afrac_value / afrac_digits;
+            double bfrac = (double)bfrac_value / bfrac_digits;
+            if(afrac < bfrac) {
+                return -1;
+            } else if(afrac > bfrac) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+
+}
+
diff --git a/skeletons/GeneralizedTime.h b/skeletons/GeneralizedTime.h
new file mode 100644 (file)
index 0000000..02bffe0
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _GeneralizedTime_H_
+#define        _GeneralizedTime_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t GeneralizedTime_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_GeneralizedTime;
+extern asn_TYPE_operation_t asn_OP_GeneralizedTime;
+
+asn_struct_print_f GeneralizedTime_print;
+asn_struct_compare_f GeneralizedTime_compare;
+asn_constr_check_f GeneralizedTime_constraint;
+der_type_encoder_f GeneralizedTime_encode_der;
+xer_type_encoder_f GeneralizedTime_encode_xer;
+asn_random_fill_f  GeneralizedTime_random_fill;
+
+#define GeneralizedTime_free           OCTET_STRING_free
+#define GeneralizedTime_decode_ber     OCTET_STRING_decode_ber
+#define GeneralizedTime_decode_xer     OCTET_STRING_decode_xer_utf8
+#define GeneralizedTime_decode_uper    OCTET_STRING_decode_uper
+#define GeneralizedTime_encode_uper    OCTET_STRING_encode_uper
+#define GeneralizedTime_decode_aper    OCTET_STRING_decode_aper
+#define GeneralizedTime_encode_aper    OCTET_STRING_encode_aper
+
+/***********************
+ * Some handy helpers. *
+ ***********************/
+
+struct tm;     /* <time.h> */
+
+/*
+ * Convert a GeneralizedTime structure into time_t
+ * and optionally into struct tm.
+ * If as_gmt is given, the resulting _optional_tm4fill will have a GMT zone,
+ * instead of default local one.
+ * On error returns -1 and errno set to EINVAL
+ */
+time_t asn_GT2time(const GeneralizedTime_t *, struct tm *_optional_tm4fill,
+       int as_gmt);
+
+/* A version of the above function also returning the fractions of seconds */
+time_t asn_GT2time_frac(const GeneralizedTime_t *,
+       int *frac_value, int *frac_digits,      /* (value / (10 ^ digits)) */
+       struct tm *_optional_tm4fill, int as_gmt);
+
+/*
+ * Another version returning fractions with defined precision
+ * For example, parsing of the time ending with ".1" seconds
+ * with frac_digits=3 (msec) would yield frac_value = 100.
+ */
+time_t asn_GT2time_prec(const GeneralizedTime_t *,
+       int *frac_value, int frac_digits,
+       struct tm *_optional_tm4fill, int as_gmt);
+
+/*
+ * Convert a struct tm into GeneralizedTime.
+ * If _optional_gt is not given, this function will try to allocate one.
+ * If force_gmt is given, the resulting GeneralizedTime will be forced
+ * into a GMT time zone (encoding ends with a "Z").
+ * On error, this function returns 0 and sets errno.
+ */
+GeneralizedTime_t *asn_time2GT(GeneralizedTime_t *_optional_gt,
+       const struct tm *, int force_gmt);
+GeneralizedTime_t *asn_time2GT_frac(GeneralizedTime_t *_optional_gt,
+       const struct tm *, int frac_value, int frac_digits, int force_gmt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GeneralizedTime_H_ */
diff --git a/skeletons/GraphicString.c b/skeletons/GraphicString.c
new file mode 100644 (file)
index 0000000..e6642c9
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <GraphicString.h>
+
+/*
+ * GraphicString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_GraphicString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (25 << 2)),  /* [UNIVERSAL 25] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_GraphicString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,         /* non-ascii string */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,        /* Can't expect it to be ASCII/UTF8 */
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_GraphicString = {
+       "GraphicString",
+       "GraphicString",
+       &asn_OP_GraphicString,
+       asn_DEF_GraphicString_tags,
+       sizeof(asn_DEF_GraphicString_tags)
+         / sizeof(asn_DEF_GraphicString_tags[0]) - 1,
+       asn_DEF_GraphicString_tags,
+       sizeof(asn_DEF_GraphicString_tags)
+         / sizeof(asn_DEF_GraphicString_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/skeletons/GraphicString.h b/skeletons/GraphicString.h
new file mode 100644 (file)
index 0000000..19cac68
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _GraphicString_H_
+#define        _GraphicString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t GraphicString_t;        /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_GraphicString;
+extern asn_TYPE_operation_t asn_OP_GraphicString;
+
+#define GraphicString_free          OCTET_STRING_free
+#define GraphicString_print         OCTET_STRING_print
+#define GraphicString_compare       OCTET_STRING_compare
+#define GraphicString_constraint    asn_generic_unknown_constraint
+#define GraphicString_decode_ber    OCTET_STRING_decode_ber
+#define GraphicString_encode_der    OCTET_STRING_encode_der
+#define GraphicString_decode_xer    OCTET_STRING_decode_xer_hex
+#define GraphicString_encode_xer    OCTET_STRING_encode_xer
+#define GraphicString_decode_uper   OCTET_STRING_decode_uper
+#define GraphicString_encode_uper   OCTET_STRING_encode_uper
+#define GraphicString_decode_aper   OCTET_STRING_decode_aper
+#define GraphicString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _GraphicString_H_ */
diff --git a/skeletons/IA5String.c b/skeletons/IA5String.c
new file mode 100644 (file)
index 0000000..1aeebf4
--- /dev/null
@@ -0,0 +1,97 @@
+/*-
+ * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <IA5String.h>
+
+/*
+ * IA5String basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_IA5String_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),  /* [UNIVERSAL 22] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static asn_per_constraints_t asn_DEF_IA5String_per_constraints = {
+       { APC_CONSTRAINED, 7, 7, 0, 0x7f },     /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_IA5String = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,        /* ASCII subset */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_IA5String = {
+       "IA5String",
+       "IA5String",
+       &asn_OP_IA5String,
+       asn_DEF_IA5String_tags,
+       sizeof(asn_DEF_IA5String_tags)
+         / sizeof(asn_DEF_IA5String_tags[0]) - 1,
+       asn_DEF_IA5String_tags,
+       sizeof(asn_DEF_IA5String_tags)
+         / sizeof(asn_DEF_IA5String_tags[0]),
+       { 0, &asn_DEF_IA5String_per_constraints, IA5String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+int
+IA5String_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                     asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const IA5String_t *st = (const IA5String_t *)sptr;
+
+       if(st && st->buf) {
+               uint8_t *buf = st->buf;
+               uint8_t *end = buf + st->size;
+               /*
+                * IA5String is generally equivalent to 7bit ASCII.
+                * ISO/ITU-T T.50, 1963.
+                */
+               for(; buf < end; buf++) {
+                       if(*buf > 0x7F) {
+                               ASN__CTFAIL(app_key, td, sptr,
+                                       "%s: value byte %ld out of range: "
+                                       "%d > 127 (%s:%d)",
+                                       td->name,
+                                       (long)((buf - st->buf) + 1),
+                                       *buf,
+                                       __FILE__, __LINE__);
+                               return -1;
+                       }
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
+
diff --git a/skeletons/IA5String.h b/skeletons/IA5String.h
new file mode 100644 (file)
index 0000000..321f0c7
--- /dev/null
@@ -0,0 +1,40 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _IA5String_H_
+#define        _IA5String_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t IA5String_t;  /* Implemented via OCTET STRING */
+
+/*
+ * IA5String ASN.1 type definition.
+ */
+extern asn_TYPE_descriptor_t asn_DEF_IA5String;
+extern asn_TYPE_operation_t asn_OP_IA5String;
+
+asn_constr_check_f IA5String_constraint;
+
+#define IA5String_free          OCTET_STRING_free
+#define IA5String_print         OCTET_STRING_print_utf8
+#define IA5String_compare       OCTET_STRING_compare
+#define IA5String_decode_ber    OCTET_STRING_decode_ber
+#define IA5String_encode_der    OCTET_STRING_encode_der
+#define IA5String_decode_xer    OCTET_STRING_decode_xer_utf8
+#define IA5String_encode_xer    OCTET_STRING_encode_xer_utf8
+#define IA5String_decode_uper   OCTET_STRING_decode_uper
+#define IA5String_encode_uper   OCTET_STRING_encode_uper
+#define IA5String_decode_aper   OCTET_STRING_decode_aper
+#define IA5String_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _IA5String_H_ */
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
new file mode 100644 (file)
index 0000000..2a2f4d7
--- /dev/null
@@ -0,0 +1,1735 @@
+/*-
+ * Copyright (c) 2003-2014 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <INTEGER.h>
+#include <asn_codecs_prim.h>   /* Encoder and decoder of a primitive type */
+#include <errno.h>
+
+/*
+ * INTEGER basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_operation_t asn_OP_INTEGER = {
+       INTEGER_free,
+       INTEGER_print,
+       INTEGER_compare,
+       ber_decode_primitive,
+       INTEGER_encode_der,
+       INTEGER_decode_xer,
+       INTEGER_encode_xer,
+#ifdef  ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       INTEGER_decode_oer,     /* OER decoder */
+       INTEGER_encode_oer,     /* Canonical OER encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       INTEGER_decode_uper,    /* Unaligned PER decoder */
+       INTEGER_encode_uper,    /* Unaligned PER encoder */
+       INTEGER_decode_aper,    /* Aligned PER decoder */
+       INTEGER_encode_aper,    /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       INTEGER_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_INTEGER = {
+       "INTEGER",
+       "INTEGER",
+       &asn_OP_INTEGER,
+       asn_DEF_INTEGER_tags,
+       sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+       asn_DEF_INTEGER_tags,   /* Same as above */
+       sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+/*
+ * Encode INTEGER type using DER.
+ */
+asn_enc_rval_t
+INTEGER_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                   void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+    asn_enc_rval_t rval;
+    INTEGER_t effective_integer;
+
+       ASN_DEBUG("%s %s as INTEGER (tm=%d)",
+               cb?"Encoding":"Estimating", td->name, tag_mode);
+
+       /*
+        * Canonicalize integer in the buffer.
+        * (Remove too long sign extension, remove some first 0x00 bytes)
+        */
+       if(st->buf) {
+               uint8_t *buf = st->buf;
+               uint8_t *end1 = buf + st->size - 1;
+               int shift;
+
+               /* Compute the number of superfluous leading bytes */
+               for(; buf < end1; buf++) {
+                       /*
+                        * If the contents octets of an integer value encoding
+                        * consist of more than one octet, then the bits of the
+                        * first octet and bit 8 of the second octet:
+                        * a) shall not all be ones; and
+                        * b) shall not all be zero.
+                        */
+                       switch(*buf) {
+                       case 0x00: if((buf[1] & 0x80) == 0)
+                                       continue;
+                               break;
+                       case 0xff: if((buf[1] & 0x80))
+                                       continue;
+                               break;
+                       }
+                       break;
+               }
+
+               /* Remove leading superfluous bytes from the integer */
+               shift = buf - st->buf;
+               if(shift) {
+            union {
+                const uint8_t *c_buf;
+                uint8_t *nc_buf;
+            } unconst;
+            unconst.c_buf = st->buf;
+            effective_integer.buf = unconst.nc_buf + shift;
+            effective_integer.size = st->size - shift;
+
+            st = &effective_integer;
+        }
+    }
+
+    rval = der_encode_primitive(td, st, tag_mode, tag, cb, app_key);
+    if(rval.structure_ptr == &effective_integer) {
+        rval.structure_ptr = sptr;
+    }
+    return rval;
+}
+
+static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(
+    const asn_INTEGER_specifics_t *specs, const char *lstart,
+    const char *lstop);
+
+/*
+ * INTEGER specific human-readable output.
+ */
+static ssize_t
+INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+       char scratch[32];
+       uint8_t *buf = st->buf;
+       uint8_t *buf_end = st->buf + st->size;
+       intmax_t value;
+       ssize_t wrote = 0;
+       char *p;
+       int ret;
+
+       if(specs && specs->field_unsigned)
+               ret = asn_INTEGER2umax(st, (uintmax_t *)&value);
+       else
+               ret = asn_INTEGER2imax(st, &value);
+
+       /* Simple case: the integer size is small */
+       if(ret == 0) {
+               const asn_INTEGER_enum_map_t *el;
+               el = (value >= 0 || !specs || !specs->field_unsigned)
+                       ? INTEGER_map_value2enum(specs, value) : 0;
+               if(el) {
+                       if(plainOrXER == 0)
+                               return asn__format_to_callback(cb, app_key,
+                                       "%" ASN_PRIdMAX " (%s)", value, el->enum_name);
+                       else
+                               return asn__format_to_callback(cb, app_key,
+                                       "<%s/>", el->enum_name);
+               } else if(plainOrXER && specs && specs->strict_enumeration) {
+                       ASN_DEBUG("ASN.1 forbids dealing with "
+                               "unknown value of ENUMERATED type");
+                       errno = EPERM;
+                       return -1;
+               } else {
+            return asn__format_to_callback(cb, app_key,
+                                           (specs && specs->field_unsigned)
+                                               ? "%" ASN_PRIuMAX
+                                               : "%" ASN_PRIdMAX,
+                                           value);
+        }
+       } else if(plainOrXER && specs && specs->strict_enumeration) {
+               /*
+                * Here and earlier, we cannot encode the ENUMERATED values
+                * if there is no corresponding identifier.
+                */
+               ASN_DEBUG("ASN.1 forbids dealing with "
+                       "unknown value of ENUMERATED type");
+               errno = EPERM;
+               return -1;
+       }
+
+       /* Output in the long xx:yy:zz... format */
+       /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */
+       for(p = scratch; buf < buf_end; buf++) {
+               const char * const h2c = "0123456789ABCDEF";
+               if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) {
+                       /* Flush buffer */
+                       if(cb(scratch, p - scratch, app_key) < 0)
+                               return -1;
+                       wrote += p - scratch;
+                       p = scratch;
+               }
+               *p++ = h2c[*buf >> 4];
+               *p++ = h2c[*buf & 0x0F];
+               *p++ = 0x3a;    /* ":" */
+       }
+       if(p != scratch)
+               p--;    /* Remove the last ":" */
+
+       wrote += p - scratch;
+       return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote;
+}
+
+/*
+ * INTEGER specific human-readable output.
+ */
+int
+INTEGER_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+              asn_app_consume_bytes_f *cb, void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+       ssize_t ret;
+
+       (void)ilevel;
+
+       if(!st || !st->buf)
+               ret = cb("<absent>", 8, app_key);
+       else
+               ret = INTEGER__dump(td, st, cb, app_key, 0);
+
+       return (ret < 0) ? -1 : 0;
+}
+
+struct e2v_key {
+       const char *start;
+       const char *stop;
+       const asn_INTEGER_enum_map_t *vemap;
+       const unsigned int *evmap;
+};
+static int
+INTEGER__compar_enum2value(const void *kp, const void *am) {
+       const struct e2v_key *key = (const struct e2v_key *)kp;
+       const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
+       const char *ptr, *end, *name;
+
+       /* Remap the element (sort by different criterion) */
+       el = key->vemap + key->evmap[el - key->vemap];
+
+       /* Compare strings */
+       for(ptr = key->start, end = key->stop, name = el->enum_name;
+                       ptr < end; ptr++, name++) {
+               if(*ptr != *name || !*name)
+                       return *(const unsigned char *)ptr
+                               - *(const unsigned char *)name;
+       }
+       return name[0] ? -1 : 0;
+}
+
+static const asn_INTEGER_enum_map_t *
+INTEGER_map_enum2value(const asn_INTEGER_specifics_t *specs, const char *lstart,
+                       const char *lstop) {
+    const asn_INTEGER_enum_map_t *el_found;
+       int count = specs ? specs->map_count : 0;
+       struct e2v_key key;
+       const char *lp;
+
+       if(!count) return NULL;
+
+       /* Guaranteed: assert(lstart < lstop); */
+       /* Figure out the tag name */
+       for(lstart++, lp = lstart; lp < lstop; lp++) {
+               switch(*lp) {
+               case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */
+               case 0x2f: /* '/' */ case 0x3e: /* '>' */
+                       break;
+               default:
+                       continue;
+               }
+               break;
+       }
+       if(lp == lstop) return NULL;    /* No tag found */
+       lstop = lp;
+
+       key.start = lstart;
+       key.stop = lstop;
+       key.vemap = specs->value2enum;
+       key.evmap = specs->enum2value;
+       el_found = (asn_INTEGER_enum_map_t *)bsearch(&key,
+               specs->value2enum, count, sizeof(specs->value2enum[0]),
+               INTEGER__compar_enum2value);
+       if(el_found) {
+               /* Remap enum2value into value2enum */
+               el_found = key.vemap + key.evmap[el_found - key.vemap];
+       }
+       return el_found;
+}
+
+static int
+INTEGER__compar_value2enum(const void *kp, const void *am) {
+       long a = *(const long *)kp;
+       const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am;
+       long b = el->nat_value;
+       if(a < b) return -1;
+       else if(a == b) return 0;
+       else return 1;
+}
+
+const asn_INTEGER_enum_map_t *
+INTEGER_map_value2enum(const asn_INTEGER_specifics_t *specs, long value) {
+       int count = specs ? specs->map_count : 0;
+       if(!count) return 0;
+       return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum,
+               count, sizeof(specs->value2enum[0]),
+               INTEGER__compar_value2enum);
+}
+
+static int
+INTEGER_st_prealloc(INTEGER_t *st, int min_size) {
+       void *p = MALLOC(min_size + 1);
+       if(p) {
+               void *b = st->buf;
+               st->size = 0;
+               st->buf = p;
+               FREEMEM(b);
+               return 0;
+       } else {
+               return -1;
+       }
+}
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+static enum xer_pbd_rval
+INTEGER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                         const void *chunk_buf, size_t chunk_size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    INTEGER_t *st = (INTEGER_t *)sptr;
+       intmax_t dec_value;
+       intmax_t hex_value = 0;
+       const char *lp;
+       const char *lstart = (const char *)chunk_buf;
+       const char *lstop = lstart + chunk_size;
+       enum {
+               ST_LEADSPACE,
+               ST_SKIPSPHEX,
+               ST_WAITDIGITS,
+               ST_DIGITS,
+               ST_DIGITS_TRAILSPACE,
+               ST_HEXDIGIT1,
+               ST_HEXDIGIT2,
+               ST_HEXDIGITS_TRAILSPACE,
+               ST_HEXCOLON,
+               ST_END_ENUM,
+               ST_UNEXPECTED
+       } state = ST_LEADSPACE;
+       const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */
+       const char *dec_value_end = 0;
+
+       if(chunk_size)
+               ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x",
+                       (long)chunk_size, *lstart, lstop[-1]);
+
+       if(INTEGER_st_prealloc(st, (chunk_size/3) + 1))
+               return XPBD_SYSTEM_FAILURE;
+
+       /*
+        * We may have received a tag here. It will be processed inline.
+        * Use strtoul()-like code and serialize the result.
+        */
+       for(lp = lstart; lp < lstop; lp++) {
+               int lv = *lp;
+               switch(lv) {
+               case 0x09: case 0x0a: case 0x0d: case 0x20:
+                       switch(state) {
+                       case ST_LEADSPACE:
+                       case ST_DIGITS_TRAILSPACE:
+                       case ST_HEXDIGITS_TRAILSPACE:
+                       case ST_SKIPSPHEX:
+                               continue;
+                       case ST_DIGITS:
+                               dec_value_end = lp;
+                               state = ST_DIGITS_TRAILSPACE;
+                               continue;
+                       case ST_HEXCOLON:
+                               state = ST_HEXDIGITS_TRAILSPACE;
+                               continue;
+                       default:
+                               break;
+                       }
+                       break;
+               case 0x2d:      /* '-' */
+                       if(state == ST_LEADSPACE) {
+                               dec_value = 0;
+                               dec_value_start = lp;
+                               state = ST_WAITDIGITS;
+                               continue;
+                       }
+                       break;
+               case 0x2b:      /* '+' */
+                       if(state == ST_LEADSPACE) {
+                               dec_value = 0;
+                               dec_value_start = lp;
+                               state = ST_WAITDIGITS;
+                               continue;
+                       }
+                       break;
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+                       switch(state) {
+                       case ST_DIGITS: continue;
+                       case ST_SKIPSPHEX:      /* Fall through */
+                       case ST_HEXDIGIT1:
+                               hex_value = (lv - 0x30) << 4;
+                               state = ST_HEXDIGIT2;
+                               continue;
+                       case ST_HEXDIGIT2:
+                               hex_value += (lv - 0x30);
+                               state = ST_HEXCOLON;
+                               st->buf[st->size++] = (uint8_t)hex_value;
+                               continue;
+                       case ST_HEXCOLON:
+                               return XPBD_BROKEN_ENCODING;
+                       case ST_LEADSPACE:
+                               dec_value = 0;
+                               dec_value_start = lp;
+                               /* FALL THROUGH */
+                       case ST_WAITDIGITS:
+                               state = ST_DIGITS;
+                               continue;
+                       default:
+                               break;
+                       }
+                       break;
+               case 0x3c:      /* '<', start of XML encoded enumeration */
+                       if(state == ST_LEADSPACE) {
+                               const asn_INTEGER_enum_map_t *el;
+                               el = INTEGER_map_enum2value(
+                                       (const asn_INTEGER_specifics_t *)
+                                       td->specifics, lstart, lstop);
+                               if(el) {
+                                       ASN_DEBUG("Found \"%s\" => %ld",
+                                               el->enum_name, el->nat_value);
+                                       dec_value = el->nat_value;
+                                       state = ST_END_ENUM;
+                                       lp = lstop - 1;
+                                       continue;
+                               }
+                               ASN_DEBUG("Unknown identifier for INTEGER");
+                       }
+                       return XPBD_BROKEN_ENCODING;
+               case 0x3a:      /* ':' */
+                       if(state == ST_HEXCOLON) {
+                               /* This colon is expected */
+                               state = ST_HEXDIGIT1;
+                               continue;
+                       } else if(state == ST_DIGITS) {
+                               /* The colon here means that we have
+                                * decoded the first two hexadecimal
+                                * places as a decimal value.
+                                * Switch decoding mode. */
+                               ASN_DEBUG("INTEGER re-evaluate as hex form");
+                               state = ST_SKIPSPHEX;
+                               dec_value_start = 0;
+                               lp = lstart - 1;
+                               continue;
+                       } else {
+                               ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart));
+                               break;
+                       }
+               /* [A-Fa-f] */
+               case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46:
+               case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66:
+                       switch(state) {
+                       case ST_SKIPSPHEX:
+                       case ST_LEADSPACE: /* Fall through */
+                       case ST_HEXDIGIT1:
+                               hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61);
+                               hex_value += 10;
+                               hex_value <<= 4;
+                               state = ST_HEXDIGIT2;
+                               continue;
+                       case ST_HEXDIGIT2:
+                               hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61);
+                               hex_value += 10;
+                               st->buf[st->size++] = (uint8_t)hex_value;
+                               state = ST_HEXCOLON;
+                               continue;
+                       case ST_DIGITS:
+                               ASN_DEBUG("INTEGER re-evaluate as hex form");
+                               state = ST_SKIPSPHEX;
+                               dec_value_start = 0;
+                               lp = lstart - 1;
+                               continue;
+                       default:
+                               break;
+                       }
+                       break;
+               }
+
+               /* Found extra non-numeric stuff */
+               ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld",
+                       lv, (long)(lp - lstart));
+               state = ST_UNEXPECTED;
+               break;
+       }
+
+       switch(state) {
+       case ST_END_ENUM:
+               /* Got a complete and valid enumeration encoded as a tag. */
+               break;
+       case ST_DIGITS:
+               dec_value_end = lstop;
+               /* FALL THROUGH */
+       case ST_DIGITS_TRAILSPACE:
+               /* The last symbol encountered was a digit. */
+        switch(asn_strtoimax_lim(dec_value_start, &dec_value_end, &dec_value)) {
+        case ASN_STRTOX_OK:
+            if(specs && specs->field_unsigned && (uintmax_t) dec_value <= ULONG_MAX) {
+                break;
+            } else if(dec_value >= LONG_MIN && dec_value <= LONG_MAX) {
+                break;
+            } else {
+                /*
+                 * We model INTEGER on long for XER,
+                 * to avoid rewriting all the tests at once.
+                 */
+                ASN_DEBUG("INTEGER exceeds long range");
+            }
+            /* Fall through */
+        case ASN_STRTOX_ERROR_RANGE:
+            ASN_DEBUG("INTEGER decode %s hit range limit", td->name);
+            return XPBD_DECODER_LIMIT;
+               case ASN_STRTOX_ERROR_INVAL:
+               case ASN_STRTOX_EXPECT_MORE:
+               case ASN_STRTOX_EXTRA_DATA:
+                       return XPBD_BROKEN_ENCODING;
+               }
+               break;
+       case ST_HEXCOLON:
+       case ST_HEXDIGITS_TRAILSPACE:
+               st->buf[st->size] = 0;  /* Just in case termination */
+               return XPBD_BODY_CONSUMED;
+       case ST_HEXDIGIT1:
+       case ST_HEXDIGIT2:
+       case ST_SKIPSPHEX:
+               return XPBD_BROKEN_ENCODING;
+       case ST_LEADSPACE:
+               /* Content not found */
+               return XPBD_NOT_BODY_IGNORE;
+       case ST_WAITDIGITS:
+       case ST_UNEXPECTED:
+               ASN_DEBUG("INTEGER: No useful digits (state %d)", state);
+               return XPBD_BROKEN_ENCODING;    /* No digits */
+       }
+
+       /*
+        * Convert the result of parsing of enumeration or a straight
+        * decimal value into a BER representation.
+        */
+       if(asn_imax2INTEGER(st, dec_value)) {
+                ASN_DEBUG("INTEGER decode %s conversion failed", td->name);
+               return XPBD_SYSTEM_FAILURE;
+        }
+
+       return XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+INTEGER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void **sptr,
+                   const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(INTEGER_t), opt_mname,
+               buf_ptr, size, INTEGER__xer_body_decode);
+}
+
+asn_enc_rval_t
+INTEGER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, enum xer_encoder_flags_e flags,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    const INTEGER_t *st = (const INTEGER_t *)sptr;
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)ilevel;
+       (void)flags;
+       
+       if(!st || !st->buf)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = INTEGER__dump(td, st, cb, app_key, 1);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+#ifndef        ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+INTEGER_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = { RC_OK, 0 };
+       INTEGER_t *st = (INTEGER_t *)*sptr;
+       const asn_per_constraint_t *ct;
+       int repeat;
+
+       (void)opt_codec_ctx;
+
+       if(!st) {
+               st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       if(!constraints) constraints = td->encoding_constraints.per_constraints;
+       ct = constraints ? &constraints->value : 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) ASN__DECODE_STARVED;
+               if(inext) ct = 0;
+       }
+
+       FREEMEM(st->buf);
+       st->buf = 0;
+       st->size = 0;
+       if(ct) {
+               if(ct->flags & APC_SEMI_CONSTRAINED) {
+                       st->buf = (uint8_t *)CALLOC(1, 2);
+                       if(!st->buf) ASN__DECODE_FAILED;
+                       st->size = 1;
+               } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) {
+                       size_t size = (ct->range_bits + 7) >> 3;
+                       st->buf = (uint8_t *)MALLOC(1 + size + 1);
+                       if(!st->buf) ASN__DECODE_FAILED;
+                       st->size = size;
+               }
+       }
+
+       /* X.691-2008/11, #13.2.2, constrained whole number */
+       if(ct && ct->flags != APC_UNCONSTRAINED) {
+               /* #11.5.6 */
+               ASN_DEBUG("Integer with range %d bits", ct->range_bits);
+               if(ct->range_bits >= 0) {
+                       if((size_t)ct->range_bits > 8 * sizeof(unsigned long))
+                               ASN__DECODE_FAILED;
+
+                       if(specs && specs->field_unsigned) {
+                               unsigned long uvalue = 0;
+                               if(uper_get_constrained_whole_number(pd,
+                                       &uvalue, ct->range_bits))
+                                       ASN__DECODE_STARVED;
+                               ASN_DEBUG("Got value %lu + low %ld",
+                                       uvalue, ct->lower_bound);
+                               uvalue += ct->lower_bound;
+                               if(asn_ulong2INTEGER(st, uvalue))
+                                       ASN__DECODE_FAILED;
+                       } else {
+                               unsigned long uvalue = 0;
+                               long svalue;
+                               if(uper_get_constrained_whole_number(pd,
+                                       &uvalue, ct->range_bits))
+                                       ASN__DECODE_STARVED;
+                               ASN_DEBUG("Got value %lu + low %ld",
+                                       uvalue, ct->lower_bound);
+                if(per_long_range_unrebase(uvalue, ct->lower_bound,
+                                           ct->upper_bound, &svalue)
+                   || asn_long2INTEGER(st, svalue)) {
+                    ASN__DECODE_FAILED;
+                }
+                       }
+                       return rval;
+               }
+       } else {
+               ASN_DEBUG("Decoding unconstrained integer %s", td->name);
+       }
+
+       /* X.691, #12.2.3, #12.2.4 */
+       do {
+               ssize_t len = 0;
+               void *p = NULL;
+               int ret = 0;
+
+               /* Get the PER length */
+               len = uper_get_length(pd, -1, 0, &repeat);
+               if(len < 0) ASN__DECODE_STARVED;
+
+               p = REALLOC(st->buf, st->size + len + 1);
+               if(!p) ASN__DECODE_FAILED;
+               st->buf = (uint8_t *)p;
+
+               ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len);
+               if(ret < 0) ASN__DECODE_STARVED;
+               st->size += len;
+       } while(repeat);
+       st->buf[st->size] = 0;  /* JIC */
+
+       /* #12.2.3 */
+       if(ct && ct->lower_bound) {
+               /*
+                * TODO: replace by in-place arithmetics.
+                */
+               long value = 0;
+               if(asn_INTEGER2long(st, &value))
+                       ASN__DECODE_FAILED;
+               if(asn_imax2INTEGER(st, value + ct->lower_bound))
+                       ASN__DECODE_FAILED;
+       }
+
+       return rval;
+}
+
+asn_enc_rval_t
+INTEGER_encode_uper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, const void *sptr,
+                    asn_per_outp_t *po) {
+       const asn_INTEGER_specifics_t *specs =
+               (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       const uint8_t *buf;
+       const uint8_t *end;
+       const asn_per_constraint_t *ct;
+       long value = 0;
+
+       if(!st || st->size == 0) ASN__ENCODE_FAILED;
+
+       if(!constraints) constraints = td->encoding_constraints.per_constraints;
+       ct = constraints ? &constraints->value : 0;
+
+       er.encoded = 0;
+
+       if(ct) {
+               int inext = 0;
+               if(specs && specs->field_unsigned) {
+                       unsigned long uval;
+                       if(asn_INTEGER2ulong(st, &uval))
+                               ASN__ENCODE_FAILED;
+                       /* Check proper range */
+                       if(ct->flags & APC_SEMI_CONSTRAINED) {
+                               if(uval < (unsigned long)ct->lower_bound)
+                                       inext = 1;
+                       } else if(ct->range_bits >= 0) {
+                               if(uval < (unsigned long)ct->lower_bound
+                               || uval > (unsigned long)ct->upper_bound)
+                                       inext = 1;
+                       }
+                       ASN_DEBUG("Value %lu (%02x/%" ASN_PRI_SIZE ") lb %lu ub %lu %s",
+                               uval, st->buf[0], st->size,
+                               ct->lower_bound, ct->upper_bound,
+                               inext ? "ext" : "fix");
+                       value = uval;
+               } else {
+                       if(asn_INTEGER2long(st, &value))
+                               ASN__ENCODE_FAILED;
+                       /* Check proper range */
+                       if(ct->flags & APC_SEMI_CONSTRAINED) {
+                               if(value < ct->lower_bound)
+                                       inext = 1;
+                       } else if(ct->range_bits >= 0) {
+                               if(value < ct->lower_bound
+                               || value > ct->upper_bound)
+                                       inext = 1;
+                       }
+                       ASN_DEBUG("Value %ld (%02x/%" ASN_PRI_SIZE ") lb %ld ub %ld %s",
+                               value, st->buf[0], st->size,
+                               ct->lower_bound, ct->upper_bound,
+                               inext ? "ext" : "fix");
+               }
+               if(ct->flags & APC_EXTENSIBLE) {
+                       if(per_put_few_bits(po, inext, 1))
+                               ASN__ENCODE_FAILED;
+                       if(inext) ct = 0;
+               } else if(inext) {
+                       ASN__ENCODE_FAILED;
+               }
+       }
+
+
+       /* X.691-11/2008, #13.2.2, test if constrained whole number */
+       if(ct && ct->range_bits >= 0) {
+        unsigned long v;
+               /* #11.5.6 -> #11.3 */
+               ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits",
+                       value, value - ct->lower_bound, ct->range_bits);
+       if(specs && specs->field_unsigned) {
+               if (  ((unsigned long)ct->lower_bound > (unsigned long)(ct->upper_bound)
+                  || ((unsigned long)value < (unsigned long)ct->lower_bound))
+                  || ((unsigned long)value > (unsigned long)ct->upper_bound)
+               ) {
+                       ASN_DEBUG("Value %lu to-be-encoded is outside the bounds [%lu, %lu]!",
+                               value, ct->lower_bound, ct->upper_bound);
+                       ASN__ENCODE_FAILED;
+               }
+               v = (unsigned long)value - (unsigned long)ct->lower_bound;
+       } else {
+               if(per_long_range_rebase(value, ct->lower_bound, ct->upper_bound, &v)) {
+                       ASN__ENCODE_FAILED;
+               }
+       }
+        if(uper_put_constrained_whole_number_u(po, v, ct->range_bits))
+               ASN__ENCODE_FAILED;
+       ASN__ENCODED_OK(er);
+       }
+
+       if(ct && ct->lower_bound) {
+               ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound);
+               /* TODO: adjust lower bound */
+               ASN__ENCODE_FAILED;
+       }
+
+       for(buf = st->buf, end = st->buf + st->size; buf < end;) {
+        int need_eom = 0;
+        ssize_t mayEncode = uper_put_length(po, end - buf, &need_eom);
+        if(mayEncode < 0)
+                       ASN__ENCODE_FAILED;
+               if(per_put_many_bits(po, buf, 8 * mayEncode))
+                       ASN__ENCODE_FAILED;
+               buf += mayEncode;
+        if(need_eom && uper_put_length(po, 0, 0)) ASN__ENCODE_FAILED;
+    }
+
+       ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+INTEGER_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_dec_rval_t rval = { RC_OK, 0 };
+       INTEGER_t *st = (INTEGER_t *)*sptr;
+       const asn_per_constraint_t *ct;
+       int repeat;
+
+       (void)opt_codec_ctx;
+
+       if(!st) {
+               st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       if(!constraints) constraints = td->encoding_constraints.per_constraints;
+       ct = constraints ? &constraints->value : 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) ASN__DECODE_STARVED;
+               if(inext) ct = 0;
+       }
+
+       FREEMEM(st->buf);
+       st->buf = 0;
+       st->size = 0;
+       if(ct) {
+               if(ct->flags & APC_SEMI_CONSTRAINED) {
+                       st->buf = (uint8_t *)CALLOC(1, 2);
+                       if(!st->buf) ASN__DECODE_FAILED;
+                       st->size = 1;
+               } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) {
+                       size_t size = (ct->range_bits + 7) >> 3;
+                       st->buf = (uint8_t *)MALLOC(1 + size + 1);
+                       if(!st->buf) ASN__DECODE_FAILED;
+                       st->size = size;
+               }
+       }
+
+       /* X.691, #12.2.2 */
+       if(ct && ct->flags != APC_UNCONSTRAINED) {
+               /* #10.5.6 */
+               ASN_DEBUG("Integer with range %d bits", ct->range_bits);
+               if(ct->range_bits >= 0) {
+                       if (ct->range_bits > 16) {
+                               int max_range_bytes = (ct->range_bits >> 3) +
+                                                     (((ct->range_bits % 8) > 0) ? 1 : 0);
+                               int length = 0, i;
+                               long value = 0;
+
+                               for (i = 1; ; i++) {
+                                       int upper = 1 << i;
+                                       if (upper >= max_range_bytes)
+                                               break;
+                               }
+                               ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits,
+                                         max_range_bytes, i);
+
+                               if ((length = per_get_few_bits(pd, i)) < 0)
+                                       ASN__DECODE_FAILED;
+
+                               /* X.691 #12.2.6 length determinant + lb (1) */
+                               length += 1;
+                               ASN_DEBUG("Got length %d", length);
+                               if (aper_get_align(pd) != 0)
+                                       ASN__DECODE_FAILED;
+                               while (length--) {
+                                       int buf = per_get_few_bits(pd, 8);
+                                       if (buf < 0)
+                                               ASN__DECODE_FAILED;
+                                       value += (((long)buf) << (8 * length));
+                               }
+
+                               value += ct->lower_bound;
+                               if((specs && specs->field_unsigned)
+                                       ? asn_uint642INTEGER(st, (unsigned long)value)
+                                       : asn_int642INTEGER(st, value))
+                                       ASN__DECODE_FAILED;
+                               ASN_DEBUG("Got value %ld + low %ld",
+                                         value, ct->lower_bound);
+                       } else {
+                               long value = 0;
+                               if (ct->range_bits < 8) {
+                                       value = per_get_few_bits(pd, ct->range_bits);
+                                       if(value < 0) ASN__DECODE_STARVED;
+                               } else if (ct->range_bits == 8) {
+                                       if (aper_get_align(pd) < 0)
+                                               ASN__DECODE_FAILED;
+                                       value = per_get_few_bits(pd, ct->range_bits);
+                                       if(value < 0) ASN__DECODE_STARVED;
+                               } else {
+                                       /* Align */
+                                       if (aper_get_align(pd) < 0)
+                                               ASN__DECODE_FAILED;
+                                       value = per_get_few_bits(pd, 16);
+                                       if(value < 0) ASN__DECODE_STARVED;
+                               }
+                               value += ct->lower_bound;
+                               if((specs && specs->field_unsigned)
+                                       ? asn_ulong2INTEGER(st, value)
+                                       : asn_long2INTEGER(st, value))
+                                       ASN__DECODE_FAILED;
+                               ASN_DEBUG("Got value %ld + low %ld",
+                                         value, ct->lower_bound);
+                       }
+                       return rval;
+               } else {
+                       ASN__DECODE_FAILED;
+               }
+       } else {
+               ASN_DEBUG("Decoding unconstrained integer %s", td->name);
+       }
+
+       /* X.691, #12.2.3, #12.2.4 */
+       do {
+               ssize_t len;
+               void *p;
+               int ret;
+
+               /* Get the PER length */
+               len = aper_get_length(pd, -1, -1, &repeat);
+               if(len < 0) ASN__DECODE_STARVED;
+
+               p = REALLOC(st->buf, st->size + len + 1);
+               if(!p) ASN__DECODE_FAILED;
+               st->buf = (uint8_t *)p;
+
+               ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len);
+               if(ret < 0) ASN__DECODE_STARVED;
+               st->size += len;
+       } while(repeat);
+       st->buf[st->size] = 0;  /* JIC */
+
+       /* #12.2.3 */
+       if(ct && ct->lower_bound) {
+               /*
+                * TODO: replace by in-place arithmetics.
+                */
+               long value;
+               if(asn_INTEGER2long(st, &value))
+                       ASN__DECODE_FAILED;
+               if(asn_long2INTEGER(st, value + ct->lower_bound))
+                       ASN__DECODE_FAILED;
+       }
+
+       return rval;
+}
+
+asn_enc_rval_t
+INTEGER_encode_aper(const asn_TYPE_descriptor_t *td,
+                    const asn_per_constraints_t *constraints,
+                    const void *sptr, asn_per_outp_t *po) {
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       const uint8_t *buf;
+       const uint8_t *end;
+       const asn_per_constraint_t *ct;
+       long value = 0;
+
+       if(!st || st->size == 0) ASN__ENCODE_FAILED;
+
+       if(!constraints) constraints = td->encoding_constraints.per_constraints;
+       ct = constraints ? &constraints->value : 0;
+
+       er.encoded = 0;
+
+       if(ct) {
+               int inext = 0;
+               if(specs && specs->field_unsigned) {
+                       unsigned long uval;
+                       if(asn_INTEGER2ulong(st, &uval))
+                               ASN__ENCODE_FAILED;
+                       /* Check proper range */
+                       if(ct->flags & APC_SEMI_CONSTRAINED) {
+                               if(uval < (unsigned long)ct->lower_bound)
+                                       inext = 1;
+                       } else if(ct->range_bits >= 0) {
+                               if(uval < (unsigned long)ct->lower_bound
+                                       || uval > (unsigned long)ct->upper_bound)
+                                       inext = 1;
+                       }
+                       ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s",
+                                 uval, st->buf[0], st->size,
+                                 ct->lower_bound, ct->upper_bound,
+                                 inext ? "ext" : "fix");
+                       value = uval;
+               } else {
+                       if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED;
+                       /* Check proper range */
+                       if(ct->flags & APC_SEMI_CONSTRAINED) {
+                               if(value < ct->lower_bound)
+                                       inext = 1;
+                       } else if(ct->range_bits >= 0) {
+                               if(value < ct->lower_bound
+                                       || value > ct->upper_bound)
+                                       inext = 1;
+                       }
+                       ASN_DEBUG("Value %lu (%02x/%lu) lb %ld ub %ld %s",
+                                 value, st->buf[0], st->size,
+                                 ct->lower_bound, ct->upper_bound,
+                                 inext ? "ext" : "fix");
+               }
+               if(ct->flags & APC_EXTENSIBLE) {
+                       if(per_put_few_bits(po, inext, 1))
+                               ASN__ENCODE_FAILED;
+                       if(inext) ct = 0;
+               } else if(inext) {
+                       ASN__ENCODE_FAILED;
+               }
+       }
+
+       /* X.691, #12.2.2 */
+       if(ct && ct->range_bits >= 0) {
+               unsigned long v;
+
+               /* #10.5.6 */
+               ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits",
+                         value, value - ct->lower_bound, ct->range_bits);
+
+               v = value - ct->lower_bound;
+
+               /* #12 <= 8 -> alignment ? */
+               if (ct->range_bits < 8) {
+                       if(per_put_few_bits(po, 0x00 | v, ct->range_bits))
+                               ASN__ENCODE_FAILED;
+               } else if (ct->range_bits == 8) {
+                       if(aper_put_align(po) < 0)
+                               ASN__ENCODE_FAILED;
+                       if(per_put_few_bits(po, 0x00 | v, ct->range_bits))
+                               ASN__ENCODE_FAILED;
+               } else if (ct->range_bits <= 16) {
+                       /* Consume the bytes to align on octet */
+                       if(aper_put_align(po) < 0)
+                               ASN__ENCODE_FAILED;
+                       if(per_put_few_bits(po, 0x0000 | v,
+                                           16))
+                               ASN__ENCODE_FAILED;
+               } else {
+                       /* TODO: extend to >64 bits */
+                       int64_t v64 = v;
+                       int i, j;
+                       int max_range_bytes = (ct->range_bits >> 3) +
+                                             (((ct->range_bits % 8) > 0) ? 1 : 0);
+
+                       for (i = 1; ; i++) {
+                               int upper = 1 << i;
+                               if (upper >= max_range_bytes)
+                                       break;
+                       }
+
+                       for (j = sizeof(int64_t) -1; j != 0; j--) {
+                               int64_t val;
+                               val = v64 >> (j * 8);
+                               if (val != 0)
+                                       break;
+                       }
+
+                       /* Putting length in the minimum number of bits ex: 5 = 3bits */
+                       if (per_put_few_bits(po, j, i))
+                               ASN__ENCODE_FAILED;
+
+                       /* Consume the bits to align on octet */
+                       if (aper_put_align(po) < 0)
+                               ASN__ENCODE_FAILED;
+                       /* Put the value */
+                       for (i = 0; i <= j; i++) {
+                               if(per_put_few_bits(po, (v64 >> (8 * (j - i))) & 0xff, 8))
+                                       ASN__ENCODE_FAILED;
+                       }
+               }
+               ASN__ENCODED_OK(er);
+       }
+
+       if(ct && ct->lower_bound) {
+               ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound);
+               /* TODO: adjust lower bound */
+               ASN__ENCODE_FAILED;
+       }
+
+       for(buf = st->buf, end = st->buf + st->size; buf < end;) {
+               ssize_t mayEncode = aper_put_length(po, -1, end - buf);
+               if(mayEncode < 0)
+                       ASN__ENCODE_FAILED;
+               if(per_put_many_bits(po, buf, 8 * mayEncode))
+                       ASN__ENCODE_FAILED;
+               buf += mayEncode;
+       }
+
+       ASN__ENCODED_OK(er);
+}
+
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
+static intmax_t
+asn__integer_convert(const uint8_t *b, const uint8_t *end) {
+    uintmax_t value;
+
+    /* Perform the sign initialization */
+    /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */
+    if((*b >> 7)) {
+        value = (uintmax_t)(-1);
+    } else {
+        value = 0;
+    }
+
+    /* Conversion engine */
+    for(; b < end; b++) {
+        value = (value << 8) | *b;
+    }
+
+    return value;
+}
+
+int
+asn_INTEGER2imax(const INTEGER_t *iptr, intmax_t *lptr) {
+       uint8_t *b, *end;
+       size_t size;
+
+       /* Sanity checking */
+       if(!iptr || !iptr->buf || !lptr) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /* Cache the begin/end of the buffer */
+       b = iptr->buf;  /* Start of the INTEGER buffer */
+       size = iptr->size;
+       end = b + size; /* Where to stop */
+
+       if(size > sizeof(intmax_t)) {
+               uint8_t *end1 = end - 1;
+               /*
+                * Slightly more advanced processing,
+                * able to process INTEGERs with >sizeof(intmax_t) bytes
+                * when the actual value is small, e.g. for intmax_t == int32_t
+                * (0x0000000000abcdef INTEGER would yield a fine 0x00abcdef int32_t)
+                */
+               /* Skip out the insignificant leading bytes */
+               for(; b < end1; b++) {
+                       switch(*b) {
+                               case 0x00: if((b[1] & 0x80) == 0) continue; break;
+                               case 0xff: if((b[1] & 0x80) != 0) continue; break;
+                       }
+                       break;
+               }
+
+               size = end - b;
+               if(size > sizeof(intmax_t)) {
+                       /* Still cannot fit the sizeof(intmax_t) */
+                       errno = ERANGE;
+                       return -1;
+               }
+       }
+
+       /* Shortcut processing of a corner case */
+       if(end == b) {
+               *lptr = 0;
+               return 0;
+       }
+
+       *lptr = asn__integer_convert(b, end);
+       return 0;
+}
+
+/* FIXME: negative INTEGER values are silently interpreted as large unsigned ones. */
+int
+asn_INTEGER2umax(const INTEGER_t *iptr, uintmax_t *lptr) {
+       uint8_t *b, *end;
+       uintmax_t value;
+       size_t size;
+
+       if(!iptr || !iptr->buf || !lptr) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       b = iptr->buf;
+       size = iptr->size;
+       end = b + size;
+
+       /* If all extra leading bytes are zeroes, ignore them */
+       for(; size > sizeof(value); b++, size--) {
+               if(*b) {
+                       /* Value won't fit into uintmax_t */
+                       errno = ERANGE;
+                       return -1;
+               }
+       }
+
+       /* Conversion engine */
+       for(value = 0; b < end; b++)
+               value = (value << 8) | *b;
+
+       *lptr = value;
+       return 0;
+}
+
+int
+asn_umax2INTEGER(INTEGER_t *st, uintmax_t value) {
+    uint8_t *buf;
+    uint8_t *end;
+    uint8_t *b;
+    int shr;
+
+    if(value <= ((~(uintmax_t)0) >> 1)) {
+        return asn_imax2INTEGER(st, value);
+    }
+
+    buf = (uint8_t *)MALLOC(1 + sizeof(value));
+    if(!buf) return -1;
+
+    end = buf + (sizeof(value) + 1);
+    buf[0] = 0; /* INTEGERs are signed. 0-byte indicates positive. */
+    for(b = buf + 1, shr = (sizeof(value) - 1) * 8; b < end; shr -= 8, b++)
+        *b = (uint8_t)(value >> shr);
+
+    if(st->buf) FREEMEM(st->buf);
+    st->buf = buf;
+    st->size = 1 + sizeof(value);
+
+       return 0;
+}
+
+int
+asn_imax2INTEGER(INTEGER_t *st, intmax_t value) {
+       uint8_t *buf, *bp;
+       uint8_t *p;
+       uint8_t *pstart;
+       uint8_t *pend1;
+       int littleEndian = 1;   /* Run-time detection */
+       int add;
+
+       if(!st) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       buf = (uint8_t *)(long *)MALLOC(sizeof(value));
+       if(!buf) return -1;
+
+       if(*(char *)&littleEndian) {
+               pstart = (uint8_t *)&value + sizeof(value) - 1;
+               pend1 = (uint8_t *)&value;
+               add = -1;
+       } else {
+               pstart = (uint8_t *)&value;
+               pend1 = pstart + sizeof(value) - 1;
+               add = 1;
+       }
+
+       /*
+        * If the contents octet consists of more than one octet,
+        * then bits of the first octet and bit 8 of the second octet:
+        * a) shall not all be ones; and
+        * b) shall not all be zero.
+        */
+       for(p = pstart; p != pend1; p += add) {
+               switch(*p) {
+               case 0x00: if((*(p+add) & 0x80) == 0)
+                               continue;
+                       break;
+               case 0xff: if((*(p+add) & 0x80))
+                               continue;
+                       break;
+               }
+               break;
+       }
+       /* Copy the integer body */
+       for(bp = buf, pend1 += add; p != pend1; p += add)
+               *bp++ = *p;
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = buf;
+       st->size = bp - buf;
+
+       return 0;
+}
+
+int
+asn_INTEGER2long(const INTEGER_t *iptr, long *l) {
+    intmax_t v;
+    if(asn_INTEGER2imax(iptr, &v) == 0) {
+        if(v < LONG_MIN || v > LONG_MAX) {
+            errno = ERANGE;
+            return -1;
+        }
+        *l = v;
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+int
+asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *l) {
+    uintmax_t v;
+    if(asn_INTEGER2umax(iptr, &v) == 0) {
+        if(v > ULONG_MAX) {
+            errno = ERANGE;
+            return -1;
+        }
+        *l = v;
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+int
+asn_long2INTEGER(INTEGER_t *st, long value) {
+    return asn_imax2INTEGER(st, value);
+}
+
+int
+asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) {
+    return asn_imax2INTEGER(st, value);
+}
+
+
+int
+asn_uint642INTEGER(INTEGER_t *st, uint64_t value) {
+       uint8_t *buf;
+       uint8_t *end;
+       uint8_t *b;
+       int shr;
+
+       if(value <= INT64_MAX)
+               return asn_int642INTEGER(st, value);
+
+       buf = (uint8_t *)MALLOC(1 + sizeof(value));
+       if(!buf) return -1;
+
+       end = buf + (sizeof(value) + 1);
+       buf[0] = 0;
+       for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++)
+               *b = (uint8_t)(value >> shr);
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = buf;
+       st->size = 1 + sizeof(value);
+
+       return 0;
+}
+
+int
+asn_int642INTEGER(INTEGER_t *st, int64_t value) {
+       uint8_t *buf, *bp;
+       uint8_t *p;
+       uint8_t *pstart;
+       uint8_t *pend1;
+       int littleEndian = 1;   /* Run-time detection */
+       int add;
+
+       if(!st) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       buf = (uint8_t *)MALLOC(sizeof(value));
+       if(!buf) return -1;
+
+       if(*(char *)&littleEndian) {
+               pstart = (uint8_t *)&value + sizeof(value) - 1;
+               pend1 = (uint8_t *)&value;
+               add = -1;
+       } else {
+               pstart = (uint8_t *)&value;
+               pend1 = pstart + sizeof(value) - 1;
+               add = 1;
+       }
+
+       /*
+        * If the contents octet consists of more than one octet,
+        * then bits of the first octet and bit 8 of the second octet:
+        * a) shall not all be ones; and
+        * b) shall not all be zero.
+        */
+       for(p = pstart; p != pend1; p += add) {
+               switch(*p) {
+               case 0x00: if((*(p+add) & 0x80) == 0)
+                               continue;
+                       break;
+               case 0xff: if((*(p+add) & 0x80))
+                               continue;
+                       break;
+               }
+               break;
+       }
+       /* Copy the integer body */
+       for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add)
+               *bp++ = *p;
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = buf;
+       st->size = bp - buf;
+
+       return 0;
+}
+
+/*
+ * Parse the number in the given string until the given *end position,
+ * returning the position after the last parsed character back using the
+ * same (*end) pointer.
+ * WARNING: This behavior is different from the standard strtol/strtoimax(3).
+ */
+enum asn_strtox_result_e
+asn_strtoimax_lim(const char *str, const char **end, intmax_t *intp) {
+       int sign = 1;
+       intmax_t value;
+
+#define ASN1_INTMAX_MAX ((~(uintmax_t)0) >> 1)
+    const intmax_t upper_boundary = ASN1_INTMAX_MAX / 10;
+       intmax_t last_digit_max = ASN1_INTMAX_MAX % 10;
+#undef  ASN1_INTMAX_MAX
+
+       if(str >= *end) return ASN_STRTOX_ERROR_INVAL;
+
+       switch(*str) {
+       case '-':
+               last_digit_max++;
+               sign = -1;
+               /* FALL THROUGH */
+       case '+':
+               str++;
+               if(str >= *end) {
+                       *end = str;
+                       return ASN_STRTOX_EXPECT_MORE;
+               }
+       }
+
+       for(value = 0; str < (*end); str++) {
+               switch(*str) {
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: {
+                       int d = *str - '0';
+                       if(value < upper_boundary) {
+                               value = value * 10 + d;
+                       } else if(value == upper_boundary) {
+                               if(d <= last_digit_max) {
+                                       if(sign > 0) {
+                                               value = value * 10 + d;
+                                       } else {
+                                               sign = 1;
+                                               value = -value * 10 - d;
+                                       }
+                               } else {
+                                       *end = str;
+                                       return ASN_STRTOX_ERROR_RANGE;
+                               }
+                       } else {
+                               *end = str;
+                               return ASN_STRTOX_ERROR_RANGE;
+                       }
+                   }
+                   continue;
+               default:
+                   *end = str;
+                   *intp = sign * value;
+                   return ASN_STRTOX_EXTRA_DATA;
+               }
+       }
+
+       *end = str;
+       *intp = sign * value;
+       return ASN_STRTOX_OK;
+}
+
+/*
+ * Parse the number in the given string until the given *end position,
+ * returning the position after the last parsed character back using the
+ * same (*end) pointer.
+ * WARNING: This behavior is different from the standard strtoul/strtoumax(3).
+ */
+enum asn_strtox_result_e
+asn_strtoumax_lim(const char *str, const char **end, uintmax_t *uintp) {
+       uintmax_t value;
+
+#define ASN1_UINTMAX_MAX ((~(uintmax_t)0))
+    const uintmax_t upper_boundary = ASN1_UINTMAX_MAX / 10;
+    uintmax_t last_digit_max = ASN1_UINTMAX_MAX % 10;
+#undef ASN1_UINTMAX_MAX
+
+    if(str >= *end) return ASN_STRTOX_ERROR_INVAL;
+
+       switch(*str) {
+       case '-':
+        return ASN_STRTOX_ERROR_INVAL;
+       case '+':
+               str++;
+               if(str >= *end) {
+                       *end = str;
+                       return ASN_STRTOX_EXPECT_MORE;
+               }
+       }
+
+       for(value = 0; str < (*end); str++) {
+               switch(*str) {
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: {
+                       unsigned int d = *str - '0';
+                       if(value < upper_boundary) {
+                               value = value * 10 + d;
+                       } else if(value == upper_boundary) {
+                               if(d <= last_digit_max) {
+                    value = value * 10 + d;
+                } else {
+                                       *end = str;
+                                       return ASN_STRTOX_ERROR_RANGE;
+                               }
+                       } else {
+                               *end = str;
+                               return ASN_STRTOX_ERROR_RANGE;
+                       }
+                   }
+                   continue;
+               default:
+                   *end = str;
+                   *uintp = value;
+                   return ASN_STRTOX_EXTRA_DATA;
+               }
+       }
+
+       *end = str;
+       *uintp = value;
+       return ASN_STRTOX_OK;
+}
+
+enum asn_strtox_result_e
+asn_strtol_lim(const char *str, const char **end, long *lp) {
+    intmax_t value;
+    switch(asn_strtoimax_lim(str, end, &value)) {
+    case ASN_STRTOX_ERROR_RANGE:
+        return ASN_STRTOX_ERROR_RANGE;
+    case ASN_STRTOX_ERROR_INVAL:
+        return ASN_STRTOX_ERROR_INVAL;
+    case ASN_STRTOX_EXPECT_MORE:
+        return ASN_STRTOX_EXPECT_MORE;
+    case ASN_STRTOX_OK:
+        if(value >= LONG_MIN && value <= LONG_MAX) {
+            *lp = value;
+            return ASN_STRTOX_OK;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    case ASN_STRTOX_EXTRA_DATA:
+        if(value >= LONG_MIN && value <= LONG_MAX) {
+            *lp = value;
+            return ASN_STRTOX_EXTRA_DATA;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    }
+
+    assert(!"Unreachable");
+    return ASN_STRTOX_ERROR_INVAL;
+}
+
+enum asn_strtox_result_e
+asn_strtoul_lim(const char *str, const char **end, unsigned long *ulp) {
+    uintmax_t value;
+    switch(asn_strtoumax_lim(str, end, &value)) {
+    case ASN_STRTOX_ERROR_RANGE:
+        return ASN_STRTOX_ERROR_RANGE;
+    case ASN_STRTOX_ERROR_INVAL:
+        return ASN_STRTOX_ERROR_INVAL;
+    case ASN_STRTOX_EXPECT_MORE:
+        return ASN_STRTOX_EXPECT_MORE;
+    case ASN_STRTOX_OK:
+        if(value <= ULONG_MAX) {
+            *ulp = value;
+            return ASN_STRTOX_OK;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    case ASN_STRTOX_EXTRA_DATA:
+        if(value <= ULONG_MAX) {
+            *ulp = value;
+            return ASN_STRTOX_EXTRA_DATA;
+        } else {
+            return ASN_STRTOX_ERROR_RANGE;
+        }
+    }
+
+    assert(!"Unreachable");
+    return ASN_STRTOX_ERROR_INVAL;
+}
+
+int
+INTEGER_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                     const void *bptr) {
+    const INTEGER_t *a = aptr;
+    const INTEGER_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        if(a->size && b->size) {
+            int sign_a = (a->buf[0] & 0x80) ? -1 : 1;
+            int sign_b = (b->buf[0] & 0x80) ? -1 : 1;
+
+            if(sign_a < sign_b) return -1;
+            if(sign_a > sign_b) return 1;
+
+            /* The shortest integer wins, unless comparing negatives */
+            if(a->size < b->size) {
+                return -1 * sign_a;
+            } else if(a->size > b->size) {
+                return 1 * sign_b;
+            }
+
+            return sign_a * memcmp(a->buf, b->buf, a->size);
+        } else if(a->size) {
+            int sign = (a->buf[0] & 0x80) ? -1 : 1;
+            return (1) * sign;
+        } else if(b->size) {
+            int sign = (a->buf[0] & 0x80) ? -1 : 1;
+            return (-1) * sign;
+        } else {
+            return 0;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+
+}
+
+asn_random_fill_result_t
+INTEGER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constraints,
+                    size_t max_length) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    INTEGER_t *st = *sptr;
+    const asn_INTEGER_enum_map_t *emap;
+    size_t emap_len;
+    intmax_t value;
+    int find_inside_map;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (INTEGER_t *)CALLOC(1, sizeof(*st));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(specs) {
+        emap = specs->value2enum;
+        emap_len = specs->map_count;
+        if(specs->strict_enumeration) {
+            find_inside_map = emap_len > 0;
+        } else {
+            find_inside_map = emap_len ? asn_random_between(0, 1) : 0;
+        }
+    } else {
+        emap = 0;
+        emap_len = 0;
+        find_inside_map = 0;
+    }
+
+    if(find_inside_map) {
+        assert(emap_len > 0);
+        value = emap[asn_random_between(0, emap_len - 1)].nat_value;
+    } else {
+        const asn_per_constraints_t *ct;
+
+        static const long variants[] = {
+            -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384,
+            -16383, -257,   -256,   -255,   -254,   -129,   -128,   -127,
+            -126,   -1,     0,      1,      126,    127,    128,    129,
+            254,    255,    256,    257,    16383,  16384,  16385,  32767,
+            32768,  32769,  65534,  65535,  65536,  65537};
+        if(specs && specs->field_unsigned) {
+            assert(variants[18] == 0);
+            value = variants[asn_random_between(
+                18, sizeof(variants) / sizeof(variants[0]) - 1)];
+        } else {
+            value = variants[asn_random_between(
+                0, sizeof(variants) / sizeof(variants[0]) - 1)];
+        }
+
+        if(!constraints) constraints = &td->encoding_constraints;
+        ct = constraints ? constraints->per_constraints : 0;
+        if(ct && (ct->value.flags & APC_CONSTRAINED)) {
+            if(value < ct->value.lower_bound || value > ct->value.upper_bound) {
+                value = asn_random_between(ct->value.lower_bound,
+                                           ct->value.upper_bound);
+            }
+        }
+    }
+
+    if(asn_imax2INTEGER(st, value)) {
+        if(st == *sptr) {
+            ASN_STRUCT_RESET(*td, st);
+        } else {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    } else {
+        *sptr = st;
+        result_ok.length = st->size;
+        return result_ok;
+    }
+}
diff --git a/skeletons/INTEGER.h b/skeletons/INTEGER.h
new file mode 100644 (file)
index 0000000..f776c07
--- /dev/null
@@ -0,0 +1,108 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _INTEGER_H_
+#define        _INTEGER_H_
+
+#include <asn_application.h>
+#include <asn_codecs_prim.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ASN__PRIMITIVE_TYPE_t INTEGER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_INTEGER;
+extern asn_TYPE_operation_t asn_OP_INTEGER;
+
+/* Map with <tag> to integer value association */
+typedef struct asn_INTEGER_enum_map_s {
+       long             nat_value;     /* associated native integer value */
+       size_t           enum_len;      /* strlen("tag") */
+       const char      *enum_name;     /* "tag" */
+} asn_INTEGER_enum_map_t;
+
+/* This type describes an enumeration for INTEGER and ENUMERATED types */
+typedef struct asn_INTEGER_specifics_s {
+       const asn_INTEGER_enum_map_t *value2enum;       /* N -> "tag"; sorted by N */
+       const unsigned int *enum2value;         /* "tag" => N; sorted by tag */
+       int map_count;                          /* Elements in either map */
+       int extension;                          /* This map is extensible */
+       int strict_enumeration;                 /* Enumeration set is fixed */
+       int field_width;                        /* Size of native integer */
+       int field_unsigned;                     /* Signed=0, unsigned=1 */
+} asn_INTEGER_specifics_t;
+
+#define INTEGER_free    ASN__PRIMITIVE_TYPE_free
+#define INTEGER_decode_ber     ber_decode_primitive
+#define INTEGER_constraint     asn_generic_no_constraint
+asn_struct_print_f INTEGER_print;
+asn_struct_compare_f INTEGER_compare;
+der_type_encoder_f INTEGER_encode_der;
+xer_type_decoder_f INTEGER_decode_xer;
+xer_type_encoder_f INTEGER_encode_xer;
+oer_type_decoder_f INTEGER_decode_oer;
+oer_type_encoder_f INTEGER_encode_oer;
+per_type_decoder_f INTEGER_decode_uper;
+per_type_encoder_f INTEGER_encode_uper;
+per_type_decoder_f INTEGER_decode_aper;
+per_type_encoder_f INTEGER_encode_aper;
+asn_random_fill_f  INTEGER_random_fill;
+
+/***********************************
+ * Some handy conversion routines. *
+ ***********************************/
+
+/*
+ * Natiwe size-independent conversion of native integers to/from INTEGER.
+ * (l_size) is in bytes.
+ * Returns 0 if it was possible to convert, -1 otherwise.
+ * -1/EINVAL: Mandatory argument missing
+ * -1/ERANGE: Value encoded is out of range for long representation
+ * -1/ENOMEM: Memory allocation failed (in asn_*2INTEGER()).
+ */
+int asn_INTEGER2imax(const INTEGER_t *i, intmax_t *l);
+int asn_INTEGER2umax(const INTEGER_t *i, uintmax_t *l);
+int asn_imax2INTEGER(INTEGER_t *i, intmax_t l);
+int asn_umax2INTEGER(INTEGER_t *i, uintmax_t l);
+
+/*
+ * Size-specific conversion helpers.
+ */
+int asn_INTEGER2long(const INTEGER_t *i, long *l);
+int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l);
+int asn_long2INTEGER(INTEGER_t *i, long l);
+int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l);
+int asn_int642INTEGER(INTEGER_t *i, int64_t l);
+int asn_uint642INTEGER(INTEGER_t *i, uint64_t l);
+
+/* A version of strtol/strtoimax(3) with nicer error reporting. */
+enum asn_strtox_result_e {
+    ASN_STRTOX_ERROR_RANGE = -3,  /* Input outside of supported numeric range */
+    ASN_STRTOX_ERROR_INVAL = -2,  /* Invalid data encountered (e.g., "+-") */
+    ASN_STRTOX_EXPECT_MORE = -1,  /* More data expected (e.g. "+") */
+    ASN_STRTOX_OK          =  0,  /* Conversion succeded, number ends at (*end) */
+    ASN_STRTOX_EXTRA_DATA  =  1   /* Conversion succeded, but the string has extra stuff */
+};
+enum asn_strtox_result_e asn_strtol_lim(const char *str, const char **end,
+                                        long *l);
+enum asn_strtox_result_e asn_strtoul_lim(const char *str, const char **end,
+                                         unsigned long *l);
+enum asn_strtox_result_e asn_strtoimax_lim(const char *str, const char **end,
+                                           intmax_t *l);
+enum asn_strtox_result_e asn_strtoumax_lim(const char *str, const char **end,
+                                           uintmax_t *l);
+
+/*
+ * Convert the integer value into the corresponding enumeration map entry.
+ */
+const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(
+    const asn_INTEGER_specifics_t *specs, long value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _INTEGER_H_ */
diff --git a/skeletons/INTEGER_oer.c b/skeletons/INTEGER_oer.c
new file mode 100644 (file)
index 0000000..110689b
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <INTEGER.h>
+#include <errno.h>
+
+asn_dec_rval_t
+INTEGER_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, void **sptr,
+                   const void *ptr, size_t size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    INTEGER_t *st = (INTEGER_t *)*sptr;
+    struct asn_oer_constraint_number_s ct = {0, 0};
+    size_t req_bytes;
+
+    (void)opt_codec_ctx;
+    (void)specs;
+
+    if(!st) {
+        st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+    FREEMEM(st->buf);
+    st->buf = 0;
+    st->size = 0;
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints) ct = constraints->value;
+
+    if(ct.width) {
+        req_bytes = ct.width;
+    } else {
+        /* No lower bound and no upper bound, effectively */
+
+        ssize_t consumed = oer_fetch_length(ptr, size, &req_bytes);
+        if(consumed == 0) {
+            ASN__DECODE_STARVED;
+        } else if(consumed == -1) {
+            ASN__DECODE_FAILED;
+        }
+        rval.consumed += consumed;
+        ptr = (const char *)ptr + consumed;
+        size -= consumed;
+    }
+
+    if(req_bytes > size) {
+        ASN__DECODE_STARVED;
+    }
+
+    if(ct.positive) {
+        /* X.969 08/2015 10.2(a) */
+        unsigned msb;   /* Most significant bit */
+        size_t useful_size;
+
+        /* Check most significant bit */
+        msb = *(const uint8_t *)ptr >> 7; /* yields 0 or 1 */
+        useful_size = msb + req_bytes;
+        st->buf = (uint8_t *)MALLOC(useful_size + 1);
+        if(!st->buf) {
+            ASN__DECODE_FAILED;
+        }
+
+        /*
+         * Record a large unsigned in a way not to confuse it
+         * with signed value.
+         */
+        st->buf[0] = '\0';
+        memcpy(st->buf + msb, ptr, req_bytes);
+        st->buf[useful_size] = '\0';    /* Just in case, 0-terminate */
+        st->size = useful_size;
+
+        rval.consumed += req_bytes;
+        return rval;
+    } else {
+        /* X.969 08/2015 10.2(b) */
+        st->buf = (uint8_t *)MALLOC(req_bytes + 1);
+        if(!st->buf) {
+            ASN__DECODE_FAILED;
+        }
+
+        memcpy(st->buf, ptr, req_bytes);
+        st->buf[req_bytes] = '\0'; /* Just in case, 0-terminate */
+        st->size = req_bytes;
+
+        rval.consumed += req_bytes;
+        return rval;
+    }
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+INTEGER_encode_oer(const asn_TYPE_descriptor_t *td,
+                   const asn_oer_constraints_t *constraints, const void *sptr,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    const INTEGER_t *st = sptr;
+    asn_enc_rval_t er = {0,0,0};
+    struct asn_oer_constraint_number_s ct = {0, 0};
+    const uint8_t *buf;
+    const uint8_t *end;
+    size_t useful_bytes;
+    size_t req_bytes = 0;
+    int sign = 0;
+
+    if(!st || st->size == 0) ASN__ENCODE_FAILED;
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints) ct = constraints->value;
+
+    er.encoded = 0;
+
+    buf = st->buf;
+    end = buf + st->size;
+
+    sign = (buf && buf < end) ? buf[0] & 0x80 : 0;
+
+    /* Ignore 9 leading zeroes or ones */
+    if(ct.positive) {
+        if(sign) {
+            /* The value given is a signed value. Can't proceed. */
+            ASN__ENCODE_FAILED;
+        }
+        /* Remove leading zeros. */
+        for(; buf + 1 < end; buf++) {
+            if(buf[0] != 0x0) break;
+        }
+    } else {
+        for(; buf + 1 < end; buf++) {
+            if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) {
+                continue;
+            } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) {
+                continue;
+            }
+            break;
+        }
+    }
+
+    useful_bytes = end - buf;
+    if(ct.width) {
+        req_bytes = ct.width;
+    } else {
+        ssize_t r = oer_serialize_length(useful_bytes, cb, app_key);
+        if(r < 0) {
+            ASN__ENCODE_FAILED;
+        }
+        er.encoded += r;
+        req_bytes = useful_bytes;
+    }
+
+    if(req_bytes < useful_bytes) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded += req_bytes;
+
+    for(; req_bytes > useful_bytes; req_bytes--) {
+        if(cb(sign?"\xff":"\0", 1, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        }
+    }
+
+    if(cb(buf, useful_bytes, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/ISO646String.c b/skeletons/ISO646String.c
new file mode 100644 (file)
index 0000000..f5fc69e
--- /dev/null
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ISO646String.h>
+
+/*
+ * ISO646String basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_ISO646String_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),  /* [UNIVERSAL 26] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static asn_per_constraints_t asn_DEF_ISO646String_per_constraints = {
+       { APC_CONSTRAINED, 7, 7, 0x20, 0x7e },  /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_ISO646String = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,        /* ASCII subset */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_ISO646String = {
+       "ISO646String",
+       "ISO646String",
+       &asn_OP_ISO646String,
+       asn_DEF_ISO646String_tags,
+       sizeof(asn_DEF_ISO646String_tags)
+         / sizeof(asn_DEF_ISO646String_tags[0]) - 1,
+       asn_DEF_ISO646String_tags,
+       sizeof(asn_DEF_ISO646String_tags)
+         / sizeof(asn_DEF_ISO646String_tags[0]),
+       { 0, &asn_DEF_ISO646String_per_constraints, ISO646String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
diff --git a/skeletons/ISO646String.h b/skeletons/ISO646String.h
new file mode 100644 (file)
index 0000000..cd24a68
--- /dev/null
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _ISO646String_H_
+#define        _ISO646String_H_
+
+#include <asn_application.h>
+#include <VisibleString.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef VisibleString_t ISO646String_t;        /* Implemented using VisibleString */
+
+extern asn_TYPE_descriptor_t asn_DEF_ISO646String;
+extern asn_TYPE_operation_t asn_OP_ISO646String;
+
+#define ISO646String_free           OCTET_STRING_free
+#define ISO646String_print          OCTET_STRING_print_utf8
+#define ISO646String_compare        OCTET_STRING_compare
+#define ISO646String_constraint     VisibleString_constraint
+#define ISO646String_decode_ber     OCTET_STRING_decode_ber
+#define ISO646String_encode_der     OCTET_STRING_encode_der
+#define ISO646String_decode_xer     OCTET_STRING_decode_xer_utf8
+#define ISO646String_encode_xer     OCTET_STRING_encode_xer_utf8
+#define ISO646String_decode_uper    OCTET_STRING_decode_uper
+#define ISO646String_encode_uper    OCTET_STRING_encode_uper
+#define ISO646String_decode_aper    OCTET_STRING_decode_aper
+#define ISO646String_encode_aper    OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ISO646String_H_ */
diff --git a/skeletons/Makefile b/skeletons/Makefile
new file mode 100644 (file)
index 0000000..3f22ec0
--- /dev/null
@@ -0,0 +1,2776 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# skeletons/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+check_PROGRAMS = check-converter_example$(EXEEXT) \
+       check-converter_c89_example$(EXEEXT) $(am__EXEEXT_1)
+#am__append_1 = libasn1cskeletons_c89_32.la
+#am__append_2 = check-converter_c89_32_example
+subdir = skeletons
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgdata_DATA) \
+       $(nobase_dist_smods_DATA) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+libasn1cskeletons_la_LIBADD =
+am_libasn1cskeletons_la_OBJECTS = libasn1cskeletons_la-ANY.lo \
+       libasn1cskeletons_la-BIT_STRING.lo \
+       libasn1cskeletons_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_la-BMPString.lo \
+       libasn1cskeletons_la-BOOLEAN.lo \
+       libasn1cskeletons_la-ENUMERATED.lo \
+       libasn1cskeletons_la-GeneralString.lo \
+       libasn1cskeletons_la-GeneralizedTime.lo \
+       libasn1cskeletons_la-GraphicString.lo \
+       libasn1cskeletons_la-IA5String.lo \
+       libasn1cskeletons_la-INTEGER.lo \
+       libasn1cskeletons_la-INTEGER_oer.lo \
+       libasn1cskeletons_la-ISO646String.lo \
+       libasn1cskeletons_la-NULL.lo \
+       libasn1cskeletons_la-NativeEnumerated.lo \
+       libasn1cskeletons_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_la-NativeInteger.lo \
+       libasn1cskeletons_la-NativeInteger_oer.lo \
+       libasn1cskeletons_la-NativeReal.lo \
+       libasn1cskeletons_la-NumericString.lo \
+       libasn1cskeletons_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_la-OCTET_STRING.lo \
+       libasn1cskeletons_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_la-OPEN_TYPE.lo \
+       libasn1cskeletons_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_la-ObjectDescriptor.lo \
+       libasn1cskeletons_la-PrintableString.lo \
+       libasn1cskeletons_la-REAL.lo \
+       libasn1cskeletons_la-RELATIVE-OID.lo \
+       libasn1cskeletons_la-T61String.lo \
+       libasn1cskeletons_la-TeletexString.lo \
+       libasn1cskeletons_la-UTCTime.lo \
+       libasn1cskeletons_la-UTF8String.lo \
+       libasn1cskeletons_la-UniversalString.lo \
+       libasn1cskeletons_la-VideotexString.lo \
+       libasn1cskeletons_la-VisibleString.lo \
+       libasn1cskeletons_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_la-asn_SET_OF.lo \
+       libasn1cskeletons_la-asn_application.lo \
+       libasn1cskeletons_la-asn_codecs_prim.lo \
+       libasn1cskeletons_la-asn_internal.lo \
+       libasn1cskeletons_la-asn_bit_data.lo \
+       libasn1cskeletons_la-asn_random_fill.lo \
+       libasn1cskeletons_la-ber_decoder.lo \
+       libasn1cskeletons_la-ber_tlv_length.lo \
+       libasn1cskeletons_la-ber_tlv_tag.lo \
+       libasn1cskeletons_la-constr_CHOICE.lo \
+       libasn1cskeletons_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_la-constr_SET.lo \
+       libasn1cskeletons_la-constr_SET_OF.lo \
+       libasn1cskeletons_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_la-constr_TYPE.lo \
+       libasn1cskeletons_la-constraints.lo \
+       libasn1cskeletons_la-der_encoder.lo \
+       libasn1cskeletons_la-oer_decoder.lo \
+       libasn1cskeletons_la-oer_encoder.lo \
+       libasn1cskeletons_la-oer_support.lo \
+       libasn1cskeletons_la-per_decoder.lo \
+       libasn1cskeletons_la-per_encoder.lo \
+       libasn1cskeletons_la-per_opentype.lo \
+       libasn1cskeletons_la-per_support.lo \
+       libasn1cskeletons_la-xer_decoder.lo \
+       libasn1cskeletons_la-xer_encoder.lo \
+       libasn1cskeletons_la-xer_support.lo
+libasn1cskeletons_la_OBJECTS = $(am_libasn1cskeletons_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libasn1cskeletons_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+libasn1cskeletons_c89_la_LIBADD =
+am__objects_1 = libasn1cskeletons_c89_la-ANY.lo \
+       libasn1cskeletons_c89_la-BIT_STRING.lo \
+       libasn1cskeletons_c89_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_c89_la-BMPString.lo \
+       libasn1cskeletons_c89_la-BOOLEAN.lo \
+       libasn1cskeletons_c89_la-ENUMERATED.lo \
+       libasn1cskeletons_c89_la-GeneralString.lo \
+       libasn1cskeletons_c89_la-GeneralizedTime.lo \
+       libasn1cskeletons_c89_la-GraphicString.lo \
+       libasn1cskeletons_c89_la-IA5String.lo \
+       libasn1cskeletons_c89_la-INTEGER.lo \
+       libasn1cskeletons_c89_la-INTEGER_oer.lo \
+       libasn1cskeletons_c89_la-ISO646String.lo \
+       libasn1cskeletons_c89_la-NULL.lo \
+       libasn1cskeletons_c89_la-NativeEnumerated.lo \
+       libasn1cskeletons_c89_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_c89_la-NativeInteger.lo \
+       libasn1cskeletons_c89_la-NativeInteger_oer.lo \
+       libasn1cskeletons_c89_la-NativeReal.lo \
+       libasn1cskeletons_c89_la-NumericString.lo \
+       libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_c89_la-OCTET_STRING.lo \
+       libasn1cskeletons_c89_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_c89_la-OPEN_TYPE.lo \
+       libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_c89_la-ObjectDescriptor.lo \
+       libasn1cskeletons_c89_la-PrintableString.lo \
+       libasn1cskeletons_c89_la-REAL.lo \
+       libasn1cskeletons_c89_la-RELATIVE-OID.lo \
+       libasn1cskeletons_c89_la-T61String.lo \
+       libasn1cskeletons_c89_la-TeletexString.lo \
+       libasn1cskeletons_c89_la-UTCTime.lo \
+       libasn1cskeletons_c89_la-UTF8String.lo \
+       libasn1cskeletons_c89_la-UniversalString.lo \
+       libasn1cskeletons_c89_la-VideotexString.lo \
+       libasn1cskeletons_c89_la-VisibleString.lo \
+       libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_la-asn_SET_OF.lo \
+       libasn1cskeletons_c89_la-asn_application.lo \
+       libasn1cskeletons_c89_la-asn_codecs_prim.lo \
+       libasn1cskeletons_c89_la-asn_internal.lo \
+       libasn1cskeletons_c89_la-asn_bit_data.lo \
+       libasn1cskeletons_c89_la-asn_random_fill.lo \
+       libasn1cskeletons_c89_la-ber_decoder.lo \
+       libasn1cskeletons_c89_la-ber_tlv_length.lo \
+       libasn1cskeletons_c89_la-ber_tlv_tag.lo \
+       libasn1cskeletons_c89_la-constr_CHOICE.lo \
+       libasn1cskeletons_c89_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_la-constr_SET.lo \
+       libasn1cskeletons_c89_la-constr_SET_OF.lo \
+       libasn1cskeletons_c89_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_c89_la-constr_TYPE.lo \
+       libasn1cskeletons_c89_la-constraints.lo \
+       libasn1cskeletons_c89_la-der_encoder.lo \
+       libasn1cskeletons_c89_la-oer_decoder.lo \
+       libasn1cskeletons_c89_la-oer_encoder.lo \
+       libasn1cskeletons_c89_la-oer_support.lo \
+       libasn1cskeletons_c89_la-per_decoder.lo \
+       libasn1cskeletons_c89_la-per_encoder.lo \
+       libasn1cskeletons_c89_la-per_opentype.lo \
+       libasn1cskeletons_c89_la-per_support.lo \
+       libasn1cskeletons_c89_la-xer_decoder.lo \
+       libasn1cskeletons_c89_la-xer_encoder.lo \
+       libasn1cskeletons_c89_la-xer_support.lo
+am_libasn1cskeletons_c89_la_OBJECTS = $(am__objects_1)
+libasn1cskeletons_c89_la_OBJECTS =  \
+       $(am_libasn1cskeletons_c89_la_OBJECTS)
+libasn1cskeletons_c89_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+libasn1cskeletons_c89_32_la_LIBADD =
+am__libasn1cskeletons_c89_32_la_SOURCES_DIST = ANY.c ANY.h \
+       BIT_STRING.c BIT_STRING.h BIT_STRING_oer.c BMPString.c \
+       BMPString.h BOOLEAN.c BOOLEAN.h ENUMERATED.c ENUMERATED.h \
+       GeneralString.c GeneralString.h GeneralizedTime.c \
+       GeneralizedTime.h GraphicString.c GraphicString.h IA5String.c \
+       IA5String.h INTEGER.c INTEGER.h INTEGER_oer.c ISO646String.c \
+       ISO646String.h NULL.c NULL.h NativeEnumerated.c \
+       NativeEnumerated.h NativeEnumerated_oer.c NativeInteger.c \
+       NativeInteger.h NativeInteger_oer.c NativeReal.c NativeReal.h \
+       NumericString.c NumericString.h OBJECT_IDENTIFIER.c \
+       OBJECT_IDENTIFIER.h OCTET_STRING.c OCTET_STRING.h \
+       OCTET_STRING_oer.c OPEN_TYPE.c OPEN_TYPE.h OPEN_TYPE_oer.c \
+       ObjectDescriptor.c ObjectDescriptor.h PrintableString.c \
+       PrintableString.h REAL.c REAL.h RELATIVE-OID.c RELATIVE-OID.h \
+       T61String.c T61String.h TeletexString.c TeletexString.h \
+       UTCTime.c UTCTime.h UTF8String.c UTF8String.h \
+       UniversalString.c UniversalString.h VideotexString.c \
+       VideotexString.h VisibleString.c VisibleString.h \
+       asn_SEQUENCE_OF.c asn_SEQUENCE_OF.h asn_SET_OF.c asn_SET_OF.h \
+       asn_application.c asn_application.h asn_system.h asn_codecs.h \
+       asn_codecs_prim.c asn_codecs_prim.h asn_internal.h \
+       asn_internal.c asn_bit_data.c asn_bit_data.h asn_random_fill.c \
+       asn_random_fill.h ber_decoder.c ber_decoder.h ber_tlv_length.c \
+       ber_tlv_length.h ber_tlv_tag.c ber_tlv_tag.h constr_CHOICE.c \
+       constr_CHOICE.h constr_CHOICE_oer.c constr_SEQUENCE.c \
+       constr_SEQUENCE.h constr_SEQUENCE_oer.c constr_SEQUENCE_OF.c \
+       constr_SEQUENCE_OF.h constr_SET.c constr_SET.h constr_SET_OF.c \
+       constr_SET_OF.h constr_SET_OF_oer.c constr_TYPE.c \
+       constr_TYPE.h constraints.c constraints.h der_encoder.c \
+       der_encoder.h oer_decoder.c oer_decoder.h oer_encoder.c \
+       oer_encoder.h oer_support.c oer_support.h per_decoder.c \
+       per_decoder.h per_encoder.c per_encoder.h per_opentype.c \
+       per_opentype.h per_support.c per_support.h xer_decoder.c \
+       xer_decoder.h xer_encoder.c xer_encoder.h xer_support.c \
+       xer_support.h
+am__objects_2 = libasn1cskeletons_c89_32_la-ANY.lo \
+       libasn1cskeletons_c89_32_la-BIT_STRING.lo \
+       libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_c89_32_la-BMPString.lo \
+       libasn1cskeletons_c89_32_la-BOOLEAN.lo \
+       libasn1cskeletons_c89_32_la-ENUMERATED.lo \
+       libasn1cskeletons_c89_32_la-GeneralString.lo \
+       libasn1cskeletons_c89_32_la-GeneralizedTime.lo \
+       libasn1cskeletons_c89_32_la-GraphicString.lo \
+       libasn1cskeletons_c89_32_la-IA5String.lo \
+       libasn1cskeletons_c89_32_la-INTEGER.lo \
+       libasn1cskeletons_c89_32_la-INTEGER_oer.lo \
+       libasn1cskeletons_c89_32_la-ISO646String.lo \
+       libasn1cskeletons_c89_32_la-NULL.lo \
+       libasn1cskeletons_c89_32_la-NativeEnumerated.lo \
+       libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_c89_32_la-NativeInteger.lo \
+       libasn1cskeletons_c89_32_la-NativeInteger_oer.lo \
+       libasn1cskeletons_c89_32_la-NativeReal.lo \
+       libasn1cskeletons_c89_32_la-NumericString.lo \
+       libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_c89_32_la-OCTET_STRING.lo \
+       libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_c89_32_la-OPEN_TYPE.lo \
+       libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_c89_32_la-ObjectDescriptor.lo \
+       libasn1cskeletons_c89_32_la-PrintableString.lo \
+       libasn1cskeletons_c89_32_la-REAL.lo \
+       libasn1cskeletons_c89_32_la-RELATIVE-OID.lo \
+       libasn1cskeletons_c89_32_la-T61String.lo \
+       libasn1cskeletons_c89_32_la-TeletexString.lo \
+       libasn1cskeletons_c89_32_la-UTCTime.lo \
+       libasn1cskeletons_c89_32_la-UTF8String.lo \
+       libasn1cskeletons_c89_32_la-UniversalString.lo \
+       libasn1cskeletons_c89_32_la-VideotexString.lo \
+       libasn1cskeletons_c89_32_la-VisibleString.lo \
+       libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_32_la-asn_SET_OF.lo \
+       libasn1cskeletons_c89_32_la-asn_application.lo \
+       libasn1cskeletons_c89_32_la-asn_codecs_prim.lo \
+       libasn1cskeletons_c89_32_la-asn_internal.lo \
+       libasn1cskeletons_c89_32_la-asn_bit_data.lo \
+       libasn1cskeletons_c89_32_la-asn_random_fill.lo \
+       libasn1cskeletons_c89_32_la-ber_decoder.lo \
+       libasn1cskeletons_c89_32_la-ber_tlv_length.lo \
+       libasn1cskeletons_c89_32_la-ber_tlv_tag.lo \
+       libasn1cskeletons_c89_32_la-constr_CHOICE.lo \
+       libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_32_la-constr_SET.lo \
+       libasn1cskeletons_c89_32_la-constr_SET_OF.lo \
+       libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_TYPE.lo \
+       libasn1cskeletons_c89_32_la-constraints.lo \
+       libasn1cskeletons_c89_32_la-der_encoder.lo \
+       libasn1cskeletons_c89_32_la-oer_decoder.lo \
+       libasn1cskeletons_c89_32_la-oer_encoder.lo \
+       libasn1cskeletons_c89_32_la-oer_support.lo \
+       libasn1cskeletons_c89_32_la-per_decoder.lo \
+       libasn1cskeletons_c89_32_la-per_encoder.lo \
+       libasn1cskeletons_c89_32_la-per_opentype.lo \
+       libasn1cskeletons_c89_32_la-per_support.lo \
+       libasn1cskeletons_c89_32_la-xer_decoder.lo \
+       libasn1cskeletons_c89_32_la-xer_encoder.lo \
+       libasn1cskeletons_c89_32_la-xer_support.lo
+#am_libasn1cskeletons_c89_32_la_OBJECTS =  \
+#      $(am__objects_2)
+libasn1cskeletons_c89_32_la_OBJECTS =  \
+       $(am_libasn1cskeletons_c89_32_la_OBJECTS)
+libasn1cskeletons_c89_32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+#am_libasn1cskeletons_c89_32_la_rpath =
+#am__EXEEXT_1 =  \
+#      check-converter_c89_32_example$(EXEEXT)
+am__check_converter_c89_32_example_SOURCES_DIST = converter-example.c
+#am_check_converter_c89_32_example_OBJECTS = check_converter_c89_32_example-converter-example.$(OBJEXT)
+check_converter_c89_32_example_OBJECTS =  \
+       $(am_check_converter_c89_32_example_OBJECTS)
+#check_converter_c89_32_example_DEPENDENCIES =  \
+#      libasn1cskeletons_c89_32.la
+check_converter_c89_32_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_check_converter_c89_example_OBJECTS =  \
+       check_converter_c89_example-converter-example.$(OBJEXT)
+check_converter_c89_example_OBJECTS =  \
+       $(am_check_converter_c89_example_OBJECTS)
+check_converter_c89_example_DEPENDENCIES = libasn1cskeletons_c89.la
+check_converter_c89_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_c89_example_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am_check_converter_example_OBJECTS =  \
+       check_converter_example-converter-example.$(OBJEXT)
+check_converter_example_OBJECTS =  \
+       $(am_check_converter_example_OBJECTS)
+check_converter_example_DEPENDENCIES = libasn1cskeletons.la
+check_converter_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_example_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libasn1cskeletons_la_SOURCES) \
+       $(libasn1cskeletons_c89_la_SOURCES) \
+       $(libasn1cskeletons_c89_32_la_SOURCES) \
+       $(check_converter_c89_32_example_SOURCES) \
+       $(check_converter_c89_example_SOURCES) \
+       $(check_converter_example_SOURCES)
+DIST_SOURCES = $(libasn1cskeletons_la_SOURCES) \
+       $(libasn1cskeletons_c89_la_SOURCES) \
+       $(am__libasn1cskeletons_c89_32_la_SOURCES_DIST) \
+       $(am__check_converter_c89_32_example_SOURCES_DIST) \
+       $(check_converter_c89_example_SOURCES) \
+       $(check_converter_example_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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(smodsdir)"
+DATA = $(dist_pkgdata_DATA) $(nobase_dist_smods_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99)
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/skeletons
+abs_srcdir = /home/nokia/mouse07410/asn1c/skeletons
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+dist_pkgdata_DATA = \
+               ${srcdir}/README                \
+               ${srcdir}/*.[ch]                \
+               ${srcdir}/file-dependencies
+
+smodsdir = $(pkgdatadir)
+nobase_dist_smods_DATA = \
+       standard-modules/README  \
+       standard-modules/ASN1-Object-Identifier-Module.asn1 \
+       standard-modules/ASN1C-UsefulInformationObjectClasses.asn1
+
+check_LTLIBRARIES = libasn1cskeletons.la libasn1cskeletons_c89.la \
+       $(am__append_1)
+libasn1cskeletons_c89_la_CFLAGS = $(SKELETONS_CFLAGS)
+libasn1cskeletons_c89_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+libasn1cskeletons_la_CFLAGS = $(TESTSUITE_CFLAGS)
+libasn1cskeletons_la_SOURCES = \
+    ANY.c ANY.h                                 \
+    BIT_STRING.c BIT_STRING.h                   \
+    BIT_STRING_oer.c                            \
+    BMPString.c BMPString.h                     \
+    BOOLEAN.c BOOLEAN.h                         \
+    ENUMERATED.c ENUMERATED.h                   \
+    GeneralString.c GeneralString.h             \
+    GeneralizedTime.c GeneralizedTime.h         \
+    GraphicString.c GraphicString.h             \
+    IA5String.c IA5String.h                     \
+    INTEGER.c INTEGER.h                         \
+    INTEGER_oer.c                               \
+    ISO646String.c ISO646String.h               \
+    NULL.c NULL.h                               \
+    NativeEnumerated.c NativeEnumerated.h       \
+    NativeEnumerated_oer.c                      \
+    NativeInteger.c NativeInteger.h             \
+    NativeInteger_oer.c                         \
+    NativeReal.c NativeReal.h                   \
+    NumericString.c NumericString.h             \
+    OBJECT_IDENTIFIER.c OBJECT_IDENTIFIER.h     \
+    OCTET_STRING.c OCTET_STRING.h               \
+    OCTET_STRING_oer.c                          \
+    OPEN_TYPE.c OPEN_TYPE.h OPEN_TYPE_oer.c     \
+    ObjectDescriptor.c ObjectDescriptor.h       \
+    PrintableString.c PrintableString.h         \
+    REAL.c REAL.h                               \
+    RELATIVE-OID.c RELATIVE-OID.h               \
+    T61String.c T61String.h                     \
+    TeletexString.c TeletexString.h             \
+    UTCTime.c UTCTime.h                         \
+    UTF8String.c UTF8String.h                   \
+    UniversalString.c UniversalString.h         \
+    VideotexString.c VideotexString.h           \
+    VisibleString.c VisibleString.h             \
+    asn_SEQUENCE_OF.c asn_SEQUENCE_OF.h         \
+    asn_SET_OF.c asn_SET_OF.h                   \
+    asn_application.c asn_application.h         \
+    asn_system.h asn_codecs.h                   \
+    asn_codecs_prim.c asn_codecs_prim.h         \
+    asn_internal.h asn_internal.c               \
+    asn_bit_data.c asn_bit_data.h               \
+    asn_random_fill.c asn_random_fill.h         \
+    ber_decoder.c ber_decoder.h                 \
+    ber_tlv_length.c ber_tlv_length.h           \
+    ber_tlv_tag.c ber_tlv_tag.h                 \
+    constr_CHOICE.c constr_CHOICE.h             \
+    constr_CHOICE_oer.c                         \
+    constr_SEQUENCE.c constr_SEQUENCE.h         \
+    constr_SEQUENCE_oer.c                       \
+    constr_SEQUENCE_OF.c constr_SEQUENCE_OF.h   \
+    constr_SET.c constr_SET.h                   \
+    constr_SET_OF.c constr_SET_OF.h             \
+    constr_SET_OF_oer.c                         \
+    constr_TYPE.c constr_TYPE.h                 \
+    constraints.c constraints.h                 \
+    der_encoder.c der_encoder.h                 \
+    oer_decoder.c oer_decoder.h                 \
+    oer_encoder.c oer_encoder.h                 \
+    oer_support.c oer_support.h                 \
+    per_decoder.c per_decoder.h                 \
+    per_encoder.c per_encoder.h                 \
+    per_opentype.c per_opentype.h               \
+    per_support.c per_support.h                 \
+    xer_decoder.c xer_decoder.h                 \
+    xer_encoder.c xer_encoder.h                 \
+    xer_support.c xer_support.h
+
+LDADD = -lm
+check_converter_example_CFLAGS = $(TESTSUITE_CFLAGS) -DNO_ASN_PDU
+check_converter_example_SOURCES = converter-example.c
+check_converter_example_LDADD = libasn1cskeletons.la
+check_converter_c89_example_CFLAGS = $(SKELETON_CFLAGS) -DNO_ASN_PDU
+check_converter_c89_example_SOURCES = converter-example.c
+check_converter_c89_example_LDADD = libasn1cskeletons_c89.la
+#libasn1cskeletons_c89_32_la_CFLAGS = $(CFLAGS_M32) -Wno-format
+#libasn1cskeletons_c89_32_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+#check_converter_c89_32_example_CFLAGS = $(CFLAGS_M32) -DNO_ASN_PDU
+#check_converter_c89_32_example_SOURCES = converter-example.c
+#check_converter_c89_32_example_LDADD = libasn1cskeletons_c89_32.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign skeletons/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign skeletons/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkLTLIBRARIES:
+       -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+       @list='$(check_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1cskeletons.la: $(libasn1cskeletons_la_OBJECTS) $(libasn1cskeletons_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_la_LINK)  $(libasn1cskeletons_la_OBJECTS) $(libasn1cskeletons_la_LIBADD) $(LIBS)
+
+libasn1cskeletons_c89.la: $(libasn1cskeletons_c89_la_OBJECTS) $(libasn1cskeletons_c89_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_c89_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_c89_la_LINK)  $(libasn1cskeletons_c89_la_OBJECTS) $(libasn1cskeletons_c89_la_LIBADD) $(LIBS)
+
+libasn1cskeletons_c89_32.la: $(libasn1cskeletons_c89_32_la_OBJECTS) $(libasn1cskeletons_c89_32_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_c89_32_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_c89_32_la_LINK) $(am_libasn1cskeletons_c89_32_la_rpath) $(libasn1cskeletons_c89_32_la_OBJECTS) $(libasn1cskeletons_c89_32_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check-converter_c89_32_example$(EXEEXT): $(check_converter_c89_32_example_OBJECTS) $(check_converter_c89_32_example_DEPENDENCIES) $(EXTRA_check_converter_c89_32_example_DEPENDENCIES) 
+       @rm -f check-converter_c89_32_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_c89_32_example_LINK) $(check_converter_c89_32_example_OBJECTS) $(check_converter_c89_32_example_LDADD) $(LIBS)
+
+check-converter_c89_example$(EXEEXT): $(check_converter_c89_example_OBJECTS) $(check_converter_c89_example_DEPENDENCIES) $(EXTRA_check_converter_c89_example_DEPENDENCIES) 
+       @rm -f check-converter_c89_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_c89_example_LINK) $(check_converter_c89_example_OBJECTS) $(check_converter_c89_example_LDADD) $(LIBS)
+
+check-converter_example$(EXEEXT): $(check_converter_example_OBJECTS) $(check_converter_example_DEPENDENCIES) $(EXTRA_check_converter_example_DEPENDENCIES) 
+       @rm -f check-converter_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_example_LINK) $(check_converter_example_OBJECTS) $(check_converter_example_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/check_converter_c89_32_example-converter-example.Po
+include ./$(DEPDIR)/check_converter_c89_example-converter-example.Po
+include ./$(DEPDIR)/check_converter_example-converter-example.Po
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ANY.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NULL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-REAL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-T61String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-constraints.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-per_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ANY.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-BMPString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-GeneralString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-GraphicString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-IA5String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-INTEGER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ISO646String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NULL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NativeInteger.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NativeReal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-NumericString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-PrintableString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-REAL.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-T61String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-TeletexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-UTCTime.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-UTF8String.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-UniversalString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-VideotexString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-VisibleString.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_application.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_internal.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ber_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SET.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-constraints.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-der_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-oer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-oer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-oer_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-per_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-per_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-per_opentype.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-per_support.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-xer_decoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-xer_encoder.Plo
+include ./$(DEPDIR)/libasn1cskeletons_la-xer_support.Plo
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+libasn1cskeletons_la-ANY.lo: ANY.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ANY.Tpo -c -o libasn1cskeletons_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_la-ANY.Plo
+#      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_la-ANY.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_la-BIT_STRING.lo: BIT_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Tpo -c -o libasn1cskeletons_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Plo
+#      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_la-BIT_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Plo
+#      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_la-BIT_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_la-BMPString.lo: BMPString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BMPString.Tpo -c -o libasn1cskeletons_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_la-BMPString.Plo
+#      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_la-BMPString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_la-BOOLEAN.lo: BOOLEAN.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Tpo -c -o libasn1cskeletons_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Plo
+#      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_la-BOOLEAN.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_la-ENUMERATED.lo: ENUMERATED.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Tpo -c -o libasn1cskeletons_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Plo
+#      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_la-ENUMERATED.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_la-GeneralString.lo: GeneralString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GeneralString.Tpo -c -o libasn1cskeletons_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_la-GeneralString.Plo
+#      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_la-GeneralString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_la-GeneralizedTime.lo: GeneralizedTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Plo
+#      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_la-GeneralizedTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_la-GraphicString.lo: GraphicString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GraphicString.Tpo -c -o libasn1cskeletons_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_la-GraphicString.Plo
+#      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_la-GraphicString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_la-IA5String.lo: IA5String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-IA5String.Tpo -c -o libasn1cskeletons_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_la-IA5String.Plo
+#      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_la-IA5String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_la-INTEGER.lo: INTEGER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-INTEGER.Tpo -c -o libasn1cskeletons_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_la-INTEGER.Plo
+#      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_la-INTEGER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_la-INTEGER_oer.lo: INTEGER_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Plo
+#      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_la-INTEGER_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_la-ISO646String.lo: ISO646String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ISO646String.Tpo -c -o libasn1cskeletons_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_la-ISO646String.Plo
+#      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_la-ISO646String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_la-NULL.lo: NULL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NULL.Tpo -c -o libasn1cskeletons_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_la-NULL.Plo
+#      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_la-NULL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_la-NativeEnumerated.lo: NativeEnumerated.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Plo
+#      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_la-NativeEnumerated.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Plo
+#      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_la-NativeEnumerated_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_la-NativeInteger.lo: NativeInteger.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Tpo -c -o libasn1cskeletons_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Plo
+#      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_la-NativeInteger.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_la-NativeInteger_oer.lo: NativeInteger_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Plo
+#      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_la-NativeInteger_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_la-NativeReal.lo: NativeReal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeReal.Tpo -c -o libasn1cskeletons_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeReal.Plo
+#      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_la-NativeReal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_la-NumericString.lo: NumericString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NumericString.Tpo -c -o libasn1cskeletons_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_la-NumericString.Plo
+#      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_la-NumericString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo
+#      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_la-OBJECT_IDENTIFIER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_la-OCTET_STRING.lo: OCTET_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Plo
+#      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_la-OCTET_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Plo
+#      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_la-OCTET_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_la-OPEN_TYPE.lo: OPEN_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Plo
+#      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_la-OPEN_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Plo
+#      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_la-OPEN_TYPE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_la-ObjectDescriptor.lo: ObjectDescriptor.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Plo
+#      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_la-ObjectDescriptor.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_la-PrintableString.lo: PrintableString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-PrintableString.Tpo -c -o libasn1cskeletons_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_la-PrintableString.Plo
+#      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_la-PrintableString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_la-REAL.lo: REAL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-REAL.Tpo -c -o libasn1cskeletons_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_la-REAL.Plo
+#      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_la-REAL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_la-RELATIVE-OID.lo: RELATIVE-OID.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Plo
+#      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_la-RELATIVE-OID.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_la-T61String.lo: T61String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-T61String.Tpo -c -o libasn1cskeletons_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_la-T61String.Plo
+#      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_la-T61String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_la-TeletexString.lo: TeletexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-TeletexString.Tpo -c -o libasn1cskeletons_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_la-TeletexString.Plo
+#      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_la-TeletexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_la-UTCTime.lo: UTCTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UTCTime.Tpo -c -o libasn1cskeletons_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_la-UTCTime.Plo
+#      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_la-UTCTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_la-UTF8String.lo: UTF8String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UTF8String.Tpo -c -o libasn1cskeletons_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_la-UTF8String.Plo
+#      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_la-UTF8String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_la-UniversalString.lo: UniversalString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UniversalString.Tpo -c -o libasn1cskeletons_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_la-UniversalString.Plo
+#      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_la-UniversalString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_la-VideotexString.lo: VideotexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-VideotexString.Tpo -c -o libasn1cskeletons_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_la-VideotexString.Plo
+#      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_la-VideotexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_la-VisibleString.lo: VisibleString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-VisibleString.Tpo -c -o libasn1cskeletons_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_la-VisibleString.Plo
+#      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_la-VisibleString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_la-asn_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_la-asn_SET_OF.lo: asn_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Plo
+#      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_la-asn_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_la-asn_application.lo: asn_application.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_application.Tpo -c -o libasn1cskeletons_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_application.Plo
+#      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_la-asn_application.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_la-asn_codecs_prim.lo: asn_codecs_prim.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Plo
+#      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_la-asn_codecs_prim.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_la-asn_internal.lo: asn_internal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_internal.Tpo -c -o libasn1cskeletons_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_internal.Plo
+#      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_la-asn_internal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_la-asn_bit_data.lo: asn_bit_data.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Tpo -c -o libasn1cskeletons_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Plo
+#      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_la-asn_bit_data.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_la-asn_random_fill.lo: asn_random_fill.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Tpo -c -o libasn1cskeletons_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Plo
+#      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_la-asn_random_fill.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_la-ber_decoder.lo: ber_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Tpo -c -o libasn1cskeletons_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Plo
+#      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_la-ber_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_la-ber_tlv_length.lo: ber_tlv_length.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Plo
+#      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_la-ber_tlv_length.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_la-ber_tlv_tag.lo: ber_tlv_tag.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Plo
+#      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_la-ber_tlv_tag.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_la-constr_CHOICE.lo: constr_CHOICE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Plo
+#      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_la-constr_CHOICE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Plo
+#      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_la-constr_CHOICE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_la-constr_SEQUENCE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_la-constr_SEQUENCE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_la-constr_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_la-constr_SET.lo: constr_SET.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET.Tpo -c -o libasn1cskeletons_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET.Plo
+#      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_la-constr_SET.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_la-constr_SET_OF.lo: constr_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Plo
+#      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_la-constr_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Plo
+#      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_la-constr_SET_OF_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_la-constr_TYPE.lo: constr_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Tpo -c -o libasn1cskeletons_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Plo
+#      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_la-constr_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_la-constraints.lo: constraints.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constraints.Tpo -c -o libasn1cskeletons_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_la-constraints.Plo
+#      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_la-constraints.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_la-der_encoder.lo: der_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-der_encoder.Tpo -c -o libasn1cskeletons_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-der_encoder.Plo
+#      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_la-der_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_la-oer_decoder.lo: oer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Tpo -c -o libasn1cskeletons_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Plo
+#      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_la-oer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_la-oer_encoder.lo: oer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Tpo -c -o libasn1cskeletons_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Plo
+#      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_la-oer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_la-oer_support.lo: oer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_support.Tpo -c -o libasn1cskeletons_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_support.Plo
+#      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_la-oer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_la-per_decoder.lo: per_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_decoder.Tpo -c -o libasn1cskeletons_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-per_decoder.Plo
+#      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_la-per_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_la-per_encoder.lo: per_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_encoder.Tpo -c -o libasn1cskeletons_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-per_encoder.Plo
+#      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_la-per_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_la-per_opentype.lo: per_opentype.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_opentype.Tpo -c -o libasn1cskeletons_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_la-per_opentype.Plo
+#      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_la-per_opentype.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_la-per_support.lo: per_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_support.Tpo -c -o libasn1cskeletons_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_la-per_support.Plo
+#      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_la-per_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_la-xer_decoder.lo: xer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Tpo -c -o libasn1cskeletons_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Plo
+#      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_la-xer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_la-xer_encoder.lo: xer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Tpo -c -o libasn1cskeletons_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Plo
+#      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_la-xer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_la-xer_support.lo: xer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_support.Tpo -c -o libasn1cskeletons_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_support.Plo
+#      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_la-xer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+libasn1cskeletons_c89_la-ANY.lo: ANY.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Tpo -c -o libasn1cskeletons_c89_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Plo
+#      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_c89_la-ANY.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_c89_la-BIT_STRING.lo: BIT_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Tpo -c -o libasn1cskeletons_c89_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Plo
+#      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_c89_la-BIT_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_c89_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_c89_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo
+#      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_c89_la-BIT_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_c89_la-BMPString.lo: BMPString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Tpo -c -o libasn1cskeletons_c89_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Plo
+#      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_c89_la-BMPString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_c89_la-BOOLEAN.lo: BOOLEAN.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Tpo -c -o libasn1cskeletons_c89_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Plo
+#      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_c89_la-BOOLEAN.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_c89_la-ENUMERATED.lo: ENUMERATED.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Tpo -c -o libasn1cskeletons_c89_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Plo
+#      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_c89_la-ENUMERATED.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_c89_la-GeneralString.lo: GeneralString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Tpo -c -o libasn1cskeletons_c89_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Plo
+#      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_c89_la-GeneralString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_c89_la-GeneralizedTime.lo: GeneralizedTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_c89_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Plo
+#      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_c89_la-GeneralizedTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_c89_la-GraphicString.lo: GraphicString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Tpo -c -o libasn1cskeletons_c89_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Plo
+#      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_c89_la-GraphicString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_c89_la-IA5String.lo: IA5String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Tpo -c -o libasn1cskeletons_c89_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Plo
+#      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_c89_la-IA5String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_c89_la-INTEGER.lo: INTEGER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Tpo -c -o libasn1cskeletons_c89_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Plo
+#      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_c89_la-INTEGER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_c89_la-INTEGER_oer.lo: INTEGER_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_c89_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Plo
+#      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_c89_la-INTEGER_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_c89_la-ISO646String.lo: ISO646String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Tpo -c -o libasn1cskeletons_c89_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Plo
+#      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_c89_la-ISO646String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_c89_la-NULL.lo: NULL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Tpo -c -o libasn1cskeletons_c89_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Plo
+#      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_c89_la-NULL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_c89_la-NativeEnumerated.lo: NativeEnumerated.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_c89_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Plo
+#      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_c89_la-NativeEnumerated.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_c89_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_c89_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo
+#      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_c89_la-NativeEnumerated_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_c89_la-NativeInteger.lo: NativeInteger.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Tpo -c -o libasn1cskeletons_c89_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Plo
+#      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_c89_la-NativeInteger.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_c89_la-NativeInteger_oer.lo: NativeInteger_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_c89_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Plo
+#      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_c89_la-NativeInteger_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_c89_la-NativeReal.lo: NativeReal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Tpo -c -o libasn1cskeletons_c89_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Plo
+#      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_c89_la-NativeReal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_c89_la-NumericString.lo: NumericString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Tpo -c -o libasn1cskeletons_c89_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Plo
+#      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_c89_la-NumericString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo
+#      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_c89_la-OCTET_STRING.lo: OCTET_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_c89_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Plo
+#      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_c89_la-OCTET_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_c89_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_c89_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo
+#      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_c89_la-OCTET_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_c89_la-OPEN_TYPE.lo: OPEN_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_c89_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Plo
+#      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_c89_la-OPEN_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo
+#      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_c89_la-ObjectDescriptor.lo: ObjectDescriptor.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_c89_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Plo
+#      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_c89_la-ObjectDescriptor.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_c89_la-PrintableString.lo: PrintableString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Tpo -c -o libasn1cskeletons_c89_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Plo
+#      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_c89_la-PrintableString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_c89_la-REAL.lo: REAL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Tpo -c -o libasn1cskeletons_c89_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Plo
+#      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_c89_la-REAL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_c89_la-RELATIVE-OID.lo: RELATIVE-OID.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_c89_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Plo
+#      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_c89_la-RELATIVE-OID.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_c89_la-T61String.lo: T61String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Tpo -c -o libasn1cskeletons_c89_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Plo
+#      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_c89_la-T61String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_c89_la-TeletexString.lo: TeletexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Tpo -c -o libasn1cskeletons_c89_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Plo
+#      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_c89_la-TeletexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_c89_la-UTCTime.lo: UTCTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Tpo -c -o libasn1cskeletons_c89_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Plo
+#      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_c89_la-UTCTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_c89_la-UTF8String.lo: UTF8String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Tpo -c -o libasn1cskeletons_c89_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Plo
+#      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_c89_la-UTF8String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_c89_la-UniversalString.lo: UniversalString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Tpo -c -o libasn1cskeletons_c89_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Plo
+#      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_c89_la-UniversalString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_c89_la-VideotexString.lo: VideotexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Tpo -c -o libasn1cskeletons_c89_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Plo
+#      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_c89_la-VideotexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_c89_la-VisibleString.lo: VisibleString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Tpo -c -o libasn1cskeletons_c89_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Plo
+#      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_c89_la-VisibleString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_la-asn_SET_OF.lo: asn_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_c89_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Plo
+#      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_c89_la-asn_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_c89_la-asn_application.lo: asn_application.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Tpo -c -o libasn1cskeletons_c89_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Plo
+#      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_c89_la-asn_application.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_c89_la-asn_codecs_prim.lo: asn_codecs_prim.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_c89_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Plo
+#      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_c89_la-asn_codecs_prim.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_c89_la-asn_internal.lo: asn_internal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Tpo -c -o libasn1cskeletons_c89_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Plo
+#      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_c89_la-asn_internal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_c89_la-asn_bit_data.lo: asn_bit_data.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Tpo -c -o libasn1cskeletons_c89_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Plo
+#      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_c89_la-asn_bit_data.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_c89_la-asn_random_fill.lo: asn_random_fill.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Tpo -c -o libasn1cskeletons_c89_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Plo
+#      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_c89_la-asn_random_fill.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_c89_la-ber_decoder.lo: ber_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Tpo -c -o libasn1cskeletons_c89_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Plo
+#      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_c89_la-ber_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_c89_la-ber_tlv_length.lo: ber_tlv_length.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_c89_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Plo
+#      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_c89_la-ber_tlv_length.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_c89_la-ber_tlv_tag.lo: ber_tlv_tag.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_c89_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Plo
+#      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_c89_la-ber_tlv_tag.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_c89_la-constr_CHOICE.lo: constr_CHOICE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_c89_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Plo
+#      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_c89_la-constr_CHOICE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_c89_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo
+#      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_c89_la-constr_CHOICE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_la-constr_SET.lo: constr_SET.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Tpo -c -o libasn1cskeletons_c89_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Plo
+#      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_c89_la-constr_SET.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_c89_la-constr_SET_OF.lo: constr_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_c89_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Plo
+#      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_c89_la-constr_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_c89_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo
+#      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_c89_la-constr_SET_OF_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_c89_la-constr_TYPE.lo: constr_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Tpo -c -o libasn1cskeletons_c89_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Plo
+#      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_c89_la-constr_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_c89_la-constraints.lo: constraints.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Tpo -c -o libasn1cskeletons_c89_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Plo
+#      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_c89_la-constraints.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_c89_la-der_encoder.lo: der_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Tpo -c -o libasn1cskeletons_c89_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Plo
+#      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_c89_la-der_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_c89_la-oer_decoder.lo: oer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Tpo -c -o libasn1cskeletons_c89_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Plo
+#      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_c89_la-oer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_c89_la-oer_encoder.lo: oer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Tpo -c -o libasn1cskeletons_c89_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Plo
+#      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_c89_la-oer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_c89_la-oer_support.lo: oer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Tpo -c -o libasn1cskeletons_c89_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Plo
+#      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_c89_la-oer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_c89_la-per_decoder.lo: per_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Tpo -c -o libasn1cskeletons_c89_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Plo
+#      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_c89_la-per_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_c89_la-per_encoder.lo: per_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Tpo -c -o libasn1cskeletons_c89_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Plo
+#      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_c89_la-per_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_c89_la-per_opentype.lo: per_opentype.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Tpo -c -o libasn1cskeletons_c89_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Plo
+#      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_c89_la-per_opentype.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_c89_la-per_support.lo: per_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Tpo -c -o libasn1cskeletons_c89_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Plo
+#      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_c89_la-per_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_c89_la-xer_decoder.lo: xer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Tpo -c -o libasn1cskeletons_c89_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Plo
+#      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_c89_la-xer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_c89_la-xer_encoder.lo: xer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Tpo -c -o libasn1cskeletons_c89_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Plo
+#      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_c89_la-xer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_c89_la-xer_support.lo: xer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Tpo -c -o libasn1cskeletons_c89_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Plo
+#      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_c89_la-xer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+libasn1cskeletons_c89_32_la-ANY.lo: ANY.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Tpo -c -o libasn1cskeletons_c89_32_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Plo
+#      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_c89_32_la-ANY.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_c89_32_la-BIT_STRING.lo: BIT_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Tpo -c -o libasn1cskeletons_c89_32_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Plo
+#      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_c89_32_la-BIT_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo
+#      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_c89_32_la-BMPString.lo: BMPString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Tpo -c -o libasn1cskeletons_c89_32_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Plo
+#      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_c89_32_la-BMPString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_c89_32_la-BOOLEAN.lo: BOOLEAN.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Tpo -c -o libasn1cskeletons_c89_32_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Plo
+#      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_c89_32_la-BOOLEAN.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_c89_32_la-ENUMERATED.lo: ENUMERATED.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Tpo -c -o libasn1cskeletons_c89_32_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Plo
+#      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_c89_32_la-ENUMERATED.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_c89_32_la-GeneralString.lo: GeneralString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Tpo -c -o libasn1cskeletons_c89_32_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Plo
+#      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_c89_32_la-GeneralString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_c89_32_la-GeneralizedTime.lo: GeneralizedTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_c89_32_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo
+#      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_c89_32_la-GeneralizedTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_c89_32_la-GraphicString.lo: GraphicString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Tpo -c -o libasn1cskeletons_c89_32_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Plo
+#      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_c89_32_la-GraphicString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_c89_32_la-IA5String.lo: IA5String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Tpo -c -o libasn1cskeletons_c89_32_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Plo
+#      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_c89_32_la-IA5String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_c89_32_la-INTEGER.lo: INTEGER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Tpo -c -o libasn1cskeletons_c89_32_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Plo
+#      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_c89_32_la-INTEGER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_c89_32_la-INTEGER_oer.lo: INTEGER_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_c89_32_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo
+#      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_c89_32_la-INTEGER_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_c89_32_la-ISO646String.lo: ISO646String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Tpo -c -o libasn1cskeletons_c89_32_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Plo
+#      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_c89_32_la-ISO646String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_c89_32_la-NULL.lo: NULL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Tpo -c -o libasn1cskeletons_c89_32_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Plo
+#      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_c89_32_la-NULL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_c89_32_la-NativeEnumerated.lo: NativeEnumerated.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_c89_32_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo
+#      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_c89_32_la-NativeEnumerated.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo
+#      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_c89_32_la-NativeInteger.lo: NativeInteger.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Tpo -c -o libasn1cskeletons_c89_32_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Plo
+#      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_c89_32_la-NativeInteger.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_c89_32_la-NativeInteger_oer.lo: NativeInteger_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_c89_32_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo
+#      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_c89_32_la-NativeInteger_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_c89_32_la-NativeReal.lo: NativeReal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Tpo -c -o libasn1cskeletons_c89_32_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Plo
+#      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_c89_32_la-NativeReal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_c89_32_la-NumericString.lo: NumericString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Tpo -c -o libasn1cskeletons_c89_32_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Plo
+#      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_c89_32_la-NumericString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo
+#      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_c89_32_la-OCTET_STRING.lo: OCTET_STRING.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_c89_32_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo
+#      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_c89_32_la-OCTET_STRING.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo
+#      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_c89_32_la-OPEN_TYPE.lo: OPEN_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo
+#      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_c89_32_la-OPEN_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo
+#      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_c89_32_la-ObjectDescriptor.lo: ObjectDescriptor.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_c89_32_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo
+#      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_c89_32_la-ObjectDescriptor.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_c89_32_la-PrintableString.lo: PrintableString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Tpo -c -o libasn1cskeletons_c89_32_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Plo
+#      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_c89_32_la-PrintableString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_c89_32_la-REAL.lo: REAL.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Tpo -c -o libasn1cskeletons_c89_32_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Plo
+#      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_c89_32_la-REAL.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_c89_32_la-RELATIVE-OID.lo: RELATIVE-OID.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_c89_32_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo
+#      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_c89_32_la-RELATIVE-OID.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_c89_32_la-T61String.lo: T61String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Tpo -c -o libasn1cskeletons_c89_32_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Plo
+#      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_c89_32_la-T61String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_c89_32_la-TeletexString.lo: TeletexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Tpo -c -o libasn1cskeletons_c89_32_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Plo
+#      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_c89_32_la-TeletexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_c89_32_la-UTCTime.lo: UTCTime.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Tpo -c -o libasn1cskeletons_c89_32_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Plo
+#      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_c89_32_la-UTCTime.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_c89_32_la-UTF8String.lo: UTF8String.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Tpo -c -o libasn1cskeletons_c89_32_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Plo
+#      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_c89_32_la-UTF8String.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_c89_32_la-UniversalString.lo: UniversalString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Tpo -c -o libasn1cskeletons_c89_32_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Plo
+#      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_c89_32_la-UniversalString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_c89_32_la-VideotexString.lo: VideotexString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Tpo -c -o libasn1cskeletons_c89_32_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Plo
+#      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_c89_32_la-VideotexString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_c89_32_la-VisibleString.lo: VisibleString.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Tpo -c -o libasn1cskeletons_c89_32_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Plo
+#      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_c89_32_la-VisibleString.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_32_la-asn_SET_OF.lo: asn_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_c89_32_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo
+#      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_c89_32_la-asn_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_c89_32_la-asn_application.lo: asn_application.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Tpo -c -o libasn1cskeletons_c89_32_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Plo
+#      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_c89_32_la-asn_application.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_c89_32_la-asn_codecs_prim.lo: asn_codecs_prim.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_c89_32_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo
+#      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_c89_32_la-asn_codecs_prim.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_c89_32_la-asn_internal.lo: asn_internal.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Tpo -c -o libasn1cskeletons_c89_32_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Plo
+#      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_c89_32_la-asn_internal.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_c89_32_la-asn_bit_data.lo: asn_bit_data.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Tpo -c -o libasn1cskeletons_c89_32_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Plo
+#      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_c89_32_la-asn_bit_data.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_c89_32_la-asn_random_fill.lo: asn_random_fill.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Tpo -c -o libasn1cskeletons_c89_32_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Plo
+#      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_c89_32_la-asn_random_fill.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_c89_32_la-ber_decoder.lo: ber_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Plo
+#      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_c89_32_la-ber_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_c89_32_la-ber_tlv_length.lo: ber_tlv_length.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_c89_32_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo
+#      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_c89_32_la-ber_tlv_length.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_c89_32_la-ber_tlv_tag.lo: ber_tlv_tag.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_c89_32_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo
+#      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_c89_32_la-ber_tlv_tag.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_c89_32_la-constr_CHOICE.lo: constr_CHOICE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo
+#      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_c89_32_la-constr_CHOICE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo
+#      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo
+#      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_32_la-constr_SET.lo: constr_SET.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Plo
+#      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_c89_32_la-constr_SET.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_c89_32_la-constr_SET_OF.lo: constr_SET_OF.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo
+#      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_c89_32_la-constr_SET_OF.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo
+#      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_c89_32_la-constr_TYPE.lo: constr_TYPE.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Plo
+#      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_c89_32_la-constr_TYPE.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_c89_32_la-constraints.lo: constraints.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Tpo -c -o libasn1cskeletons_c89_32_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Plo
+#      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_c89_32_la-constraints.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_c89_32_la-der_encoder.lo: der_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Plo
+#      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_c89_32_la-der_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_c89_32_la-oer_decoder.lo: oer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Plo
+#      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_c89_32_la-oer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_c89_32_la-oer_encoder.lo: oer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Plo
+#      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_c89_32_la-oer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_c89_32_la-oer_support.lo: oer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Tpo -c -o libasn1cskeletons_c89_32_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Plo
+#      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_c89_32_la-oer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_c89_32_la-per_decoder.lo: per_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Plo
+#      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_c89_32_la-per_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_c89_32_la-per_encoder.lo: per_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Plo
+#      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_c89_32_la-per_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_c89_32_la-per_opentype.lo: per_opentype.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Tpo -c -o libasn1cskeletons_c89_32_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Plo
+#      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_c89_32_la-per_opentype.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_c89_32_la-per_support.lo: per_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Tpo -c -o libasn1cskeletons_c89_32_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Plo
+#      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_c89_32_la-per_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_c89_32_la-xer_decoder.lo: xer_decoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Plo
+#      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_c89_32_la-xer_decoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_c89_32_la-xer_encoder.lo: xer_encoder.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Plo
+#      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_c89_32_la-xer_encoder.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_c89_32_la-xer_support.lo: xer_support.c
+       $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Tpo -c -o libasn1cskeletons_c89_32_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Plo
+#      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_c89_32_la-xer_support.lo' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+check_converter_c89_32_example-converter-example.o: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_32_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo -c -o check_converter_c89_32_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_32_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_32_example-converter-example.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_32_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_c89_32_example-converter-example.obj: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_32_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo -c -o check_converter_c89_32_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_32_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_32_example-converter-example.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_32_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+check_converter_c89_example-converter-example.o: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_c89_example-converter-example.Tpo -c -o check_converter_c89_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_example-converter-example.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_c89_example-converter-example.obj: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_c89_example-converter-example.Tpo -c -o check_converter_c89_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_example-converter-example.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+check_converter_example-converter-example.o: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -MT check_converter_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_example-converter-example.Tpo -c -o check_converter_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_example-converter-example.Tpo $(DEPDIR)/check_converter_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_example-converter-example.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -c -o check_converter_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_example-converter-example.obj: converter-example.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -MT check_converter_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_example-converter-example.Tpo -c -o check_converter_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_example-converter-example.Tpo $(DEPDIR)/check_converter_example-converter-example.Po
+#      $(AM_V_CC)source='converter-example.c' object='check_converter_example-converter-example.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -c -o check_converter_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || 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)$(pkgdatadir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+       done
+
+uninstall-dist_pkgdataDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+install-nobase_dist_smodsDATA: $(nobase_dist_smods_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nobase_dist_smods_DATA)'; test -n "$(smodsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(smodsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(smodsdir)" || exit 1; \
+       fi; \
+       $(am__nobase_list) | while read dir files; do \
+         xfiles=; for file in $$files; do \
+           if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+           else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+         test -z "$$xfiles" || { \
+           test "x$$dir" = x. || { \
+             echo " $(MKDIR_P) '$(DESTDIR)$(smodsdir)/$$dir'"; \
+             $(MKDIR_P) "$(DESTDIR)$(smodsdir)/$$dir"; }; \
+           echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(smodsdir)/$$dir'"; \
+           $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(smodsdir)/$$dir" || exit $$?; }; \
+       done
+
+uninstall-nobase_dist_smodsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nobase_dist_smods_DATA)'; test -n "$(smodsdir)" || list=; \
+       $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+       dir='$(DESTDIR)$(smodsdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(smodsdir)"; 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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA \
+       install-nobase_dist_smodsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_pkgdataDATA uninstall-local \
+       uninstall-nobase_dist_smodsDATA
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+       clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_pkgdataDATA install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man \
+       install-nobase_dist_smodsDATA install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-dist_pkgdataDATA \
+       uninstall-local uninstall-nobase_dist_smodsDATA
+
+.PRECIOUS: Makefile
+
+
+uninstall-local:
+       -@echo -n " "
+       -rm -f -r $(DESTDIR)$(pkgdatadir)
+
+# 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:
diff --git a/skeletons/Makefile.am b/skeletons/Makefile.am
new file mode 100644 (file)
index 0000000..efc097d
--- /dev/null
@@ -0,0 +1,121 @@
+
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+
+dist_pkgdata_DATA =                            \
+               ${srcdir}/README                \
+               ${srcdir}/*.[ch]                \
+               ${srcdir}/file-dependencies
+
+smodsdir=$(pkgdatadir)
+
+nobase_dist_smods_DATA =     \
+       standard-modules/README  \
+       standard-modules/ASN1-Object-Identifier-Module.asn1 \
+       standard-modules/ASN1C-UsefulInformationObjectClasses.asn1
+
+
+uninstall-local:
+       -@echo -n " "
+       -rm -f -r $(DESTDIR)$(pkgdatadir)
+
+check_LTLIBRARIES =             \
+    libasn1cskeletons.la        \
+    libasn1cskeletons_c89.la
+
+libasn1cskeletons_c89_la_CFLAGS = $(SKELETONS_CFLAGS)
+libasn1cskeletons_c89_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+
+libasn1cskeletons_la_CFLAGS = $(TESTSUITE_CFLAGS)
+libasn1cskeletons_la_SOURCES =                  \
+    ANY.c ANY.h                                 \
+    BIT_STRING.c BIT_STRING.h                   \
+    BIT_STRING_oer.c                            \
+    BMPString.c BMPString.h                     \
+    BOOLEAN.c BOOLEAN.h                         \
+    ENUMERATED.c ENUMERATED.h                   \
+    GeneralString.c GeneralString.h             \
+    GeneralizedTime.c GeneralizedTime.h         \
+    GraphicString.c GraphicString.h             \
+    IA5String.c IA5String.h                     \
+    INTEGER.c INTEGER.h                         \
+    INTEGER_oer.c                               \
+    ISO646String.c ISO646String.h               \
+    NULL.c NULL.h                               \
+    NativeEnumerated.c NativeEnumerated.h       \
+    NativeEnumerated_oer.c                      \
+    NativeInteger.c NativeInteger.h             \
+    NativeInteger_oer.c                         \
+    NativeReal.c NativeReal.h                   \
+    NumericString.c NumericString.h             \
+    OBJECT_IDENTIFIER.c OBJECT_IDENTIFIER.h     \
+    OCTET_STRING.c OCTET_STRING.h               \
+    OCTET_STRING_oer.c                          \
+    OPEN_TYPE.c OPEN_TYPE.h OPEN_TYPE_oer.c     \
+    ObjectDescriptor.c ObjectDescriptor.h       \
+    PrintableString.c PrintableString.h         \
+    REAL.c REAL.h                               \
+    RELATIVE-OID.c RELATIVE-OID.h               \
+    T61String.c T61String.h                     \
+    TeletexString.c TeletexString.h             \
+    UTCTime.c UTCTime.h                         \
+    UTF8String.c UTF8String.h                   \
+    UniversalString.c UniversalString.h         \
+    VideotexString.c VideotexString.h           \
+    VisibleString.c VisibleString.h             \
+    asn_SEQUENCE_OF.c asn_SEQUENCE_OF.h         \
+    asn_SET_OF.c asn_SET_OF.h                   \
+    asn_application.c asn_application.h         \
+    asn_system.h asn_codecs.h                   \
+    asn_codecs_prim.c asn_codecs_prim.h         \
+    asn_internal.h asn_internal.c               \
+    asn_bit_data.c asn_bit_data.h               \
+    asn_random_fill.c asn_random_fill.h         \
+    ber_decoder.c ber_decoder.h                 \
+    ber_tlv_length.c ber_tlv_length.h           \
+    ber_tlv_tag.c ber_tlv_tag.h                 \
+    constr_CHOICE.c constr_CHOICE.h             \
+    constr_CHOICE_oer.c                         \
+    constr_SEQUENCE.c constr_SEQUENCE.h         \
+    constr_SEQUENCE_oer.c                       \
+    constr_SEQUENCE_OF.c constr_SEQUENCE_OF.h   \
+    constr_SET.c constr_SET.h                   \
+    constr_SET_OF.c constr_SET_OF.h             \
+    constr_SET_OF_oer.c                         \
+    constr_TYPE.c constr_TYPE.h                 \
+    constraints.c constraints.h                 \
+    der_encoder.c der_encoder.h                 \
+    oer_decoder.c oer_decoder.h                 \
+    oer_encoder.c oer_encoder.h                 \
+    oer_support.c oer_support.h                 \
+    per_decoder.c per_decoder.h                 \
+    per_encoder.c per_encoder.h                 \
+    per_opentype.c per_opentype.h               \
+    per_support.c per_support.h                 \
+    xer_decoder.c xer_decoder.h                 \
+    xer_encoder.c xer_encoder.h                 \
+    xer_support.c xer_support.h
+
+check_PROGRAMS =                    \
+    check-converter_example         \
+    check-converter_c89_example
+LDADD = -lm
+
+check_converter_example_CFLAGS = $(TESTSUITE_CFLAGS) -DNO_ASN_PDU
+check_converter_example_SOURCES = converter-example.c
+check_converter_example_LDADD = libasn1cskeletons.la
+
+check_converter_c89_example_CFLAGS = $(SKELETON_CFLAGS) -DNO_ASN_PDU
+check_converter_c89_example_SOURCES = converter-example.c
+check_converter_c89_example_LDADD = libasn1cskeletons_c89.la
+
+if EXPLICIT_M32
+check_LTLIBRARIES += libasn1cskeletons_c89_32.la
+libasn1cskeletons_c89_32_la_CFLAGS = $(CFLAGS_M32) -Wno-format
+libasn1cskeletons_c89_32_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+
+check_PROGRAMS += check-converter_c89_32_example
+check_converter_c89_32_example_CFLAGS = $(CFLAGS_M32) -DNO_ASN_PDU
+check_converter_c89_32_example_SOURCES = converter-example.c
+check_converter_c89_32_example_LDADD = libasn1cskeletons_c89_32.la
+endif
+
diff --git a/skeletons/Makefile.in b/skeletons/Makefile.in
new file mode 100644 (file)
index 0000000..bac3645
--- /dev/null
@@ -0,0 +1,2776 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+check_PROGRAMS = check-converter_example$(EXEEXT) \
+       check-converter_c89_example$(EXEEXT) $(am__EXEEXT_1)
+@EXPLICIT_M32_TRUE@am__append_1 = libasn1cskeletons_c89_32.la
+@EXPLICIT_M32_TRUE@am__append_2 = check-converter_c89_32_example
+subdir = skeletons
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_pkgdata_DATA) \
+       $(nobase_dist_smods_DATA) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+libasn1cskeletons_la_LIBADD =
+am_libasn1cskeletons_la_OBJECTS = libasn1cskeletons_la-ANY.lo \
+       libasn1cskeletons_la-BIT_STRING.lo \
+       libasn1cskeletons_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_la-BMPString.lo \
+       libasn1cskeletons_la-BOOLEAN.lo \
+       libasn1cskeletons_la-ENUMERATED.lo \
+       libasn1cskeletons_la-GeneralString.lo \
+       libasn1cskeletons_la-GeneralizedTime.lo \
+       libasn1cskeletons_la-GraphicString.lo \
+       libasn1cskeletons_la-IA5String.lo \
+       libasn1cskeletons_la-INTEGER.lo \
+       libasn1cskeletons_la-INTEGER_oer.lo \
+       libasn1cskeletons_la-ISO646String.lo \
+       libasn1cskeletons_la-NULL.lo \
+       libasn1cskeletons_la-NativeEnumerated.lo \
+       libasn1cskeletons_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_la-NativeInteger.lo \
+       libasn1cskeletons_la-NativeInteger_oer.lo \
+       libasn1cskeletons_la-NativeReal.lo \
+       libasn1cskeletons_la-NumericString.lo \
+       libasn1cskeletons_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_la-OCTET_STRING.lo \
+       libasn1cskeletons_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_la-OPEN_TYPE.lo \
+       libasn1cskeletons_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_la-ObjectDescriptor.lo \
+       libasn1cskeletons_la-PrintableString.lo \
+       libasn1cskeletons_la-REAL.lo \
+       libasn1cskeletons_la-RELATIVE-OID.lo \
+       libasn1cskeletons_la-T61String.lo \
+       libasn1cskeletons_la-TeletexString.lo \
+       libasn1cskeletons_la-UTCTime.lo \
+       libasn1cskeletons_la-UTF8String.lo \
+       libasn1cskeletons_la-UniversalString.lo \
+       libasn1cskeletons_la-VideotexString.lo \
+       libasn1cskeletons_la-VisibleString.lo \
+       libasn1cskeletons_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_la-asn_SET_OF.lo \
+       libasn1cskeletons_la-asn_application.lo \
+       libasn1cskeletons_la-asn_codecs_prim.lo \
+       libasn1cskeletons_la-asn_internal.lo \
+       libasn1cskeletons_la-asn_bit_data.lo \
+       libasn1cskeletons_la-asn_random_fill.lo \
+       libasn1cskeletons_la-ber_decoder.lo \
+       libasn1cskeletons_la-ber_tlv_length.lo \
+       libasn1cskeletons_la-ber_tlv_tag.lo \
+       libasn1cskeletons_la-constr_CHOICE.lo \
+       libasn1cskeletons_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_la-constr_SET.lo \
+       libasn1cskeletons_la-constr_SET_OF.lo \
+       libasn1cskeletons_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_la-constr_TYPE.lo \
+       libasn1cskeletons_la-constraints.lo \
+       libasn1cskeletons_la-der_encoder.lo \
+       libasn1cskeletons_la-oer_decoder.lo \
+       libasn1cskeletons_la-oer_encoder.lo \
+       libasn1cskeletons_la-oer_support.lo \
+       libasn1cskeletons_la-per_decoder.lo \
+       libasn1cskeletons_la-per_encoder.lo \
+       libasn1cskeletons_la-per_opentype.lo \
+       libasn1cskeletons_la-per_support.lo \
+       libasn1cskeletons_la-xer_decoder.lo \
+       libasn1cskeletons_la-xer_encoder.lo \
+       libasn1cskeletons_la-xer_support.lo
+libasn1cskeletons_la_OBJECTS = $(am_libasn1cskeletons_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libasn1cskeletons_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+libasn1cskeletons_c89_la_LIBADD =
+am__objects_1 = libasn1cskeletons_c89_la-ANY.lo \
+       libasn1cskeletons_c89_la-BIT_STRING.lo \
+       libasn1cskeletons_c89_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_c89_la-BMPString.lo \
+       libasn1cskeletons_c89_la-BOOLEAN.lo \
+       libasn1cskeletons_c89_la-ENUMERATED.lo \
+       libasn1cskeletons_c89_la-GeneralString.lo \
+       libasn1cskeletons_c89_la-GeneralizedTime.lo \
+       libasn1cskeletons_c89_la-GraphicString.lo \
+       libasn1cskeletons_c89_la-IA5String.lo \
+       libasn1cskeletons_c89_la-INTEGER.lo \
+       libasn1cskeletons_c89_la-INTEGER_oer.lo \
+       libasn1cskeletons_c89_la-ISO646String.lo \
+       libasn1cskeletons_c89_la-NULL.lo \
+       libasn1cskeletons_c89_la-NativeEnumerated.lo \
+       libasn1cskeletons_c89_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_c89_la-NativeInteger.lo \
+       libasn1cskeletons_c89_la-NativeInteger_oer.lo \
+       libasn1cskeletons_c89_la-NativeReal.lo \
+       libasn1cskeletons_c89_la-NumericString.lo \
+       libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_c89_la-OCTET_STRING.lo \
+       libasn1cskeletons_c89_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_c89_la-OPEN_TYPE.lo \
+       libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_c89_la-ObjectDescriptor.lo \
+       libasn1cskeletons_c89_la-PrintableString.lo \
+       libasn1cskeletons_c89_la-REAL.lo \
+       libasn1cskeletons_c89_la-RELATIVE-OID.lo \
+       libasn1cskeletons_c89_la-T61String.lo \
+       libasn1cskeletons_c89_la-TeletexString.lo \
+       libasn1cskeletons_c89_la-UTCTime.lo \
+       libasn1cskeletons_c89_la-UTF8String.lo \
+       libasn1cskeletons_c89_la-UniversalString.lo \
+       libasn1cskeletons_c89_la-VideotexString.lo \
+       libasn1cskeletons_c89_la-VisibleString.lo \
+       libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_la-asn_SET_OF.lo \
+       libasn1cskeletons_c89_la-asn_application.lo \
+       libasn1cskeletons_c89_la-asn_codecs_prim.lo \
+       libasn1cskeletons_c89_la-asn_internal.lo \
+       libasn1cskeletons_c89_la-asn_bit_data.lo \
+       libasn1cskeletons_c89_la-asn_random_fill.lo \
+       libasn1cskeletons_c89_la-ber_decoder.lo \
+       libasn1cskeletons_c89_la-ber_tlv_length.lo \
+       libasn1cskeletons_c89_la-ber_tlv_tag.lo \
+       libasn1cskeletons_c89_la-constr_CHOICE.lo \
+       libasn1cskeletons_c89_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_la-constr_SET.lo \
+       libasn1cskeletons_c89_la-constr_SET_OF.lo \
+       libasn1cskeletons_c89_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_c89_la-constr_TYPE.lo \
+       libasn1cskeletons_c89_la-constraints.lo \
+       libasn1cskeletons_c89_la-der_encoder.lo \
+       libasn1cskeletons_c89_la-oer_decoder.lo \
+       libasn1cskeletons_c89_la-oer_encoder.lo \
+       libasn1cskeletons_c89_la-oer_support.lo \
+       libasn1cskeletons_c89_la-per_decoder.lo \
+       libasn1cskeletons_c89_la-per_encoder.lo \
+       libasn1cskeletons_c89_la-per_opentype.lo \
+       libasn1cskeletons_c89_la-per_support.lo \
+       libasn1cskeletons_c89_la-xer_decoder.lo \
+       libasn1cskeletons_c89_la-xer_encoder.lo \
+       libasn1cskeletons_c89_la-xer_support.lo
+am_libasn1cskeletons_c89_la_OBJECTS = $(am__objects_1)
+libasn1cskeletons_c89_la_OBJECTS =  \
+       $(am_libasn1cskeletons_c89_la_OBJECTS)
+libasn1cskeletons_c89_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+libasn1cskeletons_c89_32_la_LIBADD =
+am__libasn1cskeletons_c89_32_la_SOURCES_DIST = ANY.c ANY.h \
+       BIT_STRING.c BIT_STRING.h BIT_STRING_oer.c BMPString.c \
+       BMPString.h BOOLEAN.c BOOLEAN.h ENUMERATED.c ENUMERATED.h \
+       GeneralString.c GeneralString.h GeneralizedTime.c \
+       GeneralizedTime.h GraphicString.c GraphicString.h IA5String.c \
+       IA5String.h INTEGER.c INTEGER.h INTEGER_oer.c ISO646String.c \
+       ISO646String.h NULL.c NULL.h NativeEnumerated.c \
+       NativeEnumerated.h NativeEnumerated_oer.c NativeInteger.c \
+       NativeInteger.h NativeInteger_oer.c NativeReal.c NativeReal.h \
+       NumericString.c NumericString.h OBJECT_IDENTIFIER.c \
+       OBJECT_IDENTIFIER.h OCTET_STRING.c OCTET_STRING.h \
+       OCTET_STRING_oer.c OPEN_TYPE.c OPEN_TYPE.h OPEN_TYPE_oer.c \
+       ObjectDescriptor.c ObjectDescriptor.h PrintableString.c \
+       PrintableString.h REAL.c REAL.h RELATIVE-OID.c RELATIVE-OID.h \
+       T61String.c T61String.h TeletexString.c TeletexString.h \
+       UTCTime.c UTCTime.h UTF8String.c UTF8String.h \
+       UniversalString.c UniversalString.h VideotexString.c \
+       VideotexString.h VisibleString.c VisibleString.h \
+       asn_SEQUENCE_OF.c asn_SEQUENCE_OF.h asn_SET_OF.c asn_SET_OF.h \
+       asn_application.c asn_application.h asn_system.h asn_codecs.h \
+       asn_codecs_prim.c asn_codecs_prim.h asn_internal.h \
+       asn_internal.c asn_bit_data.c asn_bit_data.h asn_random_fill.c \
+       asn_random_fill.h ber_decoder.c ber_decoder.h ber_tlv_length.c \
+       ber_tlv_length.h ber_tlv_tag.c ber_tlv_tag.h constr_CHOICE.c \
+       constr_CHOICE.h constr_CHOICE_oer.c constr_SEQUENCE.c \
+       constr_SEQUENCE.h constr_SEQUENCE_oer.c constr_SEQUENCE_OF.c \
+       constr_SEQUENCE_OF.h constr_SET.c constr_SET.h constr_SET_OF.c \
+       constr_SET_OF.h constr_SET_OF_oer.c constr_TYPE.c \
+       constr_TYPE.h constraints.c constraints.h der_encoder.c \
+       der_encoder.h oer_decoder.c oer_decoder.h oer_encoder.c \
+       oer_encoder.h oer_support.c oer_support.h per_decoder.c \
+       per_decoder.h per_encoder.c per_encoder.h per_opentype.c \
+       per_opentype.h per_support.c per_support.h xer_decoder.c \
+       xer_decoder.h xer_encoder.c xer_encoder.h xer_support.c \
+       xer_support.h
+am__objects_2 = libasn1cskeletons_c89_32_la-ANY.lo \
+       libasn1cskeletons_c89_32_la-BIT_STRING.lo \
+       libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo \
+       libasn1cskeletons_c89_32_la-BMPString.lo \
+       libasn1cskeletons_c89_32_la-BOOLEAN.lo \
+       libasn1cskeletons_c89_32_la-ENUMERATED.lo \
+       libasn1cskeletons_c89_32_la-GeneralString.lo \
+       libasn1cskeletons_c89_32_la-GeneralizedTime.lo \
+       libasn1cskeletons_c89_32_la-GraphicString.lo \
+       libasn1cskeletons_c89_32_la-IA5String.lo \
+       libasn1cskeletons_c89_32_la-INTEGER.lo \
+       libasn1cskeletons_c89_32_la-INTEGER_oer.lo \
+       libasn1cskeletons_c89_32_la-ISO646String.lo \
+       libasn1cskeletons_c89_32_la-NULL.lo \
+       libasn1cskeletons_c89_32_la-NativeEnumerated.lo \
+       libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo \
+       libasn1cskeletons_c89_32_la-NativeInteger.lo \
+       libasn1cskeletons_c89_32_la-NativeInteger_oer.lo \
+       libasn1cskeletons_c89_32_la-NativeReal.lo \
+       libasn1cskeletons_c89_32_la-NumericString.lo \
+       libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo \
+       libasn1cskeletons_c89_32_la-OCTET_STRING.lo \
+       libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo \
+       libasn1cskeletons_c89_32_la-OPEN_TYPE.lo \
+       libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo \
+       libasn1cskeletons_c89_32_la-ObjectDescriptor.lo \
+       libasn1cskeletons_c89_32_la-PrintableString.lo \
+       libasn1cskeletons_c89_32_la-REAL.lo \
+       libasn1cskeletons_c89_32_la-RELATIVE-OID.lo \
+       libasn1cskeletons_c89_32_la-T61String.lo \
+       libasn1cskeletons_c89_32_la-TeletexString.lo \
+       libasn1cskeletons_c89_32_la-UTCTime.lo \
+       libasn1cskeletons_c89_32_la-UTF8String.lo \
+       libasn1cskeletons_c89_32_la-UniversalString.lo \
+       libasn1cskeletons_c89_32_la-VideotexString.lo \
+       libasn1cskeletons_c89_32_la-VisibleString.lo \
+       libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_32_la-asn_SET_OF.lo \
+       libasn1cskeletons_c89_32_la-asn_application.lo \
+       libasn1cskeletons_c89_32_la-asn_codecs_prim.lo \
+       libasn1cskeletons_c89_32_la-asn_internal.lo \
+       libasn1cskeletons_c89_32_la-asn_bit_data.lo \
+       libasn1cskeletons_c89_32_la-asn_random_fill.lo \
+       libasn1cskeletons_c89_32_la-ber_decoder.lo \
+       libasn1cskeletons_c89_32_la-ber_tlv_length.lo \
+       libasn1cskeletons_c89_32_la-ber_tlv_tag.lo \
+       libasn1cskeletons_c89_32_la-constr_CHOICE.lo \
+       libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo \
+       libasn1cskeletons_c89_32_la-constr_SET.lo \
+       libasn1cskeletons_c89_32_la-constr_SET_OF.lo \
+       libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo \
+       libasn1cskeletons_c89_32_la-constr_TYPE.lo \
+       libasn1cskeletons_c89_32_la-constraints.lo \
+       libasn1cskeletons_c89_32_la-der_encoder.lo \
+       libasn1cskeletons_c89_32_la-oer_decoder.lo \
+       libasn1cskeletons_c89_32_la-oer_encoder.lo \
+       libasn1cskeletons_c89_32_la-oer_support.lo \
+       libasn1cskeletons_c89_32_la-per_decoder.lo \
+       libasn1cskeletons_c89_32_la-per_encoder.lo \
+       libasn1cskeletons_c89_32_la-per_opentype.lo \
+       libasn1cskeletons_c89_32_la-per_support.lo \
+       libasn1cskeletons_c89_32_la-xer_decoder.lo \
+       libasn1cskeletons_c89_32_la-xer_encoder.lo \
+       libasn1cskeletons_c89_32_la-xer_support.lo
+@EXPLICIT_M32_TRUE@am_libasn1cskeletons_c89_32_la_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    $(am__objects_2)
+libasn1cskeletons_c89_32_la_OBJECTS =  \
+       $(am_libasn1cskeletons_c89_32_la_OBJECTS)
+libasn1cskeletons_c89_32_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+@EXPLICIT_M32_TRUE@am_libasn1cskeletons_c89_32_la_rpath =
+@EXPLICIT_M32_TRUE@am__EXEEXT_1 =  \
+@EXPLICIT_M32_TRUE@    check-converter_c89_32_example$(EXEEXT)
+am__check_converter_c89_32_example_SOURCES_DIST = converter-example.c
+@EXPLICIT_M32_TRUE@am_check_converter_c89_32_example_OBJECTS = check_converter_c89_32_example-converter-example.$(OBJEXT)
+check_converter_c89_32_example_OBJECTS =  \
+       $(am_check_converter_c89_32_example_OBJECTS)
+@EXPLICIT_M32_TRUE@check_converter_c89_32_example_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    libasn1cskeletons_c89_32.la
+check_converter_c89_32_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_check_converter_c89_example_OBJECTS =  \
+       check_converter_c89_example-converter-example.$(OBJEXT)
+check_converter_c89_example_OBJECTS =  \
+       $(am_check_converter_c89_example_OBJECTS)
+check_converter_c89_example_DEPENDENCIES = libasn1cskeletons_c89.la
+check_converter_c89_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_c89_example_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am_check_converter_example_OBJECTS =  \
+       check_converter_example-converter-example.$(OBJEXT)
+check_converter_example_OBJECTS =  \
+       $(am_check_converter_example_OBJECTS)
+check_converter_example_DEPENDENCIES = libasn1cskeletons.la
+check_converter_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_converter_example_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(libasn1cskeletons_la_SOURCES) \
+       $(libasn1cskeletons_c89_la_SOURCES) \
+       $(libasn1cskeletons_c89_32_la_SOURCES) \
+       $(check_converter_c89_32_example_SOURCES) \
+       $(check_converter_c89_example_SOURCES) \
+       $(check_converter_example_SOURCES)
+DIST_SOURCES = $(libasn1cskeletons_la_SOURCES) \
+       $(libasn1cskeletons_c89_la_SOURCES) \
+       $(am__libasn1cskeletons_c89_32_la_SOURCES_DIST) \
+       $(am__check_converter_c89_32_example_SOURCES_DIST) \
+       $(check_converter_c89_example_SOURCES) \
+       $(check_converter_example_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; }; \
+  }
+am__installdirs = "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(smodsdir)"
+DATA = $(dist_pkgdata_DATA) $(nobase_dist_smods_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_pkgdata_DATA = \
+               ${srcdir}/README                \
+               ${srcdir}/*.[ch]                \
+               ${srcdir}/file-dependencies
+
+smodsdir = $(pkgdatadir)
+nobase_dist_smods_DATA = \
+       standard-modules/README  \
+       standard-modules/ASN1-Object-Identifier-Module.asn1 \
+       standard-modules/ASN1C-UsefulInformationObjectClasses.asn1
+
+check_LTLIBRARIES = libasn1cskeletons.la libasn1cskeletons_c89.la \
+       $(am__append_1)
+libasn1cskeletons_c89_la_CFLAGS = $(SKELETONS_CFLAGS)
+libasn1cskeletons_c89_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+libasn1cskeletons_la_CFLAGS = $(TESTSUITE_CFLAGS)
+libasn1cskeletons_la_SOURCES = \
+    ANY.c ANY.h                                 \
+    BIT_STRING.c BIT_STRING.h                   \
+    BIT_STRING_oer.c                            \
+    BMPString.c BMPString.h                     \
+    BOOLEAN.c BOOLEAN.h                         \
+    ENUMERATED.c ENUMERATED.h                   \
+    GeneralString.c GeneralString.h             \
+    GeneralizedTime.c GeneralizedTime.h         \
+    GraphicString.c GraphicString.h             \
+    IA5String.c IA5String.h                     \
+    INTEGER.c INTEGER.h                         \
+    INTEGER_oer.c                               \
+    ISO646String.c ISO646String.h               \
+    NULL.c NULL.h                               \
+    NativeEnumerated.c NativeEnumerated.h       \
+    NativeEnumerated_oer.c                      \
+    NativeInteger.c NativeInteger.h             \
+    NativeInteger_oer.c                         \
+    NativeReal.c NativeReal.h                   \
+    NumericString.c NumericString.h             \
+    OBJECT_IDENTIFIER.c OBJECT_IDENTIFIER.h     \
+    OCTET_STRING.c OCTET_STRING.h               \
+    OCTET_STRING_oer.c                          \
+    OPEN_TYPE.c OPEN_TYPE.h OPEN_TYPE_oer.c     \
+    ObjectDescriptor.c ObjectDescriptor.h       \
+    PrintableString.c PrintableString.h         \
+    REAL.c REAL.h                               \
+    RELATIVE-OID.c RELATIVE-OID.h               \
+    T61String.c T61String.h                     \
+    TeletexString.c TeletexString.h             \
+    UTCTime.c UTCTime.h                         \
+    UTF8String.c UTF8String.h                   \
+    UniversalString.c UniversalString.h         \
+    VideotexString.c VideotexString.h           \
+    VisibleString.c VisibleString.h             \
+    asn_SEQUENCE_OF.c asn_SEQUENCE_OF.h         \
+    asn_SET_OF.c asn_SET_OF.h                   \
+    asn_application.c asn_application.h         \
+    asn_system.h asn_codecs.h                   \
+    asn_codecs_prim.c asn_codecs_prim.h         \
+    asn_internal.h asn_internal.c               \
+    asn_bit_data.c asn_bit_data.h               \
+    asn_random_fill.c asn_random_fill.h         \
+    ber_decoder.c ber_decoder.h                 \
+    ber_tlv_length.c ber_tlv_length.h           \
+    ber_tlv_tag.c ber_tlv_tag.h                 \
+    constr_CHOICE.c constr_CHOICE.h             \
+    constr_CHOICE_oer.c                         \
+    constr_SEQUENCE.c constr_SEQUENCE.h         \
+    constr_SEQUENCE_oer.c                       \
+    constr_SEQUENCE_OF.c constr_SEQUENCE_OF.h   \
+    constr_SET.c constr_SET.h                   \
+    constr_SET_OF.c constr_SET_OF.h             \
+    constr_SET_OF_oer.c                         \
+    constr_TYPE.c constr_TYPE.h                 \
+    constraints.c constraints.h                 \
+    der_encoder.c der_encoder.h                 \
+    oer_decoder.c oer_decoder.h                 \
+    oer_encoder.c oer_encoder.h                 \
+    oer_support.c oer_support.h                 \
+    per_decoder.c per_decoder.h                 \
+    per_encoder.c per_encoder.h                 \
+    per_opentype.c per_opentype.h               \
+    per_support.c per_support.h                 \
+    xer_decoder.c xer_decoder.h                 \
+    xer_encoder.c xer_encoder.h                 \
+    xer_support.c xer_support.h
+
+LDADD = -lm
+check_converter_example_CFLAGS = $(TESTSUITE_CFLAGS) -DNO_ASN_PDU
+check_converter_example_SOURCES = converter-example.c
+check_converter_example_LDADD = libasn1cskeletons.la
+check_converter_c89_example_CFLAGS = $(SKELETON_CFLAGS) -DNO_ASN_PDU
+check_converter_c89_example_SOURCES = converter-example.c
+check_converter_c89_example_LDADD = libasn1cskeletons_c89.la
+@EXPLICIT_M32_TRUE@libasn1cskeletons_c89_32_la_CFLAGS = $(CFLAGS_M32) -Wno-format
+@EXPLICIT_M32_TRUE@libasn1cskeletons_c89_32_la_SOURCES = $(libasn1cskeletons_la_SOURCES)
+@EXPLICIT_M32_TRUE@check_converter_c89_32_example_CFLAGS = $(CFLAGS_M32) -DNO_ASN_PDU
+@EXPLICIT_M32_TRUE@check_converter_c89_32_example_SOURCES = converter-example.c
+@EXPLICIT_M32_TRUE@check_converter_c89_32_example_LDADD = libasn1cskeletons_c89_32.la
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign skeletons/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign skeletons/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkLTLIBRARIES:
+       -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+       @list='$(check_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libasn1cskeletons.la: $(libasn1cskeletons_la_OBJECTS) $(libasn1cskeletons_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_la_LINK)  $(libasn1cskeletons_la_OBJECTS) $(libasn1cskeletons_la_LIBADD) $(LIBS)
+
+libasn1cskeletons_c89.la: $(libasn1cskeletons_c89_la_OBJECTS) $(libasn1cskeletons_c89_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_c89_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_c89_la_LINK)  $(libasn1cskeletons_c89_la_OBJECTS) $(libasn1cskeletons_c89_la_LIBADD) $(LIBS)
+
+libasn1cskeletons_c89_32.la: $(libasn1cskeletons_c89_32_la_OBJECTS) $(libasn1cskeletons_c89_32_la_DEPENDENCIES) $(EXTRA_libasn1cskeletons_c89_32_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libasn1cskeletons_c89_32_la_LINK) $(am_libasn1cskeletons_c89_32_la_rpath) $(libasn1cskeletons_c89_32_la_OBJECTS) $(libasn1cskeletons_c89_32_la_LIBADD) $(LIBS)
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check-converter_c89_32_example$(EXEEXT): $(check_converter_c89_32_example_OBJECTS) $(check_converter_c89_32_example_DEPENDENCIES) $(EXTRA_check_converter_c89_32_example_DEPENDENCIES) 
+       @rm -f check-converter_c89_32_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_c89_32_example_LINK) $(check_converter_c89_32_example_OBJECTS) $(check_converter_c89_32_example_LDADD) $(LIBS)
+
+check-converter_c89_example$(EXEEXT): $(check_converter_c89_example_OBJECTS) $(check_converter_c89_example_DEPENDENCIES) $(EXTRA_check_converter_c89_example_DEPENDENCIES) 
+       @rm -f check-converter_c89_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_c89_example_LINK) $(check_converter_c89_example_OBJECTS) $(check_converter_c89_example_LDADD) $(LIBS)
+
+check-converter_example$(EXEEXT): $(check_converter_example_OBJECTS) $(check_converter_example_DEPENDENCIES) $(EXTRA_check_converter_example_DEPENDENCIES) 
+       @rm -f check-converter_example$(EXEEXT)
+       $(AM_V_CCLD)$(check_converter_example_LINK) $(check_converter_example_OBJECTS) $(check_converter_example_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_converter_c89_32_example-converter-example.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_converter_c89_example-converter-example.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_converter_example-converter-example.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ANY.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NULL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-REAL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-T61String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-constraints.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-per_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ANY.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-BMPString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-GeneralString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-GraphicString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-IA5String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-INTEGER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ISO646String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NULL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NativeInteger.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NativeReal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-NumericString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-PrintableString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-REAL.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-T61String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-TeletexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-UTCTime.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-UTF8String.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-UniversalString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-VideotexString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-VisibleString.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_application.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_internal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ber_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SET.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-constraints.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-der_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-oer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-oer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-oer_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-per_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-per_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-per_opentype.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-per_support.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-xer_decoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-xer_encoder.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libasn1cskeletons_la-xer_support.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libasn1cskeletons_la-ANY.lo: ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ANY.Tpo -c -o libasn1cskeletons_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_la-ANY.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_la-ANY.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_la-BIT_STRING.lo: BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Tpo -c -o libasn1cskeletons_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_la-BIT_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_la-BIT_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-BIT_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_la-BIT_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_la-BMPString.lo: BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BMPString.Tpo -c -o libasn1cskeletons_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_la-BMPString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_la-BMPString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_la-BOOLEAN.lo: BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Tpo -c -o libasn1cskeletons_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_la-BOOLEAN.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_la-BOOLEAN.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_la-ENUMERATED.lo: ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Tpo -c -o libasn1cskeletons_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_la-ENUMERATED.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_la-ENUMERATED.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_la-GeneralString.lo: GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GeneralString.Tpo -c -o libasn1cskeletons_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_la-GeneralString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_la-GeneralString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_la-GeneralizedTime.lo: GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_la-GeneralizedTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_la-GeneralizedTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_la-GraphicString.lo: GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-GraphicString.Tpo -c -o libasn1cskeletons_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_la-GraphicString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_la-GraphicString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_la-IA5String.lo: IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-IA5String.Tpo -c -o libasn1cskeletons_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_la-IA5String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_la-IA5String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_la-INTEGER.lo: INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-INTEGER.Tpo -c -o libasn1cskeletons_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_la-INTEGER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_la-INTEGER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_la-INTEGER_oer.lo: INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-INTEGER_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_la-INTEGER_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_la-ISO646String.lo: ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ISO646String.Tpo -c -o libasn1cskeletons_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_la-ISO646String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_la-ISO646String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_la-NULL.lo: NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NULL.Tpo -c -o libasn1cskeletons_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_la-NULL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_la-NULL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_la-NativeEnumerated.lo: NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_la-NativeEnumerated.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeEnumerated_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_la-NativeEnumerated_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_la-NativeInteger.lo: NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Tpo -c -o libasn1cskeletons_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeInteger.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_la-NativeInteger.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_la-NativeInteger_oer.lo: NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeInteger_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_la-NativeInteger_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_la-NativeReal.lo: NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NativeReal.Tpo -c -o libasn1cskeletons_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_la-NativeReal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_la-NativeReal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_la-NumericString.lo: NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-NumericString.Tpo -c -o libasn1cskeletons_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_la-NumericString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_la-NumericString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_la-OBJECT_IDENTIFIER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_la-OBJECT_IDENTIFIER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_la-OCTET_STRING.lo: OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_la-OCTET_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-OCTET_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_la-OCTET_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_la-OPEN_TYPE.lo: OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_la-OPEN_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-OPEN_TYPE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_la-OPEN_TYPE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_la-ObjectDescriptor.lo: ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_la-ObjectDescriptor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_la-ObjectDescriptor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_la-PrintableString.lo: PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-PrintableString.Tpo -c -o libasn1cskeletons_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_la-PrintableString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_la-PrintableString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_la-REAL.lo: REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-REAL.Tpo -c -o libasn1cskeletons_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_la-REAL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_la-REAL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_la-RELATIVE-OID.lo: RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_la-RELATIVE-OID.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_la-RELATIVE-OID.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_la-T61String.lo: T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-T61String.Tpo -c -o libasn1cskeletons_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_la-T61String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_la-T61String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_la-TeletexString.lo: TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-TeletexString.Tpo -c -o libasn1cskeletons_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_la-TeletexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_la-TeletexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_la-UTCTime.lo: UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UTCTime.Tpo -c -o libasn1cskeletons_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_la-UTCTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_la-UTCTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_la-UTF8String.lo: UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UTF8String.Tpo -c -o libasn1cskeletons_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_la-UTF8String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_la-UTF8String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_la-UniversalString.lo: UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-UniversalString.Tpo -c -o libasn1cskeletons_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_la-UniversalString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_la-UniversalString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_la-VideotexString.lo: VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-VideotexString.Tpo -c -o libasn1cskeletons_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_la-VideotexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_la-VideotexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_la-VisibleString.lo: VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-VisibleString.Tpo -c -o libasn1cskeletons_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_la-VisibleString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_la-VisibleString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_la-asn_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_la-asn_SET_OF.lo: asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_la-asn_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_la-asn_application.lo: asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_application.Tpo -c -o libasn1cskeletons_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_application.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_la-asn_application.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_la-asn_codecs_prim.lo: asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_codecs_prim.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_la-asn_codecs_prim.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_la-asn_internal.lo: asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_internal.Tpo -c -o libasn1cskeletons_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_la-asn_internal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_la-asn_bit_data.lo: asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Tpo -c -o libasn1cskeletons_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_bit_data.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_la-asn_bit_data.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_la-asn_random_fill.lo: asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Tpo -c -o libasn1cskeletons_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_la-asn_random_fill.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_la-asn_random_fill.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_la-ber_decoder.lo: ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Tpo -c -o libasn1cskeletons_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_la-ber_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_la-ber_tlv_length.lo: ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_tlv_length.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_la-ber_tlv_length.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_la-ber_tlv_tag.lo: ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_la-ber_tlv_tag.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_la-ber_tlv_tag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_la-constr_CHOICE.lo: constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_la-constr_CHOICE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_CHOICE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_la-constr_CHOICE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_la-constr_SEQUENCE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_la-constr_SEQUENCE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_la-constr_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_la-constr_SET.lo: constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET.Tpo -c -o libasn1cskeletons_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_la-constr_SET.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_la-constr_SET_OF.lo: constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_la-constr_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_SET_OF_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_la-constr_SET_OF_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_la-constr_TYPE.lo: constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Tpo -c -o libasn1cskeletons_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_la-constr_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_la-constr_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_la-constraints.lo: constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-constraints.Tpo -c -o libasn1cskeletons_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_la-constraints.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_la-constraints.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_la-der_encoder.lo: der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-der_encoder.Tpo -c -o libasn1cskeletons_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-der_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_la-der_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_la-oer_decoder.lo: oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Tpo -c -o libasn1cskeletons_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_la-oer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_la-oer_encoder.lo: oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Tpo -c -o libasn1cskeletons_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_la-oer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_la-oer_support.lo: oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-oer_support.Tpo -c -o libasn1cskeletons_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_la-oer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_la-oer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_la-per_decoder.lo: per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_decoder.Tpo -c -o libasn1cskeletons_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-per_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_la-per_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_la-per_encoder.lo: per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_encoder.Tpo -c -o libasn1cskeletons_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-per_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_la-per_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_la-per_opentype.lo: per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_opentype.Tpo -c -o libasn1cskeletons_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_la-per_opentype.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_la-per_opentype.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_la-per_support.lo: per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-per_support.Tpo -c -o libasn1cskeletons_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_la-per_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_la-per_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_la-xer_decoder.lo: xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Tpo -c -o libasn1cskeletons_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_la-xer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_la-xer_encoder.lo: xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Tpo -c -o libasn1cskeletons_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_la-xer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_la-xer_support.lo: xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_la-xer_support.Tpo -c -o libasn1cskeletons_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_la-xer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_la-xer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+libasn1cskeletons_c89_la-ANY.lo: ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Tpo -c -o libasn1cskeletons_c89_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ANY.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_c89_la-ANY.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_c89_la-BIT_STRING.lo: BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Tpo -c -o libasn1cskeletons_c89_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_c89_la-BIT_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_c89_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_c89_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BIT_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_c89_la-BIT_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_c89_la-BMPString.lo: BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Tpo -c -o libasn1cskeletons_c89_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BMPString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_c89_la-BMPString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_c89_la-BOOLEAN.lo: BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Tpo -c -o libasn1cskeletons_c89_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-BOOLEAN.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_c89_la-BOOLEAN.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_c89_la-ENUMERATED.lo: ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Tpo -c -o libasn1cskeletons_c89_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ENUMERATED.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_c89_la-ENUMERATED.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_c89_la-GeneralString.lo: GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Tpo -c -o libasn1cskeletons_c89_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GeneralString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_c89_la-GeneralString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_c89_la-GeneralizedTime.lo: GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_c89_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GeneralizedTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_c89_la-GeneralizedTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_c89_la-GraphicString.lo: GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Tpo -c -o libasn1cskeletons_c89_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-GraphicString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_c89_la-GraphicString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_c89_la-IA5String.lo: IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Tpo -c -o libasn1cskeletons_c89_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-IA5String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_c89_la-IA5String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_c89_la-INTEGER.lo: INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Tpo -c -o libasn1cskeletons_c89_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_c89_la-INTEGER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_c89_la-INTEGER_oer.lo: INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_c89_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-INTEGER_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_c89_la-INTEGER_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_c89_la-ISO646String.lo: ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Tpo -c -o libasn1cskeletons_c89_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ISO646String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_c89_la-ISO646String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_c89_la-NULL.lo: NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Tpo -c -o libasn1cskeletons_c89_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NULL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_c89_la-NULL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_c89_la-NativeEnumerated.lo: NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_c89_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_c89_la-NativeEnumerated.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_c89_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_c89_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeEnumerated_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_c89_la-NativeEnumerated_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_c89_la-NativeInteger.lo: NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Tpo -c -o libasn1cskeletons_c89_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_c89_la-NativeInteger.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_c89_la-NativeInteger_oer.lo: NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_c89_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeInteger_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_c89_la-NativeInteger_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_c89_la-NativeReal.lo: NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Tpo -c -o libasn1cskeletons_c89_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NativeReal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_c89_la-NativeReal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_c89_la-NumericString.lo: NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Tpo -c -o libasn1cskeletons_c89_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-NumericString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_c89_la-NumericString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_c89_la-OCTET_STRING.lo: OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_c89_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_c89_la-OCTET_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_c89_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_c89_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OCTET_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_c89_la-OCTET_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_c89_la-OPEN_TYPE.lo: OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_c89_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_c89_la-OPEN_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-OPEN_TYPE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_c89_la-ObjectDescriptor.lo: ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_c89_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ObjectDescriptor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_c89_la-ObjectDescriptor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_c89_la-PrintableString.lo: PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Tpo -c -o libasn1cskeletons_c89_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-PrintableString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_c89_la-PrintableString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_c89_la-REAL.lo: REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Tpo -c -o libasn1cskeletons_c89_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-REAL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_c89_la-REAL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_c89_la-RELATIVE-OID.lo: RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_c89_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-RELATIVE-OID.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_c89_la-RELATIVE-OID.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_c89_la-T61String.lo: T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Tpo -c -o libasn1cskeletons_c89_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-T61String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_c89_la-T61String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_c89_la-TeletexString.lo: TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Tpo -c -o libasn1cskeletons_c89_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-TeletexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_c89_la-TeletexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_c89_la-UTCTime.lo: UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Tpo -c -o libasn1cskeletons_c89_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UTCTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_c89_la-UTCTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_c89_la-UTF8String.lo: UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Tpo -c -o libasn1cskeletons_c89_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UTF8String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_c89_la-UTF8String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_c89_la-UniversalString.lo: UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Tpo -c -o libasn1cskeletons_c89_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-UniversalString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_c89_la-UniversalString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_c89_la-VideotexString.lo: VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Tpo -c -o libasn1cskeletons_c89_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-VideotexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_c89_la-VideotexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_c89_la-VisibleString.lo: VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Tpo -c -o libasn1cskeletons_c89_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-VisibleString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_c89_la-VisibleString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_la-asn_SET_OF.lo: asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_c89_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_c89_la-asn_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_c89_la-asn_application.lo: asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Tpo -c -o libasn1cskeletons_c89_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_application.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_c89_la-asn_application.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_c89_la-asn_codecs_prim.lo: asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_c89_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_codecs_prim.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_c89_la-asn_codecs_prim.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_c89_la-asn_internal.lo: asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Tpo -c -o libasn1cskeletons_c89_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_c89_la-asn_internal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_c89_la-asn_bit_data.lo: asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Tpo -c -o libasn1cskeletons_c89_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_bit_data.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_c89_la-asn_bit_data.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_c89_la-asn_random_fill.lo: asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Tpo -c -o libasn1cskeletons_c89_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-asn_random_fill.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_c89_la-asn_random_fill.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_c89_la-ber_decoder.lo: ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Tpo -c -o libasn1cskeletons_c89_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_c89_la-ber_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_c89_la-ber_tlv_length.lo: ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_c89_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_length.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_c89_la-ber_tlv_length.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_c89_la-ber_tlv_tag.lo: ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_c89_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-ber_tlv_tag.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_c89_la-ber_tlv_tag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_c89_la-constr_CHOICE.lo: constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_c89_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_c89_la-constr_CHOICE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_c89_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_CHOICE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_c89_la-constr_CHOICE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_la-constr_SET.lo: constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Tpo -c -o libasn1cskeletons_c89_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_c89_la-constr_SET.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_c89_la-constr_SET_OF.lo: constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_c89_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_c89_la-constr_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_c89_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_c89_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_SET_OF_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_c89_la-constr_SET_OF_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_c89_la-constr_TYPE.lo: constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Tpo -c -o libasn1cskeletons_c89_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constr_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_c89_la-constr_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_c89_la-constraints.lo: constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Tpo -c -o libasn1cskeletons_c89_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-constraints.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_c89_la-constraints.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_c89_la-der_encoder.lo: der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Tpo -c -o libasn1cskeletons_c89_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-der_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_c89_la-der_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_c89_la-oer_decoder.lo: oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Tpo -c -o libasn1cskeletons_c89_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_c89_la-oer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_c89_la-oer_encoder.lo: oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Tpo -c -o libasn1cskeletons_c89_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_c89_la-oer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_c89_la-oer_support.lo: oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Tpo -c -o libasn1cskeletons_c89_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-oer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_c89_la-oer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_c89_la-per_decoder.lo: per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Tpo -c -o libasn1cskeletons_c89_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_c89_la-per_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_c89_la-per_encoder.lo: per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Tpo -c -o libasn1cskeletons_c89_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_c89_la-per_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_c89_la-per_opentype.lo: per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Tpo -c -o libasn1cskeletons_c89_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_opentype.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_c89_la-per_opentype.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_c89_la-per_support.lo: per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Tpo -c -o libasn1cskeletons_c89_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-per_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_c89_la-per_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_c89_la-xer_decoder.lo: xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Tpo -c -o libasn1cskeletons_c89_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_c89_la-xer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_c89_la-xer_encoder.lo: xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Tpo -c -o libasn1cskeletons_c89_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_c89_la-xer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_c89_la-xer_support.lo: xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Tpo -c -o libasn1cskeletons_c89_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_la-xer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_c89_la-xer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+libasn1cskeletons_c89_32_la-ANY.lo: ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ANY.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Tpo -c -o libasn1cskeletons_c89_32_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ANY.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ANY.c' object='libasn1cskeletons_c89_32_la-ANY.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ANY.lo `test -f 'ANY.c' || echo '$(srcdir)/'`ANY.c
+
+libasn1cskeletons_c89_32_la-BIT_STRING.lo: BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BIT_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Tpo -c -o libasn1cskeletons_c89_32_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING.c' object='libasn1cskeletons_c89_32_la-BIT_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BIT_STRING.lo `test -f 'BIT_STRING.c' || echo '$(srcdir)/'`BIT_STRING.c
+
+libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo: BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Tpo -c -o libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BIT_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BIT_STRING_oer.c' object='libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BIT_STRING_oer.lo `test -f 'BIT_STRING_oer.c' || echo '$(srcdir)/'`BIT_STRING_oer.c
+
+libasn1cskeletons_c89_32_la-BMPString.lo: BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BMPString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Tpo -c -o libasn1cskeletons_c89_32_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BMPString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BMPString.c' object='libasn1cskeletons_c89_32_la-BMPString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BMPString.lo `test -f 'BMPString.c' || echo '$(srcdir)/'`BMPString.c
+
+libasn1cskeletons_c89_32_la-BOOLEAN.lo: BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-BOOLEAN.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Tpo -c -o libasn1cskeletons_c89_32_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-BOOLEAN.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='BOOLEAN.c' object='libasn1cskeletons_c89_32_la-BOOLEAN.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-BOOLEAN.lo `test -f 'BOOLEAN.c' || echo '$(srcdir)/'`BOOLEAN.c
+
+libasn1cskeletons_c89_32_la-ENUMERATED.lo: ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ENUMERATED.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Tpo -c -o libasn1cskeletons_c89_32_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ENUMERATED.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ENUMERATED.c' object='libasn1cskeletons_c89_32_la-ENUMERATED.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ENUMERATED.lo `test -f 'ENUMERATED.c' || echo '$(srcdir)/'`ENUMERATED.c
+
+libasn1cskeletons_c89_32_la-GeneralString.lo: GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GeneralString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Tpo -c -o libasn1cskeletons_c89_32_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralString.c' object='libasn1cskeletons_c89_32_la-GeneralString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GeneralString.lo `test -f 'GeneralString.c' || echo '$(srcdir)/'`GeneralString.c
+
+libasn1cskeletons_c89_32_la-GeneralizedTime.lo: GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GeneralizedTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Tpo -c -o libasn1cskeletons_c89_32_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GeneralizedTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GeneralizedTime.c' object='libasn1cskeletons_c89_32_la-GeneralizedTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GeneralizedTime.lo `test -f 'GeneralizedTime.c' || echo '$(srcdir)/'`GeneralizedTime.c
+
+libasn1cskeletons_c89_32_la-GraphicString.lo: GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-GraphicString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Tpo -c -o libasn1cskeletons_c89_32_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-GraphicString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='GraphicString.c' object='libasn1cskeletons_c89_32_la-GraphicString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-GraphicString.lo `test -f 'GraphicString.c' || echo '$(srcdir)/'`GraphicString.c
+
+libasn1cskeletons_c89_32_la-IA5String.lo: IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-IA5String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Tpo -c -o libasn1cskeletons_c89_32_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-IA5String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='IA5String.c' object='libasn1cskeletons_c89_32_la-IA5String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-IA5String.lo `test -f 'IA5String.c' || echo '$(srcdir)/'`IA5String.c
+
+libasn1cskeletons_c89_32_la-INTEGER.lo: INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-INTEGER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Tpo -c -o libasn1cskeletons_c89_32_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER.c' object='libasn1cskeletons_c89_32_la-INTEGER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-INTEGER.lo `test -f 'INTEGER.c' || echo '$(srcdir)/'`INTEGER.c
+
+libasn1cskeletons_c89_32_la-INTEGER_oer.lo: INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-INTEGER_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Tpo -c -o libasn1cskeletons_c89_32_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-INTEGER_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='INTEGER_oer.c' object='libasn1cskeletons_c89_32_la-INTEGER_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-INTEGER_oer.lo `test -f 'INTEGER_oer.c' || echo '$(srcdir)/'`INTEGER_oer.c
+
+libasn1cskeletons_c89_32_la-ISO646String.lo: ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ISO646String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Tpo -c -o libasn1cskeletons_c89_32_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ISO646String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ISO646String.c' object='libasn1cskeletons_c89_32_la-ISO646String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ISO646String.lo `test -f 'ISO646String.c' || echo '$(srcdir)/'`ISO646String.c
+
+libasn1cskeletons_c89_32_la-NULL.lo: NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NULL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Tpo -c -o libasn1cskeletons_c89_32_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NULL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NULL.c' object='libasn1cskeletons_c89_32_la-NULL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NULL.lo `test -f 'NULL.c' || echo '$(srcdir)/'`NULL.c
+
+libasn1cskeletons_c89_32_la-NativeEnumerated.lo: NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeEnumerated.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Tpo -c -o libasn1cskeletons_c89_32_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated.c' object='libasn1cskeletons_c89_32_la-NativeEnumerated.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeEnumerated.lo `test -f 'NativeEnumerated.c' || echo '$(srcdir)/'`NativeEnumerated.c
+
+libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo: NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Tpo -c -o libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeEnumerated_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeEnumerated_oer.c' object='libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeEnumerated_oer.lo `test -f 'NativeEnumerated_oer.c' || echo '$(srcdir)/'`NativeEnumerated_oer.c
+
+libasn1cskeletons_c89_32_la-NativeInteger.lo: NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeInteger.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Tpo -c -o libasn1cskeletons_c89_32_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger.c' object='libasn1cskeletons_c89_32_la-NativeInteger.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeInteger.lo `test -f 'NativeInteger.c' || echo '$(srcdir)/'`NativeInteger.c
+
+libasn1cskeletons_c89_32_la-NativeInteger_oer.lo: NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeInteger_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Tpo -c -o libasn1cskeletons_c89_32_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeInteger_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeInteger_oer.c' object='libasn1cskeletons_c89_32_la-NativeInteger_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeInteger_oer.lo `test -f 'NativeInteger_oer.c' || echo '$(srcdir)/'`NativeInteger_oer.c
+
+libasn1cskeletons_c89_32_la-NativeReal.lo: NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NativeReal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Tpo -c -o libasn1cskeletons_c89_32_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NativeReal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NativeReal.c' object='libasn1cskeletons_c89_32_la-NativeReal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NativeReal.lo `test -f 'NativeReal.c' || echo '$(srcdir)/'`NativeReal.c
+
+libasn1cskeletons_c89_32_la-NumericString.lo: NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-NumericString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Tpo -c -o libasn1cskeletons_c89_32_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-NumericString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='NumericString.c' object='libasn1cskeletons_c89_32_la-NumericString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-NumericString.lo `test -f 'NumericString.c' || echo '$(srcdir)/'`NumericString.c
+
+libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo: OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Tpo -c -o libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OBJECT_IDENTIFIER.c' object='libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OBJECT_IDENTIFIER.lo `test -f 'OBJECT_IDENTIFIER.c' || echo '$(srcdir)/'`OBJECT_IDENTIFIER.c
+
+libasn1cskeletons_c89_32_la-OCTET_STRING.lo: OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OCTET_STRING.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Tpo -c -o libasn1cskeletons_c89_32_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING.c' object='libasn1cskeletons_c89_32_la-OCTET_STRING.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OCTET_STRING.lo `test -f 'OCTET_STRING.c' || echo '$(srcdir)/'`OCTET_STRING.c
+
+libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo: OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Tpo -c -o libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OCTET_STRING_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OCTET_STRING_oer.c' object='libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OCTET_STRING_oer.lo `test -f 'OCTET_STRING_oer.c' || echo '$(srcdir)/'`OCTET_STRING_oer.c
+
+libasn1cskeletons_c89_32_la-OPEN_TYPE.lo: OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OPEN_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Tpo -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE.c' object='libasn1cskeletons_c89_32_la-OPEN_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE.lo `test -f 'OPEN_TYPE.c' || echo '$(srcdir)/'`OPEN_TYPE.c
+
+libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo: OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='OPEN_TYPE_oer.c' object='libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-OPEN_TYPE_oer.lo `test -f 'OPEN_TYPE_oer.c' || echo '$(srcdir)/'`OPEN_TYPE_oer.c
+
+libasn1cskeletons_c89_32_la-ObjectDescriptor.lo: ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ObjectDescriptor.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Tpo -c -o libasn1cskeletons_c89_32_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ObjectDescriptor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ObjectDescriptor.c' object='libasn1cskeletons_c89_32_la-ObjectDescriptor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ObjectDescriptor.lo `test -f 'ObjectDescriptor.c' || echo '$(srcdir)/'`ObjectDescriptor.c
+
+libasn1cskeletons_c89_32_la-PrintableString.lo: PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-PrintableString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Tpo -c -o libasn1cskeletons_c89_32_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-PrintableString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='PrintableString.c' object='libasn1cskeletons_c89_32_la-PrintableString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-PrintableString.lo `test -f 'PrintableString.c' || echo '$(srcdir)/'`PrintableString.c
+
+libasn1cskeletons_c89_32_la-REAL.lo: REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-REAL.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Tpo -c -o libasn1cskeletons_c89_32_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-REAL.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='REAL.c' object='libasn1cskeletons_c89_32_la-REAL.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-REAL.lo `test -f 'REAL.c' || echo '$(srcdir)/'`REAL.c
+
+libasn1cskeletons_c89_32_la-RELATIVE-OID.lo: RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-RELATIVE-OID.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Tpo -c -o libasn1cskeletons_c89_32_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-RELATIVE-OID.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='RELATIVE-OID.c' object='libasn1cskeletons_c89_32_la-RELATIVE-OID.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-RELATIVE-OID.lo `test -f 'RELATIVE-OID.c' || echo '$(srcdir)/'`RELATIVE-OID.c
+
+libasn1cskeletons_c89_32_la-T61String.lo: T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-T61String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Tpo -c -o libasn1cskeletons_c89_32_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-T61String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='T61String.c' object='libasn1cskeletons_c89_32_la-T61String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-T61String.lo `test -f 'T61String.c' || echo '$(srcdir)/'`T61String.c
+
+libasn1cskeletons_c89_32_la-TeletexString.lo: TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-TeletexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Tpo -c -o libasn1cskeletons_c89_32_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-TeletexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='TeletexString.c' object='libasn1cskeletons_c89_32_la-TeletexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-TeletexString.lo `test -f 'TeletexString.c' || echo '$(srcdir)/'`TeletexString.c
+
+libasn1cskeletons_c89_32_la-UTCTime.lo: UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UTCTime.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Tpo -c -o libasn1cskeletons_c89_32_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UTCTime.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTCTime.c' object='libasn1cskeletons_c89_32_la-UTCTime.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UTCTime.lo `test -f 'UTCTime.c' || echo '$(srcdir)/'`UTCTime.c
+
+libasn1cskeletons_c89_32_la-UTF8String.lo: UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UTF8String.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Tpo -c -o libasn1cskeletons_c89_32_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UTF8String.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UTF8String.c' object='libasn1cskeletons_c89_32_la-UTF8String.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UTF8String.lo `test -f 'UTF8String.c' || echo '$(srcdir)/'`UTF8String.c
+
+libasn1cskeletons_c89_32_la-UniversalString.lo: UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-UniversalString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Tpo -c -o libasn1cskeletons_c89_32_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-UniversalString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='UniversalString.c' object='libasn1cskeletons_c89_32_la-UniversalString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-UniversalString.lo `test -f 'UniversalString.c' || echo '$(srcdir)/'`UniversalString.c
+
+libasn1cskeletons_c89_32_la-VideotexString.lo: VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-VideotexString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Tpo -c -o libasn1cskeletons_c89_32_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-VideotexString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VideotexString.c' object='libasn1cskeletons_c89_32_la-VideotexString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-VideotexString.lo `test -f 'VideotexString.c' || echo '$(srcdir)/'`VideotexString.c
+
+libasn1cskeletons_c89_32_la-VisibleString.lo: VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-VisibleString.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Tpo -c -o libasn1cskeletons_c89_32_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-VisibleString.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='VisibleString.c' object='libasn1cskeletons_c89_32_la-VisibleString.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-VisibleString.lo `test -f 'VisibleString.c' || echo '$(srcdir)/'`VisibleString.c
+
+libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo: asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SEQUENCE_OF.c' object='libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_SEQUENCE_OF.lo `test -f 'asn_SEQUENCE_OF.c' || echo '$(srcdir)/'`asn_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_32_la-asn_SET_OF.lo: asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Tpo -c -o libasn1cskeletons_c89_32_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_SET_OF.c' object='libasn1cskeletons_c89_32_la-asn_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_SET_OF.lo `test -f 'asn_SET_OF.c' || echo '$(srcdir)/'`asn_SET_OF.c
+
+libasn1cskeletons_c89_32_la-asn_application.lo: asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_application.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Tpo -c -o libasn1cskeletons_c89_32_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_application.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_application.c' object='libasn1cskeletons_c89_32_la-asn_application.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_application.lo `test -f 'asn_application.c' || echo '$(srcdir)/'`asn_application.c
+
+libasn1cskeletons_c89_32_la-asn_codecs_prim.lo: asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_codecs_prim.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Tpo -c -o libasn1cskeletons_c89_32_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_codecs_prim.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_codecs_prim.c' object='libasn1cskeletons_c89_32_la-asn_codecs_prim.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_codecs_prim.lo `test -f 'asn_codecs_prim.c' || echo '$(srcdir)/'`asn_codecs_prim.c
+
+libasn1cskeletons_c89_32_la-asn_internal.lo: asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_internal.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Tpo -c -o libasn1cskeletons_c89_32_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_internal.c' object='libasn1cskeletons_c89_32_la-asn_internal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_internal.lo `test -f 'asn_internal.c' || echo '$(srcdir)/'`asn_internal.c
+
+libasn1cskeletons_c89_32_la-asn_bit_data.lo: asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_bit_data.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Tpo -c -o libasn1cskeletons_c89_32_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_bit_data.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_bit_data.c' object='libasn1cskeletons_c89_32_la-asn_bit_data.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_bit_data.lo `test -f 'asn_bit_data.c' || echo '$(srcdir)/'`asn_bit_data.c
+
+libasn1cskeletons_c89_32_la-asn_random_fill.lo: asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-asn_random_fill.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Tpo -c -o libasn1cskeletons_c89_32_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-asn_random_fill.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='asn_random_fill.c' object='libasn1cskeletons_c89_32_la-asn_random_fill.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-asn_random_fill.lo `test -f 'asn_random_fill.c' || echo '$(srcdir)/'`asn_random_fill.c
+
+libasn1cskeletons_c89_32_la-ber_decoder.lo: ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_decoder.c' object='libasn1cskeletons_c89_32_la-ber_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_decoder.lo `test -f 'ber_decoder.c' || echo '$(srcdir)/'`ber_decoder.c
+
+libasn1cskeletons_c89_32_la-ber_tlv_length.lo: ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_tlv_length.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Tpo -c -o libasn1cskeletons_c89_32_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_length.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_length.c' object='libasn1cskeletons_c89_32_la-ber_tlv_length.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_tlv_length.lo `test -f 'ber_tlv_length.c' || echo '$(srcdir)/'`ber_tlv_length.c
+
+libasn1cskeletons_c89_32_la-ber_tlv_tag.lo: ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-ber_tlv_tag.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Tpo -c -o libasn1cskeletons_c89_32_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-ber_tlv_tag.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='ber_tlv_tag.c' object='libasn1cskeletons_c89_32_la-ber_tlv_tag.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-ber_tlv_tag.lo `test -f 'ber_tlv_tag.c' || echo '$(srcdir)/'`ber_tlv_tag.c
+
+libasn1cskeletons_c89_32_la-constr_CHOICE.lo: constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_CHOICE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE.c' object='libasn1cskeletons_c89_32_la-constr_CHOICE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_CHOICE.lo `test -f 'constr_CHOICE.c' || echo '$(srcdir)/'`constr_CHOICE.c
+
+libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo: constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_CHOICE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_CHOICE_oer.c' object='libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_CHOICE_oer.lo `test -f 'constr_CHOICE_oer.c' || echo '$(srcdir)/'`constr_CHOICE_oer.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo: constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE.lo `test -f 'constr_SEQUENCE.c' || echo '$(srcdir)/'`constr_SEQUENCE.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo: constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_oer.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_oer.lo `test -f 'constr_SEQUENCE_oer.c' || echo '$(srcdir)/'`constr_SEQUENCE_oer.c
+
+libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo: constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SEQUENCE_OF.c' object='libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SEQUENCE_OF.lo `test -f 'constr_SEQUENCE_OF.c' || echo '$(srcdir)/'`constr_SEQUENCE_OF.c
+
+libasn1cskeletons_c89_32_la-constr_SET.lo: constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET.c' object='libasn1cskeletons_c89_32_la-constr_SET.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET.lo `test -f 'constr_SET.c' || echo '$(srcdir)/'`constr_SET.c
+
+libasn1cskeletons_c89_32_la-constr_SET_OF.lo: constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET_OF.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF.c' object='libasn1cskeletons_c89_32_la-constr_SET_OF.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET_OF.lo `test -f 'constr_SET_OF.c' || echo '$(srcdir)/'`constr_SET_OF.c
+
+libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo: constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Tpo -c -o libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_SET_OF_oer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_SET_OF_oer.c' object='libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_SET_OF_oer.lo `test -f 'constr_SET_OF_oer.c' || echo '$(srcdir)/'`constr_SET_OF_oer.c
+
+libasn1cskeletons_c89_32_la-constr_TYPE.lo: constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constr_TYPE.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Tpo -c -o libasn1cskeletons_c89_32_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constr_TYPE.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constr_TYPE.c' object='libasn1cskeletons_c89_32_la-constr_TYPE.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constr_TYPE.lo `test -f 'constr_TYPE.c' || echo '$(srcdir)/'`constr_TYPE.c
+
+libasn1cskeletons_c89_32_la-constraints.lo: constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-constraints.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Tpo -c -o libasn1cskeletons_c89_32_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-constraints.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='constraints.c' object='libasn1cskeletons_c89_32_la-constraints.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-constraints.lo `test -f 'constraints.c' || echo '$(srcdir)/'`constraints.c
+
+libasn1cskeletons_c89_32_la-der_encoder.lo: der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-der_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-der_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='der_encoder.c' object='libasn1cskeletons_c89_32_la-der_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-der_encoder.lo `test -f 'der_encoder.c' || echo '$(srcdir)/'`der_encoder.c
+
+libasn1cskeletons_c89_32_la-oer_decoder.lo: oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_decoder.c' object='libasn1cskeletons_c89_32_la-oer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_decoder.lo `test -f 'oer_decoder.c' || echo '$(srcdir)/'`oer_decoder.c
+
+libasn1cskeletons_c89_32_la-oer_encoder.lo: oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_encoder.c' object='libasn1cskeletons_c89_32_la-oer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_encoder.lo `test -f 'oer_encoder.c' || echo '$(srcdir)/'`oer_encoder.c
+
+libasn1cskeletons_c89_32_la-oer_support.lo: oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-oer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Tpo -c -o libasn1cskeletons_c89_32_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-oer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oer_support.c' object='libasn1cskeletons_c89_32_la-oer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-oer_support.lo `test -f 'oer_support.c' || echo '$(srcdir)/'`oer_support.c
+
+libasn1cskeletons_c89_32_la-per_decoder.lo: per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_decoder.c' object='libasn1cskeletons_c89_32_la-per_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_decoder.lo `test -f 'per_decoder.c' || echo '$(srcdir)/'`per_decoder.c
+
+libasn1cskeletons_c89_32_la-per_encoder.lo: per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_encoder.c' object='libasn1cskeletons_c89_32_la-per_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_encoder.lo `test -f 'per_encoder.c' || echo '$(srcdir)/'`per_encoder.c
+
+libasn1cskeletons_c89_32_la-per_opentype.lo: per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_opentype.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Tpo -c -o libasn1cskeletons_c89_32_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_opentype.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_opentype.c' object='libasn1cskeletons_c89_32_la-per_opentype.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_opentype.lo `test -f 'per_opentype.c' || echo '$(srcdir)/'`per_opentype.c
+
+libasn1cskeletons_c89_32_la-per_support.lo: per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-per_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Tpo -c -o libasn1cskeletons_c89_32_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-per_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='per_support.c' object='libasn1cskeletons_c89_32_la-per_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-per_support.lo `test -f 'per_support.c' || echo '$(srcdir)/'`per_support.c
+
+libasn1cskeletons_c89_32_la-xer_decoder.lo: xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_decoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Tpo -c -o libasn1cskeletons_c89_32_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_decoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_decoder.c' object='libasn1cskeletons_c89_32_la-xer_decoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_decoder.lo `test -f 'xer_decoder.c' || echo '$(srcdir)/'`xer_decoder.c
+
+libasn1cskeletons_c89_32_la-xer_encoder.lo: xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_encoder.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Tpo -c -o libasn1cskeletons_c89_32_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_encoder.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_encoder.c' object='libasn1cskeletons_c89_32_la-xer_encoder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_encoder.lo `test -f 'xer_encoder.c' || echo '$(srcdir)/'`xer_encoder.c
+
+libasn1cskeletons_c89_32_la-xer_support.lo: xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -MT libasn1cskeletons_c89_32_la-xer_support.lo -MD -MP -MF $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Tpo -c -o libasn1cskeletons_c89_32_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Tpo $(DEPDIR)/libasn1cskeletons_c89_32_la-xer_support.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='xer_support.c' object='libasn1cskeletons_c89_32_la-xer_support.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libasn1cskeletons_c89_32_la_CFLAGS) $(CFLAGS) -c -o libasn1cskeletons_c89_32_la-xer_support.lo `test -f 'xer_support.c' || echo '$(srcdir)/'`xer_support.c
+
+check_converter_c89_32_example-converter-example.o: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_32_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo -c -o check_converter_c89_32_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_32_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_32_example-converter-example.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_32_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_c89_32_example-converter-example.obj: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_32_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo -c -o check_converter_c89_32_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_32_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_32_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_32_example-converter-example.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_32_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_32_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+check_converter_c89_example-converter-example.o: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_c89_example-converter-example.Tpo -c -o check_converter_c89_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_example-converter-example.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_c89_example-converter-example.obj: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -MT check_converter_c89_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_c89_example-converter-example.Tpo -c -o check_converter_c89_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_c89_example-converter-example.Tpo $(DEPDIR)/check_converter_c89_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_c89_example-converter-example.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_c89_example_CFLAGS) $(CFLAGS) -c -o check_converter_c89_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+check_converter_example-converter-example.o: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -MT check_converter_example-converter-example.o -MD -MP -MF $(DEPDIR)/check_converter_example-converter-example.Tpo -c -o check_converter_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_example-converter-example.Tpo $(DEPDIR)/check_converter_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_example-converter-example.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -c -o check_converter_example-converter-example.o `test -f 'converter-example.c' || echo '$(srcdir)/'`converter-example.c
+
+check_converter_example-converter-example.obj: converter-example.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -MT check_converter_example-converter-example.obj -MD -MP -MF $(DEPDIR)/check_converter_example-converter-example.Tpo -c -o check_converter_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_converter_example-converter-example.Tpo $(DEPDIR)/check_converter_example-converter-example.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='converter-example.c' object='check_converter_example-converter-example.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_converter_example_CFLAGS) $(CFLAGS) -c -o check_converter_example-converter-example.obj `if test -f 'converter-example.c'; then $(CYGPATH_W) 'converter-example.c'; else $(CYGPATH_W) '$(srcdir)/converter-example.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-dist_pkgdataDATA: $(dist_pkgdata_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || 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)$(pkgdatadir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+       done
+
+uninstall-dist_pkgdataDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir)
+install-nobase_dist_smodsDATA: $(nobase_dist_smods_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nobase_dist_smods_DATA)'; test -n "$(smodsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(smodsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(smodsdir)" || exit 1; \
+       fi; \
+       $(am__nobase_list) | while read dir files; do \
+         xfiles=; for file in $$files; do \
+           if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+           else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+         test -z "$$xfiles" || { \
+           test "x$$dir" = x. || { \
+             echo " $(MKDIR_P) '$(DESTDIR)$(smodsdir)/$$dir'"; \
+             $(MKDIR_P) "$(DESTDIR)$(smodsdir)/$$dir"; }; \
+           echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(smodsdir)/$$dir'"; \
+           $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(smodsdir)/$$dir" || exit $$?; }; \
+       done
+
+uninstall-nobase_dist_smodsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nobase_dist_smods_DATA)'; test -n "$(smodsdir)" || list=; \
+       $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+       dir='$(DESTDIR)$(smodsdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(smodsdir)"; 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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_pkgdataDATA \
+       install-nobase_dist_smodsDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_pkgdataDATA uninstall-local \
+       uninstall-nobase_dist_smodsDATA
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+       clean-checkLTLIBRARIES clean-checkPROGRAMS clean-generic \
+       clean-libtool cscopelist-am ctags ctags-am distclean \
+       distclean-compile distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_pkgdataDATA install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man \
+       install-nobase_dist_smodsDATA install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-dist_pkgdataDATA \
+       uninstall-local uninstall-nobase_dist_smodsDATA
+
+.PRECIOUS: Makefile
+
+
+uninstall-local:
+       -@echo -n " "
+       -rm -f -r $(DESTDIR)$(pkgdatadir)
+
+# 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:
diff --git a/skeletons/NULL.c b/skeletons/NULL.c
new file mode 100644 (file)
index 0000000..4a2914f
--- /dev/null
@@ -0,0 +1,299 @@
+/*-
+ * Copyright (c) 2003, 2005 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <NULL.h>
+#include <BOOLEAN.h>   /* Implemented in terms of BOOLEAN type */
+
+/*
+ * NULL basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NULL_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (5 << 2))
+};
+asn_TYPE_operation_t asn_OP_NULL = {
+       BOOLEAN_free,
+       NULL_print,
+       NULL_compare,
+       BOOLEAN_decode_ber,     /* Implemented in terms of BOOLEAN */
+       NULL_encode_der,        /* Special handling of DER encoding */
+       NULL_decode_xer,
+       NULL_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       NULL_decode_oer,
+       NULL_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       NULL_decode_uper,       /* Unaligned PER decoder */
+       NULL_encode_uper,       /* Unaligned PER encoder */
+       NULL_decode_aper,       /* Aligned PER decoder */
+       NULL_encode_aper,       /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       NULL_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NULL = {
+       "NULL",
+       "NULL",
+       &asn_OP_NULL,
+       asn_DEF_NULL_tags,
+       sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+       asn_DEF_NULL_tags,      /* Same as above */
+       sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+asn_enc_rval_t
+NULL_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode,
+                ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
+       asn_enc_rval_t erval = {0,0,0};
+
+       erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key);
+       if(erval.encoded == -1) {
+               erval.failed_type = td;
+               erval.structure_ptr = ptr;
+       }
+
+       ASN__ENCODED_OK(erval);
+}
+
+asn_enc_rval_t
+NULL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                void *app_key) {
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)td;
+       (void)sptr;
+       (void)ilevel;
+       (void)flags;
+       (void)cb;
+       (void)app_key;
+
+       /* XMLNullValue is empty */
+       er.encoded = 0;
+       ASN__ENCODED_OK(er);
+}
+
+
+static enum xer_pbd_rval
+NULL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                      const void *chunk_buf, size_t chunk_size) {
+    (void)td;
+       (void)sptr;
+       (void)chunk_buf;    /* Going to be empty according to the rules below. */
+
+       /*
+        * There must be no content in self-terminating <NULL/> tag.
+        */
+       if(chunk_size)
+               return XPBD_BROKEN_ENCODING;
+       else
+               return XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+NULL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td, void **sptr,
+                const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(NULL_t), opt_mname, buf_ptr, size,
+               NULL__xer_body_decode);
+}
+
+int
+NULL_compare(const asn_TYPE_descriptor_t *td, const void *a, const void *b) {
+    (void)td;
+    (void)a;
+    (void)b;
+    return 0;
+}
+
+int
+NULL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+           asn_app_consume_bytes_f *cb, void *app_key) {
+    (void)td;  /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(sptr) {
+               return (cb("<present>", 9, app_key) < 0) ? -1 : 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+asn_dec_rval_t
+NULL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, void **sptr,
+                const void *ptr, size_t size) {
+    asn_dec_rval_t rv = {RC_OK, 0};
+    (void)opt_codec_ctx;
+    (void)td;
+    (void)constraints;
+    (void)ptr;
+    (void)size;
+
+    if(!*sptr) {
+        *sptr = MALLOC(sizeof(NULL_t));
+        if(*sptr) {
+            *(NULL_t *)*sptr = 0;
+        } else {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    return rv;
+}
+
+asn_enc_rval_t
+NULL_encode_oer(const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, const void *sptr,
+                asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+
+    (void)td;
+    (void)sptr;
+    (void)constraints;
+    (void)cb;
+    (void)app_key;
+
+    er.encoded = 0; /* Encoding in 0 bytes. */
+
+    ASN__ENCODED_OK(er);
+}
+
+#endif /* ASN_DISABLE_OER_SUPPORT */
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+NULL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr,
+                 asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+
+       (void)opt_codec_ctx;
+       (void)td;
+       (void)constraints;
+       (void)pd;
+
+       if(!*sptr) {
+               *sptr = MALLOC(sizeof(NULL_t));
+               if(*sptr) {
+                       *(NULL_t *)*sptr = 0;
+               } else {
+                       ASN__DECODE_FAILED;
+               }
+       }
+
+       /*
+        * NULL type does not have content octets.
+        */
+
+       rv.code = RC_OK;
+       rv.consumed = 0;
+       return rv;
+}
+
+asn_enc_rval_t
+NULL_encode_uper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, const void *sptr,
+                 asn_per_outp_t *po) {
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)td;
+       (void)constraints;
+       (void)sptr;
+       (void)po;
+
+       er.encoded = 0;
+       ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+NULL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       asn_dec_rval_t rv = {RC_OK, 0};
+
+       (void)opt_codec_ctx;
+       (void)td;
+       (void)constraints;
+       (void)pd;
+
+       if(!*sptr) {
+               *sptr = MALLOC(sizeof(NULL_t));
+               if(*sptr) {
+                       *(NULL_t *)*sptr = 0;
+               } else {
+                       ASN__DECODE_FAILED;
+               }
+       }
+
+       /*
+        * NULL type does not have content octets.
+        */
+
+       rv.code = RC_OK;
+       rv.consumed = 0;
+       return rv;
+}
+
+
+asn_enc_rval_t
+NULL_encode_aper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints,
+                 const void *sptr, asn_per_outp_t *po) {
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)td;
+       (void)constraints;
+       (void)sptr;
+       (void)po;
+
+       er.encoded = 0;
+       ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+asn_random_fill_result_t
+NULL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constr,
+                    size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    NULL_t *st = *sptr;
+
+    (void)td;
+    (void)constr;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (NULL_t *)(*sptr = CALLOC(1, sizeof(*st)));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    return result_ok;
+}
+
diff --git a/skeletons/NULL.h b/skeletons/NULL.h
new file mode 100644 (file)
index 0000000..802d12c
--- /dev/null
@@ -0,0 +1,45 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_TYPE_NULL_H
+#define        ASN_TYPE_NULL_H
+
+#include <asn_application.h>
+#include <BOOLEAN.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The value of the NULL type is meaningless: see BOOLEAN if you want to
+ * carry true/false semantics.
+ */
+typedef int NULL_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_NULL;
+extern asn_TYPE_operation_t asn_OP_NULL;
+
+asn_struct_print_f NULL_print;
+asn_struct_compare_f NULL_compare;
+der_type_encoder_f NULL_encode_der;
+xer_type_decoder_f NULL_decode_xer;
+xer_type_encoder_f NULL_encode_xer;
+oer_type_decoder_f NULL_decode_oer;
+oer_type_encoder_f NULL_encode_oer;
+per_type_decoder_f NULL_decode_uper;
+per_type_encoder_f NULL_encode_uper;
+per_type_decoder_f NULL_decode_aper;
+per_type_encoder_f NULL_encode_aper;
+asn_random_fill_f  NULL_random_fill;
+
+#define NULL_free      BOOLEAN_free
+#define NULL_decode_ber        BOOLEAN_decode_ber
+#define NULL_constraint        asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* NULL_H */
diff --git a/skeletons/NativeEnumerated.c b/skeletons/NativeEnumerated.c
new file mode 100644 (file)
index 0000000..800da97
--- /dev/null
@@ -0,0 +1,367 @@
+/*-
+ * Copyright (c) 2004, 2007 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Read the NativeInteger.h for the explanation wrt. differences between
+ * INTEGER and NativeInteger.
+ * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
+ * implementation deals with the standard (machine-specific) representation
+ * of them instead of using the platform-independent buffer.
+ */
+#include <asn_internal.h>
+#include <NativeEnumerated.h>
+
+/*
+ * NativeEnumerated basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_operation_t asn_OP_NativeEnumerated = {
+       NativeInteger_free,
+       NativeInteger_print,
+       NativeInteger_compare,
+       NativeInteger_decode_ber,
+       NativeInteger_encode_der,
+       NativeInteger_decode_xer,
+       NativeEnumerated_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       NativeEnumerated_decode_oer,
+       NativeEnumerated_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       NativeEnumerated_decode_uper,
+       NativeEnumerated_encode_uper,
+       NativeEnumerated_decode_aper,
+       NativeEnumerated_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       NativeEnumerated_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = {
+       "ENUMERATED",                   /* The ASN.1 type is still ENUMERATED */
+       "ENUMERATED",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_NativeEnumerated_tags,
+       sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+       asn_DEF_NativeEnumerated_tags,  /* Same as above */
+       sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+asn_enc_rval_t
+NativeEnumerated_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                            int ilevel, enum xer_encoder_flags_e flags,
+                            asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_enc_rval_t er = {0,0,0};
+    const long *native = (const long *)sptr;
+    const asn_INTEGER_enum_map_t *el;
+
+    (void)ilevel;
+    (void)flags;
+
+    if(!native) ASN__ENCODE_FAILED;
+
+    el = INTEGER_map_value2enum(specs, *native);
+    if(el) {
+        er.encoded =
+            asn__format_to_callback(cb, app_key, "<%s/>", el->enum_name);
+        if(er.encoded < 0) ASN__ENCODE_FAILED;
+        ASN__ENCODED_OK(er);
+    } else {
+        ASN_DEBUG(
+            "ASN.1 forbids dealing with "
+            "unknown value of ENUMERATED type");
+        ASN__ENCODE_FAILED;
+    }
+}
+
+asn_dec_rval_t
+NativeEnumerated_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             void **sptr, asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs = td->specifics;
+    asn_dec_rval_t rval = { RC_OK, 0 };
+       long *native = (long *)*sptr;
+       const asn_per_constraint_t *ct;
+       long value;
+
+       (void)opt_codec_ctx;
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ASN__DECODE_FAILED;        /* Mandatory! */
+       if(!specs) ASN__DECODE_FAILED;
+
+       if(!native) {
+               native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+               if(!native) ASN__DECODE_FAILED;
+       }
+
+       ASN_DEBUG("Decoding %s as NativeEnumerated", td->name);
+
+       if(ct->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) ASN__DECODE_STARVED;
+               if(inext) ct = 0;
+       }
+
+       if(ct && ct->range_bits >= 0) {
+               value = per_get_few_bits(pd, ct->range_bits);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value >= (specs->extension
+                       ? specs->extension - 1 : specs->map_count))
+                       ASN__DECODE_FAILED;
+       } else {
+               if(!specs->extension)
+                       ASN__DECODE_FAILED;
+               /*
+                * X.691, #10.6: normally small non-negative whole number;
+                */
+               value = uper_get_nsnnwn(pd);
+               if(value < 0) ASN__DECODE_STARVED;
+               value += specs->extension - 1;
+               if(value >= specs->map_count)
+                       ASN__DECODE_FAILED;
+       }
+
+       *native = specs->value2enum[value].nat_value;
+       ASN_DEBUG("Decoded %s = %ld", td->name, *native);
+
+       return rval;
+}
+
+static int
+NativeEnumerated__compar_value2enum(const void *ap, const void *bp) {
+       const asn_INTEGER_enum_map_t *a = ap;
+       const asn_INTEGER_enum_map_t *b = bp;
+       if(a->nat_value == b->nat_value)
+               return 0;
+       if(a->nat_value < b->nat_value)
+               return -1;
+       return 1;
+}
+
+asn_enc_rval_t
+NativeEnumerated_encode_uper(const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             const void *sptr, asn_per_outp_t *po) {
+       const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       long native, value;
+       const asn_per_constraint_t *ct;
+       int inext = 0;
+       asn_INTEGER_enum_map_t key;
+       const asn_INTEGER_enum_map_t *kf;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+       if(!specs) ASN__ENCODE_FAILED;
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ASN__ENCODE_FAILED;        /* Mandatory! */
+
+       ASN_DEBUG("Encoding %s as NativeEnumerated", td->name);
+
+       er.encoded = 0;
+
+       native = *(const long *)sptr;
+
+       key.nat_value = native;
+       kf = bsearch(&key, specs->value2enum, specs->map_count,
+               sizeof(key), NativeEnumerated__compar_value2enum);
+       if(!kf) {
+               ASN_DEBUG("No element corresponds to %ld", native);
+               ASN__ENCODE_FAILED;
+       }
+       value = kf - specs->value2enum;
+
+       if(ct->range_bits >= 0) {
+               int cmpWith = specs->extension
+                               ? specs->extension - 1 : specs->map_count;
+               if(value >= cmpWith)
+                       inext = 1;
+       }
+       if(ct->flags & APC_EXTENSIBLE) {
+               if(per_put_few_bits(po, inext, 1))
+                       ASN__ENCODE_FAILED;
+               if(inext) ct = 0;
+       } else if(inext) {
+               ASN__ENCODE_FAILED;
+       }
+
+       if(ct && ct->range_bits >= 0) {
+               if(per_put_few_bits(po, value, ct->range_bits))
+                       ASN__ENCODE_FAILED;
+               ASN__ENCODED_OK(er);
+       }
+
+       if(!specs->extension)
+               ASN__ENCODE_FAILED;
+
+       /*
+        * X.691, #10.6: normally small non-negative whole number;
+        */
+       ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
+               value, specs->extension, inext,
+               value - (inext ? (specs->extension - 1) : 0));
+       if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+NativeEnumerated_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             void **sptr, asn_per_data_t *pd) {
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_dec_rval_t rval = { RC_OK, 0 };
+       long *native = (long *)*sptr;
+       const asn_per_constraint_t *ct;
+       long value;
+
+       (void)opt_codec_ctx;
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ASN__DECODE_FAILED;        /* Mandatory! */
+       if(!specs) ASN__DECODE_FAILED;
+
+       if(!native) {
+               native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+               if(!native) ASN__DECODE_FAILED;
+       }
+
+       ASN_DEBUG("Decoding %s as NativeEnumerated", td->name);
+
+       if(ct->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) ASN__DECODE_STARVED;
+               if(inext) ct = 0;
+       }
+
+       /* Deal with APER padding */
+       if(ct && ct->upper_bound >= 255) {
+               int padding = 0;
+               padding = (8 - (pd->moved % 8)) % 8;
+               ASN_DEBUG("For NativeEnumerated %s,offset= %lu Padding bits = %d", td->name, pd->moved, padding);
+               ASN_DEBUG("For NativeEnumerated %s, upper bound = %lu", td->name, ct->upper_bound);
+               if(padding > 0)
+                       per_get_few_bits(pd, padding);
+       }
+
+       if(ct && ct->range_bits >= 0) {
+               value = per_get_few_bits(pd, ct->range_bits);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value >= (specs->extension
+                            ? specs->extension - 1 : specs->map_count))
+                       ASN__DECODE_FAILED;
+       } else {
+               if(!specs->extension)
+                       ASN__DECODE_FAILED;
+               /*
+                * X.691, #10.6: normally small non-negative whole number;
+                */
+               value = uper_get_nsnnwn(pd);
+               if(value < 0) ASN__DECODE_STARVED;
+               value += specs->extension - 1;
+               if(value >= specs->map_count)
+                       ASN__DECODE_FAILED;
+       }
+
+       *native = specs->value2enum[value].nat_value;
+       ASN_DEBUG("Decoded %s = %ld", td->name, *native);
+
+       return rval;
+}
+
+asn_enc_rval_t
+NativeEnumerated_encode_aper(const asn_TYPE_descriptor_t *td,
+                             const asn_per_constraints_t *constraints,
+                             const void *sptr, asn_per_outp_t *po) {
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       long native, value;
+       const asn_per_constraint_t *ct;
+       int inext = 0;
+       asn_INTEGER_enum_map_t key;
+       asn_INTEGER_enum_map_t *kf;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+       if(!specs) ASN__ENCODE_FAILED;
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ASN__ENCODE_FAILED;        /* Mandatory! */
+
+       ASN_DEBUG("Encoding %s as NativeEnumerated", td->name);
+
+       er.encoded = 0;
+
+       native = *(const long *)sptr;
+       if(native < 0) ASN__ENCODE_FAILED;
+
+       key.nat_value = native;
+       kf = bsearch(&key, specs->value2enum, specs->map_count,
+                    sizeof(key), NativeEnumerated__compar_value2enum);
+       if(!kf) {
+               ASN_DEBUG("No element corresponds to %ld", native);
+               ASN__ENCODE_FAILED;
+       }
+       value = kf - specs->value2enum;
+
+       if(ct->range_bits >= 0) {
+               int cmpWith = specs->extension
+                             ? specs->extension - 1 : specs->map_count;
+               if(value >= cmpWith)
+                       inext = 1;
+       }
+       if(ct->flags & APC_EXTENSIBLE) {
+               if(per_put_few_bits(po, inext, 1))
+                       ASN__ENCODE_FAILED;
+               if(inext) ct = 0;
+       } else if(inext) {
+               ASN__ENCODE_FAILED;
+       }
+
+       if(ct && ct->range_bits >= 0) {
+               if(per_put_few_bits(po, value, ct->range_bits))
+                       ASN__ENCODE_FAILED;
+               ASN__ENCODED_OK(er);
+       }
+
+       if(!specs->extension)
+               ASN__ENCODE_FAILED;
+
+       /*
+        * X.691, #10.6: normally small non-negative whole number;
+        */
+       ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld",
+                 value, specs->extension, inext,
+                 value - (inext ? (specs->extension - 1) : 0));
+       if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0)))
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
diff --git a/skeletons/NativeEnumerated.h b/skeletons/NativeEnumerated.h
new file mode 100644 (file)
index 0000000..459f0e6
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard ENUMERATED in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeEnumerated_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef        _NativeEnumerated_H_
+#define        _NativeEnumerated_H_
+
+#include <NativeInteger.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated;
+extern asn_TYPE_operation_t asn_OP_NativeEnumerated;
+
+xer_type_encoder_f NativeEnumerated_encode_xer;
+oer_type_decoder_f NativeEnumerated_decode_oer;
+oer_type_encoder_f NativeEnumerated_encode_oer;
+per_type_decoder_f NativeEnumerated_decode_uper;
+per_type_encoder_f NativeEnumerated_encode_uper;
+per_type_decoder_f NativeEnumerated_decode_aper;
+per_type_encoder_f NativeEnumerated_encode_aper;
+
+#define NativeEnumerated_free       NativeInteger_free
+#define NativeEnumerated_print      NativeInteger_print
+#define NativeEnumerated_compare    NativeInteger_compare
+#define NativeEnumerated_random_fill NativeInteger_random_fill
+#define NativeEnumerated_constraint asn_generic_no_constraint
+#define NativeEnumerated_decode_ber NativeInteger_decode_ber
+#define NativeEnumerated_encode_der NativeInteger_encode_der
+#define NativeEnumerated_decode_xer NativeInteger_decode_xer
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NativeEnumerated_H_ */
diff --git a/skeletons/NativeEnumerated_oer.c b/skeletons/NativeEnumerated_oer.c
new file mode 100644 (file)
index 0000000..ee3c189
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <NativeEnumerated.h>
+#include <errno.h>
+
+static long
+asn__nativeenumerated_convert(const uint8_t *b, const uint8_t *end) {
+    unsigned long value;
+
+    /* Perform the sign initialization */
+    /* Actually value = -(*b >> 7); gains nothing, yet unreadable! */
+    if((*b >> 7)) {
+        value = (unsigned long)(-1);
+    } else {
+        value = 0;
+    }
+
+    /* Conversion engine */
+    for(; b < end; b++) {
+        value = (value << 8) | *b;
+    }
+
+    return value;
+}
+
+asn_dec_rval_t
+NativeEnumerated_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                            const asn_TYPE_descriptor_t *td,
+                            const asn_oer_constraints_t *constraints,
+                            void **nint_ptr, const void *ptr, size_t size) {
+    asn_dec_rval_t rval = {RC_OK, 0};
+    long *native = (long *)*nint_ptr;
+    const uint8_t *b = ptr;
+
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    if(size < 1) {
+        ASN__DECODE_STARVED;
+    }
+
+    if((*b & 0x80) == 0) {
+        /*
+         * X.696 (08/2015) #11.2 Short form for Enumerated.
+         */
+        if(!native) {
+            native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
+            if(!native) ASN__DECODE_FAILED;
+        }
+
+        *native = *b;
+        rval.consumed = 1;
+    } else {
+        /*
+         * X.696 (08/2015) #11.4 Long form for Enumerated.
+         */
+        size_t length = *b & 0x7f;
+        const uint8_t *bend;
+        long value;
+
+        if(length < 1 || length > sizeof(*native)) {
+            ASN__DECODE_FAILED;
+        }
+        if((1 + length) > size) {
+            ASN__DECODE_STARVED;
+        }
+        b++;
+        bend = b + length;
+
+        value = asn__nativeenumerated_convert(b, bend);
+        if(value < 0) {
+            const asn_INTEGER_specifics_t *specs =
+                (const asn_INTEGER_specifics_t *)td->specifics;
+            if(specs && specs->field_unsigned) {
+                ASN__DECODE_FAILED;
+            }
+        }
+
+        if(!native) {
+            native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
+            if(!native) ASN__DECODE_FAILED;
+        }
+
+        *native = value;
+
+        rval.consumed = (1 + length);
+    }
+
+    return rval;
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+NativeEnumerated_encode_oer(const asn_TYPE_descriptor_t *td,
+                            const asn_oer_constraints_t *constraints,
+                            const void *sptr, asn_app_consume_bytes_f *cb,
+                            void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+    long native;
+
+    (void)constraints;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    native = *(const long *)sptr;
+
+    if(native >= 0 && native <= 127) {
+        /* #11.2 Short form */
+        uint8_t b = native;
+        er.encoded = 1;
+        if(cb(&b, er.encoded, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    } else {
+        /* #11.2 Long form */
+        uint8_t buf[1 + sizeof(native)];
+        uint8_t *b = &buf[sizeof(native)];  /* Last addressable */
+        long final_pattern = -1 * (native < 0);
+
+        for(;;) {
+            *b-- = native;
+            native >>= 8;
+            if(native == final_pattern) {
+                if(final_pattern) {
+                    if((b[1] & 0x80)) break;
+                } else {
+                    if(!(b[1] & 0x80)) break;
+                }
+            }
+        }
+        *b = 0x80 | (&buf[sizeof(native)] - b);
+        er.encoded = 1 + (&buf[sizeof(native)] - b);
+        if(cb(b, er.encoded, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    }
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/NativeInteger.c b/skeletons/NativeInteger.c
new file mode 100644 (file)
index 0000000..316e872
--- /dev/null
@@ -0,0 +1,550 @@
+/*-
+ * Copyright (c) 2004, 2005, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Read the NativeInteger.h for the explanation wrt. differences between
+ * INTEGER and NativeInteger.
+ * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this
+ * implementation deals with the standard (machine-specific) representation
+ * of them instead of using the platform-independent buffer.
+ */
+#include <asn_internal.h>
+#include <NativeInteger.h>
+
+/*
+ * NativeInteger basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_operation_t asn_OP_NativeInteger = {
+       NativeInteger_free,
+       NativeInteger_print,
+       NativeInteger_compare,
+       NativeInteger_decode_ber,
+       NativeInteger_encode_der,
+       NativeInteger_decode_xer,
+       NativeInteger_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       NativeInteger_decode_oer,       /* OER decoder */
+       NativeInteger_encode_oer,       /* Canonical OER encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       NativeInteger_decode_uper,      /* Unaligned PER decoder */
+       NativeInteger_encode_uper,      /* Unaligned PER encoder */
+       NativeInteger_decode_aper,      /* Aligned PER decoder */
+       NativeInteger_encode_aper,      /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       NativeInteger_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NativeInteger = {
+       "INTEGER",                      /* The ASN.1 type is still INTEGER */
+       "INTEGER",
+       &asn_OP_NativeInteger,
+       asn_DEF_NativeInteger_tags,
+       sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+       asn_DEF_NativeInteger_tags,     /* Same as above */
+       sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+/*
+ * Decode INTEGER type.
+ */
+asn_dec_rval_t
+NativeInteger_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td, void **nint_ptr,
+                         const void *buf_ptr, size_t size, int tag_mode) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    long *native = (long *)*nint_ptr;
+       asn_dec_rval_t rval;
+       ber_tlv_len_t length;
+
+       /*
+        * If the structure is not there, allocate it.
+        */
+       if(native == NULL) {
+               native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
+               if(native == NULL) {
+                       rval.code = RC_FAIL;
+                       rval.consumed = 0;
+                       return rval;
+               }
+       }
+
+       ASN_DEBUG("Decoding %s as INTEGER (tm=%d)",
+               td->name, tag_mode);
+
+       /*
+        * Check tags.
+        */
+       rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+                       tag_mode, 0, &length, 0);
+       if(rval.code != RC_OK)
+               return rval;
+
+       ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
+
+       /*
+        * Make sure we have this length.
+        */
+       buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+       size -= rval.consumed;
+       if(length > (ber_tlv_len_t)size) {
+               rval.code = RC_WMORE;
+               rval.consumed = 0;
+               return rval;
+       }
+
+       /*
+        * ASN.1 encoded INTEGER: buf_ptr, length
+        * Fill the native, at the same time checking for overflow.
+        * If overflow occured, return with RC_FAIL.
+        */
+       {
+               INTEGER_t tmp;
+               union {
+                       const void *constbuf;
+                       void *nonconstbuf;
+               } unconst_buf;
+               long l;
+
+               unconst_buf.constbuf = buf_ptr;
+               tmp.buf = (uint8_t *)unconst_buf.nonconstbuf;
+               tmp.size = length;
+
+               if((specs&&specs->field_unsigned)
+                       ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */
+                       : asn_INTEGER2long(&tmp, &l)) {
+                       rval.code = RC_FAIL;
+                       rval.consumed = 0;
+                       return rval;
+               }
+
+               *native = l;
+       }
+
+       rval.code = RC_OK;
+       rval.consumed += length;
+
+       ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)",
+               (long)rval.consumed, (long)length, td->name, (long)*native);
+
+       return rval;
+}
+
+/*
+ * Encode the NativeInteger using the standard INTEGER type DER encoder.
+ */
+asn_enc_rval_t
+NativeInteger_encode_der(const asn_TYPE_descriptor_t *sd, const void *ptr,
+                         int tag_mode, ber_tlv_tag_t tag,
+                         asn_app_consume_bytes_f *cb, void *app_key) {
+       unsigned long native = *(const unsigned long *)ptr; /* Disable sign ext. */
+       asn_enc_rval_t erval = {0,0,0};
+       INTEGER_t tmp;
+
+#ifdef WORDS_BIGENDIAN         /* Opportunistic optimization */
+
+       tmp.buf = (uint8_t *)&native;
+       tmp.size = sizeof(native);
+
+#else  /* Works even if WORDS_BIGENDIAN is not set where should've been */
+       uint8_t buf[sizeof(native)];
+       uint8_t *p;
+
+       /* Prepare a fake INTEGER */
+       for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8)
+               *p = (uint8_t)native;
+
+       tmp.buf = buf;
+       tmp.size = sizeof(buf);
+#endif /* WORDS_BIGENDIAN */
+       
+       /* Encode fake INTEGER */
+       erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key);
+    if(erval.structure_ptr == &tmp) {
+        erval.structure_ptr = ptr;
+    }
+       return erval;
+}
+
+/*
+ * Decode the chunk of XML text encoding INTEGER.
+ */
+asn_dec_rval_t
+NativeInteger_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td, void **sptr,
+                         const char *opt_mname, const void *buf_ptr,
+                         size_t size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval;
+       INTEGER_t st;
+       void *st_ptr = (void *)&st;
+       long *native = (long *)*sptr;
+
+       if(!native) {
+               native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+               if(!native) ASN__DECODE_FAILED;
+       }
+
+       memset(&st, 0, sizeof(st));
+       rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, 
+               opt_mname, buf_ptr, size);
+       if(rval.code == RC_OK) {
+               long l;
+               if((specs&&specs->field_unsigned)
+                       ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */
+                       : asn_INTEGER2long(&st, &l)) {
+                       rval.code = RC_FAIL;
+                       rval.consumed = 0;
+               } else {
+                       *native = l;
+               }
+       } else {
+               /*
+                * Cannot restart from the middle;
+                * there is no place to save state in the native type.
+                * Request a continuation from the very beginning.
+                */
+               rval.consumed = 0;
+       }
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st);
+       return rval;
+}
+
+
+asn_enc_rval_t
+NativeInteger_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                         int ilevel, enum xer_encoder_flags_e flags,
+                         asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    char scratch[32];  /* Enough for 64-bit int */
+       asn_enc_rval_t er = {0,0,0};
+       const long *native = (const long *)sptr;
+
+       (void)ilevel;
+       (void)flags;
+
+       if(!native) ASN__ENCODE_FAILED;
+
+       er.encoded = snprintf(scratch, sizeof(scratch),
+                       (specs && specs->field_unsigned)
+                       ? "%lu" : "%ld", *native);
+       if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch)
+               || cb(scratch, er.encoded, app_key) < 0)
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+NativeInteger_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr,
+                          asn_per_data_t *pd) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval;
+       long *native = (long *)*sptr;
+       INTEGER_t tmpint;
+       void *tmpintptr = &tmpint;
+
+       (void)opt_codec_ctx;
+       ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name);
+
+       if(!native) {
+               native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+               if(!native) ASN__DECODE_FAILED;
+       }
+
+       memset(&tmpint, 0, sizeof tmpint);
+       rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints,
+                                  &tmpintptr, pd);
+       if(rval.code == RC_OK) {
+               if((specs&&specs->field_unsigned)
+                       ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native)
+                       : asn_INTEGER2long(&tmpint, native))
+                       rval.code = RC_FAIL;
+               else
+                       ASN_DEBUG("NativeInteger %s got value %ld",
+                               td->name, *native);
+       }
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+
+       return rval;
+}
+
+asn_enc_rval_t
+NativeInteger_encode_uper(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, asn_per_outp_t *po) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_enc_rval_t er = {0,0,0};
+       long native;
+       INTEGER_t tmpint;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+
+    native = *(const long *)sptr;
+
+    ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native);
+
+       memset(&tmpint, 0, sizeof(tmpint));
+       if((specs&&specs->field_unsigned)
+               ? asn_ulong2INTEGER(&tmpint, native)
+               : asn_long2INTEGER(&tmpint, native))
+               ASN__ENCODE_FAILED;
+       er = INTEGER_encode_uper(td, constraints, &tmpint, po);
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+       return er;
+}
+
+asn_dec_rval_t
+NativeInteger_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_dec_rval_t rval;
+       long *native = (long *)*sptr;
+       INTEGER_t tmpint;
+       void *tmpintptr = &tmpint;
+
+       (void)opt_codec_ctx;
+       ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name);
+
+       if(!native) {
+               native = (long *)(*sptr = CALLOC(1, sizeof(*native)));
+               if(!native) ASN__DECODE_FAILED;
+       }
+
+       memset(&tmpint, 0, sizeof tmpint);
+       rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints,
+                                  &tmpintptr, pd);
+       if(rval.code == RC_OK) {
+               if((specs&&specs->field_unsigned)
+                       ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native)
+                       : asn_INTEGER2long(&tmpint, native))
+                       rval.code = RC_FAIL;
+               else
+                       ASN_DEBUG("NativeInteger %s got value %ld",
+                                 td->name, *native);
+       }
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+
+       return rval;
+}
+
+asn_enc_rval_t
+NativeInteger_encode_aper(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, asn_per_outp_t *po) {
+
+       const asn_INTEGER_specifics_t *specs = (const asn_INTEGER_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       long native;
+       INTEGER_t tmpint;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+
+       native = *(const long *)sptr;
+
+       ASN_DEBUG("Encoding NativeInteger %s %ld (APER)", td->name, native);
+
+       memset(&tmpint, 0, sizeof(tmpint));
+       if((specs&&specs->field_unsigned)
+               ? asn_ulong2INTEGER(&tmpint, (unsigned long)native)
+               : asn_long2INTEGER(&tmpint, native))
+               ASN__ENCODE_FAILED;
+       er = INTEGER_encode_aper(td, constraints, &tmpint, po);
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+       return er;
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+/*
+ * INTEGER specific human-readable output.
+ */
+int
+NativeInteger_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    const long *native = (const long *)sptr;
+    char scratch[32]; /* Enough for 64-bit int */
+    int ret;
+
+    (void)td;       /* Unused argument */
+    (void)ilevel;   /* Unused argument */
+
+    if(native) {
+        long value = *native;
+        ret = snprintf(scratch, sizeof(scratch),
+                       (specs && specs->field_unsigned) ? "%lu" : "%ld", value);
+        assert(ret > 0 && (size_t)ret < sizeof(scratch));
+        if(cb(scratch, ret, app_key) < 0) return -1;
+        if(specs && (value >= 0 || !specs->field_unsigned)) {
+            const asn_INTEGER_enum_map_t *el =
+                INTEGER_map_value2enum(specs, value);
+            if(el) {
+                if(cb(" (", 2, app_key) < 0) return -1;
+                if(cb(el->enum_name, el->enum_len, app_key) < 0) return -1;
+                if(cb(")", 1, app_key) < 0) return -1;
+            }
+        }
+        return 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+void
+NativeInteger_free(const asn_TYPE_descriptor_t *td, void *ptr,
+                   enum asn_struct_free_method method) {
+    if(!td || !ptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)",
+               td->name, method, ptr);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(ptr, 0, sizeof(long));
+        break;
+    }
+}
+
+int
+NativeInteger_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) {
+    (void)td;
+
+    if(aptr && bptr) {
+        const asn_INTEGER_specifics_t *specs =
+            (const asn_INTEGER_specifics_t *)td->specifics;
+        if(specs && specs->field_unsigned) {
+            const unsigned long *a = aptr;
+            const unsigned long *b = bptr;
+            if(*a < *b) {
+                return -1;
+            } else if(*a > *b) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else {
+            const long *a = aptr;
+            const long *b = bptr;
+            if(*a < *b) {
+                return -1;
+            } else if(*a > *b) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+    } else if(!aptr) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+asn_random_fill_result_t
+NativeInteger_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                          const asn_encoding_constraints_t *constraints,
+                          size_t max_length) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    long *st = *sptr;
+    const asn_INTEGER_enum_map_t *emap;
+    size_t emap_len;
+    intmax_t value;
+    int find_inside_map;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (long *)CALLOC(1, sizeof(*st));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    if(specs) {
+        emap = specs->value2enum;
+        emap_len = specs->map_count;
+        if(specs->strict_enumeration) {
+            find_inside_map = emap_len > 0;
+        } else {
+            find_inside_map = emap_len ? asn_random_between(0, 1) : 0;
+        }
+    } else {
+        emap = 0;
+        emap_len = 0;
+        find_inside_map = 0;
+    }
+
+    if(find_inside_map) {
+        assert(emap_len > 0);
+        value = emap[asn_random_between(0, emap_len - 1)].nat_value;
+    } else {
+        const asn_per_constraints_t *ct;
+
+        static const long variants[] = {
+            -65536, -65535, -65534, -32769, -32768, -32767, -16385, -16384,
+            -16383, -257,   -256,   -255,   -254,   -129,   -128,   -127,
+            -126,   -1,     0,      1,      126,    127,    128,    129,
+            254,    255,    256,    257,    16383,  16384,  16385,  32767,
+            32768,  32769,  65534,  65535,  65536,  65537};
+        if(specs && specs->field_unsigned) {
+            assert(variants[18] == 0);
+            value = variants[asn_random_between(
+                18, sizeof(variants) / sizeof(variants[0]) - 1)];
+        } else {
+            value = variants[asn_random_between(
+                0, sizeof(variants) / sizeof(variants[0]) - 1)];
+        }
+
+        if(!constraints) constraints = &td->encoding_constraints;
+        ct = constraints ? constraints->per_constraints : 0;
+        if(ct && (ct->value.flags & APC_CONSTRAINED)) {
+            if(value < ct->value.lower_bound || value > ct->value.upper_bound) {
+                value = asn_random_between(ct->value.lower_bound,
+                                           ct->value.upper_bound);
+            }
+        }
+    }
+
+    *sptr = st;
+    *st = value;
+    return result_ok;
+}
diff --git a/skeletons/NativeInteger.h b/skeletons/NativeInteger.h
new file mode 100644 (file)
index 0000000..c74406a
--- /dev/null
@@ -0,0 +1,46 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard INTEGER in that it is modelled using
+ * the fixed machine type (long, int, short), so it can hold only values of
+ * limited length. There is no type (i.e., NativeInteger_t, any integer type
+ * will do).
+ * This type may be used when integer range is limited by subtype constraints.
+ */
+#ifndef        _NativeInteger_H_
+#define        _NativeInteger_H_
+
+#include <asn_application.h>
+#include <INTEGER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeInteger;
+extern asn_TYPE_operation_t asn_OP_NativeInteger;
+
+asn_struct_free_f  NativeInteger_free;
+asn_struct_print_f NativeInteger_print;
+asn_struct_compare_f NativeInteger_compare;
+ber_type_decoder_f NativeInteger_decode_ber;
+der_type_encoder_f NativeInteger_encode_der;
+xer_type_decoder_f NativeInteger_decode_xer;
+xer_type_encoder_f NativeInteger_encode_xer;
+oer_type_decoder_f NativeInteger_decode_oer;
+oer_type_encoder_f NativeInteger_encode_oer;
+per_type_decoder_f NativeInteger_decode_uper;
+per_type_encoder_f NativeInteger_encode_uper;
+per_type_decoder_f NativeInteger_decode_aper;
+per_type_encoder_f NativeInteger_encode_aper;
+asn_random_fill_f  NativeInteger_random_fill;
+
+#define NativeInteger_constraint  asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NativeInteger_H_ */
diff --git a/skeletons/NativeInteger_oer.c b/skeletons/NativeInteger_oer.c
new file mode 100644 (file)
index 0000000..411413a
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <NativeInteger.h>
+#include <errno.h>
+
+asn_dec_rval_t
+NativeInteger_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td,
+                         const asn_oer_constraints_t *constraints,
+                         void **nint_ptr, const void *ptr, size_t size) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    long *native = (long *)*nint_ptr;
+    INTEGER_t tmpint;
+    INTEGER_t *tmpintptr = &tmpint;
+
+    memset(&tmpint, 0, sizeof(tmpint));
+
+    if(!native) {
+        native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native)));
+        if(!native) ASN__DECODE_FAILED;
+    }
+
+    /*
+     * OPTIMIZATION: Encode directly rather than passing through INTEGER.
+     * Saves a memory allocation.
+     */
+    rval = INTEGER_decode_oer(opt_codec_ctx, td, constraints,
+                              (void **)&tmpintptr, ptr, size);
+    if(rval.code != RC_OK) {
+        ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+        return rval;
+    }
+
+    if(specs && specs->field_unsigned) {
+        unsigned long ul;
+        int ok = asn_INTEGER2ulong(&tmpint, &ul) == 0;
+        ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+        if(ok) {
+            *native = ul;
+        } else {
+            rval.code = RC_FAIL;
+            return rval;
+        }
+    } else {
+        long l;
+        int ok = asn_INTEGER2long(&tmpint, &l) == 0;
+        ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+        if(ok) {
+            *native = l;
+        } else {
+            rval.code = RC_FAIL;
+            return rval;
+        }
+    }
+
+    return rval;
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+NativeInteger_encode_oer(const asn_TYPE_descriptor_t *td,
+                         const asn_oer_constraints_t *constraints,
+                         const void *sptr, asn_app_consume_bytes_f *cb,
+                         void *app_key) {
+    const asn_INTEGER_specifics_t *specs =
+        (const asn_INTEGER_specifics_t *)td->specifics;
+    INTEGER_t tmpint;
+    long native;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    native = *(const long *)sptr;
+    memset(&tmpint, 0, sizeof(tmpint));
+
+    ASN_DEBUG("Encoding %s %ld as NativeInteger", td ? td->name : "", native);
+
+    if((specs && specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native)
+                                        : asn_long2INTEGER(&tmpint, native)) {
+        ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+        ASN__ENCODE_FAILED;
+    } else {
+        asn_enc_rval_t er =
+            INTEGER_encode_oer(td, constraints, &tmpint, cb, app_key);
+        ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint);
+        return er;
+    }
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/NativeReal.c b/skeletons/NativeReal.c
new file mode 100644 (file)
index 0000000..160a471
--- /dev/null
@@ -0,0 +1,781 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Read the NativeReal.h for the explanation wrt. differences between
+ * REAL and NativeReal.
+ * Basically, both are decoders and encoders of ASN.1 REAL type, but this
+ * implementation deals with the standard (machine-specific) representation
+ * of them instead of using the platform-independent buffer.
+ */
+#include <asn_internal.h>
+#include <NativeReal.h>
+#include <REAL.h>
+#include <OCTET_STRING.h>
+#include <math.h>
+#include <float.h>
+
+#if defined(__clang__)
+/*
+ * isnan() is defined using generic selections and won't compile in
+ * strict C89 mode because of too fancy system's standard library.
+ * However, prior to C11 the math had a perfectly working isnan()
+ * in the math library.
+ * Disable generic selection warning so we can test C89 mode with newer libc.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc11-extensions"
+static int asn_isnan(double d) {
+    return isnan(d);
+}
+#pragma clang diagnostic pop
+#else
+#define asn_isnan(v)    isnan(v)
+#endif  /* generic selections */
+
+/*
+ * NativeReal basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NativeReal_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_operation_t asn_OP_NativeReal = {
+       NativeReal_free,
+       NativeReal_print,
+       NativeReal_compare,
+       NativeReal_decode_ber,
+       NativeReal_encode_der,
+       NativeReal_decode_xer,
+       NativeReal_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       NativeReal_decode_oer,
+       NativeReal_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       NativeReal_decode_uper,
+       NativeReal_encode_uper,
+       NativeReal_decode_aper,
+       NativeReal_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       NativeReal_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NativeReal = {
+       "REAL",                 /* The ASN.1 type is still REAL */
+       "REAL",
+       &asn_OP_NativeReal,
+       asn_DEF_NativeReal_tags,
+       sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]),
+       asn_DEF_NativeReal_tags,        /* Same as above */
+       sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+static size_t NativeReal__float_size(const asn_TYPE_descriptor_t *td);
+static double NativeReal__get_double(const asn_TYPE_descriptor_t *td,
+                                     const void *ptr);
+static ssize_t NativeReal__set(const asn_TYPE_descriptor_t *td, void **sptr,
+                               double d);
+
+/*
+ * Decode REAL type.
+ */
+asn_dec_rval_t
+NativeReal_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                      const asn_TYPE_descriptor_t *td, void **sptr,
+                      const void *buf_ptr, size_t size, int tag_mode) {
+    asn_dec_rval_t rval;
+    ber_tlv_len_t length;
+
+    ASN_DEBUG("Decoding %s as REAL (tm=%d)", td->name, tag_mode);
+
+    /*
+     * Check tags.
+     */
+    rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0,
+                          &length, 0);
+    if(rval.code != RC_OK) return rval;
+    assert(length >= 0);    /* Ensured by ber_check_tags */
+
+    ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
+
+    /*
+     * Make sure we have this length.
+     */
+    buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+    size -= rval.consumed;
+    if(length > (ber_tlv_len_t)size) {
+        rval.code = RC_WMORE;
+        rval.consumed = 0;
+        return rval;
+    }
+
+    /*
+     * ASN.1 encoded REAL: buf_ptr, length
+     * Fill the Dbl, at the same time checking for overflow.
+     * If overflow occured, return with RC_FAIL.
+     */
+    {
+        uint8_t scratch[24]; /* Longer than %.16f in decimal */
+        REAL_t tmp;
+        double d;
+        int ret;
+
+        if((size_t)length < sizeof(scratch)) {
+            tmp.buf = scratch;
+            tmp.size = length;
+        } else {
+            /* This rarely happens: impractically long value */
+            tmp.buf = CALLOC(1, length + 1);
+            tmp.size = length;
+            if(!tmp.buf) {
+                rval.code = RC_FAIL;
+                rval.consumed = 0;
+                return rval;
+            }
+        }
+
+        memcpy(tmp.buf, buf_ptr, length);
+        tmp.buf[length] = '\0';
+
+        ret = asn_REAL2double(&tmp, &d);
+        if(tmp.buf != scratch) FREEMEM(tmp.buf);
+        if(ret) {
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+            return rval;
+        }
+
+        if(NativeReal__set(td, sptr, d) < 0)
+            ASN__DECODE_FAILED;
+    }
+
+    rval.code = RC_OK;
+    rval.consumed += length;
+
+    ASN_DEBUG("Took %ld/%ld bytes to encode %s", (long)rval.consumed,
+              (long)length, td->name);
+
+    return rval;
+}
+
+/*
+ * Encode the NativeReal using the standard REAL type DER encoder.
+ */
+asn_enc_rval_t
+NativeReal_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int tag_mode, ber_tlv_tag_t tag,
+                      asn_app_consume_bytes_f *cb, void *app_key) {
+    double d = NativeReal__get_double(td, sptr);
+    asn_enc_rval_t erval = {0,0,0};
+       REAL_t tmp;
+
+       /* Prepare a temporary clean structure */
+       memset(&tmp, 0, sizeof(tmp));
+
+    if(asn_double2REAL(&tmp, d))
+        ASN__ENCODE_FAILED;
+
+    /* Encode a fake REAL */
+    erval = der_encode_primitive(td, &tmp, tag_mode, tag, cb, app_key);
+    if(erval.encoded == -1) {
+               assert(erval.structure_ptr == &tmp);
+               erval.structure_ptr = sptr;
+       }
+
+       /* Free possibly allocated members of the temporary structure */
+    ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+
+    return erval;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+/*
+ * Decode REAL type using PER.
+ */
+asn_dec_rval_t
+NativeReal_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr,
+                       asn_per_data_t *pd) {
+    asn_dec_rval_t rval;
+    double d;
+       REAL_t tmp;
+       void *ptmp = &tmp;
+       int ret;
+
+       (void)constraints;
+
+       memset(&tmp, 0, sizeof(tmp));
+    rval = OCTET_STRING_decode_uper(opt_codec_ctx, &asn_DEF_REAL,
+                                    NULL, &ptmp, pd);
+    if(rval.code != RC_OK) {
+               ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+               return rval;
+       }
+
+       ret = asn_REAL2double(&tmp, &d);
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+       if(ret) ASN__DECODE_FAILED;
+
+    if(NativeReal__set(td, sptr, d) < 0 )
+        ASN__DECODE_FAILED;
+
+       return rval;
+}
+
+/*
+ * Encode the NativeReal using the OCTET STRING PER encoder.
+ */
+asn_enc_rval_t
+NativeReal_encode_uper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+    double d = NativeReal__get_double(td, sptr);
+       asn_enc_rval_t erval = {0,0,0};
+       REAL_t tmp;
+
+       (void)constraints;
+
+       /* Prepare a temporary clean structure */
+       memset(&tmp, 0, sizeof(tmp));
+
+       if(asn_double2REAL(&tmp, d))
+               ASN__ENCODE_FAILED;
+       
+       /* Encode a DER REAL */
+    erval = OCTET_STRING_encode_uper(&asn_DEF_REAL, NULL, &tmp, po);
+    if(erval.encoded == -1)
+               erval.structure_ptr = sptr;
+
+       /* Free possibly allocated members of the temporary structure */
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+
+       return erval;
+}
+
+
+asn_dec_rval_t
+NativeReal_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                       const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       void **dbl_ptr, asn_per_data_t *pd) {
+       double *Dbl = (double *)*dbl_ptr;
+       asn_dec_rval_t rval;
+       REAL_t tmp;
+       void *ptmp = &tmp;
+       int ret;
+
+       (void)constraints;
+
+       /*
+        * If the structure is not there, allocate it.
+        */
+       if(Dbl == NULL) {
+               *dbl_ptr = CALLOC(1, sizeof(*Dbl));
+               Dbl = (double *)*dbl_ptr;
+               if(Dbl == NULL)
+                       ASN__DECODE_FAILED;
+       }
+
+       memset(&tmp, 0, sizeof(tmp));
+       rval = OCTET_STRING_decode_aper(opt_codec_ctx, td, NULL,
+                       &ptmp, pd);
+       if(rval.code != RC_OK) {
+               ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+               return rval;
+       }
+
+       ret = asn_REAL2double(&tmp, Dbl);
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+       if(ret) ASN__DECODE_FAILED;
+
+       return rval;
+}
+
+asn_enc_rval_t
+NativeReal_encode_aper(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po) {
+       double Dbl = *(const double *)sptr;
+       asn_enc_rval_t erval = {0,0,0};
+       REAL_t tmp;
+
+       (void)constraints;
+
+       /* Prepare a temporary clean structure */
+       memset(&tmp, 0, sizeof(tmp));
+
+       if(asn_double2REAL(&tmp, Dbl))
+               ASN__ENCODE_FAILED;
+
+       /* Encode a DER REAL */
+       erval = OCTET_STRING_encode_aper(td, NULL, &tmp, po);
+       if(erval.encoded == -1)
+               erval.structure_ptr = sptr;
+
+       /* Free possibly allocated members of the temporary structure */
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+
+       return erval;
+}
+
+#endif /* ASN_DISABLE_PER_SUPPORT */
+
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+/*
+ * Swap bytes from/to network, if local is little-endian.
+ * Unused endianness sections are likely removed at compile phase.
+ */
+static void
+NativeReal__network_swap(size_t float_size, const void *srcp, uint8_t *dst) {
+    const uint8_t *src = srcp;
+    double test = -0.0;
+    int float_big_endian = *(const char *)&test != 0;
+    /* In lieu of static_assert(sizeof(double) == 8) */
+    static const char sizeof_double_is_8_a[sizeof(double)-7] CC_NOTUSED;
+    static const char sizeof_double_is_8_b[9-sizeof(double)] CC_NOTUSED;
+    /* In lieu of static_assert(sizeof(sizeof) == 4) */
+    static const char sizeof_float_is_4_a[sizeof(float)-3] CC_NOTUSED;
+    static const char sizeof_float_is_4_b[5-sizeof(float)] CC_NOTUSED;
+
+    switch(float_size) {
+    case sizeof(double):
+        assert(sizeof(double) == 8);
+        if(float_big_endian) {
+            dst[0] = src[0];
+            dst[1] = src[1];
+            dst[2] = src[2];
+            dst[3] = src[3];
+            dst[4] = src[4];
+            dst[5] = src[5];
+            dst[6] = src[6];
+            dst[7] = src[7];
+        } else {
+            dst[0] = src[7];
+            dst[1] = src[6];
+            dst[2] = src[5];
+            dst[3] = src[4];
+            dst[4] = src[3];
+            dst[5] = src[2];
+            dst[6] = src[1];
+            dst[7] = src[0];
+        }
+        return;
+    case sizeof(float):
+        assert(sizeof(float) == 4);
+        if(float_big_endian) {
+            dst[0] = src[0];
+            dst[1] = src[1];
+            dst[2] = src[2];
+            dst[3] = src[3];
+        } else {
+            dst[0] = src[3];
+            dst[1] = src[2];
+            dst[2] = src[1];
+            dst[3] = src[0];
+        }
+        return;
+    }
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+NativeReal_encode_oer(const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints,
+                      const void *sptr, asn_app_consume_bytes_f *cb,
+                      void *app_key) {
+    asn_enc_rval_t er = {0, 0, 0};
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints && constraints->value.width != 0) {
+        /* X.696 IEEE 754 binary32 and binary64 encoding */
+        uint8_t scratch[sizeof(double)];
+        const asn_NativeReal_specifics_t *specs =
+            (const asn_NativeReal_specifics_t *)td->specifics;
+        size_t wire_size = constraints->value.width;
+
+        if(specs ? (wire_size == specs->float_size)
+                 : (wire_size == sizeof(double))) {
+            /*
+             * Our representation matches the wire, modulo endianness.
+             * That was the whole point of compact encoding!
+             */
+        } else {
+            assert((wire_size == sizeof(double))
+                   || (specs && specs->float_size == wire_size));
+            ASN__ENCODE_FAILED;
+        }
+
+        /*
+         * The X.696 standard doesn't specify endianness, neither is IEEE 754.
+         * So we assume the network format is big endian.
+         */
+        NativeReal__network_swap(wire_size, sptr, scratch);
+        if(cb(scratch, wire_size, app_key) < 0) {
+            ASN__ENCODE_FAILED;
+        } else {
+            er.encoded = wire_size;
+            ASN__ENCODED_OK(er);
+        }
+    } else {
+        double d = NativeReal__get_double(td, sptr);
+        ssize_t len_len;
+        REAL_t tmp;
+
+        /* Prepare a temporary clean structure */
+        memset(&tmp, 0, sizeof(tmp));
+
+        if(asn_double2REAL(&tmp, d)) {
+            ASN__ENCODE_FAILED;
+        }
+
+        /* Encode a fake REAL */
+        len_len = oer_serialize_length(tmp.size, cb, app_key);
+        if(len_len < 0 || cb(tmp.buf, tmp.size, app_key) < 0) {
+            ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+            ASN__ENCODE_FAILED;
+        } else {
+            er.encoded = len_len + tmp.size;
+            ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp);
+            ASN__ENCODED_OK(er);
+        }
+    }
+}
+
+asn_dec_rval_t
+NativeReal_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                      const asn_TYPE_descriptor_t *td,
+                      const asn_oer_constraints_t *constraints, void **sptr,
+                      const void *ptr, size_t size) {
+    asn_dec_rval_t ok = {RC_OK, 0};
+    double d;
+    ssize_t len_len;
+    size_t real_body_len;
+
+    (void)opt_codec_ctx;
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints && constraints->value.width != 0) {
+        /* X.696 IEEE 754 binary32 and binary64 encoding */
+        uint8_t scratch[sizeof(double)];
+        size_t wire_size = constraints->value.width;
+
+        if(size < wire_size)
+            ASN__DECODE_STARVED;
+
+        /*
+         * The X.696 standard doesn't specify endianness, neither is IEEE 754.
+         * So we assume the network format is big endian.
+         */
+        NativeReal__network_swap(wire_size, ptr, scratch);
+
+
+        switch(wire_size) {
+            case sizeof(double):
+                {
+                    double tmp;
+                    memcpy(&tmp, scratch, sizeof(double));
+                    if(NativeReal__set(td, sptr, tmp) < 0)
+                        ASN__DECODE_FAILED;
+                }
+                break;
+            case sizeof(float):
+                {
+                    float tmp;
+                    memcpy(&tmp, scratch, sizeof(float));
+                    if(NativeReal__set(td, sptr, tmp) < 0)
+                        ASN__DECODE_FAILED;
+                }
+                break;
+        default:
+            ASN__DECODE_FAILED;
+        }
+
+        ok.consumed = wire_size;
+        return ok;
+    }
+
+    len_len = oer_fetch_length(ptr, size, &real_body_len);
+    if(len_len < 0) ASN__DECODE_FAILED;
+    if(len_len == 0) ASN__DECODE_STARVED;
+
+    ptr = (const char *)ptr + len_len;
+    size -= len_len;
+
+    if(real_body_len > size) ASN__DECODE_STARVED;
+
+    {
+        uint8_t scratch[24]; /* Longer than %.16f in decimal */
+        REAL_t tmp;
+        int ret;
+
+        if(real_body_len < sizeof(scratch)) {
+            tmp.buf = scratch;
+            tmp.size = real_body_len;
+        } else {
+            /* This rarely happens: impractically long value */
+            tmp.buf = CALLOC(1, real_body_len + 1);
+            tmp.size = real_body_len;
+            if(!tmp.buf) {
+                ASN__DECODE_FAILED;
+            }
+        }
+
+        memcpy(tmp.buf, ptr, real_body_len);
+        tmp.buf[real_body_len] = '\0';
+
+        ret = asn_REAL2double(&tmp, &d);
+        if(tmp.buf != scratch) FREEMEM(tmp.buf);
+        if(ret) {
+            ASN_DEBUG("REAL decoded in %" ASN_PRI_SIZE " bytes, but can't convert t double",
+                      real_body_len);
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    if(NativeReal__set(td, sptr, d) < 0)
+        ASN__DECODE_FAILED;
+
+    ok.consumed = len_len + real_body_len;
+    return ok;
+}
+
+#endif /* ASN_DISABLE_OER_SUPPORT */
+
+/*
+ * Decode the chunk of XML text encoding REAL.
+ */
+asn_dec_rval_t
+NativeReal_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                      const asn_TYPE_descriptor_t *td, void **sptr,
+                      const char *opt_mname, const void *buf_ptr, size_t size) {
+    asn_dec_rval_t rval;
+       REAL_t st = { 0, 0 };
+       REAL_t *stp = &st;
+
+       rval = REAL_decode_xer(opt_codec_ctx, td, (void **)&stp, opt_mname,
+               buf_ptr, size);
+       if(rval.code == RC_OK) {
+        double d;
+        if(asn_REAL2double(&st, &d) || NativeReal__set(td, sptr, d) < 0) {
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+        }
+       } else {
+        /* Convert all errors into RC_FAIL */
+        rval.consumed = 0;
+       }
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &st);
+       return rval;
+}
+
+asn_enc_rval_t
+NativeReal_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int ilevel, enum xer_encoder_flags_e flags,
+                      asn_app_consume_bytes_f *cb, void *app_key) {
+       double d = NativeReal__get_double(td, sptr);
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)ilevel;
+
+       er.encoded = REAL__dump(d, flags & XER_F_CANONICAL, cb, app_key);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+/*
+ * REAL specific human-readable output.
+ */
+int
+NativeReal_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                 asn_app_consume_bytes_f *cb, void *app_key) {
+    (void)ilevel;      /* Unused argument */
+
+       if(sptr) {
+        double d = NativeReal__get_double(td, sptr);
+        return (REAL__dump(d, 0, cb, app_key) < 0) ? -1 : 0;
+    } else {
+        return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+    }
+}
+
+int
+NativeReal_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                   const void *bptr) {
+
+    if(aptr && bptr) {
+        double a = NativeReal__get_double(td, aptr);
+        double b = NativeReal__get_double(td, bptr);
+
+        /* NaN sorted above everything else */
+        if(asn_isnan(a)) {
+            if(asn_isnan(b)) {
+                return 0;
+            } else {
+                return -1;
+            }
+        } else if(asn_isnan(b)) {
+            return 1;
+        }
+        /* Value comparison. */
+        if(a < b) {
+            return -1;
+        } else if(a > b) {
+            return 1;
+        } else {
+            return 0;
+        }
+    } else if(!aptr) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+void
+NativeReal_free(const asn_TYPE_descriptor_t *td, void *ptr,
+                enum asn_struct_free_method method) {
+    if(!td || !ptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as REAL (%d, %p, Native)",
+               td->name, method, ptr);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET: {
+        const asn_NativeReal_specifics_t *specs;
+        size_t float_size;
+        specs = (const asn_NativeReal_specifics_t *)td->specifics;
+        float_size = specs ? specs->float_size : sizeof(double);
+        memset(ptr, 0, float_size);
+    } break;
+    }
+}
+
+asn_random_fill_result_t
+NativeReal_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                       const asn_encoding_constraints_t *constraints,
+                       size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+#ifndef INFINITY
+#define INFINITY (1.0/0.0)
+#endif
+#ifndef NAN
+#define NAN (0.0/0.0)
+#endif
+    static const double double_values[] = {
+        -M_E, M_E, -M_PI, M_PI, /* Better precision than with floats */
+        -1E+308, 1E+308,
+        /* 2^51 */
+        -2251799813685248.0, 2251799813685248.0,
+        /* 2^52 */
+        -4503599627370496.0, 4503599627370496.0,
+        /* 2^100 */
+        -1267650600228229401496703205376.0, 1267650600228229401496703205376.0,
+        -DBL_MIN, DBL_MIN,
+        -DBL_MAX, DBL_MAX,
+#ifdef  DBL_TRUE_MIN
+        -DBL_TRUE_MIN, DBL_TRUE_MIN
+#endif
+    };
+    static const float float_values[] = {
+        0, -0.0, -1, 1, -M_E, M_E, -3.14, 3.14, -M_PI, M_PI, -255, 255,
+        -FLT_MIN, FLT_MIN,
+        -FLT_MAX, FLT_MAX,
+#ifdef  FLT_TRUE_MIN
+        -FLT_TRUE_MIN, FLT_TRUE_MIN,
+#endif
+        INFINITY, -INFINITY, NAN
+    };
+    ssize_t float_set_size = NativeReal__float_size(td);
+    const size_t n_doubles = sizeof(double_values) / sizeof(double_values[0]);
+    const size_t n_floats = sizeof(float_values) / sizeof(float_values[0]);
+    double d;
+
+    (void)constraints;
+
+    if(max_length == 0) return result_skipped;
+
+    if(float_set_size == sizeof(double) && asn_random_between(0, 1) == 0) {
+        d = double_values[asn_random_between(0, n_doubles - 1)];
+    } else {
+        d = float_values[asn_random_between(0, n_floats - 1)];
+    }
+
+    if(NativeReal__set(td, sptr, d) < 0) {
+        return result_failed;
+    }
+
+    result_ok.length = float_set_size;
+    return result_ok;
+}
+
+
+/*
+ * Local helper functions.
+ */
+
+static size_t
+NativeReal__float_size(const asn_TYPE_descriptor_t *td) {
+    const asn_NativeReal_specifics_t *specs =
+        (const asn_NativeReal_specifics_t *)td->specifics;
+    return specs ? specs->float_size : sizeof(double);
+}
+
+static double
+NativeReal__get_double(const asn_TYPE_descriptor_t *td, const void *ptr) {
+    size_t float_size = NativeReal__float_size(td);
+    if(float_size == sizeof(float)) {
+        return *(const float *)ptr;
+    } else {
+        return *(const double *)ptr;
+    }
+}
+
+static ssize_t  /* Returns -1 or float size. */
+NativeReal__set(const asn_TYPE_descriptor_t *td, void **sptr, double d) {
+    size_t float_size = NativeReal__float_size(td);
+    void *native;
+
+    if(!(native = *sptr)) {
+        native = (*sptr = CALLOC(1, float_size));
+        if(!native) {
+            return -1;
+        }
+    }
+
+    if(float_size == sizeof(float)) {
+        if(asn_double2float(d, (float *)native)) {
+            return -1;
+        }
+    } else {
+        *(double *)native = d;
+    }
+
+    return float_size;
+}
+
diff --git a/skeletons/NativeReal.h b/skeletons/NativeReal.h
new file mode 100644 (file)
index 0000000..1bfdc96
--- /dev/null
@@ -0,0 +1,48 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This type differs from the standard REAL in that it is modelled using
+ * the fixed machine type (double), so it can hold only values of
+ * limited precision. There is no explicit type (i.e., NativeReal_t).
+ * Use of this type is normally enabled by -fnative-types.
+ */
+#ifndef        ASN_TYPE_NativeReal_H
+#define        ASN_TYPE_NativeReal_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_NativeReal_specifics_s {
+    unsigned float_size; /* sizeof(float) or sizeof(double) */
+} asn_NativeReal_specifics_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_NativeReal;
+extern asn_TYPE_operation_t asn_OP_NativeReal;
+
+asn_struct_free_f  NativeReal_free;
+asn_struct_print_f NativeReal_print;
+asn_struct_compare_f NativeReal_compare;
+ber_type_decoder_f NativeReal_decode_ber;
+der_type_encoder_f NativeReal_encode_der;
+per_type_decoder_f NativeReal_decode_uper;
+per_type_encoder_f NativeReal_encode_uper;
+per_type_decoder_f NativeReal_decode_aper;
+per_type_encoder_f NativeReal_encode_aper;
+oer_type_decoder_f NativeReal_decode_oer;
+oer_type_encoder_f NativeReal_encode_oer;
+xer_type_decoder_f NativeReal_decode_xer;
+xer_type_encoder_f NativeReal_encode_xer;
+asn_random_fill_f  NativeReal_random_fill;
+
+#define NativeReal_constraint  asn_generic_no_constraint
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_TYPE_NativeReal_H */
diff --git a/skeletons/NumericString.c b/skeletons/NumericString.c
new file mode 100644 (file)
index 0000000..ec98ba5
--- /dev/null
@@ -0,0 +1,121 @@
+/*-
+ * Copyright (c) 2003, 2006 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <NumericString.h>
+
+/*
+ * NumericString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_NumericString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (18 << 2)),  /* [UNIVERSAL 18] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static int asn_DEF_NumericString_v2c(unsigned int value) {
+       switch(value) {
+       case 0x20: return 0;
+       case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+               return value - (0x30 - 1);
+       }
+       return -1;
+}
+static int asn_DEF_NumericString_c2v(unsigned int code) {
+       if(code > 0) {
+               if(code <= 10)
+                       return code + (0x30 - 1);
+               else
+                       return -1;
+       } else {
+               return 0x20;
+       }
+}
+static asn_per_constraints_t asn_DEF_NumericString_per_constraints = {
+       { APC_CONSTRAINED, 4, 4, 0x20, 0x39 },  /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       asn_DEF_NumericString_v2c,
+       asn_DEF_NumericString_c2v
+};
+asn_TYPE_operation_t asn_OP_NumericString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,   /* ASCII subset */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_NumericString = {
+       "NumericString",
+       "NumericString",
+       &asn_OP_NumericString,
+       asn_DEF_NumericString_tags,
+       sizeof(asn_DEF_NumericString_tags)
+         / sizeof(asn_DEF_NumericString_tags[0]) - 1,
+       asn_DEF_NumericString_tags,
+       sizeof(asn_DEF_NumericString_tags)
+         / sizeof(asn_DEF_NumericString_tags[0]),
+       { 0, &asn_DEF_NumericString_per_constraints, NumericString_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+int
+NumericString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                         asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const NumericString_t *st = (const NumericString_t *)sptr;
+
+       if(st && st->buf) {
+               uint8_t *buf = st->buf;
+               uint8_t *end = buf + st->size;
+
+               /*
+                * Check the alphabet of the NumericString.
+                * ASN.1:1984 (X.409)
+                */
+               for(; buf < end; buf++) {
+                       switch(*buf) {
+                       case 0x20:
+                       case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+                       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+                               continue;
+                       }
+                       ASN__CTFAIL(app_key, td, sptr,
+                               "%s: value byte %ld (%d) "
+                               "not in NumericString alphabet (%s:%d)",
+                               td->name,
+                               (long)((buf - st->buf) + 1),
+                               *buf,
+                               __FILE__, __LINE__);
+                       return -1;
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/skeletons/NumericString.h b/skeletons/NumericString.h
new file mode 100644 (file)
index 0000000..5f33484
--- /dev/null
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _NumericString_H_
+#define        _NumericString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t NumericString_t;        /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_NumericString;
+extern asn_TYPE_operation_t asn_OP_NumericString;
+
+asn_constr_check_f NumericString_constraint;
+
+#define NumericString_free          OCTET_STRING_free
+#define NumericString_print         OCTET_STRING_print_utf8
+#define NumericString_compare       OCTET_STRING_compare
+#define NumericString_decode_ber    OCTET_STRING_decode_ber
+#define NumericString_encode_der    OCTET_STRING_encode_der
+#define NumericString_decode_xer    OCTET_STRING_decode_xer_utf8
+#define NumericString_encode_xer    OCTET_STRING_encode_xer_utf8
+#define NumericString_decode_uper   OCTET_STRING_decode_uper
+#define NumericString_encode_uper   OCTET_STRING_encode_uper
+#define NumericString_decode_aper   OCTET_STRING_decode_aper
+#define NumericString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _NumericString_H_ */
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
new file mode 100644 (file)
index 0000000..8dccf01
--- /dev/null
@@ -0,0 +1,656 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <INTEGER.h>
+#include <OBJECT_IDENTIFIER.h>
+#include <OCTET_STRING.h>
+#include <limits.h>    /* for CHAR_BIT */
+#include <errno.h>
+
+/*
+ * OBJECT IDENTIFIER basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_OBJECT_IDENTIFIER_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (6 << 2))
+};
+asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER = {
+       ASN__PRIMITIVE_TYPE_free,
+       OBJECT_IDENTIFIER_print,
+       OCTET_STRING_compare,   /* Implemented in terms of a string comparison */
+       ber_decode_primitive,
+       der_encode_primitive,
+       OBJECT_IDENTIFIER_decode_xer,
+       OBJECT_IDENTIFIER_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OBJECT_IDENTIFIER_decode_oer,
+       OBJECT_IDENTIFIER_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OBJECT_IDENTIFIER_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER = {
+       "OBJECT IDENTIFIER",
+       "OBJECT_IDENTIFIER",
+       &asn_OP_OBJECT_IDENTIFIER,
+       asn_DEF_OBJECT_IDENTIFIER_tags,
+       sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
+           / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]),
+       asn_DEF_OBJECT_IDENTIFIER_tags, /* Same as above */
+       sizeof(asn_DEF_OBJECT_IDENTIFIER_tags)
+           / sizeof(asn_DEF_OBJECT_IDENTIFIER_tags[0]),
+       { 0, 0, OBJECT_IDENTIFIER_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+int
+OBJECT_IDENTIFIER_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             asn_app_constraint_failed_f *ctfailcb,
+                             void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+
+       if(st && st->buf) {
+               if(st->size < 1) {
+                       ASN__CTFAIL(app_key, td, sptr,
+                               "%s: at least one numerical value "
+                               "expected (%s:%d)",
+                               td->name, __FILE__, __LINE__);
+                       return -1;
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
+
+static ssize_t
+OBJECT_IDENTIFIER_get_first_arcs(const uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t *arc0, asn_oid_arc_t *arc1) {
+    asn_oid_arc_t value;
+
+    ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(arcbuf, arcbuf_len, &value);
+    if(rd <= 0) return rd;
+
+    if(value >= 80) {
+        *arc0 = 2;
+        *arc1 = value - 80;
+    } else if(value >= 40) {
+        *arc0 = 1;
+        *arc1 = value - 40;
+    } else {
+        *arc0 = 0;
+        *arc1 = value;
+    }
+
+    return rd;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t *ret_value) {
+    const uint8_t *b = arcbuf;
+    const uint8_t *arcend = arcbuf + arcbuf_len; /* End of arc */
+
+    if(arcbuf == arcend) {
+        return 0;
+    } else {
+        asn_oid_arc_t accum;
+       asn_oid_arc_t upper_limit = (ASN_OID_ARC_MAX >> 7);
+       /* When the value reaches "upper_limit", it can take */
+       /* at most one more digit. If it exceeds "upper_limit" */
+       /* but there are more digits - it's an Overflow condition */
+        /* Gather all bits into the accumulator */
+        for(accum = 0; b < arcend; b++) {
+            accum = (accum << 7) | (*b & ~0x80);
+            if((*b & 0x80) == 0) { // no more digits
+                if(accum <= ASN_OID_ARC_MAX) {
+                    *ret_value = accum;
+                    return 1 + (b - arcbuf);
+                } else {
+                    errno = ERANGE; /* Overflow */
+                    return -1;
+                }
+            } else { // to make sure we aren't wrapping around
+             if(accum > upper_limit) {
+                   errno = ERANGE; /* Overflow */
+                   return -1;
+             }
+           }
+        }
+        errno = EINVAL;
+        return -1;
+    }
+
+}
+
+static ssize_t
+OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+    char scratch[32];
+    asn_oid_arc_t arc0, arc1;
+    size_t produced = 0;
+    size_t off = 0;
+    ssize_t rd;
+    int ret;
+
+    rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1);
+    if(rd <= 0) {
+        return -1;
+    }
+
+    ret = snprintf(scratch, sizeof(scratch), "%"PRIu32".%"PRIu32, arc0, arc1);
+    if(ret >= (ssize_t)sizeof(scratch)) {
+        return -1;
+    }
+    produced += ret;
+    if(cb(scratch, ret, app_key) < 0)
+        return -1;
+
+    for(off = rd; ; ) {
+        asn_oid_arc_t arc;
+        rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off,
+                                              &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            off += rd;
+            assert(off <= st->size);
+            ret = snprintf(scratch, sizeof(scratch), ".%" PRIu32, arc);
+            if(ret >= (ssize_t)sizeof(scratch)) {
+                return -1;
+            }
+            produced += ret;
+            if(cb(scratch, ret, app_key) < 0) return -1;
+        }
+    }
+
+    if(off != st->size) {
+        ASN_DEBUG("Could not scan to the end of Object Identifier");
+        return -1;
+    }
+
+       return produced;
+}
+
+static enum xer_pbd_rval
+OBJECT_IDENTIFIER__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                                   const void *chunk_buf, size_t chunk_size) {
+    OBJECT_IDENTIFIER_t *st = (OBJECT_IDENTIFIER_t *)sptr;
+       const char *chunk_end = (const char *)chunk_buf + chunk_size;
+       const char *endptr;
+       asn_oid_arc_t s_arcs[10];
+       asn_oid_arc_t *arcs = s_arcs;
+       ssize_t num_arcs;
+       ssize_t ret;
+
+       (void)td;
+
+    num_arcs = OBJECT_IDENTIFIER_parse_arcs(
+        (const char *)chunk_buf, chunk_size, arcs,
+        sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr);
+    if(num_arcs < 0) {
+               /* Expecting more than zero arcs */
+               return XPBD_BROKEN_ENCODING;
+       } else if(num_arcs == 0) {
+               return XPBD_NOT_BODY_IGNORE;
+       }
+       assert(endptr == chunk_end);
+
+       if((size_t)num_arcs > sizeof(s_arcs)/sizeof(s_arcs[0])) {
+               arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(asn_oid_arc_t));
+               if(!arcs) return XPBD_SYSTEM_FAILURE;
+        ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size,
+                                           arcs, num_arcs, &endptr);
+        if(ret != num_arcs)
+                       return XPBD_SYSTEM_FAILURE;     /* assert?.. */
+       }
+
+       /*
+        * Convert arcs into BER representation.
+        */
+       ret = OBJECT_IDENTIFIER_set_arcs(st, arcs, num_arcs);
+       if(arcs != s_arcs) FREEMEM(arcs);
+
+       return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+OBJECT_IDENTIFIER_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td, void **sptr,
+                             const char *opt_mname, const void *buf_ptr,
+                             size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(OBJECT_IDENTIFIER_t), opt_mname,
+                       buf_ptr, size, OBJECT_IDENTIFIER__xer_body_decode);
+}
+
+asn_enc_rval_t
+OBJECT_IDENTIFIER_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             int ilevel, enum xer_encoder_flags_e flags,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+    asn_enc_rval_t er = {0,0,0};
+
+    (void)ilevel;
+    (void)flags;
+
+    if(!st || !st->buf) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = OBJECT_IDENTIFIER__dump_body(st, cb, app_key);
+    if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+    ASN__ENCODED_OK(er);
+}
+
+int
+OBJECT_IDENTIFIER_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, asn_app_consume_bytes_f *cb,
+                        void *app_key) {
+    const OBJECT_IDENTIFIER_t *st = (const OBJECT_IDENTIFIER_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(!st || !st->buf)
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /* Dump preamble */
+       if(cb("{ ", 2, app_key) < 0)
+               return -1;
+
+    if(OBJECT_IDENTIFIER__dump_body(st, cb, app_key) < 0) {
+        return -1;
+    }
+
+    return (cb(" }", 2, app_key) < 0) ? -1 : 0;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *st, asn_oid_arc_t *arcs,
+                           size_t arc_slots) {
+    asn_oid_arc_t arc0, arc1;
+    size_t num_arcs = 0;
+    size_t off;
+    ssize_t rd;
+
+    if(!st || !st->buf) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    rd = OBJECT_IDENTIFIER_get_first_arcs(st->buf, st->size, &arc0, &arc1);
+    if(rd <= 0) {
+        return -1;
+    }
+    num_arcs = 2;
+    switch(arc_slots) {
+    default:
+    case 2:
+        arcs[1] = arc1;
+        /* Fall through */
+    case 1:
+        arcs[0] = arc0;
+        /* Fall through */
+    case 0:
+        break;
+    }
+
+    for(off = rd; ; ) {
+        asn_oid_arc_t arc;
+        rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off, st->size - off,
+                                              &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            off += rd;
+            if(num_arcs < arc_slots) {
+                arcs[num_arcs] = arc;
+            }
+            num_arcs++;
+        }
+    }
+
+    if(off != st->size) {
+        return -1;
+    }
+
+    return num_arcs;
+}
+
+
+/*
+ * Save the single value as an object identifier arc.
+ */
+ssize_t
+OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
+                                 asn_oid_arc_t value) {
+    /*
+        * The following conditions must hold:
+        * assert(arcbuf);
+        */
+    uint8_t scratch[((sizeof(value) * CHAR_BIT + 6) / 7)];
+    uint8_t *scratch_end = &scratch[sizeof(scratch)-1];
+    uint8_t *b;
+    size_t result_len;
+    uint8_t mask;
+
+    for(b = scratch_end, mask = 0; ; mask = 0x80, b--) {
+        *b = mask | (value & 0x7f);
+        value >>= 7;
+        if(!value) {
+            break;
+        }
+    }
+
+    result_len = (scratch_end - b) + 1;
+
+    if(result_len > arcbuf_len) {
+        return -1;
+    }
+
+    memcpy(arcbuf, b, result_len);
+
+       return result_len;
+}
+
+int
+OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *st, const asn_oid_arc_t *arcs,
+                           size_t arc_slots) {
+    uint8_t *buf;
+    uint8_t *bp;
+    ssize_t wrote;
+    asn_oid_arc_t arc0;
+    asn_oid_arc_t arc1;
+    size_t size;
+    size_t i;
+
+    if(!st || !arcs || arc_slots < 2) {
+        errno = EINVAL;
+               return -1;
+       }
+
+    arc0 = arcs[0];
+    arc1 = arcs[1];
+
+       if(arc0 <= 1) {
+               if(arc1 >= 40) {
+                       /* 8.19.4: At most 39 subsequent values (including 0) */
+                       errno = ERANGE;
+                       return -1;
+               }
+    } else if(arc0 == 2) {
+        if(arc1 > ASN_OID_ARC_MAX - 80) {
+            errno = ERANGE;
+            return -1;
+        }
+    } else if(arc0 > 2) {
+        /* 8.19.4: Only three values are allocated from the root node */
+        errno = ERANGE;
+        return -1;
+    }
+
+    /*
+        * After above tests it is known that the value of arc0 is completely
+        * trustworthy (0..2). However, the arc1's value is still meaningless.
+        */
+
+    /*
+     * Roughly estimate the maximum size necessary to encode these arcs.
+     * This estimation implicitly takes in account the following facts,
+     * that cancel each other:
+     *         * the first two arcs are encoded in a single value.
+     *         * the first value may require more space (+1 byte)
+     *         * the value of the first arc which is in range (0..2)
+     */
+    size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arc_slots;
+    bp = buf = (uint8_t *)MALLOC(size + 1);
+    if(!buf) {
+        /* ENOMEM */
+        return -1;
+    }
+
+    wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arc0 * 40 + arc1);
+    if(wrote <= 0) {
+        FREEMEM(buf);
+        return -1;
+    }
+    assert((size_t)wrote <= size);
+    bp += wrote;
+    size -= wrote;
+
+    for(i = 2; i < arc_slots; i++) {
+               wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]);
+        if(wrote <= 0) {
+            FREEMEM(buf);
+            return -1;
+        }
+        assert((size_t)wrote <= size);
+        bp += wrote;
+        size -= wrote;
+    }
+
+    /*
+        * Replace buffer.
+        */
+       st->size = bp - buf;
+       bp = st->buf;
+       st->buf = buf;
+       st->buf[st->size] = '\0';
+       if(bp) FREEMEM(bp);
+
+       return 0;
+}
+
+ssize_t
+OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length,
+                             asn_oid_arc_t *arcs, size_t arcs_count,
+                             const char **opt_oid_text_end) {
+    size_t num_arcs = 0;
+    const char *oid_end;
+       enum {
+               ST_LEADSPACE,
+               ST_TAILSPACE,
+               ST_AFTERVALUE,  /* Next character ought to be '.' or a space */
+               ST_WAITDIGITS   /* Next character is expected to be a digit */
+       } state = ST_LEADSPACE;
+
+       if(!oid_text || oid_txt_length < -1 || (arcs_count && !arcs)) {
+               if(opt_oid_text_end) *opt_oid_text_end = oid_text;
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(oid_txt_length == -1)
+               oid_txt_length = strlen(oid_text);
+
+#define _OID_CAPTURE_ARC(oid_text, oid_end)                       \
+    do {                                                          \
+        const char *endp = oid_end;                               \
+        unsigned long value;                                      \
+        switch(asn_strtoul_lim(oid_text, &endp, &value)) {        \
+        case ASN_STRTOX_EXTRA_DATA:                               \
+        case ASN_STRTOX_OK:                                       \
+            if(value <= ASN_OID_ARC_MAX) {                        \
+                if(num_arcs < arcs_count) arcs[num_arcs] = value; \
+                num_arcs++;                                       \
+                oid_text = endp - 1;                              \
+                break;                                            \
+            }                                                     \
+            /* Fall through */                                    \
+        case ASN_STRTOX_ERROR_RANGE:                              \
+            if(opt_oid_text_end) *opt_oid_text_end = oid_text;    \
+            errno = ERANGE;                                       \
+            return -1;                                            \
+        case ASN_STRTOX_ERROR_INVAL:                              \
+        case ASN_STRTOX_EXPECT_MORE:                              \
+            if(opt_oid_text_end) *opt_oid_text_end = oid_text;    \
+            errno = EINVAL;                                       \
+            return -1;                                            \
+        }                                                         \
+    } while(0)
+
+    for(oid_end = oid_text + oid_txt_length; oid_text<oid_end; oid_text++) {
+           switch(*oid_text) {
+           case 0x09: case 0x0a: case 0x0d: case 0x20: /* whitespace */
+               switch(state) {
+               case ST_LEADSPACE:
+               case ST_TAILSPACE:
+                       continue;
+               case ST_AFTERVALUE:
+                       state = ST_TAILSPACE;
+                       continue;
+               case ST_WAITDIGITS:
+                       break;  /* Digits expected after ".", got whitespace */
+               }
+               break;
+           case 0x2e:  /* '.' */
+               switch(state) {
+               case ST_LEADSPACE:
+               case ST_TAILSPACE:
+               case ST_WAITDIGITS:
+                       if(opt_oid_text_end)
+                               *opt_oid_text_end = oid_text;
+                       errno = EINVAL; /* Broken OID */
+                       return -1;
+                       break;
+               case ST_AFTERVALUE:
+                       state = ST_WAITDIGITS;
+                       continue;
+               }
+               break;
+           case 0x30: case 0x31: case 0x32: case 0x33: case 0x34:
+           case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+               switch(state) {
+               case ST_TAILSPACE:
+               case ST_AFTERVALUE:
+                       if(opt_oid_text_end)
+                               *opt_oid_text_end = oid_text;
+                       errno = EINVAL; /* "1. 1" => broken OID */
+                       return -1;
+               case ST_LEADSPACE:
+               case ST_WAITDIGITS:
+                       _OID_CAPTURE_ARC(oid_text, oid_end);
+                       state = ST_AFTERVALUE;
+                       continue;
+               }
+               break;
+           default:
+               /* Unexpected symbols */
+               state = ST_WAITDIGITS;
+               break;
+           } /* switch() */
+           break;
+       } /* for() */
+
+
+       if(opt_oid_text_end) *opt_oid_text_end = oid_text;
+
+       /* Finalize last arc */
+       switch(state) {
+       case ST_LEADSPACE:
+               return 0; /* No OID found in input data */
+       case ST_WAITDIGITS:
+               errno = EINVAL; /* Broken OID */
+               return -1;
+       case ST_AFTERVALUE:
+       case ST_TAILSPACE:
+               return num_arcs;
+       }
+
+       errno = EINVAL; /* Broken OID */
+       return -1;
+}
+
+/*
+ * Generate values from the list of interesting values, or just a random
+ * value up to the upper limit.
+ */
+static asn_oid_arc_t
+OBJECT_IDENTIFIER__biased_random_arc(asn_oid_arc_t upper_bound) {
+    const asn_oid_arc_t values[] = {0, 1, 127, 128, 129, 254, 255, 256};
+    size_t idx;
+
+    switch(asn_random_between(0, 2)) {
+    case 0:
+        idx = asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1);
+        if(values[idx] < upper_bound) {
+            return values[idx];
+        }
+        /* Fall through */
+    case 1:
+        return asn_random_between(0, upper_bound);
+    case 2:
+    default:
+        return upper_bound;
+    }
+}
+
+asn_random_fill_result_t
+OBJECT_IDENTIFIER_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                              const asn_encoding_constraints_t *constraints,
+                              size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    OBJECT_IDENTIFIER_t *st;
+    asn_oid_arc_t arcs[5];
+    size_t arcs_len = asn_random_between(2, 5);
+    size_t i;
+
+    (void)constraints;
+
+    if(max_length < arcs_len) return result_skipped;
+
+    if(*sptr) {
+        st = *sptr;
+    } else {
+        st = CALLOC(1, sizeof(*st));
+    }
+
+    arcs[0] = asn_random_between(0, 2);
+    arcs[1] = OBJECT_IDENTIFIER__biased_random_arc(
+        arcs[0] <= 1 ? 39 : (ASN_OID_ARC_MAX - 80));
+    for(i = 2; i < arcs_len; i++) {
+        arcs[i] = OBJECT_IDENTIFIER__biased_random_arc(ASN_OID_ARC_MAX);
+    }
+
+    if(OBJECT_IDENTIFIER_set_arcs(st, arcs, arcs_len)) {
+        if(st != *sptr) {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    }
+
+    *sptr = st;
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/skeletons/OBJECT_IDENTIFIER.h b/skeletons/OBJECT_IDENTIFIER.h
new file mode 100644 (file)
index 0000000..087c6fd
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _OBJECT_IDENTIFIER_H_
+#define        _OBJECT_IDENTIFIER_H_
+
+#include <asn_application.h>
+#include <asn_codecs_prim.h>
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef uint32_t asn_oid_arc_t;
+#define ASN_OID_ARC_MAX (~((asn_oid_arc_t)0))
+
+typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER;
+extern asn_TYPE_operation_t asn_OP_OBJECT_IDENTIFIER;
+
+asn_struct_print_f OBJECT_IDENTIFIER_print;
+asn_constr_check_f OBJECT_IDENTIFIER_constraint;
+der_type_encoder_f OBJECT_IDENTIFIER_encode_der;
+xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
+xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
+asn_random_fill_f  OBJECT_IDENTIFIER_random_fill;
+
+#define OBJECT_IDENTIFIER_free           ASN__PRIMITIVE_TYPE_free
+#define OBJECT_IDENTIFIER_compare        OCTET_STRING_compare
+#define OBJECT_IDENTIFIER_decode_ber     ber_decode_primitive
+#define OBJECT_IDENTIFIER_encode_der     der_encode_primitive
+#define OBJECT_IDENTIFIER_decode_oer     oer_decode_primitive
+#define OBJECT_IDENTIFIER_encode_oer     oer_encode_primitive
+#define OBJECT_IDENTIFIER_decode_uper    OCTET_STRING_decode_uper
+#define OBJECT_IDENTIFIER_encode_uper    OCTET_STRING_encode_uper
+#define OBJECT_IDENTIFIER_decode_aper    OCTET_STRING_decode_aper
+#define OBJECT_IDENTIFIER_encode_aper    OCTET_STRING_encode_aper
+
+/**********************************
+ * Some handy conversion routines *
+ **********************************/
+
+/*
+ * This function fills an (arcs) array with OBJECT IDENTIFIER arcs
+ * up to specified (arc_slots) elements.
+ *
+ * EXAMPLE:
+ *     void print_arcs(OBJECT_IDENTIFIER_t *oid) {
+ *             asn_oid_arc_t fixed_arcs[10];   // Try with fixed space first
+ *             asn_oid_arc_t *arcs = fixed_arcs;
+ *             size_t arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10
+ *             ssize_t count;  // Real number of arcs.
+ *             int i;
+ *
+ *             count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ *             // If necessary, reallocate arcs array and try again.
+ *             if(count > arc_slots) {
+ *                     arc_slots = count;
+ *                     arcs = malloc(sizeof(asn_oid_arc_t) * arc_slots);
+ *                     if(!arcs) return;
+ *                     count = OBJECT_IDENTIFIER_get_arcs(oid, arcs, arc_slots);
+ *                     assert(count == arc_slots);
+ *             }
+ *
+ *             // Print the contents of the arcs array.
+ *             for(i = 0; i < count; i++)
+ *                     printf("%"PRIu32"\n", arcs[i]);
+ *
+ *             // Avoid memory leak.
+ *             if(arcs != fixed_arcs) free(arcs);
+ *     }
+ *
+ * RETURN VALUES:
+ * -1/EINVAL:  Invalid arguments (oid is missing)
+ * -1/ERANGE:  One or more arcs have value out of array cell type range.
+ * >=0:                Number of arcs contained in the OBJECT IDENTIFIER
+ *
+ * WARNING: The function always returns the actual number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ */
+ssize_t OBJECT_IDENTIFIER_get_arcs(const OBJECT_IDENTIFIER_t *oid,
+                                   asn_oid_arc_t *arcs, size_t arc_slots);
+
+/*
+ * This functions initializes the OBJECT IDENTIFIER object with
+ * the given set of arcs.
+ * The minimum of two arcs must be present; some restrictions apply.
+ * RETURN VALUES:
+ * -1/EINVAL:  Invalid arguments
+ * -1/ERANGE:  The first two arcs do not conform to ASN.1 restrictions.
+ * -1/ENOMEM:  Memory allocation failed
+ * 0:          The object was initialized with new arcs.
+ */
+int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *oid,
+                               const asn_oid_arc_t *arcs, size_t arcs_count);
+
+
+/*
+ * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363").
+ * No arc can exceed the (0..ASN_OID_ARC_MAX, which is the same as UINT32_MAX).
+ * This function is not specific to OBJECT IDENTIFIER, it may be used to parse
+ * the RELATIVE-OID data, or any other data consisting of dot-separated
+ * series of numeric values.
+ *
+ * If (oid_txt_length == -1), the strlen() will be invoked to determine the
+ * size of the (oid_text) string.
+ * 
+ * After return, the optional (opt_oid_text_end) is set to the character after
+ * the last parsed one. (opt_oid_text_end) is never less than (oid_text).
+ * 
+ * RETURN VALUES:
+ *   -1:       Parse error.
+ * >= 0:       Number of arcs contained in the OBJECT IDENTIFIER.
+ * 
+ * WARNING: The function always returns the real number of arcs,
+ * even if there is no sufficient (arc_slots) provided.
+ * This is useful for (arc_slots) value estimation.
+ */
+ssize_t OBJECT_IDENTIFIER_parse_arcs(const char *oid_text,
+                                     ssize_t oid_txt_length,
+                                     asn_oid_arc_t *arcs, size_t arcs_count,
+                                     const char **opt_oid_text_end);
+
+/*
+ * Internal functions.
+ * Used by RELATIVE-OID implementation in particular.
+ */
+
+/*
+ * Retrieve a single arc of size from the (arcbuf) buffer.
+ * RETURN VALUES:
+ *  -1: Failed to retrieve the value from the (arcbuf).
+ *  >0: Number of bytes consumed from the (arcbuf), <= (arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_get_single_arc(const uint8_t *arcbuf,
+                                         size_t arcbuf_len,
+                                         asn_oid_arc_t *ret_value);
+
+/*
+ * Write the unterminated arc value into the (arcbuf) which has the size at
+ * least (arcbuf_len).
+ * RETURN VALUES:
+ *   -1: (arcbuf_len) size is not sufficient to write the value.
+ *  <n>: Number of bytes appended to the arcbuf (<= arcbuf_len).
+ */
+ssize_t OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf, size_t arcbuf_len,
+                                         asn_oid_arc_t arc_value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OBJECT_IDENTIFIER_H_ */
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
new file mode 100644 (file)
index 0000000..432ce5a
--- /dev/null
@@ -0,0 +1,2409 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <OCTET_STRING.h>
+#include <BIT_STRING.h>        /* for .bits_unused member */
+#include <errno.h>
+
+/*
+ * OCTET STRING basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs = {
+       sizeof(OCTET_STRING_t),
+       offsetof(OCTET_STRING_t, _asn_ctx),
+       ASN_OSUBV_STR
+};
+
+asn_TYPE_operation_t asn_OP_OCTET_STRING = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,     /* OCTET STRING generally means a non-ascii sequence */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,       /* Unaligned PER decoder */
+       OCTET_STRING_encode_uper,       /* Unaligned PER encoder */
+       OCTET_STRING_decode_aper,       /* Aligned PER decoder */
+       OCTET_STRING_encode_aper,       /* Aligned PER encoder */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = {
+       "OCTET STRING",         /* Canonical name */
+       "OCTET_STRING",         /* XML tag name */
+       &asn_OP_OCTET_STRING,
+       asn_DEF_OCTET_STRING_tags,
+       sizeof(asn_DEF_OCTET_STRING_tags)
+         / sizeof(asn_DEF_OCTET_STRING_tags[0]),
+       asn_DEF_OCTET_STRING_tags,      /* Same as above */
+       sizeof(asn_DEF_OCTET_STRING_tags)
+         / sizeof(asn_DEF_OCTET_STRING_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_OCTET_STRING_specs
+};
+
+#undef _CH_PHASE
+#undef NEXT_PHASE
+#undef PREV_PHASE
+#define        _CH_PHASE(ctx, inc) do {                                        \
+               if(ctx->phase == 0)                                     \
+                       ctx->context = 0;                               \
+               ctx->phase += inc;                                      \
+       } while(0)
+#define        NEXT_PHASE(ctx) _CH_PHASE(ctx, +1)
+#define        PREV_PHASE(ctx) _CH_PHASE(ctx, -1)
+
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {                                    \
+               size_t num = (num_bytes);                               \
+               buf_ptr = ((const char *)buf_ptr) + num;                \
+               size -= num;                                            \
+               consumed_myself += num;                                 \
+       } while(0)
+
+#undef RETURN
+#define        RETURN(_code)   do {                                            \
+               asn_dec_rval_t tmprval;                                 \
+               tmprval.code = _code;                                   \
+               tmprval.consumed = consumed_myself;                     \
+               return tmprval;                                         \
+       } while(0)
+
+#undef APPEND
+#define        APPEND(bufptr, bufsize) do {                                    \
+               size_t _bs = (bufsize);         /* Append size */       \
+               size_t _ns = ctx->context;      /* Allocated now */     \
+               size_t _es = st->size + _bs;    /* Expected size */     \
+               /* int is really a typeof(st->size): */                 \
+               if((int)_es < 0) RETURN(RC_FAIL);                       \
+               if(_ns <= _es) {                                        \
+                       void *ptr;                                      \
+                       /* Be nice and round to the memory allocator */ \
+                       do { _ns = _ns ? _ns << 1 : 16; }               \
+                           while(_ns <= _es);                          \
+                       /* int is really a typeof(st->size): */         \
+                       if((int)_ns < 0) RETURN(RC_FAIL);               \
+                       ptr = REALLOC(st->buf, _ns);                    \
+                       if(ptr) {                                       \
+                               st->buf = (uint8_t *)ptr;               \
+                               ctx->context = _ns;                     \
+                       } else {                                        \
+                               RETURN(RC_FAIL);                        \
+                       }                                               \
+                       ASN_DEBUG("Reallocating into %ld", (long)_ns);  \
+               }                                                       \
+               memcpy(st->buf + st->size, bufptr, _bs);                \
+               /* Convenient nul-termination */                        \
+               st->buf[_es] = '\0';                                    \
+               st->size = _es;                                         \
+       } while(0)
+
+/*
+ * The main reason why ASN.1 is still alive is that too much time and effort
+ * is necessary for learning it more or less adequately, thus creating a gut
+ * necessity to demonstrate that aquired skill everywhere afterwards.
+ * No, I am not going to explain what the following stuff is.
+ */
+struct _stack_el {
+    ber_tlv_len_t left;     /* What's left to read (or -1) */
+    ber_tlv_len_t got;      /* What was actually processed */
+    unsigned cont_level;    /* Depth of subcontainment */
+    int want_nulls;         /* Want null "end of content" octets? */
+    int bits_chopped;       /* Flag in BIT STRING mode */
+    ber_tlv_tag_t tag;      /* For debugging purposes */
+    struct _stack_el *prev;
+    struct _stack_el *next;
+};
+struct _stack {
+       struct _stack_el *tail;
+       struct _stack_el *cur_ptr;
+};
+
+static struct _stack_el *
+OS__add_stack_el(struct _stack *st) {
+       struct _stack_el *nel;
+
+       /*
+        * Reuse the old stack frame or allocate a new one.
+        */
+       if(st->cur_ptr && st->cur_ptr->next) {
+               nel = st->cur_ptr->next;
+               nel->bits_chopped = 0;
+               nel->got = 0;
+               /* Retain the nel->cont_level, it's correct. */
+       } else {
+               nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el));
+               if(nel == NULL)
+                       return NULL;
+       
+               if(st->tail) {
+                       /* Increase a subcontainment depth */
+                       nel->cont_level = st->tail->cont_level + 1;
+                       st->tail->next = nel;
+               }
+               nel->prev = st->tail;
+               st->tail = nel;
+       }
+
+       st->cur_ptr = nel;
+
+       return nel;
+}
+
+static struct _stack *
+_new_stack(void) {
+       return (struct _stack *)CALLOC(1, sizeof(struct _stack));
+}
+
+/*
+ * Decode OCTET STRING type.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                        const asn_TYPE_descriptor_t *td, void **sptr,
+                        const void *buf_ptr, size_t size, int tag_mode) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+                               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                               : &asn_SPC_OCTET_STRING_specs;
+       BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+       asn_dec_rval_t rval;
+       asn_struct_ctx_t *ctx;
+       ssize_t consumed_myself = 0;
+       struct _stack *stck;            /* Expectations stack structure */
+       struct _stack_el *sel = 0;      /* Stack element */
+       int tlv_constr;
+       enum asn_OS_Subvariant type_variant = specs->subvariant;
+
+       ASN_DEBUG("Decoding %s as %s (frame %ld)",
+               td->name,
+               (type_variant == ASN_OSUBV_STR) ?
+                       "OCTET STRING" : "OS-SpecialCase",
+               (long)size);
+
+       /*
+        * Create the string if does not exist.
+        */
+       if(st == NULL) {
+               st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+               if(st == NULL) RETURN(RC_FAIL);
+       }
+
+       /* Restore parsing context */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+       switch(ctx->phase) {
+       case 0:
+               /*
+                * Check tags.
+                */
+               rval = ber_check_tags(opt_codec_ctx, td, ctx,
+                       buf_ptr, size, tag_mode, -1,
+                       &ctx->left, &tlv_constr);
+               if(rval.code != RC_OK)
+                       return rval;
+
+               if(tlv_constr) {
+                       /*
+                        * Complex operation, requires stack of expectations.
+                        */
+                       ctx->ptr = _new_stack();
+                       if(!ctx->ptr) {
+                               RETURN(RC_FAIL);
+                       }
+               } else {
+                       /*
+                        * Jump into stackless primitive decoding.
+                        */
+                       _CH_PHASE(ctx, 3);
+                       if(type_variant == ASN_OSUBV_ANY && tag_mode != 1)
+                               APPEND(buf_ptr, rval.consumed);
+                       ADVANCE(rval.consumed);
+                       goto phase3;
+               }
+
+               NEXT_PHASE(ctx);
+               /* Fall through */
+       case 1:
+       phase1:
+               /*
+                * Fill the stack with expectations.
+                */
+               stck = (struct _stack *)ctx->ptr;
+               sel = stck->cur_ptr;
+         do {
+               ber_tlv_tag_t tlv_tag;
+               ber_tlv_len_t tlv_len;
+               ber_tlv_tag_t expected_tag;
+               ssize_t tl, ll, tlvl;
+                               /* This one works even if (sel->left == -1) */
+               size_t Left = ((!sel||(size_t)sel->left >= size)
+                                       ?size:(size_t)sel->left);
+
+
+               ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", (void *)sel,
+                       (long)(sel?sel->left:0),
+                       (long)(sel?sel->want_nulls:0),
+                       (long)(sel?sel->got:0)
+               );
+               if(sel && sel->left <= 0 && sel->want_nulls == 0) {
+                       if(sel->prev) {
+                               struct _stack_el *prev = sel->prev;
+                               if(prev->left != -1) {
+                                       if(prev->left < sel->got)
+                                               RETURN(RC_FAIL);
+                                       prev->left -= sel->got;
+                               }
+                               prev->got += sel->got;
+                               sel = stck->cur_ptr = prev;
+                               if(!sel) break;
+                               tlv_constr = 1;
+                               continue;
+                       } else {
+                               sel = stck->cur_ptr = 0;
+                               break;  /* Nothing to wait */
+                       }
+               }
+
+               tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag);
+               ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld",
+                       (long)size, (long)Left, sel?"":"!",
+                       (long)(sel?sel->left:0),
+                       (long)(sel?sel->want_nulls:0),
+                       (long)tl);
+               switch(tl) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+
+               tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr);
+
+               ll = ber_fetch_length(tlv_constr,
+                               (const char *)buf_ptr + tl,Left - tl,&tlv_len);
+               ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld",
+                       ber_tlv_tag_string(tlv_tag), tlv_constr,
+                               (long)Left, (long)tl, (long)tlv_len, (long)ll);
+               switch(ll) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+
+               if(sel && sel->want_nulls
+                       && ((const uint8_t *)buf_ptr)[0] == 0
+                       && ((const uint8_t *)buf_ptr)[1] == 0)
+               {
+
+                       ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls);
+
+                       if(type_variant == ASN_OSUBV_ANY
+                       && (tag_mode != 1 || sel->cont_level))
+                               APPEND("\0\0", 2);
+
+                       ADVANCE(2);
+                       sel->got += 2;
+                       if(sel->left != -1) {
+                               sel->left -= 2; /* assert(sel->left >= 2) */
+                       }
+
+                       sel->want_nulls--;
+                       if(sel->want_nulls == 0) {
+                               /* Move to the next expectation */
+                               sel->left = 0;
+                               tlv_constr = 1;
+                       }
+
+                       continue;
+               }
+
+               /*
+                * Set up expected tags,
+                * depending on ASN.1 type being decoded.
+                */
+               switch(type_variant) {
+               case ASN_OSUBV_BIT:
+                       /* X.690: 8.6.4.1, NOTE 2 */
+                       /* Fall through */
+               case ASN_OSUBV_STR:
+               default:
+                       if(sel) {
+                               unsigned level = sel->cont_level;
+                               if(level < td->all_tags_count) {
+                                       expected_tag = td->all_tags[level];
+                                       break;
+                               } else if(td->all_tags_count) {
+                                       expected_tag = td->all_tags
+                                               [td->all_tags_count - 1];
+                                       break;
+                               }
+                               /* else, Fall through */
+                       }
+                       /* Fall through */
+               case ASN_OSUBV_ANY:
+                       expected_tag = tlv_tag;
+                       break;
+               }
+
+
+               if(tlv_tag != expected_tag) {
+                       char buf[2][32];
+                       ber_tlv_tag_snprint(tlv_tag,
+                               buf[0], sizeof(buf[0]));
+                       ber_tlv_tag_snprint(td->tags[td->tags_count-1],
+                               buf[1], sizeof(buf[1]));
+                       ASN_DEBUG("Tag does not match expectation: %s != %s",
+                               buf[0], buf[1]);
+                       RETURN(RC_FAIL);
+               }
+
+               tlvl = tl + ll; /* Combined length of T and L encoding */
+               if((tlv_len + tlvl) < 0) {
+                       /* tlv_len value is too big */
+                       ASN_DEBUG("TLV encoding + length (%ld) is too big",
+                               (long)tlv_len);
+                       RETURN(RC_FAIL);
+               }
+
+               /*
+                * Append a new expectation.
+                */
+               sel = OS__add_stack_el(stck);
+               if(!sel) RETURN(RC_FAIL);
+
+               sel->tag = tlv_tag;
+
+               sel->want_nulls = (tlv_len==-1);
+               if(sel->prev && sel->prev->left != -1) {
+                       /* Check that the parent frame is big enough */
+                       if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len))
+                               RETURN(RC_FAIL);
+                       if(tlv_len == -1)
+                               sel->left = sel->prev->left - tlvl;
+                       else
+                               sel->left = tlv_len;
+               } else {
+                       sel->left = tlv_len;
+               }
+               if(type_variant == ASN_OSUBV_ANY
+               && (tag_mode != 1 || sel->cont_level))
+                       APPEND(buf_ptr, tlvl);
+               sel->got += tlvl;
+               ADVANCE(tlvl);
+
+               ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%u",
+                       (long)sel->got, (long)sel->left,
+                       sel->want_nulls, sel->cont_level);
+
+         } while(tlv_constr);
+               if(sel == NULL) {
+                       /* Finished operation, "phase out" */
+                       ASN_DEBUG("Phase out");
+                       _CH_PHASE(ctx, +3);
+                       break;
+               }
+
+               NEXT_PHASE(ctx);
+               /* Fall through */
+       case 2:
+               stck = (struct _stack *)ctx->ptr;
+               sel = stck->cur_ptr;
+               ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d",
+                       (long)sel->left, (long)size, (long)sel->got,
+                               sel->want_nulls);
+           {
+               ber_tlv_len_t len;
+
+               assert(sel->left >= 0);
+
+               len = ((ber_tlv_len_t)size < sel->left)
+                               ? (ber_tlv_len_t)size : sel->left;
+               if(len > 0) {
+                       if(type_variant == ASN_OSUBV_BIT
+                       && sel->bits_chopped == 0) {
+                               /* Put the unused-bits-octet away */
+                               st->bits_unused = *(const uint8_t *)buf_ptr;
+                               APPEND(((const char *)buf_ptr+1), (len - 1));
+                               sel->bits_chopped = 1;
+                       } else {
+                               APPEND(buf_ptr, len);
+                       }
+                       ADVANCE(len);
+                       sel->left -= len;
+                       sel->got += len;
+               }
+
+               if(sel->left) {
+                       ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n",
+                               (long)sel->left, (long)size, sel->want_nulls);
+                       RETURN(RC_WMORE);
+               }
+
+               PREV_PHASE(ctx);
+               goto phase1;
+           }
+               break;
+       case 3:
+       phase3:
+               /*
+                * Primitive form, no stack required.
+                */
+               assert(ctx->left >= 0);
+
+               if(size < (size_t)ctx->left) {
+                       if(!size) RETURN(RC_WMORE);
+                       if(type_variant == ASN_OSUBV_BIT && !ctx->context) {
+                               st->bits_unused = *(const uint8_t *)buf_ptr;
+                               ctx->left--;
+                               ADVANCE(1);
+                       }
+                       APPEND(buf_ptr, size);
+                       assert(ctx->context > 0);
+                       ctx->left -= size;
+                       ADVANCE(size);
+                       RETURN(RC_WMORE);
+               } else {
+                       if(type_variant == ASN_OSUBV_BIT
+                       && !ctx->context && ctx->left) {
+                               st->bits_unused = *(const uint8_t *)buf_ptr;
+                               ctx->left--;
+                               ADVANCE(1);
+                       }
+                       APPEND(buf_ptr, ctx->left);
+                       ADVANCE(ctx->left);
+                       ctx->left = 0;
+
+                       NEXT_PHASE(ctx);
+               }
+               break;
+       }
+
+       if(sel) {
+               ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld",
+                       (void *)sel->prev, sel->want_nulls,
+                       (long)sel->left, (long)sel->got, (long)size);
+               if(sel->prev || sel->want_nulls > 1 || sel->left > 0) {
+                       RETURN(RC_WMORE);
+               }
+       }
+
+       /*
+        * BIT STRING-specific processing.
+        */
+       if(type_variant == ASN_OSUBV_BIT) {
+        if(st->size) {
+                       if(st->bits_unused < 0 || st->bits_unused > 7) {
+                               RETURN(RC_FAIL);
+                       }
+                       /* Finalize BIT STRING: zero out unused bits. */
+                       st->buf[st->size-1] &= 0xff << st->bits_unused;
+               } else {
+                       if(st->bits_unused) {
+                               RETURN(RC_FAIL);
+                       }
+               }
+       }
+
+       ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld",
+               (long)consumed_myself, td->name,
+               (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "<data>",
+               (long)st->size);
+
+
+       RETURN(RC_OK);
+}
+
+/*
+ * Encode OCTET STRING type using DER.
+ */
+asn_enc_rval_t
+OCTET_STRING_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int tag_mode, ber_tlv_tag_t tag,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = { 0, 0, 0 };
+       const asn_OCTET_STRING_specifics_t *specs = td->specifics
+                               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                               : &asn_SPC_OCTET_STRING_specs;
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       enum asn_OS_Subvariant type_variant = specs->subvariant;
+       int fix_last_byte = 0;
+
+       ASN_DEBUG("%s %s as OCTET STRING",
+               cb?"Estimating":"Encoding", td->name);
+
+       /*
+        * Write tags.
+        */
+       if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) {
+               er.encoded = der_write_tags(td,
+                               (type_variant == ASN_OSUBV_BIT) + st->size,
+                       tag_mode, type_variant == ASN_OSUBV_ANY, tag,
+                       cb, app_key);
+               if(er.encoded == -1) {
+                       er.failed_type = td;
+                       er.structure_ptr = sptr;
+                       return er;
+               }
+       } else {
+               /* Disallow: [<tag>] IMPLICIT ANY */
+               assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1);
+               er.encoded = 0;
+       }
+
+       if(!cb) {
+               er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size;
+               ASN__ENCODED_OK(er);
+       }
+
+       /*
+        * Prepare to deal with the last octet of BIT STRING.
+        */
+       if(type_variant == ASN_OSUBV_BIT) {
+               uint8_t b = st->bits_unused & 0x07;
+               if(b && st->size) fix_last_byte = 1;
+               ASN__CALLBACK(&b, 1);
+       }
+
+       /* Invoke callback for the main part of the buffer */
+       ASN__CALLBACK(st->buf, st->size - fix_last_byte);
+
+       /* The last octet should be stripped off the unused bits */
+       if(fix_last_byte) {
+               uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused);
+               ASN__CALLBACK(&b, 1);
+       }
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, enum xer_encoder_flags_e flags,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+       char scratch[16 * 3 + 4];
+       char *p = scratch;
+       uint8_t *buf;
+       uint8_t *end;
+       size_t i;
+
+       if(!st || (!st->buf && st->size))
+               ASN__ENCODE_FAILED;
+
+       er.encoded = 0;
+
+       /*
+        * Dump the contents of the buffer in hexadecimal.
+        */
+       buf = st->buf;
+       end = buf + st->size;
+       if(flags & XER_F_CANONICAL) {
+               char *scend = scratch + (sizeof(scratch) - 2);
+               for(; buf < end; buf++) {
+                       if(p >= scend) {
+                               ASN__CALLBACK(scratch, p - scratch);
+                               p = scratch;
+                       }
+                       *p++ = h2c[(*buf >> 4) & 0x0F];
+                       *p++ = h2c[*buf & 0x0F];
+               }
+
+               ASN__CALLBACK(scratch, p-scratch);      /* Dump the rest */
+       } else {
+               for(i = 0; buf < end; buf++, i++) {
+                       if(!(i % 16) && (i || st->size > 16)) {
+                               ASN__CALLBACK(scratch, p-scratch);
+                               p = scratch;
+                               ASN__TEXT_INDENT(1, ilevel);
+                       }
+                       *p++ = h2c[(*buf >> 4) & 0x0F];
+                       *p++ = h2c[*buf & 0x0F];
+                       *p++ = 0x20;
+               }
+               if(p - scratch) {
+                       p--;    /* Remove the tail space */
+                       ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */
+                       if(st->size > 16)
+                               ASN__TEXT_INDENT(1, ilevel-1);
+               }
+       }
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+static const struct OCTET_STRING__xer_escape_table_s {
+       const char *string;
+       int size;
+} OCTET_STRING__xer_escape_table[] = {
+#define        OSXET(s)        { s, sizeof(s) - 1 }
+       OSXET("\074\156\165\154\057\076"),      /* <nul/> */
+       OSXET("\074\163\157\150\057\076"),      /* <soh/> */
+       OSXET("\074\163\164\170\057\076"),      /* <stx/> */
+       OSXET("\074\145\164\170\057\076"),      /* <etx/> */
+       OSXET("\074\145\157\164\057\076"),      /* <eot/> */
+       OSXET("\074\145\156\161\057\076"),      /* <enq/> */
+       OSXET("\074\141\143\153\057\076"),      /* <ack/> */
+       OSXET("\074\142\145\154\057\076"),      /* <bel/> */
+       OSXET("\074\142\163\057\076"),          /* <bs/> */
+       OSXET("\011"),                          /* \t */
+       OSXET("\012"),                          /* \n */
+       OSXET("\074\166\164\057\076"),          /* <vt/> */
+       OSXET("\074\146\146\057\076"),          /* <ff/> */
+       OSXET("\015"),                          /* \r */
+       OSXET("\074\163\157\057\076"),          /* <so/> */
+       OSXET("\074\163\151\057\076"),          /* <si/> */
+       OSXET("\074\144\154\145\057\076"),      /* <dle/> */
+       OSXET("\074\144\143\061\057\076"),      /* <de1/> */
+       OSXET("\074\144\143\062\057\076"),      /* <de2/> */
+       OSXET("\074\144\143\063\057\076"),      /* <de3/> */
+       OSXET("\074\144\143\064\057\076"),      /* <de4/> */
+       OSXET("\074\156\141\153\057\076"),      /* <nak/> */
+       OSXET("\074\163\171\156\057\076"),      /* <syn/> */
+       OSXET("\074\145\164\142\057\076"),      /* <etb/> */
+       OSXET("\074\143\141\156\057\076"),      /* <can/> */
+       OSXET("\074\145\155\057\076"),          /* <em/> */
+       OSXET("\074\163\165\142\057\076"),      /* <sub/> */
+       OSXET("\074\145\163\143\057\076"),      /* <esc/> */
+       OSXET("\074\151\163\064\057\076"),      /* <is4/> */
+       OSXET("\074\151\163\063\057\076"),      /* <is3/> */
+       OSXET("\074\151\163\062\057\076"),      /* <is2/> */
+       OSXET("\074\151\163\061\057\076"),      /* <is1/> */
+       { 0, 0 },       /* " " */
+       { 0, 0 },       /* ! */
+       { 0, 0 },       /* \" */
+       { 0, 0 },       /* # */
+       { 0, 0 },       /* $ */
+       { 0, 0 },       /* % */
+       OSXET("\046\141\155\160\073"),  /* &amp; */
+       { 0, 0 },       /* ' */
+       {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */
+       {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */
+       {0,0},{0,0},{0,0},{0,0},                         /* 89:; */
+       OSXET("\046\154\164\073"),      /* &lt; */
+       { 0, 0 },       /* = */
+       OSXET("\046\147\164\073"),      /* &gt; */
+};
+
+static int
+OS__check_escaped_control_char(const void *buf, int size) {
+       size_t i;
+       /*
+        * Inefficient algorithm which translates the escape sequences
+        * defined above into characters. Returns -1 if not found.
+        * TODO: replace by a faster algorithm (bsearch(), hash or
+        * nested table lookups).
+        */
+       for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) {
+               const struct OCTET_STRING__xer_escape_table_s *el;
+               el = &OCTET_STRING__xer_escape_table[i];
+               if(el->size == size && memcmp(buf, el->string, size) == 0)
+                       return i;
+       }
+       return -1;
+}
+
+static int
+OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) {
+       /*
+        * This might be one of the escape sequences
+        * for control characters. Check it out.
+        * #11.15.5
+        */
+       int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size);
+       if(control_char >= 0) {
+               OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr;
+               void *p = REALLOC(st->buf, st->size + 2);
+               if(p) {
+                       st->buf = (uint8_t *)p;
+                       st->buf[st->size++] = control_char;
+                       st->buf[st->size] = '\0';       /* nul-termination */
+                       return 0;
+               }
+       }
+       
+       return -1;      /* No, it's not */
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_xer_utf8(const asn_TYPE_descriptor_t *td, const void *sptr,
+                             int ilevel, enum xer_encoder_flags_e flags,
+                             asn_app_consume_bytes_f *cb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+       uint8_t *buf, *end;
+       uint8_t *ss;    /* Sequence start */
+       ssize_t encoded_len = 0;
+
+       (void)ilevel;   /* Unused argument */
+       (void)flags;    /* Unused argument */
+
+       if(!st || (!st->buf && st->size))
+               ASN__ENCODE_FAILED;
+
+       buf = st->buf;
+       end = buf + st->size;
+       for(ss = buf; buf < end; buf++) {
+               unsigned int ch = *buf;
+               int s_len;      /* Special encoding sequence length */
+
+               /*
+                * Escape certain characters: X.680/11.15
+                */
+               if(ch < sizeof(OCTET_STRING__xer_escape_table)
+                       /sizeof(OCTET_STRING__xer_escape_table[0])
+               && (s_len = OCTET_STRING__xer_escape_table[ch].size)) {
+                       if(((buf - ss) && cb(ss, buf - ss, app_key) < 0)
+                       || cb(OCTET_STRING__xer_escape_table[ch].string, s_len,
+                                       app_key) < 0)
+                               ASN__ENCODE_FAILED;
+                       encoded_len += (buf - ss) + s_len;
+                       ss = buf + 1;
+               }
+       }
+
+       encoded_len += (buf - ss);
+       if((buf - ss) && cb(ss, buf - ss, app_key) < 0)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = encoded_len;
+       ASN__ENCODED_OK(er);
+}
+
+/*
+ * Convert from hexadecimal format (cstring): "AB CD EF"
+ */
+static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
+       OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+       const char *chunk_stop = (const char *)chunk_buf;
+       const char *p = chunk_stop;
+       const char *pend = p + chunk_size;
+       unsigned int clv = 0;
+       int half = 0;   /* Half bit */
+       uint8_t *buf;
+
+       /* Reallocate buffer according to high cap estimation */
+       size_t new_size = st->size + (chunk_size + 1) / 2;
+       void *nptr = REALLOC(st->buf, new_size + 1);
+       if(!nptr) return -1;
+       st->buf = (uint8_t *)nptr;
+       buf = st->buf + st->size;
+
+       /*
+        * If something like " a b c " appears here, the " a b":3 will be
+        * converted, and the rest skipped. That is, unless buf_size is greater
+        * than chunk_size, then it'll be equivalent to "ABC0".
+        */
+       for(; p < pend; p++) {
+               int ch = *(const unsigned char *)p;
+               switch(ch) {
+               case 0x09: case 0x0a: case 0x0c: case 0x0d:
+               case 0x20:
+                       /* Ignore whitespace */
+                       continue;
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/
+                       clv = (clv << 4) + (ch - 0x30);
+                       break;
+               case 0x41: case 0x42: case 0x43:        /* ABC */
+               case 0x44: case 0x45: case 0x46:        /* DEF */
+                       clv = (clv << 4) + (ch - 0x41 + 10);
+                       break;
+               case 0x61: case 0x62: case 0x63:        /* abc */
+               case 0x64: case 0x65: case 0x66:        /* def */
+                       clv = (clv << 4) + (ch - 0x61 + 10);
+                       break;
+               default:
+                       *buf = 0;       /* JIC */
+                       return -1;
+               }
+               if(half++) {
+                       half = 0;
+                       *buf++ = clv;
+                       chunk_stop = p + 1;
+               }
+       }
+
+       /*
+        * Check partial decoding.
+        */
+       if(half) {
+               if(have_more) {
+                       /*
+                        * Partial specification is fine,
+                        * because no more more PXER_TEXT data is available.
+                        */
+                       *buf++ = clv << 4;
+                       chunk_stop = p;
+               }
+       } else {
+               chunk_stop = p;
+       }
+
+       st->size = buf - st->buf;       /* Adjust the buffer size */
+       assert(st->size <= new_size);
+       st->buf[st->size] = 0;          /* Courtesy termination */
+
+       return (chunk_stop - (const char *)chunk_buf);  /* Converted size */
+}
+
+/*
+ * Convert from binary format: "00101011101"
+ */
+static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) {
+       BIT_STRING_t *st = (BIT_STRING_t *)sptr;
+       const char *p = (const char *)chunk_buf;
+       const char *pend = p + chunk_size;
+       int bits_unused = st->bits_unused & 0x7;
+       uint8_t *buf;
+
+       /* Reallocate buffer according to high cap estimation */
+       size_t new_size = st->size + (chunk_size + 7) / 8;
+       void *nptr = REALLOC(st->buf, new_size + 1);
+       if(!nptr) return -1;
+       st->buf = (uint8_t *)nptr;
+       buf = st->buf + st->size;
+
+       (void)have_more;
+
+       if(bits_unused == 0)
+               bits_unused = 8;
+       else if(st->size)
+               buf--;
+
+       /*
+        * Convert series of 0 and 1 into the octet string.
+        */
+       for(; p < pend; p++) {
+               int ch = *(const unsigned char *)p;
+               switch(ch) {
+               case 0x09: case 0x0a: case 0x0c: case 0x0d:
+               case 0x20:
+                       /* Ignore whitespace */
+                       break;
+               case 0x30:
+               case 0x31:
+                       if(bits_unused-- <= 0) {
+                               *++buf = 0;     /* Clean the cell */
+                               bits_unused = 7;
+                       }
+                       *buf |= (ch&1) << bits_unused;
+                       break;
+               default:
+                       st->bits_unused = bits_unused;
+                       return -1;
+               }
+       }
+
+       if(bits_unused == 8) {
+               st->size = buf - st->buf;
+               st->bits_unused = 0;
+       } else {
+               st->size = buf - st->buf + 1;
+               st->bits_unused = bits_unused;
+       }
+
+       assert(st->size <= new_size);
+       st->buf[st->size] = 0;          /* Courtesy termination */
+
+       return chunk_size;      /* Converted in full */
+}
+
+/*
+ * Something like strtod(), but with stricter rules.
+ */
+static int
+OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) {
+       const int32_t last_unicode_codepoint = 0x10ffff;
+       int32_t val = 0;
+       const char *p;
+
+       for(p = buf; p < end; p++) {
+               int ch = *p;
+
+               switch(ch) {
+               case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/
+               case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/
+                       val = val * base + (ch - 0x30);
+                       break;
+               case 0x41: case 0x42: case 0x43:        /* ABC */
+               case 0x44: case 0x45: case 0x46:        /* DEF */
+                       val = val * base + (ch - 0x41 + 10);
+                       break;
+               case 0x61: case 0x62: case 0x63:        /* abc */
+               case 0x64: case 0x65: case 0x66:        /* def */
+                       val = val * base + (ch - 0x61 + 10);
+                       break;
+               case 0x3b:      /* ';' */
+                       *ret_value = val;
+                       return (p - buf) + 1;
+               default:
+                       return -1;      /* Character set error */
+               }
+
+               /* Value exceeds the Unicode range. */
+               if(val > last_unicode_codepoint) {
+                       return -1;
+               }
+       }
+
+       *ret_value = -1;
+       return (p - buf);
+}
+
+/*
+ * Convert from the plain UTF-8 format, expanding entity references: "2 &lt; 3"
+ */
+static ssize_t
+OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf,
+                              size_t chunk_size, int have_more) {
+    OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+       const char *p = (const char *)chunk_buf;
+       const char *pend = p + chunk_size;
+       uint8_t *buf;
+
+       /* Reallocate buffer */
+       size_t new_size = st->size + chunk_size;
+       void *nptr = REALLOC(st->buf, new_size + 1);
+       if(!nptr) return -1;
+       st->buf = (uint8_t *)nptr;
+       buf = st->buf + st->size;
+
+       /*
+        * Convert series of 0 and 1 into the octet string.
+        */
+       for(; p < pend; p++) {
+               int ch = *(const unsigned char *)p;
+               int len;        /* Length of the rest of the chunk */
+
+               if(ch != 0x26 /* '&' */) {
+                       *buf++ = ch;
+                       continue;       /* That was easy... */
+               }
+
+               /*
+                * Process entity reference.
+                */
+               len = chunk_size - (p - (const char *)chunk_buf);
+               if(len == 1 /* "&" */) goto want_more;
+               if(p[1] == 0x23 /* '#' */) {
+                       const char *pval;       /* Pointer to start of digits */
+                       int32_t val = 0;        /* Entity reference value */
+                       int base;
+
+                       if(len == 2 /* "&#" */) goto want_more;
+                       if(p[2] == 0x78 /* 'x' */)
+                               pval = p + 3, base = 16;
+                       else
+                               pval = p + 2, base = 10;
+                       len = OS__strtoent(base, pval, p + len, &val);
+                       if(len == -1) {
+                               /* Invalid charset. Just copy verbatim. */
+                               *buf++ = ch;
+                               continue;
+                       }
+                       if(!len || pval[len-1] != 0x3b) goto want_more;
+                       assert(val > 0);
+                       p += (pval - p) + len - 1; /* Advance past entref */
+
+                       if(val < 0x80) {
+                               *buf++ = (char)val;
+                       } else if(val < 0x800) {
+                               *buf++ = 0xc0 | ((val >> 6));
+                               *buf++ = 0x80 | ((val & 0x3f));
+                       } else if(val < 0x10000) {
+                               *buf++ = 0xe0 | ((val >> 12));
+                               *buf++ = 0x80 | ((val >> 6) & 0x3f);
+                               *buf++ = 0x80 | ((val & 0x3f));
+                       } else if(val < 0x200000) {
+                               *buf++ = 0xf0 | ((val >> 18));
+                               *buf++ = 0x80 | ((val >> 12) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 6) & 0x3f);
+                               *buf++ = 0x80 | ((val & 0x3f));
+                       } else if(val < 0x4000000) {
+                               *buf++ = 0xf8 | ((val >> 24));
+                               *buf++ = 0x80 | ((val >> 18) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 12) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 6) & 0x3f);
+                               *buf++ = 0x80 | ((val & 0x3f));
+                       } else {
+                               *buf++ = 0xfc | ((val >> 30) & 0x1);
+                               *buf++ = 0x80 | ((val >> 24) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 18) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 12) & 0x3f);
+                               *buf++ = 0x80 | ((val >> 6) & 0x3f);
+                               *buf++ = 0x80 | ((val & 0x3f));
+                       }
+               } else {
+                       /*
+                        * Ugly, limited parsing of &amp; &gt; &lt;
+                        */
+                       char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len);
+                       if(!sc) goto want_more;
+                       if((sc - p) == 4
+                               && p[1] == 0x61 /* 'a' */
+                               && p[2] == 0x6d /* 'm' */
+                               && p[3] == 0x70 /* 'p' */) {
+                               *buf++ = 0x26;
+                               p = sc;
+                               continue;
+                       }
+                       if((sc - p) == 3) {
+                               if(p[1] == 0x6c) {
+                                       *buf = 0x3c;    /* '<' */
+                               } else if(p[1] == 0x67) {
+                                       *buf = 0x3e;    /* '>' */
+                               } else {
+                                       /* Unsupported entity reference */
+                                       *buf++ = ch;
+                                       continue;
+                               }
+                               if(p[2] != 0x74) {
+                                       /* Unsupported entity reference */
+                                       *buf++ = ch;
+                                       continue;
+                               }
+                               buf++;
+                               p = sc;
+                               continue;
+                       }
+                       /* Unsupported entity reference */
+                       *buf++ = ch;
+               }
+
+               continue;
+       want_more:
+               if(have_more) {
+                       /*
+                        * We know that no more data (of the same type)
+                        * is coming. Copy the rest verbatim.
+                        */
+                       *buf++ = ch;
+                       continue;
+               }
+               chunk_size = (p - (const char *)chunk_buf);
+               /* Processing stalled: need more data */
+               break;
+       }
+
+       st->size = buf - st->buf;
+       assert(st->size <= new_size);
+       st->buf[st->size] = 0;          /* Courtesy termination */
+
+       return chunk_size;      /* Converted in full */
+}
+
+/*
+ * Decode OCTET STRING from the XML element's body.
+ */
+static asn_dec_rval_t
+OCTET_STRING__decode_xer(
+    const asn_codec_ctx_t *opt_codec_ctx, const asn_TYPE_descriptor_t *td,
+    void **sptr, const char *opt_mname, const void *buf_ptr, size_t size,
+    int (*opt_unexpected_tag_decoder)(void *struct_ptr, const void *chunk_buf,
+                                      size_t chunk_size),
+    ssize_t (*body_receiver)(void *struct_ptr, const void *chunk_buf,
+                             size_t chunk_size, int have_more)) {
+    OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
+       const asn_OCTET_STRING_specifics_t *specs = td->specifics
+                               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                               : &asn_SPC_OCTET_STRING_specs;
+       const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+       asn_struct_ctx_t *ctx;          /* Per-structure parser context */
+       asn_dec_rval_t rval;            /* Return value from the decoder */
+       int st_allocated;
+
+       /*
+        * Create the string if does not exist.
+        */
+       if(!st) {
+               st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
+               *sptr = (void *)st;
+               if(!st) goto sta_failed;
+               st_allocated = 1;
+       } else {
+               st_allocated = 0;
+       }
+       if(!st->buf) {
+               /* This is separate from above section */
+               st->buf = (uint8_t *)CALLOC(1, 1);
+               if(!st->buf) {
+                       if(st_allocated) {
+                               *sptr = 0;
+                               goto stb_failed;
+                       } else {
+                               goto sta_failed;
+                       }
+               }
+       }
+
+       /* Restore parsing context */
+       ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset);
+
+       return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag,
+               buf_ptr, size, opt_unexpected_tag_decoder, body_receiver);
+
+stb_failed:
+       FREEMEM(st);
+sta_failed:
+       rval.code = RC_FAIL;
+       rval.consumed = 0;
+       return rval;
+}
+
+/*
+ * Decode OCTET STRING from the hexadecimal data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_hex(const asn_codec_ctx_t *opt_codec_ctx,
+                            const asn_TYPE_descriptor_t *td, void **sptr,
+                            const char *opt_mname, const void *buf_ptr,
+                            size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+               buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal);
+}
+
+/*
+ * Decode OCTET STRING from the binary (0/1) data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_binary(const asn_codec_ctx_t *opt_codec_ctx,
+                               const asn_TYPE_descriptor_t *td, void **sptr,
+                               const char *opt_mname, const void *buf_ptr,
+                               size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+               buf_ptr, size, 0, OCTET_STRING__convert_binary);
+}
+
+/*
+ * Decode OCTET STRING from the string (ASCII/UTF-8) data.
+ */
+asn_dec_rval_t
+OCTET_STRING_decode_xer_utf8(const asn_codec_ctx_t *opt_codec_ctx,
+                             const asn_TYPE_descriptor_t *td, void **sptr,
+                             const char *opt_mname, const void *buf_ptr,
+                             size_t size) {
+    return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname,
+               buf_ptr, size,
+               OCTET_STRING__handle_control_chars,
+               OCTET_STRING__convert_entrefs);
+}
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+static int
+OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf,
+               size_t units, unsigned int bpc, unsigned int unit_bits,
+               long lb, long ub, const asn_per_constraints_t *pc) {
+       uint8_t *end = buf + units * bpc;
+
+       ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d",
+               (int)units, lb, ub, unit_bits);
+
+       /* X.691: 27.5.4 */
+       if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
+               /* Decode without translation */
+               lb = 0;
+       } else if(pc && pc->code2value) {
+               if(unit_bits > 16)
+                       return 1;       /* FATAL: can't have constrained
+                                        * UniversalString with more than
+                                        * 16 million code points */
+               for(; buf < end; buf += bpc) {
+                       int value;
+                       int code = per_get_few_bits(po, unit_bits);
+                       if(code < 0) return -1; /* WMORE */
+                       value = pc->code2value(code);
+                       if(value < 0) {
+                               ASN_DEBUG("Code %d (0x%02x) is"
+                                       " not in map (%ld..%ld)",
+                                       code, code, lb, ub);
+                               return 1;       /* FATAL */
+                       }
+                       switch(bpc) {
+                       case 1: *buf = value; break;
+                       case 2: buf[0] = value >> 8; buf[1] = value; break;
+                       case 4: buf[0] = value >> 24; buf[1] = value >> 16;
+                               buf[2] = value >> 8; buf[3] = value; break;
+                       }
+               }
+               return 0;
+       }
+
+       /* Shortcut the no-op copying to the aligned structure */
+       if(lb == 0 && (unit_bits == 8 * bpc)) {
+               return per_get_many_bits(po, buf, 0, unit_bits * units);
+       }
+
+       for(; buf < end; buf += bpc) {
+               int32_t code = per_get_few_bits(po, unit_bits);
+               int32_t ch = code + lb;
+               if(code < 0) return -1; /* WMORE */
+               if(ch > ub) {
+                       ASN_DEBUG("Code %d is out of range (%ld..%ld)",
+                               ch, lb, ub);
+                       return 1;       /* FATAL */
+               }
+               switch(bpc) {
+               case 1: *buf = ch; break;
+               case 2: buf[0] = ch >> 8; buf[1] = ch; break;
+               case 4: buf[0] = ch >> 24; buf[1] = ch >> 16;
+                       buf[2] = ch >> 8; buf[3] = ch; break;
+               }
+       }
+
+       return 0;
+}
+
+static int
+OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf,
+               size_t units, unsigned int bpc, unsigned int unit_bits,
+               long lb, long ub, const asn_per_constraints_t *pc) {
+       const uint8_t *end = buf + units * bpc;
+
+       ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)",
+               (int)units, lb, ub, unit_bits, bpc);
+
+       /* X.691: 27.5.4 */
+       if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) {
+               /* Encode as is */
+               lb = 0;
+       } else if(pc && pc->value2code) {
+               for(; buf < end; buf += bpc) {
+                       int code;
+                       uint32_t value;
+                       switch(bpc) {
+                       case 1: value = *(const uint8_t *)buf; break;
+                       case 2: value = (buf[0] << 8) | buf[1]; break;
+                       case 4: value = (buf[0] << 24) | (buf[1] << 16)
+                                       | (buf[2] << 8) | buf[3]; break;
+                       default: return -1;
+                       }
+                       code = pc->value2code(value);
+                       if(code < 0) {
+                               ASN_DEBUG("Character %d (0x%02x) is"
+                                       " not in map (%ld..%ld)",
+                                       *buf, *buf, lb, ub);
+                               return -1;
+                       }
+                       if(per_put_few_bits(po, code, unit_bits))
+                               return -1;
+               }
+       }
+
+       /* Shortcut the no-op copying to the aligned structure */
+       if(lb == 0 && (unit_bits == 8 * bpc)) {
+               return per_put_many_bits(po, buf, unit_bits * units);
+       }
+
+    for(ub -= lb; buf < end; buf += bpc) {
+        int ch;
+        uint32_t value;
+        switch(bpc) {
+        case 1:
+            value = *(const uint8_t *)buf;
+            break;
+        case 2:
+            value = (buf[0] << 8) | buf[1];
+            break;
+        case 4:
+            value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+            break;
+        default:
+            return -1;
+        }
+        ch = value - lb;
+        if(ch < 0 || ch > ub) {
+            ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf,
+                      value, lb, ub + lb);
+            return -1;
+        }
+        if(per_put_few_bits(po, ch, unit_bits)) return -1;
+    }
+
+    return 0;
+}
+
+static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = {
+       { APC_CONSTRAINED, 8, 8, 0, 255 },
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
+       0, 0
+};
+
+asn_dec_rval_t
+OCTET_STRING_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints, void **sptr,
+                         asn_per_data_t *pd) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+               : &asn_SPC_OCTET_STRING_specs;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->encoding_constraints.per_constraints;
+    const asn_per_constraint_t *cval;
+       const asn_per_constraint_t *csiz;
+       asn_dec_rval_t rval = { RC_OK, 0 };
+       OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
+       ssize_t consumed_myself = 0;
+       int repeat;
+       enum {
+               OS__BPC_CHAR    = 1,
+               OS__BPC_U16     = 2,
+               OS__BPC_U32     = 4
+       } bpc;  /* Bytes per character */
+       unsigned int unit_bits;
+       unsigned int canonical_unit_bits;
+
+       (void)opt_codec_ctx;
+
+       if(pc) {
+               cval = &pc->value;
+               csiz = &pc->size;
+       } else {
+               cval = &asn_DEF_OCTET_STRING_constraints.value;
+               csiz = &asn_DEF_OCTET_STRING_constraints.size;
+       }
+
+       switch(specs->subvariant) {
+       default:
+       case ASN_OSUBV_ANY:
+       case ASN_OSUBV_BIT:
+               ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant);
+               RETURN(RC_FAIL);
+               break;
+       case ASN_OSUBV_STR:
+               canonical_unit_bits = unit_bits = 8;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_CHAR;
+               break;
+       case ASN_OSUBV_U16:
+               canonical_unit_bits = unit_bits = 16;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U16;
+               break;
+       case ASN_OSUBV_U32:
+               canonical_unit_bits = unit_bits = 32;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U32;
+               break;
+       }
+
+       /*
+        * Allocate the string.
+        */
+       if(!st) {
+               st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+               if(!st) RETURN(RC_FAIL);
+       }
+
+       ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+               csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+               csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+       if(csiz->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) RETURN(RC_WMORE);
+               if(inext) {
+                       csiz = &asn_DEF_OCTET_STRING_constraints.size;
+                       unit_bits = canonical_unit_bits;
+               }
+       }
+
+       if(csiz->effective_bits >= 0) {
+               FREEMEM(st->buf);
+               if(bpc) {
+                       st->size = csiz->upper_bound * bpc;
+               } else {
+                       st->size = (csiz->upper_bound + 7) >> 3;
+               }
+               st->buf = (uint8_t *)MALLOC(st->size + 1);
+               if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+       }
+
+       /* X.691, #16.5: zero-length encoding */
+       /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+       /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+       if(csiz->effective_bits == 0) {
+               int ret;
+               if(bpc) {
+                       ASN_DEBUG("Encoding OCTET STRING size %ld",
+                               csiz->upper_bound);
+                       ret = OCTET_STRING_per_get_characters(pd, st->buf,
+                               csiz->upper_bound, bpc, unit_bits,
+                               cval->lower_bound, cval->upper_bound, pc);
+                       if(ret > 0) RETURN(RC_FAIL);
+               } else {
+                       ASN_DEBUG("Encoding BIT STRING size %ld",
+                               csiz->upper_bound);
+                       ret = per_get_many_bits(pd, st->buf, 0,
+                                           unit_bits * csiz->upper_bound);
+               }
+               if(ret < 0) RETURN(RC_WMORE);
+               consumed_myself += unit_bits * csiz->upper_bound;
+               st->buf[st->size] = 0;
+               RETURN(RC_OK);
+       }
+
+       st->size = 0;
+       do {
+               ssize_t raw_len;
+               ssize_t len_bytes;
+               void *p;
+               int ret;
+
+               /* Get the PER length */
+               raw_len = uper_get_length(pd, csiz->effective_bits, csiz->lower_bound,
+                                         &repeat);
+               if(raw_len < 0) RETURN(RC_WMORE);
+               if(raw_len == 0 && st->buf) break;
+
+               ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+                       (long)csiz->effective_bits, (long)raw_len,
+                       repeat ? "repeat" : "once", td->name);
+        len_bytes = raw_len * bpc;
+               p = REALLOC(st->buf, st->size + len_bytes + 1);
+               if(!p) RETURN(RC_FAIL);
+               st->buf = (uint8_t *)p;
+
+        ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len,
+                                              bpc, unit_bits, cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret > 0) RETURN(RC_FAIL);
+               if(ret < 0) RETURN(RC_WMORE);
+               st->size += len_bytes;
+       } while(repeat);
+       st->buf[st->size] = 0;  /* nul-terminate */
+
+       return rval;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_uper(const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         const void *sptr, asn_per_outp_t *po) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics
+               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+               : &asn_SPC_OCTET_STRING_specs;
+       const asn_per_constraints_t *pc = constraints ? constraints
+                               : td->encoding_constraints.per_constraints;
+       const asn_per_constraint_t *cval;
+       const asn_per_constraint_t *csiz;
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+       int inext = 0;          /* Lies not within extension root */
+       unsigned int unit_bits;
+       unsigned int canonical_unit_bits;
+       size_t size_in_units;
+       const uint8_t *buf;
+       int ret;
+       enum {
+               OS__BPC_CHAR    = 1,
+               OS__BPC_U16     = 2,
+               OS__BPC_U32     = 4
+       } bpc;  /* Bytes per character */
+       int ct_extensible;
+
+       if(!st || (!st->buf && st->size))
+               ASN__ENCODE_FAILED;
+
+       if(pc) {
+               cval = &pc->value;
+               csiz = &pc->size;
+       } else {
+               cval = &asn_DEF_OCTET_STRING_constraints.value;
+               csiz = &asn_DEF_OCTET_STRING_constraints.size;
+       }
+       ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+       switch(specs->subvariant) {
+       default:
+       case ASN_OSUBV_ANY:
+       case ASN_OSUBV_BIT:
+               ASN__ENCODE_FAILED;
+       case ASN_OSUBV_STR:
+               canonical_unit_bits = unit_bits = 8;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_CHAR;
+               size_in_units = st->size;
+               break;
+       case ASN_OSUBV_U16:
+               canonical_unit_bits = unit_bits = 16;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U16;
+               size_in_units = st->size >> 1;
+               if(st->size & 1) {
+                       ASN_DEBUG("%s string size is not modulo 2", td->name);
+                       ASN__ENCODE_FAILED;
+               }
+               break;
+       case ASN_OSUBV_U32:
+               canonical_unit_bits = unit_bits = 32;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U32;
+               size_in_units = st->size >> 2;
+               if(st->size & 3) {
+                       ASN_DEBUG("%s string size is not modulo 4", td->name);
+                       ASN__ENCODE_FAILED;
+               }
+               break;
+       }
+
+       ASN_DEBUG("Encoding %s into %" ASN_PRI_SIZE " units of %d bits"
+               " (%ld..%ld, effective %d)%s",
+               td->name, size_in_units, unit_bits,
+               csiz->lower_bound, csiz->upper_bound,
+               csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+       /* Figure out whether size lies within PER visible constraint */
+
+    if(csiz->effective_bits >= 0) {
+        if((ssize_t)size_in_units < csiz->lower_bound
+           || (ssize_t)size_in_units > csiz->upper_bound) {
+            if(ct_extensible) {
+                csiz = &asn_DEF_OCTET_STRING_constraints.size;
+                unit_bits = canonical_unit_bits;
+                inext = 1;
+            } else {
+                ASN__ENCODE_FAILED;
+            }
+        }
+    } else {
+        inext = 0;
+    }
+
+    if(ct_extensible) {
+               /* Declare whether length is [not] within extension root */
+               if(per_put_few_bits(po, inext, 1))
+                       ASN__ENCODE_FAILED;
+       }
+
+    if(csiz->effective_bits >= 0 && !inext) {
+        ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes (%ld), length in %d bits", st->size,
+                  size_in_units - csiz->lower_bound, csiz->effective_bits);
+        ret = per_put_few_bits(po, size_in_units - csiz->lower_bound,
+                               csiz->effective_bits);
+        if(ret) ASN__ENCODE_FAILED;
+        ret = OCTET_STRING_per_put_characters(po, st->buf, size_in_units, bpc,
+                                              unit_bits, cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret) ASN__ENCODE_FAILED;
+        ASN__ENCODED_OK(er);
+    }
+
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " bytes", st->size);
+
+    buf = st->buf;
+    ASN_DEBUG("Encoding %" ASN_PRI_SIZE " in units", size_in_units);
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size_in_units, &need_eom);
+        if(may_save < 0) ASN__ENCODE_FAILED;
+
+        ASN_DEBUG("Encoding %" ASN_PRI_SSIZE " of %" ASN_PRI_SIZE "%s", may_save, size_in_units,
+                  need_eom ? ",+EOM" : "");
+
+        ret = OCTET_STRING_per_put_characters(po, buf, may_save, bpc, unit_bits,
+                                              cval->lower_bound,
+                                              cval->upper_bound, pc);
+        if(ret) ASN__ENCODE_FAILED;
+
+        buf += may_save * bpc;
+        size_in_units -= may_save;
+        assert(!(may_save & 0x07) || !size_in_units);
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+    } while(size_in_units);
+
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+OCTET_STRING_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                         const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         void **sptr, asn_per_data_t *pd) {
+
+       const asn_OCTET_STRING_specifics_t *specs = td->specifics
+               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+               : &asn_SPC_OCTET_STRING_specs;
+       const asn_per_constraints_t *pc = constraints ? constraints
+                               : td->encoding_constraints.per_constraints;
+       const asn_per_constraint_t *cval;
+       const asn_per_constraint_t *csiz;
+       asn_dec_rval_t rval = { RC_OK, 0 };
+       BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
+       ssize_t consumed_myself = 0;
+       int repeat;
+       enum {
+               OS__BPC_BIT     = 0,
+               OS__BPC_CHAR    = 1,
+               OS__BPC_U16     = 2,
+               OS__BPC_U32     = 4
+       } bpc;  /* Bytes per character */
+       unsigned int unit_bits;
+       unsigned int canonical_unit_bits;
+
+       (void)opt_codec_ctx;
+
+       if(pc) {
+               cval = &pc->value;
+               csiz = &pc->size;
+       } else {
+               cval = &asn_DEF_OCTET_STRING_constraints.value;
+               csiz = &asn_DEF_OCTET_STRING_constraints.size;
+       }
+
+       switch(specs->subvariant) {
+       default:
+/*     case ASN_OSUBV_ANY:
+               ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant);
+               RETURN(RC_FAIL);
+*/
+       case ASN_OSUBV_BIT:
+               canonical_unit_bits = unit_bits = 1;
+               bpc = OS__BPC_BIT;
+               break;
+       case ASN_OSUBV_ANY:
+       case ASN_OSUBV_STR:
+               canonical_unit_bits = unit_bits = 8;
+/*             if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+*/
+               bpc = OS__BPC_CHAR;
+               break;
+       case ASN_OSUBV_U16:
+               canonical_unit_bits = unit_bits = 16;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U16;
+               break;
+       case ASN_OSUBV_U32:
+               canonical_unit_bits = unit_bits = 32;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U32;
+               break;
+       }
+
+       /*
+        * Allocate the string.
+        */
+       if(!st) {
+               st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+               if(!st) RETURN(RC_FAIL);
+       }
+
+       ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d",
+               csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible",
+               csiz->lower_bound, csiz->upper_bound, csiz->effective_bits);
+
+       if(csiz->flags & APC_EXTENSIBLE) {
+               int inext = per_get_few_bits(pd, 1);
+               if(inext < 0) RETURN(RC_WMORE);
+               if(inext) {
+                       csiz = &asn_DEF_OCTET_STRING_constraints.size;
+                       cval = &asn_DEF_OCTET_STRING_constraints.value;
+                       unit_bits = canonical_unit_bits;
+               }
+       }
+
+       if(csiz->effective_bits >= 0) {
+               FREEMEM(st->buf);
+               if(bpc) {
+                       st->size = csiz->upper_bound * bpc;
+               } else {
+                       st->size = (csiz->upper_bound + 7) >> 3;
+               }
+               st->buf = (uint8_t *)MALLOC(st->size + 1);
+               if(!st->buf) { st->size = 0; RETURN(RC_FAIL); }
+       }
+
+       /* X.691, #16.5: zero-length encoding */
+       /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+       /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+       if(csiz->effective_bits == 0) {
+               int ret;
+               if (st->size > 2) { /* X.691 #16 NOTE 1 */
+                       if (aper_get_align(pd) < 0)
+                               RETURN(RC_FAIL);
+               }
+               if(bpc) {
+                       ASN_DEBUG("Decoding OCTET STRING size %ld",
+                               csiz->upper_bound);
+                       ret = OCTET_STRING_per_get_characters(pd, st->buf,
+                               csiz->upper_bound, bpc, unit_bits,
+                               cval->lower_bound, cval->upper_bound, pc);
+                       if(ret > 0) RETURN(RC_FAIL);
+               } else {
+                       ASN_DEBUG("Decoding BIT STRING size %ld",
+                               csiz->upper_bound);
+                       ret = per_get_many_bits(pd, st->buf, 0,
+                                           unit_bits * csiz->upper_bound);
+               }
+               if(ret < 0) RETURN(RC_WMORE);
+               consumed_myself += unit_bits * csiz->upper_bound;
+               st->buf[st->size] = 0;
+               if(bpc == 0) {
+                       int ubs = (csiz->upper_bound & 0x7);
+                       st->bits_unused = ubs ? 8 - ubs : 0;
+               }
+               RETURN(RC_OK);
+       }
+
+       st->size = 0;
+       do {
+               ssize_t raw_len;
+               ssize_t len_bytes;
+               ssize_t len_bits;
+               void *p;
+               int ret;
+
+               /* Get the PER length */
+               if (csiz->upper_bound - csiz->lower_bound == 0)
+                       /* Indefinite length case */
+                       raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat);
+               else
+                       raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat);
+               repeat = 0;
+               if(raw_len < 0) RETURN(RC_WMORE);
+               raw_len += csiz->lower_bound;
+
+               ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)",
+                       (long)csiz->effective_bits, (long)raw_len,
+                       repeat ? "repeat" : "once", td->name);
+
+               if (raw_len > 2) { /* X.691 #16 NOTE 1 */
+                       if (aper_get_align(pd) < 0)
+                               RETURN(RC_FAIL);
+               }
+
+               if(bpc) {
+                       len_bytes = raw_len * bpc;
+                       len_bits = len_bytes * unit_bits;
+               } else {
+                       len_bits = raw_len;
+                       len_bytes = (len_bits + 7) >> 3;
+                       if(len_bits & 0x7)
+                               st->bits_unused = 8 - (len_bits & 0x7);
+                       /* len_bits be multiple of 16K if repeat is set */
+               }
+               p = REALLOC(st->buf, st->size + len_bytes + 1);
+               if(!p) RETURN(RC_FAIL);
+               st->buf = (uint8_t *)p;
+
+               if(bpc) {
+                       ret = OCTET_STRING_per_get_characters(pd,
+                               &st->buf[st->size], raw_len, bpc, unit_bits,
+                               cval->lower_bound, cval->upper_bound, pc);
+                       if(ret > 0) RETURN(RC_FAIL);
+               } else {
+                       ret = per_get_many_bits(pd, &st->buf[st->size],
+                               0, len_bits);
+               }
+               if(ret < 0) RETURN(RC_WMORE);
+               st->size += len_bytes;
+       } while(repeat);
+       st->buf[st->size] = 0;  /* nul-terminate */
+
+       return rval;
+}
+
+asn_enc_rval_t
+OCTET_STRING_encode_aper(const asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints,
+                         const void *sptr, asn_per_outp_t *po) {
+
+       const asn_OCTET_STRING_specifics_t *specs = td->specifics
+               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+               : &asn_SPC_OCTET_STRING_specs;
+       const asn_per_constraints_t *pc = constraints ? constraints
+       : td->encoding_constraints.per_constraints;
+       const asn_per_constraint_t *cval;
+       const asn_per_constraint_t *csiz;
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       asn_enc_rval_t er = { 0, 0, 0 };
+       int inext = 0;          /* Lies not within extension root */
+       unsigned int unit_bits;
+       unsigned int canonical_unit_bits;
+       unsigned int sizeinunits;
+       const uint8_t *buf;
+       int ret;
+       enum {
+               OS__BPC_BIT     = 0,
+               OS__BPC_CHAR    = 1,
+               OS__BPC_U16     = 2,
+               OS__BPC_U32     = 4
+       } bpc;  /* Bytes per character */
+       int ct_extensible;
+
+       if(!st || (!st->buf && st->size))
+               ASN__ENCODE_FAILED;
+
+       if(pc) {
+               cval = &pc->value;
+               csiz = &pc->size;
+       } else {
+               cval = &asn_DEF_OCTET_STRING_constraints.value;
+               csiz = &asn_DEF_OCTET_STRING_constraints.size;
+       }
+       ct_extensible = csiz->flags & APC_EXTENSIBLE;
+
+       switch(specs->subvariant) {
+               default:
+                       /*         case ASN_OSUBV_ANY:
+                                        ASN__ENCODE_FAILED;
+                       */
+               case ASN_OSUBV_BIT:
+                       canonical_unit_bits = unit_bits = 1;
+                       bpc = OS__BPC_BIT;
+                       sizeinunits = st->size * 8 - (st->bits_unused & 0x07);
+                       ASN_DEBUG("BIT STRING of %d bytes",
+                                                               sizeinunits);
+               break;
+        case ASN_OSUBV_ANY:
+       case ASN_OSUBV_STR:
+               canonical_unit_bits = unit_bits = 8;
+/*             if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = 8;
+*/
+               bpc = OS__BPC_CHAR;
+               sizeinunits = st->size;
+               break;
+       case ASN_OSUBV_U16:
+               canonical_unit_bits = unit_bits = 16;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U16;
+               sizeinunits = st->size / 2;
+               break;
+       case ASN_OSUBV_U32:
+               canonical_unit_bits = unit_bits = 32;
+               if(cval->flags & APC_CONSTRAINED)
+                       unit_bits = cval->range_bits;
+               bpc = OS__BPC_U32;
+               sizeinunits = st->size / 4;
+               break;
+       }
+
+       ASN_DEBUG("Encoding %s into %d units of %d bits"
+               " (%ld..%ld, effective %d)%s",
+               td->name, sizeinunits, unit_bits,
+               csiz->lower_bound, csiz->upper_bound,
+               csiz->effective_bits, ct_extensible ? " EXT" : "");
+
+       /* Figure out wheter size lies within PER visible constraint */
+
+       if(csiz->effective_bits >= 0) {
+               if((int)sizeinunits < csiz->lower_bound
+               || (int)sizeinunits > csiz->upper_bound) {
+                       if(ct_extensible) {
+                               cval = &asn_DEF_OCTET_STRING_constraints.value;
+                               csiz = &asn_DEF_OCTET_STRING_constraints.size;
+                               unit_bits = canonical_unit_bits;
+                               inext = 1;
+                       } else
+                               ASN__ENCODE_FAILED;
+               }
+       } else {
+               inext = 0;
+       }
+
+
+       if(ct_extensible) {
+               /* Declare whether length is [not] within extension root */
+               if(per_put_few_bits(po, inext, 1))
+                       ASN__ENCODE_FAILED;
+       }
+
+       /* X.691, #16.5: zero-length encoding */
+       /* X.691, #16.6: short fixed length encoding (up to 2 octets) */
+       /* X.691, #16.7: long fixed length encoding (up to 64K octets) */
+       if(csiz->effective_bits >= 0) {
+               ASN_DEBUG("Encoding %lu bytes (%ld), length in %d bits",
+                               st->size, sizeinunits - csiz->lower_bound,
+                               csiz->effective_bits);
+               if (csiz->effective_bits > 0) {
+                       ret = aper_put_length(po, csiz->upper_bound - csiz->lower_bound + 1, sizeinunits - csiz->lower_bound);
+                       if(ret) ASN__ENCODE_FAILED;
+               }
+               if (st->size > 2) { /* X.691 #16 NOTE 1 */
+                       if (aper_put_align(po) < 0)
+                               ASN__ENCODE_FAILED;
+               }
+               if(bpc) {
+                       ret = OCTET_STRING_per_put_characters(po, st->buf,
+                               sizeinunits, bpc, unit_bits,
+                               cval->lower_bound, cval->upper_bound, pc);
+               } else {
+                       ret = per_put_many_bits(po, st->buf,
+                               sizeinunits * unit_bits);
+               }
+               if(ret) ASN__ENCODE_FAILED;
+               ASN__ENCODED_OK(er);
+       }
+
+       ASN_DEBUG("Encoding %lu bytes", st->size);
+
+       if(sizeinunits == 0) {
+               if(aper_put_length(po, -1, 0))
+                       ASN__ENCODE_FAILED;
+               ASN__ENCODED_OK(er);
+       }
+
+       buf = st->buf;
+       while(sizeinunits) {
+               ssize_t maySave = aper_put_length(po, -1, sizeinunits);
+
+               if(maySave < 0) ASN__ENCODE_FAILED;
+
+               ASN_DEBUG("Encoding %ld of %ld",
+                       (long)maySave, (long)sizeinunits);
+
+               if(bpc) {
+                       ret = OCTET_STRING_per_put_characters(po, buf,
+                               maySave, bpc, unit_bits,
+                               cval->lower_bound, cval->upper_bound, pc);
+               } else {
+                       ret = per_put_many_bits(po, buf, maySave * unit_bits);
+               }
+               if(ret) ASN__ENCODE_FAILED;
+
+               if(bpc)
+                       buf += maySave * bpc;
+               else
+                       buf += maySave >> 3;
+               sizeinunits -= maySave;
+               assert(!(maySave & 0x07) || !sizeinunits);
+       }
+
+       ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+OCTET_STRING_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const char * const h2c = "0123456789ABCDEF";
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       char scratch[16 * 3 + 4];
+       char *p = scratch;
+       uint8_t *buf;
+       uint8_t *end;
+       size_t i;
+
+       (void)td;       /* Unused argument */
+
+       if(!st || (!st->buf && st->size))
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /*
+        * Dump the contents of the buffer in hexadecimal.
+        */
+       buf = st->buf;
+       end = buf + st->size;
+       for(i = 0; buf < end; buf++, i++) {
+               if(!(i % 16) && (i || st->size > 16)) {
+                       if(cb(scratch, p - scratch, app_key) < 0)
+                               return -1;
+                       _i_INDENT(1);
+                       p = scratch;
+               }
+               *p++ = h2c[(*buf >> 4) & 0x0F];
+               *p++ = h2c[*buf & 0x0F];
+               *p++ = 0x20;
+       }
+
+       if(p > scratch) {
+               p--;    /* Remove the tail space */
+               if(cb(scratch, p - scratch, app_key) < 0)
+                       return -1;
+       }
+
+       return 0;
+}
+
+int
+OCTET_STRING_print_utf8(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, asn_app_consume_bytes_f *cb,
+                        void *app_key) {
+    const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(st && (st->buf || !st->size)) {
+               return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+void
+OCTET_STRING_free(const asn_TYPE_descriptor_t *td, void *sptr,
+                  enum asn_struct_free_method method) {
+       OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
+       const asn_OCTET_STRING_specifics_t *specs;
+       asn_struct_ctx_t *ctx;
+       struct _stack *stck;
+
+       if(!td || !st)
+               return;
+
+       specs = td->specifics
+                   ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                   : &asn_SPC_OCTET_STRING_specs;
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+       ASN_DEBUG("Freeing %s as OCTET STRING", td->name);
+
+       if(st->buf) {
+               FREEMEM(st->buf);
+               st->buf = 0;
+       }
+
+       /*
+        * Remove decode-time stack.
+        */
+       stck = (struct _stack *)ctx->ptr;
+       if(stck) {
+               while(stck->tail) {
+                       struct _stack_el *sel = stck->tail;
+                       stck->tail = sel->prev;
+                       FREEMEM(sel);
+               }
+               FREEMEM(stck);
+       }
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(sptr, 0,
+               td->specifics
+                   ? ((const asn_OCTET_STRING_specifics_t *)(td->specifics))
+                         ->struct_size
+                   : sizeof(OCTET_STRING_t));
+        break;
+    }
+}
+
+/*
+ * Conversion routines.
+ */
+int
+OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) {
+       void *buf;
+
+       if(st == 0 || (str == 0 && len)) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * Clear the OCTET STRING.
+        */
+       if(str == NULL) {
+               FREEMEM(st->buf);
+               st->buf = 0;
+               st->size = 0;
+               return 0;
+       }
+
+       /* Determine the original string size, if not explicitly given */
+       if(len < 0)
+               len = strlen(str);
+
+       /* Allocate and fill the memory */
+       buf = MALLOC(len + 1);
+       if(buf == NULL)
+               return -1;
+
+       memcpy(buf, str, len);
+       ((uint8_t *)buf)[len] = '\0';   /* Couldn't use memcpy(len+1)! */
+       FREEMEM(st->buf);
+       st->buf = (uint8_t *)buf;
+       st->size = len;
+
+       return 0;
+}
+
+OCTET_STRING_t *
+OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td, const char *str,
+                         int len) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_OCTET_STRING_specs;
+    OCTET_STRING_t *st;
+
+       st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size);
+       if(st && str && OCTET_STRING_fromBuf(st, str, len)) {
+               FREEMEM(st);
+               st = NULL;
+       }
+
+       return st;
+}
+
+/*
+ * Lexicographically compare the common prefix of both strings,
+ * and if it is the same return -1 for the smallest string.
+ */
+int
+OCTET_STRING_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                     const void *bptr) {
+    const asn_OCTET_STRING_specifics_t *specs = td->specifics;
+    const OCTET_STRING_t *a = aptr;
+    const OCTET_STRING_t *b = bptr;
+
+    assert(!specs || specs->subvariant != ASN_OSUBV_BIT);
+
+    if(a && b) {
+        size_t common_prefix_size = a->size <= b->size ? a->size : b->size;
+        int ret = memcmp(a->buf, b->buf, common_prefix_size);
+        if(ret == 0) {
+            /* Figure out which string with equal prefixes is longer. */
+            if(a->size < b->size) {
+                return -1;
+            } else if(a->size > b->size) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else {
+            return ret < 0 ? -1 : 1;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+
+}
+
+/*
+ * Biased function for randomizing character values around their limits.
+ */
+static uint32_t
+OCTET_STRING__random_char(unsigned long lb, unsigned long ub) {
+    assert(lb <= ub);
+    switch(asn_random_between(0, 16)) {
+    case 0:
+        if(lb < ub) return lb + 1;
+        /* Fall through */
+    case 1:
+        return lb;
+    case 2:
+        if(lb < ub) return ub - 1;
+        /* Fall through */
+    case 3:
+        return ub;
+    default:
+        return asn_random_between(lb, ub);
+    }
+}
+
+
+size_t
+OCTET_STRING_random_length_constrained(
+    const asn_TYPE_descriptor_t *td,
+    const asn_encoding_constraints_t *constraints, size_t max_length) {
+    const unsigned lengths[] = {0,     1,     2,     3,     4,     8,
+                                126,   127,   128,   16383, 16384, 16385,
+                                65534, 65535, 65536, 65537};
+    size_t rnd_len;
+
+    /* Figure out how far we should go */
+    rnd_len = lengths[asn_random_between(
+        0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_CONSTRAINED) {
+            long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length
+                                             ? pc->upper_bound
+                                             : (ssize_t)max_length;
+            if(max_length <= (size_t)pc->lower_bound) {
+                return pc->lower_bound;
+            }
+            if(pc->flags & APC_EXTENSIBLE) {
+                switch(asn_random_between(0, 5)) {
+                case 0:
+                    if(pc->lower_bound > 0) {
+                        rnd_len = pc->lower_bound - 1;
+                        break;
+                    }
+                    /* Fall through */
+                case 1:
+                    rnd_len = pc->upper_bound + 1;
+                    break;
+                case 2:
+                    /* Keep rnd_len from the table */
+                    if(rnd_len <= max_length) {
+                        break;
+                    }
+                    /* Fall through */
+                default:
+                    rnd_len = asn_random_between(pc->lower_bound,
+                                                 suggested_upper_bound);
+                }
+            } else {
+                rnd_len =
+                    asn_random_between(pc->lower_bound, suggested_upper_bound);
+            }
+        } else {
+            rnd_len = asn_random_between(0, max_length);
+        }
+    } else if(rnd_len > max_length) {
+        rnd_len = asn_random_between(0, max_length);
+    }
+
+    return rnd_len;
+}
+
+asn_random_fill_result_t
+OCTET_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                         const asn_encoding_constraints_t *constraints,
+                         size_t max_length) {
+       const asn_OCTET_STRING_specifics_t *specs = td->specifics
+                               ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                               : &asn_SPC_OCTET_STRING_specs;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    unsigned int unit_bytes = 1;
+    unsigned long clb = 0;  /* Lower bound on char */
+    unsigned long cub = 255;  /* Higher bound on char value */
+    uint8_t *buf;
+    uint8_t *bend;
+    uint8_t *b;
+    size_t rnd_len;
+    OCTET_STRING_t *st;
+
+    if(max_length == 0 && !*sptr) return result_skipped;
+
+    switch(specs->subvariant) {
+    default:
+    case ASN_OSUBV_ANY:
+        return result_failed;
+    case ASN_OSUBV_BIT:
+        /* Handled by BIT_STRING itself. */
+        return result_failed;
+    case ASN_OSUBV_STR:
+        unit_bytes = 1;
+        clb = 0;
+        cub = 255;
+        break;
+    case ASN_OSUBV_U16:
+        unit_bytes = 2;
+        clb = 0;
+        cub = 65535;
+        break;
+    case ASN_OSUBV_U32:
+        unit_bytes = 4;
+        clb = 0;
+        cub = 0x10FFFF;
+        break;
+    }
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->value;
+        if(pc->flags & APC_SEMI_CONSTRAINED) {
+            clb = pc->lower_bound;
+        } else if(pc->flags & APC_CONSTRAINED) {
+            clb = pc->lower_bound;
+            cub = pc->upper_bound;
+        }
+    }
+
+    rnd_len =
+        OCTET_STRING_random_length_constrained(td, constraints, max_length);
+
+    buf = CALLOC(unit_bytes, rnd_len + 1);
+    if(!buf) return result_failed;
+
+    bend = &buf[unit_bytes * rnd_len];
+
+    switch(unit_bytes) {
+    case 1:
+        for(b = buf; b < bend; b += unit_bytes) {
+            *(uint8_t *)b = OCTET_STRING__random_char(clb, cub);
+        }
+        *(uint8_t *)b = 0;
+        break;
+    case 2:
+        for(b = buf; b < bend; b += unit_bytes) {
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 8;
+            b[1] = code;
+        }
+        *(uint16_t *)b = 0;
+        break;
+    case 4:
+        for(b = buf; b < bend; b += unit_bytes) {
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 24;
+            b[1] = code >> 16;
+            b[2] = code >> 8;
+            b[3] = code;
+        }
+        *(uint32_t *)b = 0;
+        break;
+    }
+
+    if(*sptr) {
+        st = *sptr;
+        FREEMEM(st->buf);
+    } else {
+        st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) {
+            FREEMEM(buf);
+            return result_failed;
+        }
+    }
+
+    st->buf = buf;
+    st->size = unit_bytes * rnd_len;
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/skeletons/OCTET_STRING.h b/skeletons/OCTET_STRING.h
new file mode 100644 (file)
index 0000000..c2f8bae
--- /dev/null
@@ -0,0 +1,102 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _OCTET_STRING_H_
+#define        _OCTET_STRING_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct OCTET_STRING {
+       uint8_t *buf;   /* Buffer with consecutive OCTET_STRING bits */
+       size_t size;    /* Size of the buffer */
+
+       asn_struct_ctx_t _asn_ctx;      /* Parsing across buffer boundaries */
+} OCTET_STRING_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING;
+extern asn_TYPE_operation_t asn_OP_OCTET_STRING;
+
+asn_struct_free_f OCTET_STRING_free;
+asn_struct_print_f OCTET_STRING_print;
+asn_struct_print_f OCTET_STRING_print_utf8;
+asn_struct_compare_f OCTET_STRING_compare;
+ber_type_decoder_f OCTET_STRING_decode_ber;
+der_type_encoder_f OCTET_STRING_encode_der;
+xer_type_decoder_f OCTET_STRING_decode_xer_hex;                /* Hexadecimal */
+xer_type_decoder_f OCTET_STRING_decode_xer_binary;     /* 01010111010 */
+xer_type_decoder_f OCTET_STRING_decode_xer_utf8;       /* ASCII/UTF-8 */
+xer_type_encoder_f OCTET_STRING_encode_xer;
+xer_type_encoder_f OCTET_STRING_encode_xer_utf8;
+oer_type_decoder_f OCTET_STRING_decode_oer;
+oer_type_encoder_f OCTET_STRING_encode_oer;
+per_type_decoder_f OCTET_STRING_decode_uper;
+per_type_encoder_f OCTET_STRING_encode_uper;
+per_type_decoder_f OCTET_STRING_decode_aper;
+per_type_encoder_f OCTET_STRING_encode_aper;
+asn_random_fill_f  OCTET_STRING_random_fill;
+
+#define OCTET_STRING_constraint  asn_generic_no_constraint
+#define OCTET_STRING_decode_xer  OCTET_STRING_decode_xer_hex
+
+/******************************
+ * Handy conversion routines. *
+ ******************************/
+
+/*
+ * This function clears the previous value of the OCTET STRING (if any)
+ * and then allocates a new memory with the specified content (str/size).
+ * If size = -1, the size of the original string will be determined
+ * using strlen(str).
+ * If str equals to NULL, the function will silently clear the
+ * current contents of the OCTET STRING.
+ * Returns 0 if it was possible to perform operation, -1 otherwise.
+ */
+int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size);
+
+/* Handy conversion from the C string into the OCTET STRING. */
+#define        OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1)
+
+/*
+ * Allocate and fill the new OCTET STRING and return a pointer to the newly
+ * allocated object. NULL is permitted in str: the function will just allocate
+ * empty OCTET STRING.
+ */
+OCTET_STRING_t *OCTET_STRING_new_fromBuf(const asn_TYPE_descriptor_t *td,
+                                         const char *str, int size);
+
+/****************************
+ * Internally useful stuff. *
+ ****************************/
+
+typedef struct asn_OCTET_STRING_specifics_s {
+    /*
+     * Target structure description.
+     */
+    unsigned struct_size;   /* Size of the structure */
+    unsigned ctx_offset;    /* Offset of the asn_struct_ctx_t member */
+
+    enum asn_OS_Subvariant {
+        ASN_OSUBV_ANY, /* The open type (ANY) */
+        ASN_OSUBV_BIT, /* BIT STRING */
+        ASN_OSUBV_STR, /* String types, not {BMP,Universal}String  */
+        ASN_OSUBV_U16, /* 16-bit character (BMPString) */
+        ASN_OSUBV_U32  /* 32-bit character (UniversalString) */
+    } subvariant;
+} asn_OCTET_STRING_specifics_t;
+
+extern asn_OCTET_STRING_specifics_t asn_SPC_OCTET_STRING_specs;
+
+size_t OCTET_STRING_random_length_constrained(
+    const asn_TYPE_descriptor_t *, const asn_encoding_constraints_t *,
+    size_t max_length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _OCTET_STRING_H_ */
diff --git a/skeletons/OCTET_STRING_oer.c b/skeletons/OCTET_STRING_oer.c
new file mode 100644 (file)
index 0000000..c16faea
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <OCTET_STRING.h>
+#include <errno.h>
+
+asn_dec_rval_t
+OCTET_STRING_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                        const asn_TYPE_descriptor_t *td,
+                        const asn_oer_constraints_t *constraints, void **sptr,
+                        const void *ptr, size_t size) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_OCTET_STRING_specs;
+    OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
+    const asn_oer_constraints_t *cts =
+        constraints ? constraints : td->encoding_constraints.oer_constraints;
+    ssize_t ct_size = cts ? cts->size : -1;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    size_t expected_length = 0;
+
+    size_t unit_bytes;
+    switch(specs->subvariant) {
+    default:
+    case ASN_OSUBV_BIT:
+        ASN_DEBUG("Invalid use of OCTET STRING to decode BIT STRING");
+        ASN__DECODE_FAILED;
+    case ASN_OSUBV_ANY:
+        /* Fall through */
+    case ASN_OSUBV_STR:
+        unit_bytes = 1;
+        break;
+    case ASN_OSUBV_U16:
+        unit_bytes = 2;
+        break;
+    case ASN_OSUBV_U32:
+        unit_bytes = 4;
+        break;
+    }
+
+    (void)opt_codec_ctx;
+
+    if(!st) {
+        st = (OCTET_STRING_t *)(*sptr = CALLOC(1, specs->struct_size));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+    if(ct_size >= 0) {
+        expected_length = unit_bytes * ct_size;
+    } else {
+        /*
+         * X.696 (08/2015) #27.2
+         * Encode length determinant as _number of octets_, but only
+         * if upper bound is not equal to lower bound.
+         */
+        ssize_t len_len = oer_fetch_length(ptr, size, &expected_length);
+        if(len_len > 0) {
+            rval.consumed = len_len;
+            ptr = (const char *)ptr + len_len;
+            size -= len_len;
+        } else if(len_len == 0) {
+            ASN__DECODE_STARVED;
+        } else if(len_len < 0) {
+            ASN__DECODE_FAILED;
+        }
+
+        if(expected_length % unit_bytes != 0) {
+            ASN_DEBUG(
+                "Data size %" ASN_PRI_SIZE " bytes is not consistent with multiplier %" ASN_PRI_SIZE "",
+                expected_length, unit_bytes);
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    if(size < expected_length) {
+        ASN__DECODE_STARVED;
+    } else {
+        uint8_t *buf = MALLOC(expected_length + 1);
+        if(buf == NULL) {
+            ASN__DECODE_FAILED;
+        } else {
+            memcpy(buf, ptr, expected_length);
+            buf[expected_length] = '\0';
+        }
+        FREEMEM(st->buf);
+        st->buf = buf;
+        st->size = expected_length;
+
+        rval.consumed += expected_length;
+        return rval;
+    }
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+OCTET_STRING_encode_oer(const asn_TYPE_descriptor_t *td,
+                        const asn_oer_constraints_t *constraints,
+                        const void *sptr, asn_app_consume_bytes_f *cb,
+                        void *app_key) {
+    const asn_OCTET_STRING_specifics_t *specs =
+        td->specifics ? (const asn_OCTET_STRING_specifics_t *)td->specifics
+                      : &asn_SPC_OCTET_STRING_specs;
+    const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+    const asn_oer_constraints_t *cts =
+        constraints ? constraints : td->encoding_constraints.oer_constraints;
+    ssize_t ct_size = cts ? cts->size : -1;
+    asn_enc_rval_t er = {0, 0, 0};
+
+    if(!st) ASN__ENCODE_FAILED;
+
+    ASN_DEBUG("Encoding %s %" ASN_PRI_SIZE " as OCTET STRING", td ? td->name : "", st->size);
+
+    if(ct_size >= 0) {
+        /*
+         * Check that available data matches the constraint
+         */
+        size_t unit_bytes;
+        switch(specs->subvariant) {
+        default:
+        case ASN_OSUBV_BIT:
+            ASN_DEBUG("Invalid use of OCTET STRING to encode BIT STRING");
+            ASN__ENCODE_FAILED;
+        case ASN_OSUBV_ANY:
+            /* Fall through */
+        case ASN_OSUBV_STR:
+            unit_bytes = 1;
+            break;
+        case ASN_OSUBV_U16:
+            unit_bytes = 2;
+            break;
+        case ASN_OSUBV_U32:
+            unit_bytes = 4;
+            break;
+        }
+
+        if(st->size != unit_bytes * (size_t)ct_size) {
+            ASN_DEBUG(
+                "Trying to encode %s (%" ASN_PRI_SIZE " bytes) which doesn't fit SIZE "
+                "constraint (%" ASN_PRI_SIZE ")",
+                td->name, st->size, ct_size);
+            ASN__ENCODE_FAILED;
+        }
+    } else {
+        /*
+         * X.696 (08/2015) #27.2
+         * Encode length determinant as _number of octets_, but only
+         * if upper bound is not equal to lower bound.
+         */
+        ssize_t ret = oer_serialize_length(st->size, cb, app_key);
+        if(ret < 0) {
+            ASN__ENCODE_FAILED;
+        }
+        er.encoded += ret;
+    }
+
+    er.encoded += st->size;
+    if(cb(st->buf, st->size, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    } else {
+        ASN__ENCODED_OK(er);
+    }
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/OPEN_TYPE.c b/skeletons/OPEN_TYPE.c
new file mode 100644 (file)
index 0000000..a54e99c
--- /dev/null
@@ -0,0 +1,509 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <per_opentype.h>
+#include <errno.h>
+
+asn_TYPE_operation_t asn_OP_OPEN_TYPE = {
+       OPEN_TYPE_free,
+       OPEN_TYPE_print,
+       OPEN_TYPE_compare,
+       OPEN_TYPE_decode_ber,
+       OPEN_TYPE_encode_der,
+       OPEN_TYPE_decode_xer,
+       OPEN_TYPE_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0, 0,   /* No OER support, use "-gen-OER" to enable */
+#else
+       OPEN_TYPE_decode_oer,
+       OPEN_TYPE_encode_oer,
+#endif
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0, 0, 0, 0,
+#else
+       OPEN_TYPE_decode_uper,
+       OPEN_TYPE_encode_uper,
+       OPEN_TYPE_decode_aper,
+       OPEN_TYPE_encode_aper,
+#endif
+       0,  /* Random fill is not supported for open type */
+       0       /* Use generic outmost tag fetcher */
+};
+
+#undef  ADVANCE
+#define ADVANCE(num_bytes)               \
+    do {                                 \
+        size_t num = num_bytes;          \
+        ptr = ((const char *)ptr) + num; \
+        size -= num;                     \
+        consumed_myself += num;          \
+    } while(0)
+
+asn_dec_rval_t
+OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void *sptr,
+                  const asn_TYPE_member_t *elm, const void *ptr, size_t size) {
+    size_t consumed_myself = 0;
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    ASN_DEBUG("presence %d\n", selected.presence_index);
+
+    rv = selected.type_descriptor->op->ber_decoder(
+        opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size,
+        elm->tag_mode);
+    ADVANCE(rv.consumed);
+    rv.consumed = 0;
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            rv.code = RC_OK;
+            rv.consumed = consumed_myself;
+            return rv;
+        } else {
+            /* Oh, now a full-blown failure failure */
+        }
+        /* Fall through */
+    case RC_FAIL:
+        rv.consumed = consumed_myself;
+        /* Fall through */
+    case RC_WMORE:
+        break;
+    }
+
+    if(*memb_ptr2) {
+        if(elm->flags & ATF_POINTER) {
+            ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+            *memb_ptr2 = NULL;
+        } else {
+            ASN_STRUCT_RESET(*selected.type_descriptor,
+                                          inner_value);
+        }
+    }
+    return rv;
+}
+
+asn_dec_rval_t
+OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void *sptr,
+                  const asn_TYPE_member_t *elm, const void *ptr, size_t size) {
+    size_t consumed_myself = 0;
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    int xer_context = 0;
+    ssize_t ch_size;
+    pxer_chunk_type_e ch_type;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    /*
+     * Confirm wrapper.
+     */
+    for(;;) {
+        ch_size = xer_next_token(&xer_context, ptr, size, &ch_type);
+        if(ch_size < 0) {
+            ASN__DECODE_FAILED;
+        } else {
+            switch(ch_type) {
+            case PXER_WMORE:
+                ASN__DECODE_STARVED;
+            case PXER_COMMENT:
+            case PXER_TEXT:
+                ADVANCE(ch_size);
+                continue;
+            case PXER_TAG:
+                break;
+            }
+            break;
+        }
+    }
+
+    /*
+     * Wrapper value confirmed.
+     */
+    switch(xer_check_tag(ptr, ch_size, elm->name)) {
+    case XCT_OPENING:
+        ADVANCE(ch_size);
+        break;
+    case XCT_BROKEN:
+    default:
+        ASN__DECODE_FAILED;
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = selected.type_descriptor->op->xer_decoder(
+        opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size);
+    ADVANCE(rv.consumed);
+    rv.consumed = 0;
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_FAIL:
+        /* Point to a best position where failure occurred */
+        rv.consumed = consumed_myself;
+        /* Fall through */
+    case RC_WMORE:
+        /* Wrt. rv.consumed==0:
+         * In case a genuine RC_WMORE, the whole Open Type decoding
+         * will have to be restarted.
+         */
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+        return rv;
+    }
+
+    /*
+     * Finalize wrapper.
+     */
+    for(;;) {
+        ch_size = xer_next_token(&xer_context, ptr, size, &ch_type);
+        if(ch_size < 0) {
+            ASN__DECODE_FAILED;
+        } else {
+            switch(ch_type) {
+            case PXER_WMORE:
+                ASN__DECODE_STARVED;
+            case PXER_COMMENT:
+            case PXER_TEXT:
+                ADVANCE(ch_size);
+                continue;
+            case PXER_TAG:
+                break;
+            }
+            break;
+        }
+    }
+
+    /*
+     * Wrapper value confirmed.
+     */
+    switch(xer_check_tag(ptr, ch_size, elm->name)) {
+    case XCT_CLOSING:
+        ADVANCE(ch_size);
+        break;
+    case XCT_BROKEN:
+    default:
+        ASN__DECODE_FAILED;
+    }
+
+    rv.consumed += consumed_myself;
+
+    return rv;
+}
+
+
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void *sptr,
+                   const asn_TYPE_member_t *elm, asn_per_data_t *pd) {
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = uper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
+                            &inner_value, pd);
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_WMORE:
+    case RC_FAIL:
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+    }
+    return rv;
+}
+
+asn_enc_rval_t
+OPEN_TYPE_encode_uper(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, asn_per_outp_t *po) {
+    const void *memb_ptr;   /* Pointer to the member */
+    asn_TYPE_member_t *elm; /* CHOICE's element */
+    asn_enc_rval_t er = {0,0,0};
+    unsigned present;
+
+    (void)constraints;
+
+    present = CHOICE_variant_get_presence(td, sptr);
+    if(present == 0 || present > td->elements_count) {
+        ASN__ENCODE_FAILED;
+    } else {
+        present--;
+    }
+
+    ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present);
+
+    elm = &td->elements[present];
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+    } else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(uper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = 0;
+    ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td, void *sptr,
+                   const asn_TYPE_member_t *elm, asn_per_data_t *pd) {
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    assert(elm->flags == ATF_OPEN_TYPE);
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0)
+           != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    rv = aper_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
+                            &inner_value, pd);
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            break;
+        } else {
+            rv.code = RC_FAIL;
+        }
+        /* Fall through */
+    case RC_WMORE:
+    case RC_FAIL:
+        if(*memb_ptr2) {
+            if(elm->flags & ATF_POINTER) {
+                ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+                *memb_ptr2 = NULL;
+            } else {
+                ASN_STRUCT_RESET(*selected.type_descriptor,
+                                              inner_value);
+            }
+        }
+    }
+    return rv;
+}
+
+asn_enc_rval_t
+OPEN_TYPE_encode_aper(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, asn_per_outp_t *po) {
+    const void *memb_ptr;   /* Pointer to the member */
+    asn_TYPE_member_t *elm; /* CHOICE's element */
+    asn_enc_rval_t er = {0,0,0};
+    unsigned present;
+
+    (void)constraints;
+
+    present = CHOICE_variant_get_presence(td, sptr);
+    if(present == 0 || present > td->elements_count) {
+        ASN__ENCODE_FAILED;
+    } else {
+        present--;
+    }
+
+    ASN_DEBUG("Encoding %s OPEN TYPE element %d", td->name, present);
+
+    elm = &td->elements[present];
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+    } else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(aper_open_type_put(elm->type, NULL, memb_ptr, po) < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    er.encoded = 0;
+    ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
diff --git a/skeletons/OPEN_TYPE.h b/skeletons/OPEN_TYPE.h
new file mode 100644 (file)
index 0000000..b0d023c
--- /dev/null
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 2017-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_OPEN_TYPE_H
+#define ASN_OPEN_TYPE_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define OPEN_TYPE_free CHOICE_free
+#define OPEN_TYPE_print CHOICE_print
+#define OPEN_TYPE_compare CHOICE_compare
+#define OPEN_TYPE_constraint CHOICE_constraint
+#define OPEN_TYPE_decode_ber NULL
+#define OPEN_TYPE_encode_der CHOICE_encode_der
+#define OPEN_TYPE_decode_xer NULL
+#define OPEN_TYPE_encode_xer CHOICE_encode_xer
+#define OPEN_TYPE_decode_oer NULL
+#define OPEN_TYPE_encode_oer CHOICE_encode_oer
+#define OPEN_TYPE_decode_uper NULL
+#define OPEN_TYPE_decode_aper NULL
+
+extern asn_TYPE_operation_t asn_OP_OPEN_TYPE;
+
+/*
+ * Decode an Open Type which is potentially constraiend
+ * by the other members of the parent structure.
+ */
+asn_dec_rval_t OPEN_TYPE_ber_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 const asn_TYPE_member_t *element,
+                                 const void *ptr, size_t size);
+
+asn_dec_rval_t OPEN_TYPE_xer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 const asn_TYPE_member_t *element,
+                                 const void *ptr, size_t size);
+
+asn_dec_rval_t OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                 const asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 asn_TYPE_member_t *element, const void *ptr,
+                                 size_t size);
+
+asn_dec_rval_t OPEN_TYPE_uper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *parent_type,
+                                  void *parent_structure,
+                                  const asn_TYPE_member_t *element,
+                                  asn_per_data_t *pd);
+
+asn_dec_rval_t OPEN_TYPE_aper_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *parent_type,
+                                  void *parent_structure,
+                                  const asn_TYPE_member_t *element,
+                                  asn_per_data_t *pd);
+
+asn_enc_rval_t OPEN_TYPE_encode_uper(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+asn_enc_rval_t OPEN_TYPE_encode_aper(
+    const asn_TYPE_descriptor_t *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_OPEN_TYPE_H */
diff --git a/skeletons/OPEN_TYPE_oer.c b/skeletons/OPEN_TYPE_oer.c
new file mode 100644 (file)
index 0000000..dd2f5c6
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <errno.h>
+
+asn_dec_rval_t
+OPEN_TYPE_oer_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void *sptr,
+                  asn_TYPE_member_t *elm, const void *ptr, size_t size) {
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+    size_t ot_ret;
+
+
+    if(!(elm->flags & ATF_OPEN_TYPE)) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(!elm->type_selector) {
+        ASN_DEBUG("Type selector is not defined for Open Type %s->%s->%s",
+                  td->name, elm->name, elm->type->name);
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
+                               &inner_value, ptr, size);
+    switch(ot_ret) {
+    default:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            rv.code = RC_OK;
+            rv.consumed = ot_ret;
+            return rv;
+        } else {
+            /* Oh, now a full-blown failure failure */
+        }
+        /* Fall through */
+    case -1:
+        rv.code = RC_FAIL;
+        rv.consumed = ot_ret;
+        break;
+    case 0:
+        rv.code = RC_WMORE;
+        rv.consumed = 0;
+        break;
+    }
+
+    if(*memb_ptr2) {
+        const asn_CHOICE_specifics_t *specs =
+            selected.type_descriptor->specifics;
+        if(elm->flags & ATF_POINTER) {
+            ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+            *memb_ptr2 = NULL;
+        } else {
+            ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor,
+                                          inner_value);
+            memset(*memb_ptr2, 0, specs->struct_size);
+        }
+    }
+    return rv;
+}
diff --git a/skeletons/ObjectDescriptor.c b/skeletons/ObjectDescriptor.c
new file mode 100644 (file)
index 0000000..5d8bfb2
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ObjectDescriptor.h>
+
+/*
+ * ObjectDescriptor basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_ObjectDescriptor_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (7 << 2)),   /* [UNIVERSAL 7] IMPLICIT ... */
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_ObjectDescriptor = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,   /* Treat as ASCII subset (it's not) */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       0,
+       0,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       0,      /* Not supported for ObjectDescriptor */
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_ObjectDescriptor = {
+       "ObjectDescriptor",
+       "ObjectDescriptor",
+       &asn_OP_ObjectDescriptor,
+       asn_DEF_ObjectDescriptor_tags,
+       sizeof(asn_DEF_ObjectDescriptor_tags)
+         / sizeof(asn_DEF_ObjectDescriptor_tags[0]) - 1,
+       asn_DEF_ObjectDescriptor_tags,
+       sizeof(asn_DEF_ObjectDescriptor_tags)
+         / sizeof(asn_DEF_ObjectDescriptor_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/skeletons/ObjectDescriptor.h b/skeletons/ObjectDescriptor.h
new file mode 100644 (file)
index 0000000..fa1c1fc
--- /dev/null
@@ -0,0 +1,35 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _ObjectDescriptor_H_
+#define        _ObjectDescriptor_H_
+
+#include <GraphicString.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef GraphicString_t ObjectDescriptor_t;  /* Implemented via GraphicString */
+
+extern asn_TYPE_descriptor_t asn_DEF_ObjectDescriptor;
+extern asn_TYPE_operation_t asn_OP_ObjectDescriptor;
+
+#define ObjectDescriptor_free         OCTET_STRING_free
+#define ObjectDescriptor_print        OCTET_STRING_print_utf8
+#define ObjectDescriptor_constraint   asn_generic_unknown_constraint
+#define ObjectDescriptor_decode_ber   OCTET_STRING_decode_ber
+#define ObjectDescriptor_encode_der   OCTET_STRING_encode_der
+#define ObjectDescriptor_decode_xer   OCTET_STRING_decode_xer_utf8
+#define ObjectDescriptor_encode_xer   OCTET_STRING_encode_xer_utf8
+#define ObjectDescriptor_decode_uper  OCTET_STRING_decode_uper
+#define ObjectDescriptor_encode_uper  OCTET_STRING_encode_uper
+#define ObjectDescriptor_decode_aper  OCTET_STRING_decode_aper
+#define ObjectDescriptor_encode_aper  OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ObjectDescriptor_H_ */
diff --git a/skeletons/PrintableString.c b/skeletons/PrintableString.c
new file mode 100644 (file)
index 0000000..8fc3939
--- /dev/null
@@ -0,0 +1,130 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <PrintableString.h>
+
+/*
+ * ASN.1:1984 (X.409)
+ */
+static const int _PrintableString_alphabet[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 0, 5, 6, 7, 8, 9,       /* .      '() +,-./ */
+10,11,12,13,14,15,16,17,18,19,20, 0, 0,21, 0,22,       /* 0123456789:  = ? */
+ 0,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,       /*  ABCDEFGHIJKLMNO */
+38,39,40,41,42,43,44,45,46,47,48, 0, 0, 0, 0, 0,       /* PQRSTUVWXYZ      */
+ 0,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,       /*  abcdefghijklmno */
+64,65,66,67,68,69,70,71,72,73,74, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+static const int _PrintableString_code2value[74] = {
+32,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,
+55,56,57,58,61,63,65,66,67,68,69,70,71,72,73,74,
+75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+113,114,115,116,117,118,119,120,121,122};
+
+/*
+ * PrintableString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_PrintableString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (19 << 2)),  /* [UNIVERSAL 19] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static int asn_DEF_PrintableString_v2c(unsigned int value) {
+       return _PrintableString_alphabet[value > 255 ? 0 : value] - 1;
+}
+static int asn_DEF_PrintableString_c2v(unsigned int code) {
+       if(code < 74)
+               return _PrintableString_code2value[code];
+       return -1;
+}
+static asn_per_constraints_t asn_DEF_PrintableString_per_constraints = {
+       { APC_CONSTRAINED, 4, 4, 0x20, 0x39 },  /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       asn_DEF_PrintableString_v2c,
+       asn_DEF_PrintableString_c2v
+};
+asn_TYPE_operation_t asn_OP_PrintableString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,        /* ASCII subset */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,      /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_PrintableString = {
+       "PrintableString",
+       "PrintableString",
+       &asn_OP_PrintableString,
+       asn_DEF_PrintableString_tags,
+       sizeof(asn_DEF_PrintableString_tags)
+         / sizeof(asn_DEF_PrintableString_tags[0]) - 1,
+       asn_DEF_PrintableString_tags,
+       sizeof(asn_DEF_PrintableString_tags)
+         / sizeof(asn_DEF_PrintableString_tags[0]),
+       { 0, &asn_DEF_PrintableString_per_constraints, PrintableString_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+int
+PrintableString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const PrintableString_t *st = (const PrintableString_t *)sptr;
+
+       if(st && st->buf) {
+               uint8_t *buf = st->buf;
+               uint8_t *end = buf + st->size;
+
+               /*
+                * Check the alphabet of the PrintableString.
+                * ASN.1:1984 (X.409)
+                */
+               for(; buf < end; buf++) {
+                       if(!_PrintableString_alphabet[*buf]) {
+                               ASN__CTFAIL(app_key, td, sptr,
+                                       "%s: value byte %ld (%d) "
+                                       "not in PrintableString alphabet "
+                                       "(%s:%d)",
+                                       td->name,
+                                       (long)((buf - st->buf) + 1),
+                                       *buf,
+                                       __FILE__, __LINE__);
+                               return -1;
+                       }
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/skeletons/PrintableString.h b/skeletons/PrintableString.h
new file mode 100644 (file)
index 0000000..8c2b61a
--- /dev/null
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _PrintableString_H_
+#define        _PrintableString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t PrintableString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_PrintableString;
+extern asn_TYPE_operation_t asn_OP_PrintableString;
+
+asn_constr_check_f PrintableString_constraint;
+
+#define PrintableString_free            OCTET_STRING_free
+#define PrintableString_print           OCTET_STRING_print_utf8
+#define PrintableString_compare         OCTET_STRING_compare
+#define PrintableString_decode_ber      OCTET_STRING_decode_ber
+#define PrintableString_encode_der      OCTET_STRING_encode_der
+#define PrintableString_decode_xer      OCTET_STRING_decode_xer_utf8
+#define PrintableString_encode_xer      OCTET_STRING_encode_xer_utf8
+#define PrintableString_decode_uper     OCTET_STRING_decode_uper
+#define PrintableString_encode_uper     OCTET_STRING_encode_uper
+#define PrintableString_decode_aper     OCTET_STRING_decode_aper
+#define PrintableString_encode_aper     OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PrintableString_H_ */
diff --git a/skeletons/README b/skeletons/README
new file mode 100644 (file)
index 0000000..df5521f
--- /dev/null
@@ -0,0 +1,4 @@
+This directory contains encoder/decoder code for various encoding rules
+(OER, PER, DER, BER, XER) that work with the tables constructed by the compiler.
+The compiler itself does not generate much code. It creates parsing tables
+and then copies (or links) over these files which contain generic codecs.
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
new file mode 100644 (file)
index 0000000..e3daf37
--- /dev/null
@@ -0,0 +1,1028 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#define        _ISOC99_SOURCE          /* For ilogb() and quiet NAN */
+#ifndef _BSD_SOURCE
+#define        _BSD_SOURCE             /* To reintroduce finite(3) */
+#endif
+#include <asn_internal.h>
+#if    defined(__alpha)
+#include <sys/resource.h>      /* For INFINITY */
+#endif
+#include <stdlib.h>    /* for strtod(3) */
+#include <math.h>
+#include <float.h>
+#include <errno.h>
+#include <REAL.h>
+#include <OCTET_STRING.h>
+
+#undef INT_MAX
+#define        INT_MAX ((int)(((unsigned int)-1) >> 1))
+
+#if    !(defined(NAN) || defined(INFINITY))
+static volatile double real_zero CC_NOTUSED = 0.0;
+#endif
+#ifndef        NAN
+#define        NAN     (0.0/0.0)
+#endif
+#ifndef        INFINITY
+#define        INFINITY        (1.0/0.0)
+#endif
+
+#if defined(__clang__)
+/*
+ * isnan() is defined using generic selections and won't compile in
+ * strict C89 mode because of too fancy system's standard library.
+ * However, prior to C11 the math had a perfectly working isnan()
+ * in the math library.
+ * Disable generic selection warning so we can test C89 mode with newer libc.
+ */
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc11-extensions"
+static int asn_isnan(double d) {
+    return isnan(d);
+}
+static int asn_isfinite(double d) {
+#ifdef isfinite
+    return isfinite(d);  /* ISO C99 */
+#else
+    return finite(d);    /* Deprecated on Mac OS X 10.9 */
+#endif
+}
+#pragma clang diagnostic pop
+#else   /* !clang */
+#define asn_isnan(v)    isnan(v)
+#ifdef isfinite
+#define asn_isfinite(d)   isfinite(d)  /* ISO C99 */
+#else
+#define asn_isfinite(d)   finite(d)    /* Deprecated on Mac OS X 10.9 */
+#endif
+#endif  /* clang */
+
+/*
+ * REAL basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_REAL_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_operation_t asn_OP_REAL = {
+       ASN__PRIMITIVE_TYPE_free,
+       REAL_print,
+       REAL_compare,
+       ber_decode_primitive,
+       der_encode_primitive,
+       REAL_decode_xer,
+       REAL_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       REAL_decode_oer,
+       REAL_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       REAL_decode_uper,
+       REAL_encode_uper,
+       REAL_decode_aper,
+       REAL_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       REAL_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_REAL = {
+       "REAL",
+       "REAL",
+       &asn_OP_REAL,
+       asn_DEF_REAL_tags,
+       sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]),
+       asn_DEF_REAL_tags, /* Same as above */
+       sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0,
+       0,      /* No members */
+       0       /* No specifics */
+};
+
+typedef enum specialRealValue {
+       SRV__NOT_A_NUMBER,
+       SRV__MINUS_INFINITY,
+       SRV__PLUS_INFINITY
+} specialRealValue_e;
+static struct specialRealValue_s {
+       char *string;
+       size_t length;
+       long dv;
+} specialRealValue[] = {
+#define        SRV_SET(foo, val)       { foo, sizeof(foo) - 1, val }
+       SRV_SET("<NOT-A-NUMBER/>", 0),
+       SRV_SET("<MINUS-INFINITY/>", -1),
+       SRV_SET("<PLUS-INFINITY/>", 1),
+#undef SRV_SET
+};
+
+ssize_t
+REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key) {
+       char local_buf[64];
+       char *buf = local_buf;
+       ssize_t buflen = sizeof(local_buf);
+       const char *fmt = canonical ? "%.17E" /* Precise */ : "%.15f" /* Pleasant*/;
+       ssize_t ret;
+
+       /*
+        * Check whether it is a special value.
+        */
+       /* fpclassify(3) is not portable yet */
+       if(asn_isnan(d)) {
+               buf = specialRealValue[SRV__NOT_A_NUMBER].string;
+               buflen = specialRealValue[SRV__NOT_A_NUMBER].length;
+               return (cb(buf, buflen, app_key) < 0) ? -1 : buflen;
+       } else if(!asn_isfinite(d)) {
+               if(copysign(1.0, d) < 0.0) {
+                       buf = specialRealValue[SRV__MINUS_INFINITY].string;
+                       buflen = specialRealValue[SRV__MINUS_INFINITY].length;
+               } else {
+                       buf = specialRealValue[SRV__PLUS_INFINITY].string;
+                       buflen = specialRealValue[SRV__PLUS_INFINITY].length;
+               }
+               return (cb(buf, buflen, app_key) < 0) ? -1 : buflen;
+       } else if(ilogb(d) <= -INT_MAX) {
+               if(copysign(1.0, d) < 0.0) {
+                       buf = "-0";
+                       buflen = 2;
+               } else {
+                       buf = "0";
+                       buflen = 1;
+               }
+               return (cb(buf, buflen, app_key) < 0) ? -1 : buflen;
+       }
+
+       /*
+        * Use the libc's double printing, hopefully they got it right.
+        */
+       do {
+               ret = snprintf(buf, buflen, fmt, d);
+               if(ret < 0) {
+                       /* There are some old broken APIs. */
+                       buflen <<= 1;
+                       if(buflen > 4096) {
+                               /* Should be plenty. */
+                               if(buf != local_buf) FREEMEM(buf);
+                               return -1;
+                       }
+               } else if(ret >= buflen) {
+                       buflen = ret + 1;
+               } else {
+                       buflen = ret;
+                       break;
+               }
+               if(buf != local_buf) FREEMEM(buf);
+               buf = (char *)MALLOC(buflen);
+               if(!buf) return -1;
+       } while(1);
+
+       if(canonical) {
+               /*
+                * Transform the "[-]d.dddE+-dd" output into "[-]d.dddE[-]d"
+                * Check that snprintf() constructed the output correctly.
+                */
+               char *dot;
+               char *end = buf + buflen;
+               char *last_zero;
+               char *first_zero_in_run;
+        char *s;
+
+        enum {
+            LZSTATE_NOTHING,
+            LZSTATE_ZEROES
+        } lz_state = LZSTATE_NOTHING;
+
+               dot = (buf[0] == 0x2d /* '-' */) ? (buf + 2) : (buf + 1);
+               if(*dot >= 0x30) {
+                       if(buf != local_buf) FREEMEM(buf);
+                       errno = EINVAL;
+                       return -1;      /* Not a dot, really */
+               }
+               *dot = 0x2e;            /* Replace possible comma */
+
+        for(first_zero_in_run = last_zero = s = dot + 2; s < end; s++) {
+            switch(*s) {
+            case 0x45: /* 'E' */
+                if(lz_state == LZSTATE_ZEROES) last_zero = first_zero_in_run;
+                break;
+            case 0x30: /* '0' */
+                if(lz_state == LZSTATE_NOTHING) first_zero_in_run = s;
+                lz_state = LZSTATE_ZEROES;
+                continue;
+            default:
+                lz_state = LZSTATE_NOTHING;
+                continue;
+            }
+            break;
+        }
+
+               if(s == end) {
+                       if(buf != local_buf) FREEMEM(buf);
+                       errno = EINVAL;
+                       return -1;              /* No promised E */
+               }
+
+        assert(*s == 0x45);
+        {
+            char *E = s;
+            char *expptr = ++E;
+            char *s = expptr;
+            int sign;
+
+            if(*expptr == 0x2b /* '+' */) {
+                /* Skip the "+" */
+                buflen -= 1;
+                sign = 0;
+            } else {
+                sign = 1;
+                s++;
+            }
+            expptr++;
+            if(expptr > end) {
+                if(buf != local_buf) FREEMEM(buf);
+                errno = EINVAL;
+                return -1;
+            }
+            if(*expptr == 0x30) {
+                buflen--;
+                expptr++;
+            }
+            if(lz_state == LZSTATE_ZEROES) {
+                *last_zero = 0x45;     /* E */
+                buflen -= s - (last_zero + 1);
+                s = last_zero + 1;
+                if(sign) {
+                    *s++ = 0x2d /* '-' */;
+                    buflen++;
+                }
+            }
+            for(; expptr <= end; s++, expptr++)
+                *s = *expptr;
+        }
+       } else {
+               /*
+                * Remove trailing zeros.
+                */
+               char *end = buf + buflen;
+               char *last_zero = end;
+               int stoplooking = 0;
+               char *z;
+               for(z = end - 1; z > buf; z--) {
+                       switch(*z) {
+                       case 0x30:
+                               if(!stoplooking)
+                                       last_zero = z;
+                               continue;
+                       case 0x31: case 0x32: case 0x33: case 0x34:
+                       case 0x35: case 0x36: case 0x37: case 0x38: case 0x39:
+                               stoplooking = 1;
+                               continue;
+                       default:        /* Catch dot and other separators */
+                               /*
+                                * Replace possible comma (which may even
+                                * be not a comma at all: locale-defined).
+                                */
+                               *z = 0x2e;
+                               if(last_zero == z + 1) {        /* leave x.0 */
+                                       last_zero++;
+                               }
+                               buflen = last_zero - buf;
+                               *last_zero = '\0';
+                               break;
+                       }
+                       break;
+               }
+       }
+
+       ret = cb(buf, buflen, app_key);
+       if(buf != local_buf) FREEMEM(buf);
+       return (ret < 0) ? -1 : buflen;
+}
+
+int
+REAL_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+           asn_app_consume_bytes_f *cb, void *app_key) {
+    const REAL_t *st = (const REAL_t *)sptr;
+       ssize_t ret;
+       double d;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(!st || !st->buf)
+               ret = cb("<absent>", 8, app_key);
+       else if(asn_REAL2double(st, &d))
+               ret = cb("<error>", 7, app_key);
+       else
+               ret = REAL__dump(d, 0, cb, app_key);
+
+       return (ret < 0) ? -1 : 0;
+}
+
+int
+REAL_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+             const void *bptr) {
+    const REAL_t *a = aptr;
+    const REAL_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        double adbl, bdbl;
+        int ra, rb;
+        ra = asn_REAL2double(a, &adbl);
+        rb = asn_REAL2double(b, &bdbl);
+        if(ra == 0 && rb == 0) {
+            if(asn_isnan(adbl)) {
+                if(asn_isnan(bdbl)) {
+                    return 0;
+                } else {
+                    return -1;
+                }
+            } else if(asn_isnan(bdbl)) {
+                return 1;
+            }
+            /* Value comparison. */
+            if(adbl < bdbl) {
+                return -1;
+            } else if(adbl > bdbl) {
+                return 1;
+            } else {
+                return 0;
+            }
+        } else if(ra) {
+            return -1;
+        } else {
+            return 1;
+        }
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+asn_enc_rval_t
+REAL_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                void *app_key) {
+       const REAL_t *st = (const REAL_t *)sptr;
+       asn_enc_rval_t er = {0,0,0};
+       double d;
+
+       (void)ilevel;
+
+       if(!st || !st->buf || asn_REAL2double(st, &d))
+               ASN__ENCODE_FAILED;
+
+       er.encoded = REAL__dump(d, flags & XER_F_CANONICAL, cb, app_key);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+
+/*
+ * Decode the chunk of XML text encoding REAL.
+ */
+static enum xer_pbd_rval
+REAL__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                      const void *chunk_buf, size_t chunk_size) {
+    REAL_t *st = (REAL_t *)sptr;
+       double value;
+       const char *xerdata = (const char *)chunk_buf;
+       char *endptr = 0;
+       char *b;
+
+       (void)td;
+
+       if(!chunk_size) return XPBD_BROKEN_ENCODING;
+
+       /*
+        * Decode an XMLSpecialRealValue: <MINUS-INFINITY>, etc.
+        */
+       if(xerdata[0] == 0x3c /* '<' */) {
+               size_t i;
+               for(i = 0; i < sizeof(specialRealValue)
+                               / sizeof(specialRealValue[0]); i++) {
+                       struct specialRealValue_s *srv = &specialRealValue[i];
+                       double dv;
+
+                       if(srv->length != chunk_size
+                       || memcmp(srv->string, chunk_buf, chunk_size))
+                               continue;
+
+                       /*
+                        * It could've been done using
+                        * (double)srv->dv / real_zero,
+                        * but it summons fp exception on some platforms.
+                        */
+                       switch(srv->dv) {
+                       case -1: dv = - INFINITY; break;
+                       case 0: dv = NAN;       break;
+                       case 1: dv = INFINITY;  break;
+                       default: return XPBD_SYSTEM_FAILURE;
+                       }
+
+                       if(asn_double2REAL(st, dv))
+                               return XPBD_SYSTEM_FAILURE;
+
+                       return XPBD_BODY_CONSUMED;
+               }
+               ASN_DEBUG("Unknown XMLSpecialRealValue");
+               return XPBD_BROKEN_ENCODING;
+       }
+
+       /*
+        * Copy chunk into the nul-terminated string, and run strtod.
+        */
+       b = (char *)MALLOC(chunk_size + 1);
+       if(!b) return XPBD_SYSTEM_FAILURE;
+       memcpy(b, chunk_buf, chunk_size);
+       b[chunk_size] = 0;      /* nul-terminate */
+
+       value = strtod(b, &endptr);
+       FREEMEM(b);
+       if(endptr == b) return XPBD_BROKEN_ENCODING;
+
+       if(asn_double2REAL(st, value))
+               return XPBD_SYSTEM_FAILURE;
+
+       return XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+REAL_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td, void **sptr,
+                const char *opt_mname, const void *buf_ptr, size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(REAL_t), opt_mname,
+               buf_ptr, size, REAL__xer_body_decode);
+}
+
+int
+asn_REAL2double(const REAL_t *st, double *dbl_value) {
+       unsigned int octv;
+
+       if(!st || !st->buf) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       if(st->size == 0) {
+               *dbl_value = 0;
+               return 0;
+       }
+
+       octv = st->buf[0];      /* unsigned byte */
+
+       switch(octv & 0xC0) {
+       case 0x40:      /* X.690: 8.5.6 a) => 8.5.9 */
+               /* "SpecialRealValue" */
+
+               /* Be liberal in what you accept...
+                * http://en.wikipedia.org/wiki/Robustness_principle
+               if(st->size != 1) ...
+               */
+
+               switch(st->buf[0]) {
+               case 0x40:      /* 01000000: PLUS-INFINITY */
+                       *dbl_value = INFINITY;
+                       return 0;
+               case 0x41:      /* 01000001: MINUS-INFINITY */
+                       *dbl_value = - INFINITY;
+                       return 0;
+               case 0x42:      /* 01000010: NOT-A-NUMBER */
+                       *dbl_value = NAN;
+                       return 0;
+               case 0x43:      /* 01000011: minus zero */
+                       *dbl_value = -0.0;
+                       return 0;
+               }
+
+               errno = EINVAL;
+               return -1;
+       case 0x00: {    /* X.690: 8.5.7 */
+               /*
+                * Decimal. NR{1,2,3} format from ISO 6093.
+                * NR1: [ ]*[+-]?[0-9]+
+                * NR2: [ ]*[+-]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)
+                * NR3: [ ]*[+-]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)[Ee][+-]?[0-9]+
+                */
+               double d;
+               char *source = 0;
+               char *endptr;
+               int used_malloc = 0;
+
+               if(octv == 0 || (octv & 0x3C)) {
+                       /* Remaining values of bits 6 to 1 are Reserved. */
+                       errno = EINVAL;
+                       return -1;
+               }
+
+               /* 1. By contract, an input buffer should be '\0'-terminated.
+                * OCTET STRING decoder ensures that, as is asn_double2REAL().
+                * 2. ISO 6093 specifies COMMA as a possible decimal separator.
+                * However, strtod() can't always deal with COMMA.
+                * So her we fix both by reallocating, copying and fixing.
+                */
+               if(st->buf[st->size] != '\0' || memchr(st->buf, ',', st->size)) {
+                       const uint8_t *p, *end;
+                       char *b;
+
+            b = source = (char *)MALLOC(st->size + 1);
+            if(!source) return -1;
+            used_malloc = 1;
+
+                       /* Copy without the first byte and with 0-termination */
+                       for(p = st->buf + 1, end = st->buf + st->size;
+                                       p < end; b++, p++)
+                               *b = (*p == ',') ? '.' : *p;
+                       *b = '\0';
+               } else {
+                       source = (char *)&st->buf[1];
+               }
+
+               endptr = source;
+               d = strtod(source, &endptr);
+               if(*endptr != '\0') {
+                       /* Format is not consistent with ISO 6093 */
+                       if(used_malloc) FREEMEM(source);
+                       errno = EINVAL;
+                       return -1;
+               }
+               if(used_malloc) FREEMEM(source);
+               if(asn_isfinite(d)) {
+                       *dbl_value = d;
+                       return 0;
+               } else {
+                       errno = ERANGE;
+                       return -1;
+               }
+         }
+       }
+
+       /*
+        * Binary representation.
+        */
+    {
+       double m;
+       int32_t expval;         /* exponent value */
+       unsigned int elen;      /* exponent value length, in octets */
+       int scaleF;
+       int baseF;
+       uint8_t *ptr;
+       uint8_t *end;
+       int sign;
+
+       switch((octv & 0x30) >> 4) {
+       case 0x00: baseF = 1; break;    /* base 2 */
+       case 0x01: baseF = 3; break;    /* base 8 */
+       case 0x02: baseF = 4; break;    /* base 16 */
+       default:
+               /* Reserved field, can't parse now. */
+               errno = EINVAL;
+               return -1;
+       }
+
+       sign = (octv & 0x40);   /* bit 7 */
+       scaleF = (octv & 0x0C) >> 2;    /* bits 4 to 3 */
+
+       if(st->size <= 1 + (octv & 0x03)) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       elen = (octv & 0x03);   /* bits 2 to 1; 8.5.6.4 */
+       if(elen == 0x03) {      /* bits 2 to 1 = 11; 8.5.6.4, case d) */
+               elen = st->buf[1];      /* unsigned binary number */
+               if(elen == 0 || st->size <= (2 + elen)) {
+                       errno = EINVAL;
+                       return -1;
+               }
+               /* FIXME: verify constraints of case d) */
+               ptr = &st->buf[2];
+       } else {
+               ptr = &st->buf[1];
+       }
+
+       /* Fetch the multibyte exponent */
+       expval = (int)(*(int8_t *)ptr);
+       if(elen >= sizeof(expval)-1) {
+               errno = ERANGE;
+               return -1;
+       }
+       end = ptr + elen + 1;
+       for(ptr++; ptr < end; ptr++)
+               expval = (expval * 256) + *ptr;
+
+       m = 0.0;        /* Initial mantissa value */
+
+       /* Okay, the exponent is here. Now, what about mantissa? */
+       end = st->buf + st->size;
+       for(; ptr < end; ptr++)
+               m = ldexp(m, 8) + *ptr;
+
+       if(0)
+       ASN_DEBUG("m=%.10f, scF=%d, bF=%d, expval=%d, ldexp()=%f, ldexp()=%f\n",
+               m, scaleF, baseF, expval,
+               ldexp(m, expval * baseF + scaleF),
+               ldexp(m, scaleF) * pow(pow(2, baseF), expval)
+       );
+
+       /*
+        * (S * N * 2^F) * B^E
+        * Essentially:
+       m = ldexp(m, scaleF) * pow(pow(2, baseF), expval);
+        */
+       m = ldexp(m, expval * baseF + scaleF);
+       if(asn_isfinite(m)) {
+               *dbl_value = sign ? -m : m;
+       } else {
+               errno = ERANGE;
+               return -1;
+       }
+
+    } /* if(binary_format) */
+
+       return 0;
+}
+
+/*
+ * Assume IEEE 754 floating point: standard 64 bit double.
+ * [1 bit sign]  [11 bits exponent]  [52 bits mantissa]
+ */
+int
+asn_double2REAL(REAL_t *st, double dbl_value) {
+    double test = -0.0;
+    int float_big_endian = *(const char *)&test != 0;
+       uint8_t buf[16];        /* More than enough for 8-byte dbl_value */
+       uint8_t dscr[sizeof(dbl_value)];        /* double value scratch pad */
+       /* Assertion guards: won't even compile, if unexpected double size */
+       char assertion_buffer1[9 - sizeof(dbl_value)] CC_NOTUSED;
+       char assertion_buffer2[sizeof(dbl_value) - 7] CC_NOTUSED;
+       uint8_t *ptr = buf;
+       uint8_t *mstop;         /* Last byte of mantissa */
+       unsigned int mval;      /* Value of the last byte of mantissa */
+       unsigned int bmsign;    /* binary mask with sign */
+       unsigned int buflen;
+       unsigned int accum;
+       int expval;
+
+       if(!st) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * ilogb(+-0) returns -INT_MAX or INT_MIN (platform-dependent)
+        * ilogb(+-inf) returns INT_MAX, logb(+-inf) returns +inf
+        * ilogb(NaN) returns INT_MIN or INT_MAX (platform-dependent)
+        */
+       expval = ilogb(dbl_value);
+       if(expval <= -INT_MAX   /* Also catches +-0 and maybe isnan() */
+       || expval == INT_MAX    /* catches isfin() and maybe isnan() */
+       ) {
+               if(!st->buf || st->size < 2) {
+                       ptr = (uint8_t *)MALLOC(2);
+                       if(!ptr) return -1;
+                       if(st->buf) FREEMEM(st->buf);
+                       st->buf = ptr;
+               }
+               /* fpclassify(3) is not portable yet */
+               if(asn_isnan(dbl_value)) {
+                       st->buf[0] = 0x42;      /* NaN */
+                       st->buf[1] = 0;
+                       st->size = 1;
+               } else if(!asn_isfinite(dbl_value)) {
+                       if(copysign(1.0, dbl_value) < 0.0) {
+                               st->buf[0] = 0x41;      /* MINUS-INFINITY */
+                       } else {
+                               st->buf[0] = 0x40;      /* PLUS-INFINITY */
+                       }
+                       st->buf[1] = 0;
+                       st->size = 1;
+               } else {
+                       if(copysign(1.0, dbl_value) >= 0.0) {
+                               /* no content octets: positive zero */
+                               st->buf[0] = 0; /* JIC */
+                               st->size = 0;
+                       } else {
+                               /* Negative zero. #8.5.3, 8.5.9 */
+                               st->buf[0] = 0x43;
+                               st->buf[1] = 0;
+                               st->size = 1;
+                       }
+               }
+               return 0;
+       }
+
+       if(float_big_endian) {
+               uint8_t *s = ((uint8_t *)&dbl_value) + 1;
+               uint8_t *end = ((uint8_t *)&dbl_value) + sizeof(double);
+               uint8_t *d;
+
+               bmsign = 0x80 | ((s[-1] >> 1) & 0x40);  /* binary mask & - */
+               for(mstop = d = dscr; s < end; d++, s++) {
+                       *d = *s;
+                       if(*d) mstop = d;
+               }
+    } else {
+               uint8_t *s = ((uint8_t *)&dbl_value) + sizeof(dbl_value) - 2;
+               uint8_t *start = ((uint8_t *)&dbl_value);
+               uint8_t *d;
+
+               bmsign = 0x80 | ((s[1] >> 1) & 0x40);   /* binary mask & - */
+               for(mstop = d = dscr; s >= start; d++, s--) {
+                       *d = *s;
+                       if(*d) mstop = d;
+               }
+    }
+
+       /* Remove parts of the exponent, leave mantissa and explicit 1. */
+       dscr[0] = 0x10 | (dscr[0] & 0x0f);
+
+       /* Adjust exponent in a very unobvious way */
+       expval -= 8 * ((mstop - dscr) + 1) - 4;
+
+       /* This loop ensures DER conformance by forcing mantissa odd: 11.3.1 */
+       mval = *mstop;
+       if(mval && !(mval & 1)) {
+               int shift_count = 1;
+               int ishift;
+               uint8_t *mptr;
+
+               /*
+                * Figure out what needs to be done to make mantissa odd.
+                */
+               if(!(mval & 0x0f))      /* Speed-up a little */
+                       shift_count = 4;
+               while(((mval >> shift_count) & 1) == 0)
+                       shift_count++;
+
+               ishift = 8 - shift_count;
+               accum = 0;
+
+               /* Go over the buffer, shifting it shift_count bits right. */
+               for(mptr = dscr; mptr <= mstop; mptr++) {
+                       mval = *mptr;
+                       *mptr = accum | (mval >> shift_count);
+                       accum = mval << ishift;
+               }
+
+               /* Adjust exponent appropriately. */
+               expval += shift_count;
+       }
+
+       if(expval < 0) {
+               if((expval >> 7) == -1) {
+                       *ptr++ = bmsign | 0x00;
+                       *ptr++ = expval;
+               } else if((expval >> 15) == -1) {
+                       *ptr++ = bmsign | 0x01;
+                       *ptr++ = expval >> 8;
+                       *ptr++ = expval;
+               } else {
+                       *ptr++ = bmsign | 0x02;
+                       *ptr++ = expval >> 16;
+                       *ptr++ = expval >> 8;
+                       *ptr++ = expval;
+               }
+       } else if(expval <= 0x7f) {
+               *ptr++ = bmsign | 0x00;
+               *ptr++ = expval;
+       } else if(expval <= 0x7fff) {
+               *ptr++ = bmsign | 0x01;
+               *ptr++ = expval >> 8;
+               *ptr++ = expval;
+       } else {
+               assert(expval <= 0x7fffff);
+               *ptr++ = bmsign | 0x02;
+               *ptr++ = expval >> 16;
+               *ptr++ = expval >> 8;
+               *ptr++ = expval;
+       }
+
+       buflen = (mstop - dscr) + 1;
+       memcpy(ptr, dscr, buflen);
+       ptr += buflen;
+       buflen = ptr - buf;
+
+       ptr = (uint8_t *)MALLOC(buflen + 1);
+       if(!ptr) return -1;
+
+       memcpy(ptr, buf, buflen);
+       buf[buflen] = 0;        /* JIC */
+
+       if(st->buf) FREEMEM(st->buf);
+       st->buf = ptr;
+       st->size = buflen;
+
+       return 0;
+}
+
+int CC_ATTR_NO_SANITIZE("float-cast-overflow")
+asn_double2float(double d, float *outcome) {
+    float f = d;
+
+    *outcome = f;
+
+    if(asn_isfinite(d) == asn_isfinite(f)) {
+        return 0;
+    } else {
+        return -1;
+    }
+}
+
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+/*
+ * Encode as Canonical OER
+ */
+asn_enc_rval_t
+REAL_encode_oer(const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, const void *sptr,
+                asn_app_consume_bytes_f *cb, void *app_key) {
+    const REAL_t *st = sptr;
+    asn_enc_rval_t er = {0,0,0};
+    ssize_t len_len;
+
+    if(!st || !st->buf || !td)
+        ASN__ENCODE_FAILED;
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints && constraints->value.width != 0) {
+        /* If we're constrained to a narrow float/double representation, we
+         * shouldn't have ended up using REAL. Expecting NativeReal. */
+        ASN__ENCODE_FAILED;
+    }
+
+    /* Encode a fake REAL */
+    len_len = oer_serialize_length(st->size, cb, app_key);
+    if(len_len < 0 || cb(st->buf, st->size, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    } else {
+        er.encoded = len_len + st->size;
+        ASN__ENCODED_OK(er);
+    }
+}
+
+asn_dec_rval_t
+REAL_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                const asn_TYPE_descriptor_t *td,
+                const asn_oer_constraints_t *constraints, void **sptr,
+                const void *ptr, size_t size) {
+    asn_dec_rval_t ok = {RC_OK, 0};
+    REAL_t *st;
+    uint8_t *buf;
+    ssize_t len_len;
+    size_t real_body_len;
+
+    (void)opt_codec_ctx;
+
+    if(!constraints) constraints = td->encoding_constraints.oer_constraints;
+    if(constraints && constraints->value.width != 0) {
+        /* If we're constrained to a narrow float/double representation, we
+         * shouldn't have ended up using REAL. Expecting NativeReal. */
+        ASN__DECODE_FAILED;
+    }
+
+    len_len = oer_fetch_length(ptr, size, &real_body_len);
+    if(len_len < 0) ASN__DECODE_FAILED;
+    if(len_len == 0) ASN__DECODE_STARVED;
+
+    ptr = (const char *)ptr + len_len;
+    size -= len_len;
+
+    if(real_body_len > size) ASN__DECODE_STARVED;
+
+    buf = CALLOC(1, real_body_len + 1);
+    if(!buf) ASN__DECODE_FAILED;
+
+    if(!(st = *sptr)) {
+        st = (*sptr = CALLOC(1, sizeof(REAL_t)));
+        if(!st) {
+            FREEMEM(buf);
+            ASN__DECODE_FAILED;
+        }
+    } else {
+        FREEMEM(st->buf);
+    }
+
+    memcpy(buf, ptr, real_body_len);
+    buf[real_body_len] = '\0';
+
+    st->buf = buf;
+    st->size = real_body_len;
+
+    ok.consumed = len_len + real_body_len;
+    return ok;
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+REAL_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr,
+                 asn_per_data_t *pd) {
+    (void)constraints; /* No PER visible constraints */
+       return OCTET_STRING_decode_uper(opt_codec_ctx, td, 0, sptr, pd);
+}
+
+asn_enc_rval_t
+REAL_encode_uper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, const void *sptr,
+                 asn_per_outp_t *po) {
+    (void)constraints; /* No PER visible constraints */
+       return OCTET_STRING_encode_uper(td, 0, sptr, po);
+}
+
+asn_dec_rval_t
+REAL_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                 const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints,
+                 void **sptr, asn_per_data_t *pd) {
+       (void)constraints;      /* No PER visible constraints */
+       return OCTET_STRING_decode_aper(opt_codec_ctx, td, 0, sptr, pd);
+}
+
+asn_enc_rval_t
+REAL_encode_aper(const asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints,
+                 const void *sptr, asn_per_outp_t *po) {
+       (void)constraints;      /* No PER visible constraints */
+       return OCTET_STRING_encode_aper(td, 0, sptr, po);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+asn_random_fill_result_t
+REAL_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                       const asn_encoding_constraints_t *constraints,
+                       size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    static const double values[] = {
+        0, -0.0, -1, 1, -M_E, M_E, -3.14, 3.14, -M_PI, M_PI, -255, 255,
+        /* 2^51 */
+        -2251799813685248.0, 2251799813685248.0,
+        /* 2^52 */
+        -4503599627370496.0, 4503599627370496.0,
+        /* 2^100 */
+        -1267650600228229401496703205376.0, 1267650600228229401496703205376.0,
+        -FLT_MIN, FLT_MIN,
+        -FLT_MAX, FLT_MAX,
+        -DBL_MIN, DBL_MIN,
+        -DBL_MAX, DBL_MAX,
+#ifdef  FLT_TRUE_MIN
+        -FLT_TRUE_MIN, FLT_TRUE_MIN,
+#endif
+#ifdef  DBL_TRUE_MIN
+        -DBL_TRUE_MIN, DBL_TRUE_MIN,
+#endif
+        INFINITY, -INFINITY, NAN};
+    REAL_t *st;
+    double d;
+
+    (void)constraints;
+
+    if(max_length == 0) return result_skipped;
+
+    d = values[asn_random_between(0, sizeof(values) / sizeof(values[0]) - 1)];
+
+    if(*sptr) {
+        st = *sptr;
+    } else {
+        st = (REAL_t*)(*sptr = CALLOC(1, sizeof(REAL_t)));
+        if(!st) {
+            return result_failed;
+        }
+    }
+
+    if(asn_double2REAL(st, d)) {
+        if(st == *sptr) {
+            ASN_STRUCT_RESET(*td, st);
+        } else {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    }
+
+    result_ok.length = st->size;
+    return result_ok;
+}
+
diff --git a/skeletons/REAL.h b/skeletons/REAL.h
new file mode 100644 (file)
index 0000000..fce6714
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_TYPE_REAL_H
+#define        ASN_TYPE_REAL_H
+
+#include <asn_application.h>
+#include <asn_codecs_prim.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ASN__PRIMITIVE_TYPE_t REAL_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_REAL;
+extern asn_TYPE_operation_t asn_OP_REAL;
+
+asn_struct_print_f REAL_print;
+asn_struct_compare_f REAL_compare;
+oer_type_decoder_f REAL_decode_oer;
+oer_type_encoder_f REAL_encode_oer;
+per_type_decoder_f REAL_decode_uper;
+per_type_encoder_f REAL_encode_uper;
+per_type_decoder_f REAL_decode_aper;
+per_type_encoder_f REAL_encode_aper;
+xer_type_decoder_f REAL_decode_xer;
+xer_type_encoder_f REAL_encode_xer;
+asn_random_fill_f  REAL_random_fill;
+
+#define REAL_free          ASN__PRIMITIVE_TYPE_free,
+#define REAL_constraint    asn_generic_no_constraint
+#define REAL_decode_ber    ber_decode_primitive
+#define REAL_encode_der    der_encode_primitive
+
+/***********************************
+ * Some handy conversion routines. *
+ ***********************************/
+
+ssize_t REAL__dump(double d, int canonical, asn_app_consume_bytes_f *cb, void *app_key);
+
+/*
+ * Convert between native double type and REAL representation (DER).
+ * RETURN VALUES:
+ *  0: Value converted successfully
+ * -1: An error occured while converting the value: invalid format.
+ */
+int asn_REAL2double(const REAL_t *real_ptr, double *d);
+int asn_double2REAL(REAL_t *real_ptr, double d);
+
+/*
+ * Downcast double to float while checking that no overflow occurs.
+ * This allows stricter control of the input data.
+ * RETURN VALUES:
+ *  0: The conversion was successful (perhaps with a loss of precision)
+ * -1: The conversion created overflow into infinities.
+ * The (outcome) is ALWAYS set to a value you'd expect from the
+ * standard silent float to double conversion behavior.
+ */
+int asn_double2float(double d, float *outcome);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_TYPE_REAL_H */
diff --git a/skeletons/RELATIVE-OID.c b/skeletons/RELATIVE-OID.c
new file mode 100644 (file)
index 0000000..300dc1a
--- /dev/null
@@ -0,0 +1,336 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ *     All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <RELATIVE-OID.h>
+#include <OCTET_STRING.h>
+#include <asn_codecs_prim.h>   /* Encoder and decoder of a primitive type */
+#include <limits.h>    /* for CHAR_BIT */
+#include <errno.h>
+
+/*
+ * RELATIVE-OID basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_RELATIVE_OID_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (13 << 2))
+};
+asn_TYPE_operation_t asn_OP_RELATIVE_OID = {
+       ASN__PRIMITIVE_TYPE_free,
+       RELATIVE_OID_print,
+       OCTET_STRING_compare,   /* Implemented in terms of opaque comparison */
+       ber_decode_primitive,
+       der_encode_primitive,
+       RELATIVE_OID_decode_xer,
+       RELATIVE_OID_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       RELATIVE_OID_decode_oer,
+       RELATIVE_OID_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       RELATIVE_OID_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_RELATIVE_OID = {
+       "RELATIVE-OID",
+       "RELATIVE_OID",
+       &asn_OP_RELATIVE_OID,
+       asn_DEF_RELATIVE_OID_tags,
+       sizeof(asn_DEF_RELATIVE_OID_tags)
+           / sizeof(asn_DEF_RELATIVE_OID_tags[0]),
+       asn_DEF_RELATIVE_OID_tags,      /* Same as above */
+       sizeof(asn_DEF_RELATIVE_OID_tags)
+           / sizeof(asn_DEF_RELATIVE_OID_tags[0]),
+       { 0, 0, asn_generic_no_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+static ssize_t
+RELATIVE_OID__dump_body(const RELATIVE_OID_t *st, asn_app_consume_bytes_f *cb, void *app_key) {
+    char scratch[32];
+    size_t produced = 0;
+    size_t off = 0;
+
+    for(;;) {
+        asn_oid_arc_t arc;
+        ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off,
+                                                      st->size - off, &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            int ret = snprintf(scratch, sizeof(scratch), "%s%" PRIu32,
+                               off ? "." : "", arc);
+            if(ret >= (ssize_t)sizeof(scratch)) {
+                return -1;
+            }
+            produced += ret;
+            off += rd;
+            assert(off <= st->size);
+            if(cb(scratch, ret, app_key) < 0) return -1;
+        }
+    }
+
+    if(off != st->size) {
+        ASN_DEBUG("Could not scan to the end of Object Identifier");
+        return -1;
+    }
+
+       return produced;
+}
+
+int
+RELATIVE_OID_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(!st || !st->buf)
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /* Dump preamble */
+       if(cb("{ ", 2, app_key) < 0)
+               return -1;
+
+       if(RELATIVE_OID__dump_body(st, cb, app_key) < 0)
+               return -1;
+
+       return (cb(" }", 2, app_key) < 0) ? -1 : 0;
+}
+
+static enum xer_pbd_rval
+RELATIVE_OID__xer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
+                              const void *chunk_buf, size_t chunk_size) {
+    RELATIVE_OID_t *st = (RELATIVE_OID_t *)sptr;
+       const char *chunk_end = (const char *)chunk_buf + chunk_size;
+       const char *endptr;
+       asn_oid_arc_t s_arcs[6];
+       asn_oid_arc_t *arcs = s_arcs;
+       ssize_t num_arcs;
+       int ret;
+
+       (void)td;
+
+    num_arcs = OBJECT_IDENTIFIER_parse_arcs(
+        (const char *)chunk_buf, chunk_size, arcs,
+        sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr);
+    if(num_arcs < 0) {
+        /* Expecting at least one arc arcs */
+        return XPBD_BROKEN_ENCODING;
+    } else if(num_arcs == 0) {
+        return XPBD_NOT_BODY_IGNORE;
+    }
+    assert(endptr == chunk_end);
+
+    if((size_t)num_arcs > sizeof(s_arcs) / sizeof(s_arcs[0])) {
+        arcs = (asn_oid_arc_t *)MALLOC(num_arcs * sizeof(arcs[0]));
+        if(!arcs) return XPBD_SYSTEM_FAILURE;
+        ret = OBJECT_IDENTIFIER_parse_arcs((const char *)chunk_buf, chunk_size,
+                                           arcs, num_arcs, &endptr);
+        if(ret != num_arcs) {
+            return XPBD_SYSTEM_FAILURE; /* assert?.. */
+        }
+    }
+
+    /*
+     * Convert arcs into BER representation.
+     */
+    ret = RELATIVE_OID_set_arcs(st, arcs, num_arcs);
+    if(arcs != s_arcs) FREEMEM(arcs);
+
+    return ret ? XPBD_SYSTEM_FAILURE : XPBD_BODY_CONSUMED;
+}
+
+asn_dec_rval_t
+RELATIVE_OID_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                        const asn_TYPE_descriptor_t *td, void **sptr,
+                        const char *opt_mname, const void *buf_ptr,
+                        size_t size) {
+    return xer_decode_primitive(opt_codec_ctx, td,
+               sptr, sizeof(RELATIVE_OID_t), opt_mname,
+                       buf_ptr, size, RELATIVE_OID__xer_body_decode);
+}
+
+asn_enc_rval_t
+RELATIVE_OID_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                        int ilevel, enum xer_encoder_flags_e flags,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
+       const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr;
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)ilevel;   /* Unused argument */
+       (void)flags;    /* Unused argument */
+
+       if(!st || !st->buf)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = RELATIVE_OID__dump_body(st, cb, app_key);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+ssize_t
+RELATIVE_OID_get_arcs(const RELATIVE_OID_t *st, asn_oid_arc_t *arcs,
+                      size_t arcs_count) {
+    size_t num_arcs = 0;
+    size_t off;
+
+    if(!st || !st->buf) {
+        errno = EINVAL;
+        return -1;
+    }
+
+    for(off = 0;;) {
+        asn_oid_arc_t arc;
+        ssize_t rd = OBJECT_IDENTIFIER_get_single_arc(st->buf + off,
+                                                      st->size - off, &arc);
+        if(rd < 0) {
+            return -1;
+        } else if(rd == 0) {
+            /* No more arcs. */
+            break;
+        } else {
+            off += rd;
+            if(num_arcs < arcs_count) {
+                arcs[num_arcs] = arc;
+            }
+            num_arcs++;
+        }
+    }
+
+    if(off != st->size) {
+        return -1;
+    }
+
+       return num_arcs;
+}
+
+int
+RELATIVE_OID_set_arcs(RELATIVE_OID_t *st, const asn_oid_arc_t *arcs,
+                      size_t arcs_count) {
+    uint8_t *buf;
+       uint8_t *bp;
+    size_t size;
+       size_t i;
+
+       if(!st || !arcs) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       /*
+        * Roughly estimate the maximum size necessary to encode these arcs.
+        */
+    size = ((sizeof(asn_oid_arc_t) * CHAR_BIT + 6) / 7) * arcs_count;
+    bp = buf = (uint8_t *)MALLOC(size + 1);
+       if(!buf) {
+               /* ENOMEM */
+               return -1;
+       }
+
+       /*
+        * Encode the arcs.
+        */
+    for(i = 0; i < arcs_count; i++) {
+        ssize_t wrote = OBJECT_IDENTIFIER_set_single_arc(bp, size, arcs[i]);
+        if(wrote <= 0) {
+            FREEMEM(buf);
+            return -1;
+        }
+        assert((size_t)wrote <= size);
+        bp += wrote;
+        size -= wrote;
+    }
+
+       /*
+        * Replace buffer.
+        */
+       st->size = bp - buf;
+       bp = st->buf;
+       st->buf = buf;
+       st->buf[st->size] = '\0';
+       if(bp) FREEMEM(bp);
+
+       return 0;
+}
+
+
+/*
+ * Generate values from the list of interesting values, or just a random value.
+ */
+static asn_oid_arc_t
+RELATIVE_OID__biased_random_arc() {
+    static const uint16_t values[] = {0, 1, 127, 128, 129, 254, 255, 256};
+
+    switch(asn_random_between(0, 2)) {
+    case 0:
+        return values[asn_random_between(
+            0, sizeof(values) / sizeof(values[0]) - 1)];
+    case 1:
+        return asn_random_between(0, UINT_MAX);
+    case 2:
+    default:
+        return UINT_MAX;
+    }
+}
+
+asn_random_fill_result_t
+RELATIVE_OID_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                         const asn_encoding_constraints_t *constraints,
+                         size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    RELATIVE_OID_t *st;
+    const int min_arcs = 1; /* A minimum of 1 arc is required */
+    asn_oid_arc_t arcs[3];
+    size_t arcs_len =
+        asn_random_between(min_arcs, sizeof(arcs) / sizeof(arcs[0]));
+    size_t i;
+
+    (void)constraints;
+
+    if(max_length < arcs_len) return result_skipped;
+
+    if(*sptr) {
+        st = *sptr;
+    } else {
+        st = CALLOC(1, sizeof(*st));
+    }
+
+    for(i = 0; i < arcs_len; i++) {
+        arcs[i] = RELATIVE_OID__biased_random_arc();
+    }
+
+    if(RELATIVE_OID_set_arcs(st, arcs, arcs_len)) {
+        if(st != *sptr) {
+            ASN_STRUCT_FREE(*td, st);
+        }
+        return result_failed;
+    }
+
+    *sptr = st;
+
+    result_ok.length = st->size;
+    return result_ok;
+}
diff --git a/skeletons/RELATIVE-OID.h b/skeletons/RELATIVE-OID.h
new file mode 100644 (file)
index 0000000..a51bf51
--- /dev/null
@@ -0,0 +1,53 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _RELATIVE_OID_H_
+#define        _RELATIVE_OID_H_
+
+#include <OBJECT_IDENTIFIER.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Implemented via OBJECT IDENTIFIER */
+typedef OBJECT_IDENTIFIER_t RELATIVE_OID_t;
+
+extern asn_TYPE_descriptor_t asn_DEF_RELATIVE_OID;
+extern asn_TYPE_operation_t asn_OP_RELATIVE_OID;
+
+asn_struct_print_f RELATIVE_OID_print;
+xer_type_decoder_f RELATIVE_OID_decode_xer;
+xer_type_encoder_f RELATIVE_OID_encode_xer;
+asn_random_fill_f  RELATIVE_OID_random_fill;
+
+#define RELATIVE_OID_free         ASN__PRIMITIVE_TYPE_free
+#define RELATIVE_OID_compare      OCTET_STRING_compare
+#define RELATIVE_OID_constraint   asn_generic_no_constraint
+#define RELATIVE_OID_decode_ber   ber_decode_primitive
+#define RELATIVE_OID_encode_der   der_encode_primitive
+#define RELATIVE_OID_decode_oer   oer_decode_primitive
+#define RELATIVE_OID_encode_oer   oer_encode_primitive
+#define RELATIVE_OID_decode_uper  OCTET_STRING_decode_uper
+#define RELATIVE_OID_encode_uper  OCTET_STRING_encode_uper
+#define RELATIVE_OID_decode_aper  OCTET_STRING_decode_aper
+#define RELATIVE_OID_encode_aper  OCTET_STRING_encode_aper
+
+/**********************************
+ * Some handy conversion routines *
+ **********************************/
+
+/* See OBJECT_IDENTIFIER_get_arcs() function in OBJECT_IDENTIFIER.h */
+ssize_t RELATIVE_OID_get_arcs(const RELATIVE_OID_t *, asn_oid_arc_t *arcs,
+                              size_t arcs_count);
+
+/* See OBJECT_IDENTIFIER_set_arcs() function in OBJECT_IDENTIFIER.h */
+int RELATIVE_OID_set_arcs(RELATIVE_OID_t *, const asn_oid_arc_t *arcs,
+                          size_t arcs_count);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELATIVE_OID_H_ */
diff --git a/skeletons/T61String.c b/skeletons/T61String.c
new file mode 100644 (file)
index 0000000..d3de88b
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <T61String.h>
+
+/*
+ * T61String basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_T61String_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (20 << 2)),  /* [UNIVERSAL 20] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_T61String = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,         /* non-ascii string */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_T61String = {
+       "T61String",
+       "T61String",
+       &asn_OP_T61String,
+       asn_DEF_T61String_tags,
+       sizeof(asn_DEF_T61String_tags)
+         / sizeof(asn_DEF_T61String_tags[0]) - 1,
+       asn_DEF_T61String_tags,
+       sizeof(asn_DEF_T61String_tags)
+         / sizeof(asn_DEF_T61String_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/skeletons/T61String.h b/skeletons/T61String.h
new file mode 100644 (file)
index 0000000..9e9e380
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _T61String_H_
+#define        _T61String_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t T61String_t;    /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_T61String;
+extern asn_TYPE_operation_t asn_OP_T61String;
+
+#define T61String_free          OCTET_STRING_free
+#define T61String_print         OCTET_STRING_print
+#define T61String_compare       OCTET_STRING_compare
+#define T61String_constraint    asn_generic_unknown_constraint
+#define T61String_decode_ber    OCTET_STRING_decode_ber
+#define T61String_encode_der    OCTET_STRING_encode_der
+#define T61String_decode_xer    OCTET_STRING_decode_xer_hex
+#define T61String_encode_xer    OCTET_STRING_encode_xer
+#define T61String_decode_uper   OCTET_STRING_decode_uper
+#define T61String_encode_uper   OCTET_STRING_encode_uper
+#define T61String_decode_aper   OCTET_STRING_decode_aper
+#define T61String_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _T61String_H_ */
diff --git a/skeletons/TeletexString.c b/skeletons/TeletexString.c
new file mode 100644 (file)
index 0000000..9756c72
--- /dev/null
@@ -0,0 +1,194 @@
+/*-
+ * Copyright (c) 2003, 2006 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <TeletexString.h>
+
+/*
+ * TeletexString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_TeletexString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (20 << 2)),  /* [UNIVERSAL 20] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),   /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_TeletexString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,         /* non-ascii string */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_TeletexString = {
+       "TeletexString",
+       "TeletexString",
+       &asn_OP_TeletexString,
+       asn_DEF_TeletexString_tags,
+       sizeof(asn_DEF_TeletexString_tags)
+         / sizeof(asn_DEF_TeletexString_tags[0]) - 1,
+       asn_DEF_TeletexString_tags,
+       sizeof(asn_DEF_TeletexString_tags)
+         / sizeof(asn_DEF_TeletexString_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+/*
+ * Here is a formal attempt at creating a mapping from TeletexString
+ * (T61String) of the latest ASN.1 standard (X.680:2002) into the Unicode
+ * character set. -- Lev Walkin <vlm@lionet.info>
+ *
+ * The first thing to keep in mind is that TeletexString (T61String)
+ * is defined in ASN.1, and is not really a T.61 string.
+ * The T.61 standard is withdrawn by ITU-T and is no longer an authoritative
+ * reference. See http://www.itu.int/rec/T-REC-T.61
+ *
+ * The X.680 specifies TeletexString (T61String) as a combination of the
+ * character sets specified by the registration numbers listed in
+ * ISO International Register of Coded Character Sets to be used with
+ * Escape Sequences (ISO-2375):
+ * 6, 87, 102, 103, 106, 107, 126, 144, 150, 153, 156, 164, 165, 168,
+ * plus SPACE and DELETE characters.
+ * In addition to that, the X.680 Table 6 NOTE 2 allows using register entries
+ * 6 and 156 instead of 102 and 103.
+ *
+ * The ISO Register itself is available at http://www.itscj.ipsj.or.jp/ISO-IR/
+ *
+ * #6 is ASCII. http://www.itscj.ipsj.or.jp/ISO-IR/006.pdf
+ *     Escapes into:
+ *             G0: ESC 2/8 4/2 ("(B")
+ *             G1: ESC 2/9 4/2 (")B")
+ *     The range is [0x21 .. 0x7e]. Conversion into Unicode
+ *     is simple, because it has one-to-one correspondence.
+ * #87 is a "Japanese Graphic Character Set for Information Interchange".
+ *     Is a multiple-byte set of 6877 characters.
+ *     The character set is JIS X 0208-1983 (originally JIS C 6226-1983).
+ *     Escapes into:
+ *             G0: ESC 2/4 4/2 ("$B")
+ *             G1: ESC 2/4 2/9 4/2 ("$)B")
+ *             G2: ESC 2/4 2/10 4/2 ("$*B")
+ *             G3: ESC 2/4 2/11 4/2 ("$+B")
+ * #102 is "Teletex Primary Set of Graphic Characters" and is almost ASCII.
+ *     Escapes into:
+ *             G0: ESC 2/8 7/5 ("(u")
+ *             G1: ESC 2/9 7/5 (")u")
+ *             G2: ESC 2/10 7/5 ("*u")
+ *             G3: ESC 2/11 7/5 ("+u")
+ *     It is almost identical to ASCII, except for ASCII position for '$'
+ *     (DOLLAR SIGN) is filled with '¤' (CURRENCY SIGN), which is U+00A4.
+ *     Also, ASCII positions for '`', '\', '^', '{', '}', '~' are marked
+ *     as "should not be used".
+ * #103 is a supplementary set of characters used in combination with #102.
+ *     Escapes into:
+ *             G0: ESC 2/8 7/6 ("(v")
+ *             G1: ESC 2/9 7/6 (")v")
+ *             G2: ESC 2/10 7/6 ("*v")
+ *             G3: ESC 2/11 7/6 ("+v")
+ *     Some characters in that character set are combining characters,
+ *     which can only be restrictively used with certain basic Latin letters.
+ *     It can be thought of as a subset of #156 with the exception of 4/12
+ *     which is UNDERLINE in #103 and absent in #156.
+ * #106 is a primary set of control functions, used in combination with #107.
+ *     Escapes into:
+ *             C0: ESC 2/1 4/5 ("!E")
+ *     This set is so short I can list it here:
+ *             0x08    BS      BACKSPACE       -- same as Unicode
+ *             0x0a    LF      LINE FEED       -- same as Unicode
+ *             0x0c    FF      FORM FEED       -- same as Unicode
+ *             0x0d    CR      CARRIAGE RETURN -- same as Unicode
+ *             0x0e    LS1     LOCKING SHIFT ONE
+ *             0x0f    LS0     LOCKING SHIFT ZERO
+ *             0x19    SS2     SINGLE SHIFT TWO
+ *             0x1a    SUB     SUBSTITUTE CHARACTER
+ *             0x1b    ESC     ESCAPE          -- same as Unicode
+ *             0x1d    SS3     SINGLE SHIFT THREE
+ *     The LS1 and LS0 are two magical functions which, respectively, invoke
+ *     the currently designated G1 or G0 set into positions 2/1 to 7/14
+ *     The SS2 and SS3, respectively, invoke one character of the
+ *     currently designated set G2 and G3.
+ *     The SUB is wholly equivalent to U+001a (SUBSTITUTE)
+ * #107 is a supplementary set of control functions, used with #106.
+ *     Escapes into:
+ *             C1: ESC 2/2 4/8 ('"H')
+ *     This set contains three special control codes:
+ *             0x8b    PLD     PARTIAL LINE DOWN       -- similar to <SUB>
+ *             0x8c    PLU     PARTIAL LINE UP         -- sumilar to <SUP>
+ *             0x9b    CSI     CONTROL SEQUENCE INTRODUCER
+ *     This set is so out of world we can probably safely ignore it.
+ * #126 is a "Right-hand Part of the Latin/Greek Alphabet".
+ *     Comprises of 90 characters, including accented letters.
+ *     Escapes into:
+ *             G1: ESC 2/13 4/6 ("-F")
+ *             G2: ESC 2/14 4/6 (".F")
+ *             G3: ESC 2/15 4/6 ("/F")
+ *     Note: This Registration is a subset of ISO-IR 227.
+ * #144 is a "Cyrillic part of the Latin/Cyrillic Alphabet".
+ *     Comprises of 95 characters.
+ *     Escapes into:
+ *             G1: ESC 2/13 4/12 ("-L")
+ *             G2: ESC 2/14 4/12 (".L")
+ *             G3: ESC 2/15 4/12 ("/L")
+ * #150 is a "Greek Primary Set of Graphic Characters".
+ *     Comprises of 94 characters.
+ *     Escapes into:
+ *             G0: ESC 2/8 2/1 4/0 ("(!@")
+ *             G1: ESC 2/9 2/1 4/0 (")!@")
+ *             G2: ESC 2/10 2/1 4/0 ("*!@")
+ *             G3: ESC 2/11 2/1 4/0 ("+!@")
+ * #153 is a "Basic Cyrillic Character Set for 8-bit codes".
+ *     Comprises of 68 characters.
+ *     Escapes into:
+ *             G1: ESC 2/13 4/15 ("-O")
+ *             G2: ESC 2/14 4/15 (".O")
+ *             G3: ESC 2/15 4/15 ("/O")
+ * #156 is a "Supplementary Set of ISO/IEC 6937:1992" for use with #6
+ *     Comprises of 87 characters.
+ *     Escapes into:
+ *             G1: ESC 2/13 5/2 ("-R")
+ *             G2: ESC 2/14 5/2 (".R")
+ *             G3: ESC 2/15 5/2 ("/R")
+ * #164 is a "Hebrew Supplementary Set of Graphic Characters"
+ *     Comprises of 27 characters.
+ *     Escapes into:
+ *             G1: ESC 2/13 5/3 ("-S")
+ *             G2: ESC 2/14 5/3 (".S")
+ *             G3: ESC 2/15 5/3 ("/S")
+ * #165 is a set of "Codes of the Chinese graphic character set"
+ *     Is a multiple-byte set of 8446 characters.
+ *     Escapes into:
+ *             G0: ESC 2/4 2/8 4/5 ("$(E")
+ *             G1: ESC 2/4 2/9 4/5 ("$)E")
+ *             G2: ESC 2/4 2/10 4/5 ("$*E")
+ *             G3: ESC 2/4 2/11 4/5 ("$+E")
+ * #168 is a "Japanese Graphic Character Set for Information Interchange"
+ *     A multiple-byte set of 6879 characters updated from #87.
+ *     Escapes into:
+ *             G0: ESC 2/6 4/0 ESC 2/4 4/2 ("&@" "$B")
+ *             G1: ESC 2/6 4/0 ESC 2/4 2/9 4/2 ("&@" "$)B")
+ *             G2: ESC 2/6 4/0 ESC 2/4 2/10 4/2 ("&@" "$*B")
+ *             G3: ESC 2/6 4/0 ESC 2/4 2/11 4/2 ("&@" "$+B")
+ */
+
diff --git a/skeletons/TeletexString.h b/skeletons/TeletexString.h
new file mode 100644 (file)
index 0000000..9f04aef
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _TeletexString_H_
+#define        _TeletexString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t TeletexString_t;        /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_TeletexString;
+extern asn_TYPE_operation_t asn_OP_TeletexString;
+
+#define TeletexString_free          OCTET_STRING_free
+#define TeletexString_print         OCTET_STRING_print
+#define TeletexString_compare       OCTET_STRING_compare
+#define TeletexString_constraint    asn_generic_unknown_constraint
+#define TeletexString_decode_ber    OCTET_STRING_decode_ber
+#define TeletexString_encode_der    OCTET_STRING_encode_der
+#define TeletexString_decode_xer    OCTET_STRING_decode_xer_hex
+#define TeletexString_encode_xer    OCTET_STRING_encode_xer
+#define TeletexString_decode_uper   OCTET_STRING_decode_uper
+#define TeletexString_encode_uper   OCTET_STRING_encode_uper
+#define TeletexString_decode_aper   OCTET_STRING_decode_aper
+#define TeletexString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TeletexString_H_ */
diff --git a/skeletons/UTCTime.c b/skeletons/UTCTime.c
new file mode 100644 (file)
index 0000000..07891ac
--- /dev/null
@@ -0,0 +1,277 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <UTCTime.h>
+#include <GeneralizedTime.h>
+#include <errno.h>
+
+#ifdef __CYGWIN__
+#include "/usr/include/time.h"
+#else
+#include <time.h>
+#endif /* __CYGWIN__ */
+
+#ifndef        ASN___INTERNAL_TEST_MODE
+
+/*
+ * UTCTime basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_UTCTime_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (23 << 2)),  /* [UNIVERSAL 23] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),  /* [UNIVERSAL 26] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static asn_per_constraints_t asn_DEF_UTCTime_constraints = {
+        { APC_CONSTRAINED, 7, 7, 0x20, 0x7e },  /* Value */
+        { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+        0, 0
+};
+asn_TYPE_operation_t asn_OP_UTCTime = {
+       OCTET_STRING_free,
+       UTCTime_print,
+       UTCTime_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_decode_xer_utf8,
+       UTCTime_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       UTCTime_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_UTCTime = {
+       "UTCTime",
+       "UTCTime",
+       &asn_OP_UTCTime,
+       asn_DEF_UTCTime_tags,
+       sizeof(asn_DEF_UTCTime_tags)
+         / sizeof(asn_DEF_UTCTime_tags[0]) - 2,
+       asn_DEF_UTCTime_tags,
+       sizeof(asn_DEF_UTCTime_tags)
+         / sizeof(asn_DEF_UTCTime_tags[0]),
+       { 0, &asn_DEF_UTCTime_constraints, UTCTime_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+#endif /* ASN___INTERNAL_TEST_MODE */
+
+/*
+ * Check that the time looks like the time.
+ */
+int
+UTCTime_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const UTCTime_t *st = (const UTCTime_t *)sptr;
+       time_t tloc;
+
+       errno = EPERM;                  /* Just an unlikely error code */
+       tloc = asn_UT2time(st, 0, 0);
+       if(tloc == -1 && errno != EPERM) {
+        ASN__CTFAIL(app_key, td, sptr, "%s: Invalid time format: %s (%s:%d)",
+                    td->name, strerror(errno), __FILE__, __LINE__);
+        return -1;
+       }
+
+       return 0;
+}
+
+#ifndef        ASN___INTERNAL_TEST_MODE
+
+asn_enc_rval_t
+UTCTime_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                   int ilevel, enum xer_encoder_flags_e flags,
+                   asn_app_consume_bytes_f *cb, void *app_key) {
+    if(flags & XER_F_CANONICAL) {
+               asn_enc_rval_t rv;
+               UTCTime_t *ut;
+               struct tm tm;
+
+               errno = EPERM;
+               if(asn_UT2time((const UTCTime_t *)sptr, &tm, 1) == -1
+                               && errno != EPERM)
+                       ASN__ENCODE_FAILED;
+
+               /* Fractions are not allowed in UTCTime */
+               ut = asn_time2UT(0, &tm, 1);
+               if(!ut) ASN__ENCODE_FAILED;
+
+               rv = OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags,
+                       cb, app_key);
+               OCTET_STRING_free(&asn_DEF_UTCTime, ut, 0);
+               return rv;
+       } else {
+               return OCTET_STRING_encode_xer_utf8(td, sptr, ilevel, flags,
+                       cb, app_key);
+       }
+}
+
+#endif /* ASN___INTERNAL_TEST_MODE */
+
+int
+UTCTime_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+              asn_app_consume_bytes_f *cb, void *app_key) {
+    const UTCTime_t *st = (const UTCTime_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(st && st->buf) {
+               char buf[32];
+               struct tm tm;
+               int ret;
+
+               errno = EPERM;
+               if(asn_UT2time(st, &tm, 1) == -1 && errno != EPERM)
+                       return (cb("<bad-value>", 11, app_key) < 0) ? -1 : 0;
+
+               ret = snprintf(buf, sizeof(buf),
+                       "%04d-%02d-%02d %02d:%02d:%02d (GMT)",
+                       tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+                       tm.tm_hour, tm.tm_min, tm.tm_sec);
+               assert(ret > 0 && ret < (int)sizeof(buf));
+               return (cb(buf, ret, app_key) < 0) ? -1 : 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+time_t
+asn_UT2time(const UTCTime_t *st, struct tm *_tm, int as_gmt) {
+       char buf[24];   /* "AAMMJJhhmmss+hhmm" + cushion */
+       GeneralizedTime_t gt;
+
+       if(!st || !st->buf
+       || st->size < 11 || st->size >= ((int)sizeof(buf) - 2)) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       gt.buf = (unsigned char *)buf;
+       gt.size = st->size + 2;
+       memcpy(gt.buf + 2, st->buf, st->size);
+       if(st->buf[0] > 0x35) {
+               /* 19xx */
+               gt.buf[0] = 0x31;
+               gt.buf[1] = 0x39;
+       } else {
+               /* 20xx */
+               gt.buf[0] = 0x32;
+               gt.buf[1] = 0x30;
+       }
+
+       return asn_GT2time(&gt, _tm, as_gmt);
+}
+
+UTCTime_t *
+asn_time2UT(UTCTime_t *opt_ut, const struct tm *tm, int force_gmt) {
+       GeneralizedTime_t *gt = (GeneralizedTime_t *)opt_ut;
+
+       gt = asn_time2GT(gt, tm, force_gmt);
+       if(gt == 0) return 0;
+
+       assert(gt->size >= 2);
+       gt->size -= 2;
+       memmove(gt->buf, gt->buf + 2, gt->size + 1);
+
+       return (UTCTime_t *)gt;
+}
+
+
+asn_random_fill_result_t
+UTCTime_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                    const asn_encoding_constraints_t *constraints,
+                    size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    static const char *values[] = {
+        "700101000000",  "700101000000-0000", "700101000000+0000",
+        "700101000000Z", "821106210623",      "691106210827-0500",
+        "821106210629Z",
+    };
+    size_t rnd = asn_random_between(0, sizeof(values)/sizeof(values[0])-1);
+
+    (void)constraints;
+
+    if(max_length < sizeof("yymmddhhmmss") && !*sptr) {
+        return result_skipped;
+    }
+
+    if(*sptr) {
+        if(OCTET_STRING_fromBuf(*sptr, values[rnd], -1) != 0) {
+            if(!sptr) return result_failed;
+        }
+    } else {
+        *sptr = OCTET_STRING_new_fromBuf(td, values[rnd], -1);
+        if(!sptr) return result_failed;
+    }
+
+    return result_ok;
+}
+
+int
+UTCTime_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                        const void *bptr) {
+    const GeneralizedTime_t *a = aptr;
+    const GeneralizedTime_t *b = bptr;
+
+    (void)td;
+
+    if(a && b) {
+        time_t at, bt;
+        int aerr, berr;
+
+        errno = EPERM;
+        at = asn_UT2time(a, 0, 0);
+        aerr = errno;
+        errno = EPERM;
+        bt = asn_UT2time(b, 0, 0);
+        berr = errno;
+
+        if(at == -1 && aerr != EPERM) {
+            if(bt == -1 && berr != EPERM) {
+                return OCTET_STRING_compare(td, aptr, bptr);
+            } else {
+                return -1;
+            }
+        } else if(bt == -1 && berr != EPERM) {
+            return 1;
+        } else {
+            /* Both values are valid. */
+        }
+
+        if(at < bt) {
+            return -1;
+        } else if(at > bt) {
+            return 1;
+        } else {
+            return 0;
+        }
+    } else if(!a && !b) {
+        return 0;
+    } else if(!a) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
diff --git a/skeletons/UTCTime.h b/skeletons/UTCTime.h
new file mode 100644 (file)
index 0000000..295f156
--- /dev/null
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _UTCTime_H_
+#define        _UTCTime_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t UTCTime_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_UTCTime;
+extern asn_TYPE_operation_t asn_OP_UTCTime;
+
+asn_struct_print_f UTCTime_print;
+asn_struct_compare_f UTCTime_compare;
+asn_constr_check_f UTCTime_constraint;
+xer_type_encoder_f UTCTime_encode_xer;
+asn_random_fill_f  UTCTime_random_fill;
+
+#define UTCTime_free         OCTET_STRING_free
+#define UTCTime_decode_ber   OCTET_STRING_decode_ber
+#define UTCTime_encode_der   OCTET_STRING_encode_der
+#define UTCTime_decode_xer   OCTET_STRING_decode_xer_utf8
+#define UTCTime_decode_uper  OCTET_STRING_decode_uper
+#define UTCTime_encode_uper  OCTET_STRING_encode_uper
+#define UTCTime_decode_aper  OCTET_STRING_decode_aper
+#define UTCTime_encode_aper  OCTET_STRING_encode_aper
+
+/***********************
+ * Some handy helpers. *
+ ***********************/
+
+struct tm;     /* <time.h> */
+
+/* See asn_GT2time() in GeneralizedTime.h */
+time_t asn_UT2time(const UTCTime_t *, struct tm *_optional_tm4fill, int as_gmt);
+
+/* See asn_time2GT() in GeneralizedTime.h */
+UTCTime_t *asn_time2UT(UTCTime_t *__opt_ut, const struct tm *, int force_gmt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UTCTime_H_ */
diff --git a/skeletons/UTF8String.c b/skeletons/UTF8String.c
new file mode 100644 (file)
index 0000000..c023ca1
--- /dev/null
@@ -0,0 +1,294 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <UTF8String.h>
+
+/*
+ * UTF8String basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_UTF8String_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),  /* [UNIVERSAL 12] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),   /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_UTF8String = {
+       OCTET_STRING_free,
+       UTF8String_print,
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       UTF8String_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_UTF8String = {
+       "UTF8String",
+       "UTF8String",
+       &asn_OP_UTF8String,
+       asn_DEF_UTF8String_tags,
+       sizeof(asn_DEF_UTF8String_tags)
+         / sizeof(asn_DEF_UTF8String_tags[0]) - 1,
+       asn_DEF_UTF8String_tags,
+       sizeof(asn_DEF_UTF8String_tags)
+         / sizeof(asn_DEF_UTF8String_tags[0]),
+       { 0, 0, UTF8String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+/*
+ * This is the table of length expectations.
+ * The second half of this table is only applicable to the long sequences.
+ */
+static const int UTF8String_ht[2][16] = {
+       { /* 0x0 ... 0x7 */
+         /* 0000..0111 */
+         1, 1, 1, 1, 1, 1, 1, 1,
+         /* 1000..1011(0), 1100..1101(2), 1110(3), 1111(-1) */
+         0, 0, 0, 0, 2, 2, 3, -1 },
+       { /* 0xF0 .. 0xF7 */
+         /* 11110000..11110111 */
+         4, 4, 4, 4, 4, 4, 4, 4,
+         5, 5, 5, 5, 6, 6, -1, -1 }
+};
+static const int32_t UTF8String_mv[7] = { 0, 0,
+       0x00000080,
+       0x00000800,
+       0x00010000,
+       0x00200000,
+       0x04000000
+};
+
+/* Internal aliases for return codes */
+#define        U8E_TRUNC       -1      /* UTF-8 sequence truncated */
+#define        U8E_ILLSTART    -2      /* Illegal UTF-8 sequence start */
+#define        U8E_NOTCONT     -3      /* Continuation expectation failed */
+#define        U8E_NOTMIN      -4      /* Not minimal length encoding */
+#define        U8E_EINVAL      -5      /* Invalid arguments */
+
+int
+UTF8String_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    ssize_t len = UTF8String_length((const UTF8String_t *)sptr);
+       switch(len) {
+       case U8E_EINVAL:
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given", td->name);
+               break;
+       case U8E_TRUNC:
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: truncated UTF-8 sequence (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               break;
+       case U8E_ILLSTART:
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8 illegal start of encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               break;
+       case U8E_NOTCONT:
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8 not continuation (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               break;
+       case U8E_NOTMIN:
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8 not minimal sequence (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               break;
+       }
+       return (len < 0) ? -1 : 0;
+}
+
+static ssize_t
+UTF8String__process(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
+       size_t length;
+       uint8_t *buf = st->buf;
+       uint8_t *end = buf + st->size;
+       uint32_t *dstend = dst + dstlen;
+
+       for(length = 0; buf < end; length++) {
+               int ch = *buf;
+               uint8_t *cend;
+               int32_t value;
+               int want;
+
+               /* Compute the sequence length */
+               want = UTF8String_ht[0][ch >> 4];
+               switch(want) {
+               case -1:
+                       /* Second half of the table, long sequence */
+                       want = UTF8String_ht[1][ch & 0x0F];
+                       if(want != -1) break;
+                       /* Fall through */
+               case 0:
+                       return U8E_ILLSTART;
+               }
+
+               /* assert(want >= 1 && want <= 6) */
+
+               /* Check character sequence length */
+               if(buf + want > end) return U8E_TRUNC;
+
+               value = ch & (0xff >> want);
+               cend = buf + want;
+               for(buf++; buf < cend; buf++) {
+                       ch = *buf;
+                       if(ch < 0x80 || ch > 0xbf) return U8E_NOTCONT;
+                       value = (value << 6) | (ch & 0x3F);
+               }
+               if(value < UTF8String_mv[want])
+                       return U8E_NOTMIN;
+               if(dst < dstend)
+                       *dst++ = value; /* Record value */
+       }
+
+       if(dst < dstend) *dst = 0;      /* zero-terminate */
+
+       return length;
+}
+
+
+ssize_t
+UTF8String_length(const UTF8String_t *st) {
+       if(st && st->buf) {
+               return UTF8String__process(st, 0, 0);
+       } else {
+               return U8E_EINVAL;
+       }
+}
+
+size_t
+UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen) {
+       if(st && st->buf) {
+               ssize_t ret = UTF8String__process(st, dst, dstlen);
+               return (ret < 0) ? 0 : ret;
+       } else {
+               return 0;
+       }
+}
+
+int
+UTF8String_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                 asn_app_consume_bytes_f *cb, void *app_key) {
+    const UTF8String_t *st = (const UTF8String_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(st && st->buf) {
+               return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0;
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+
+/*
+ * Biased function for randomizing UTF-8 sequences.
+ */
+static size_t
+UTF8String__random_char(uint8_t *b, size_t size) {
+    static const struct rnd_value {
+        const char *value;
+        size_t size;
+    } values[] = {{"\0", 1},
+                  {"\x01", 1},
+                  {"\x7f", 1},
+                  {"\xc2\xa2", 2},
+                  {"\xe2\x82\xac", 3},
+                  {"\xf0\x90\x8d\x88", 4},
+                  {"\xf4\x8f\xbf\xbf", 4}};
+
+    const struct rnd_value *v;
+    size_t max_idx = 0;
+
+    switch(size) {
+    case 0:
+        assert(size != 0);
+        return 0;
+    case 1:
+        max_idx = 2;
+        break;
+    case 2:
+        max_idx = 3;
+        break;
+    default:
+    case 4:
+        max_idx = sizeof(values) / sizeof(values[0]) - 1;
+        break;
+    }
+
+    v = &values[asn_random_between(0, max_idx)];
+    memcpy(b, v->value, v->size);
+    return v->size;
+}
+
+asn_random_fill_result_t
+UTF8String_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                       const asn_encoding_constraints_t *constraints,
+                       size_t max_length) {
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 1};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    uint8_t *buf;
+    uint8_t *bend;
+    uint8_t *b;
+    size_t rnd_len;
+    size_t idx;
+    UTF8String_t *st;
+
+    if(max_length == 0 && !*sptr) return result_skipped;
+
+    /* Figure out how far we should go */
+    rnd_len = OCTET_STRING_random_length_constrained(td, constraints,
+                                                     max_length / 4);
+
+    buf = CALLOC(4, rnd_len + 1);
+    if(!buf) return result_failed;
+
+    bend = &buf[4 * rnd_len];
+
+    for(b = buf, idx = 0; idx < rnd_len; idx++) {
+        b += UTF8String__random_char(b, (bend - b));
+    }
+    *(uint8_t *)b = 0;
+
+    if(*sptr) {
+        st = *sptr;
+        FREEMEM(st->buf);
+    } else {
+        st = (OCTET_STRING_t *)(*sptr = CALLOC(1, sizeof(UTF8String_t)));
+        if(!st) {
+            FREEMEM(buf);
+            return result_failed;
+        }
+    }
+
+    st->buf = buf;
+    st->size = b - buf;
+
+    assert(UTF8String_length(st) == (ssize_t)rnd_len);
+
+    return result_ok;
+}
diff --git a/skeletons/UTF8String.h b/skeletons/UTF8String.h
new file mode 100644 (file)
index 0000000..7ad9c82
--- /dev/null
@@ -0,0 +1,63 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _UTF8String_H_
+#define        _UTF8String_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t UTF8String_t;   /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_UTF8String;
+extern asn_TYPE_operation_t asn_OP_UTF8String;
+
+asn_struct_print_f UTF8String_print;
+asn_constr_check_f UTF8String_constraint;
+asn_random_fill_f  UTF8String_random_fill;
+
+#define UTF8String_free         OCTET_STRING_free
+#define UTF8String_compare      OCTET_STRING_compare
+#define UTF8String_constraint   UTF8String_constraint
+#define UTF8String_decode_ber   OCTET_STRING_decode_ber
+#define UTF8String_encode_der   OCTET_STRING_encode_der
+#define UTF8String_decode_xer   OCTET_STRING_decode_xer_utf8
+#define UTF8String_encode_xer   OCTET_STRING_encode_xer_utf8
+#define UTF8String_decode_uper  OCTET_STRING_decode_uper
+#define UTF8String_encode_uper  OCTET_STRING_encode_uper
+#define UTF8String_decode_aper  OCTET_STRING_decode_aper
+#define UTF8String_encode_aper  OCTET_STRING_encode_aper
+
+/*
+ * Returns length of the given UTF-8 string in characters,
+ * or a negative error code:
+ * -1: UTF-8 sequence truncated 
+ * -2: Illegal UTF-8 sequence start
+ * -3: Continuation expectation failed
+ * -4: Not minimal length encoding
+ * -5: Invalid arguments
+ */
+ssize_t UTF8String_length(const UTF8String_t *st);
+
+/*
+ * Convert the UTF-8 string into a sequence of wide characters.
+ * Returns the number of characters necessary.
+ * Returned value might be greater than dstlen.
+ * In case of conversion error, 0 is returned.
+ * 
+ * If st points to a valid UTF-8 string, calling
+ *     UTF8String_to_wcs(st, 0, 0);
+ * is equivalent to
+ *     UTF8String_length(const UTF8String_t *st);
+ */
+size_t UTF8String_to_wcs(const UTF8String_t *st, uint32_t *dst, size_t dstlen);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UTF8String_H_ */
diff --git a/skeletons/UniversalString.c b/skeletons/UniversalString.c
new file mode 100644 (file)
index 0000000..0f6d796
--- /dev/null
@@ -0,0 +1,243 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <UniversalString.h>
+#include <UTF8String.h>
+
+/*
+ * UniversalString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_UniversalString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)),  /* [UNIVERSAL 28] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_OCTET_STRING_specifics_t asn_SPC_UniversalString_specs = {
+       sizeof(UniversalString_t),
+       offsetof(UniversalString_t, _asn_ctx),
+       ASN_OSUBV_U32   /* 32-bits character */
+};
+static asn_per_constraints_t asn_DEF_UniversalString_per_constraints = {
+       { APC_CONSTRAINED, 32, 32, 0, 2147483647 },
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 },
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_UniversalString = {
+       OCTET_STRING_free,
+       UniversalString_print,      /* Convert into UTF8 and print */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,
+       OCTET_STRING_encode_der,
+       UniversalString_decode_xer,     /* Convert from UTF-8 */
+       UniversalString_encode_xer,     /* Convert into UTF-8 */
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_UniversalString = {
+       "UniversalString",
+       "UniversalString",
+       &asn_OP_UniversalString,
+       asn_DEF_UniversalString_tags,
+       sizeof(asn_DEF_UniversalString_tags)
+         / sizeof(asn_DEF_UniversalString_tags[0]) - 1,
+       asn_DEF_UniversalString_tags,
+       sizeof(asn_DEF_UniversalString_tags)
+         / sizeof(asn_DEF_UniversalString_tags[0]),
+       { 0, &asn_DEF_UniversalString_per_constraints, UniversalString_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_UniversalString_specs
+};
+
+int
+UniversalString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const UniversalString_t *st = (const UniversalString_t *)sptr;
+
+    if(st && st->buf) {
+        if(st->size % 4) {
+            ASN__CTFAIL(app_key, td, sptr,
+                        "%s: invalid size %" ASN_PRI_SIZE " not divisible by 4 (%s:%d)",
+                        td->name, st->size, __FILE__, __LINE__);
+            return -1;
+        }
+    } else {
+        ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name,
+                    __FILE__, __LINE__);
+        return -1;
+    }
+
+    return 0;
+}
+
+static ssize_t
+UniversalString__dump(const UniversalString_t *st,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+       char scratch[128];                      /* Scratchpad buffer */
+       char *p = scratch;
+       ssize_t wrote = 0;
+       uint8_t *ch;
+       uint8_t *end;
+
+       ch = st->buf;
+       end = (st->buf + st->size);
+       for(end -= 3; ch < end; ch += 4) {
+               uint32_t wc =     (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];       /* 4 bytes */
+               if(sizeof(scratch) - (p - scratch) < 6) {
+                       wrote += p - scratch;
+                       if(cb(scratch, p - scratch, app_key) < 0)
+                               return -1;
+                       p = scratch;
+               }
+               if(wc < 0x80) {
+                       *p++ = (char)wc;
+               } else if(wc < 0x800) {
+                       *p++ = 0xc0 | ((wc >> 6));
+                       *p++ = 0x80 | ((wc & 0x3f));
+               } else if(wc < 0x10000) {
+                       *p++ = 0xe0 | ((wc >> 12));
+                       *p++ = 0x80 | ((wc >> 6) & 0x3f);
+                       *p++ = 0x80 | ((wc & 0x3f));
+               } else if(wc < 0x200000) {
+                       *p++ = 0xf0 | ((wc >> 18));
+                       *p++ = 0x80 | ((wc >> 12) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 6) & 0x3f);
+                       *p++ = 0x80 | ((wc & 0x3f));
+               } else if(wc < 0x4000000) {
+                       *p++ = 0xf8 | ((wc >> 24));
+                       *p++ = 0x80 | ((wc >> 18) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 12) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 6) & 0x3f);
+                       *p++ = 0x80 | ((wc & 0x3f));
+               } else {
+                       *p++ = 0xfc | ((wc >> 30) & 0x1);
+                       *p++ = 0x80 | ((wc >> 24) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 18) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 12) & 0x3f);
+                       *p++ = 0x80 | ((wc >> 6) & 0x3f);
+                       *p++ = 0x80 | ((wc & 0x3f));
+               }
+       }
+
+       wrote += p - scratch;
+       if(cb(scratch, p - scratch, app_key) < 0)
+               return -1;
+
+       return wrote;
+}
+
+asn_dec_rval_t
+UniversalString_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                           const asn_TYPE_descriptor_t *td, void **sptr,
+                           const char *opt_mname, const void *buf_ptr,
+                           size_t size) {
+    asn_dec_rval_t rc;
+
+       rc = OCTET_STRING_decode_xer_utf8(opt_codec_ctx, td, sptr, opt_mname,
+               buf_ptr, size);
+       if(rc.code == RC_OK) {
+               /*
+                * Now we have a whole string in UTF-8 format.
+                * Convert it into UCS-4.
+                */
+               uint32_t *wcs;
+               size_t wcs_len;
+               UTF8String_t *st;
+#ifndef        WORDS_BIGENDIAN
+               int little_endian = 1;
+#endif
+
+               assert(*sptr);
+               st = (UTF8String_t *)*sptr;
+               assert(st->buf);
+               wcs_len = UTF8String_to_wcs(st, 0, 0);
+
+               wcs = (uint32_t *)MALLOC(4 * (wcs_len + 1));
+               if(wcs == 0 || UTF8String_to_wcs(st, wcs, wcs_len) != wcs_len) {
+                       rc.code = RC_FAIL;
+                       rc.consumed = 0;
+                       return rc;
+               } else {
+                       wcs[wcs_len] = 0;       /* nul-terminate */
+               }
+
+#ifndef        WORDS_BIGENDIAN
+               if(*(char *)&little_endian) {
+                       /* Swap byte order in encoding */
+                       uint32_t *wc = wcs;
+                       uint32_t *wc_end = wcs + wcs_len;
+                       for(; wc < wc_end; wc++) {
+                               /* *wc = htonl(*wc); */
+                               uint32_t wch = *wc;
+                               *((uint8_t *)wc + 0) = wch >> 24;
+                               *((uint8_t *)wc + 1) = wch >> 16;
+                               *((uint8_t *)wc + 2) = wch >> 8;
+                               *((uint8_t *)wc + 3) = wch;
+                       }
+               }
+#endif /* WORDS_BIGENDIAN */
+
+               FREEMEM(st->buf);
+               st->buf = (uint8_t *)wcs;
+               st->size = 4 * wcs_len;
+       }
+       return rc;
+}
+
+asn_enc_rval_t
+UniversalString_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                           int ilevel, enum xer_encoder_flags_e flags,
+                           asn_app_consume_bytes_f *cb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       asn_enc_rval_t er = {0,0,0};
+
+       (void)ilevel;
+       (void)flags;
+
+       if(!st || !st->buf)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = UniversalString__dump(st, cb, app_key);
+       if(er.encoded < 0) ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+int
+UniversalString_print(const asn_TYPE_descriptor_t *td, const void *sptr,
+                      int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+    const UniversalString_t *st = (const UniversalString_t *)sptr;
+
+       (void)td;       /* Unused argument */
+       (void)ilevel;   /* Unused argument */
+
+       if(!st || !st->buf) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       if(UniversalString__dump(st, cb, app_key) < 0)
+               return -1;
+
+       return 0;
+}
+
diff --git a/skeletons/UniversalString.h b/skeletons/UniversalString.h
new file mode 100644 (file)
index 0000000..510807a
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _UniversalString_H_
+#define        _UniversalString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t UniversalString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_UniversalString;
+extern asn_TYPE_operation_t asn_OP_UniversalString;
+extern asn_OCTET_STRING_specifics_t asn_SPC_UniversalString_specs;
+
+asn_struct_print_f UniversalString_print;      /* Human-readable output */
+asn_constr_check_f UniversalString_constraint;
+xer_type_decoder_f UniversalString_decode_xer;
+xer_type_encoder_f UniversalString_encode_xer;
+
+#define UniversalString_free            OCTET_STRING_free
+#define UniversalString_compare         OCTET_STRING_compare
+#define UniversalString_decode_ber      OCTET_STRING_decode_ber
+#define UniversalString_encode_der      OCTET_STRING_encode_der
+#define UniversalString_decode_uper     OCTET_STRING_decode_uper
+#define UniversalString_encode_uper     OCTET_STRING_encode_uper
+#define UniversalString_decode_aper     OCTET_STRING_decode_aper
+#define UniversalString_encode_aper     OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UniversalString_H_ */
diff --git a/skeletons/VideotexString.c b/skeletons/VideotexString.c
new file mode 100644 (file)
index 0000000..69417bd
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <VideotexString.h>
+
+/*
+ * VideotexString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_VideotexString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (21 << 2)),  /* [UNIVERSAL 21] IMPLICIT */
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+asn_TYPE_operation_t asn_OP_VideotexString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print,         /* non-ascii string */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_hex,
+       OCTET_STRING_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_VideotexString = {
+       "VideotexString",
+       "VideotexString",
+       &asn_OP_VideotexString,
+       asn_DEF_VideotexString_tags,
+       sizeof(asn_DEF_VideotexString_tags)
+         / sizeof(asn_DEF_VideotexString_tags[0]) - 1,
+       asn_DEF_VideotexString_tags,
+       sizeof(asn_DEF_VideotexString_tags)
+         / sizeof(asn_DEF_VideotexString_tags[0]),
+       { 0, 0, asn_generic_unknown_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/skeletons/VideotexString.h b/skeletons/VideotexString.h
new file mode 100644 (file)
index 0000000..b535389
--- /dev/null
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _VideotexString_H_
+#define        _VideotexString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t VideotexString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_VideotexString;
+extern asn_TYPE_operation_t asn_OP_VideotexString;
+
+#define VideotexString_free         OCTET_STRING_free
+#define VideotexString_print        OCTET_STRING_print
+#define VideotexString_compare      OCTET_STRING_compare
+#define VideotexString_constraint   asn_generic_unknown_constraint
+#define VideotexString_decode_ber   OCTET_STRING_decode_ber
+#define VideotexString_encode_der   OCTET_STRING_encode_der
+#define VideotexString_decode_xer   OCTET_STRING_decode_xer_hex
+#define VideotexString_encode_xer   OCTET_STRING_encode_xer
+#define VideotexString_decode_uper  OCTET_STRING_decode_uper
+#define VideotexString_encode_uper  OCTET_STRING_encode_uper
+#define VideotexString_decode_aper  OCTET_STRING_decode_aper
+#define VideotexString_encode_aper  OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VideotexString_H_ */
diff --git a/skeletons/VisibleString.c b/skeletons/VisibleString.c
new file mode 100644 (file)
index 0000000..03fef8b
--- /dev/null
@@ -0,0 +1,99 @@
+/*-
+ * Copyright (c) 2003, 2006 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <VisibleString.h>
+
+/*
+ * VisibleString basic type description.
+ */
+static const ber_tlv_tag_t asn_DEF_VisibleString_tags[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),  /* [UNIVERSAL 26] IMPLICIT ...*/
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))    /* ... OCTET STRING */
+};
+static asn_per_constraints_t asn_DEF_VisibleString_constraints = {
+       { APC_CONSTRAINED, 7, 7, 0x20, 0x7e },  /* Value */
+       { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, /* Size */
+       0, 0
+};
+asn_TYPE_operation_t asn_OP_VisibleString = {
+       OCTET_STRING_free,
+       OCTET_STRING_print_utf8,   /* ASCII subset */
+       OCTET_STRING_compare,
+       OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
+       OCTET_STRING_encode_der,
+       OCTET_STRING_decode_xer_utf8,
+       OCTET_STRING_encode_xer_utf8,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       OCTET_STRING_decode_oer,
+       OCTET_STRING_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       OCTET_STRING_decode_uper,
+       OCTET_STRING_encode_uper,
+       OCTET_STRING_decode_aper,
+       OCTET_STRING_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       OCTET_STRING_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+asn_TYPE_descriptor_t asn_DEF_VisibleString = {
+       "VisibleString",
+       "VisibleString",
+       &asn_OP_VisibleString,
+       asn_DEF_VisibleString_tags,
+       sizeof(asn_DEF_VisibleString_tags)
+         / sizeof(asn_DEF_VisibleString_tags[0]) - 1,
+       asn_DEF_VisibleString_tags,
+       sizeof(asn_DEF_VisibleString_tags)
+         / sizeof(asn_DEF_VisibleString_tags[0]),
+       { 0, &asn_DEF_VisibleString_constraints, VisibleString_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+int
+VisibleString_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                         asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const VisibleString_t *st = (const VisibleString_t *)sptr;
+
+       if(st && st->buf) {
+               uint8_t *buf = st->buf;
+               uint8_t *end = buf + st->size;
+
+               /*
+                * Check the alphabet of the VisibleString.
+                * ISO646, ISOReg#6
+                * The alphabet is a subset of ASCII between the space
+                * and "~" (tilde).
+                */
+               for(; buf < end; buf++) {
+                       if(*buf < 0x20 || *buf > 0x7e) {
+                               ASN__CTFAIL(app_key, td, sptr,
+                                       "%s: value byte %ld (%d) "
+                                       "not in VisibleString alphabet (%s:%d)",
+                                       td->name,
+                                       (long)((buf - st->buf) + 1),
+                                       *buf,
+                                       __FILE__, __LINE__);
+                               return -1;
+                       }
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/skeletons/VisibleString.h b/skeletons/VisibleString.h
new file mode 100644 (file)
index 0000000..ad5f713
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _VisibleString_H_
+#define        _VisibleString_H_
+
+#include <OCTET_STRING.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef OCTET_STRING_t VisibleString_t;  /* Implemented via OCTET STRING */
+
+extern asn_TYPE_descriptor_t asn_DEF_VisibleString;
+extern asn_TYPE_operation_t asn_OP_VisibleString;
+
+asn_constr_check_f VisibleString_constraint;
+
+#define VisibleString_free          OCTET_STRING_free
+#define VisibleString_print         OCTET_STRING_print
+#define VisibleString_compare       OCTET_STRING_compare
+#define VisibleString_constraint    VisibleString_constraint
+#define VisibleString_decode_ber    OCTET_STRING_decode_ber
+#define VisibleString_encode_der    OCTET_STRING_encode_der
+#define VisibleString_decode_xer    OCTET_STRING_decode_xer_hex
+#define VisibleString_encode_xer    OCTET_STRING_encode_xer
+#define VisibleString_decode_uper   OCTET_STRING_decode_uper
+#define VisibleString_encode_uper   OCTET_STRING_encode_uper
+#define VisibleString_decode_aper   OCTET_STRING_decode_aper
+#define VisibleString_encode_aper   OCTET_STRING_encode_aper
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VisibleString_H_ */
diff --git a/skeletons/asn_SEQUENCE_OF.c b/skeletons/asn_SEQUENCE_OF.c
new file mode 100644 (file)
index 0000000..ec952fc
--- /dev/null
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_SEQUENCE_OF.h>
+
+typedef A_SEQUENCE_OF(void) asn_sequence;
+
+void
+asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) {
+       asn_sequence *as = (asn_sequence *)asn_sequence_of_x;
+
+       if(as) {
+               void *ptr;
+               int n;
+
+               if(number < 0 || number >= as->count)
+                       return; /* Nothing to delete */
+
+               if(_do_free && as->free) {
+                       ptr = as->array[number];
+               } else {
+                       ptr = 0;
+               }
+
+               /*
+                * Shift all elements to the left to hide the gap.
+                */
+               --as->count;
+               for(n = number; n < as->count; n++)
+                       as->array[n] = as->array[n+1];
+
+               /*
+                * Invoke the third-party function only when the state
+                * of the parent structure is consistent.
+                */
+               if(ptr) as->free(ptr);
+       }
+}
+
diff --git a/skeletons/asn_SEQUENCE_OF.h b/skeletons/asn_SEQUENCE_OF.h
new file mode 100644 (file)
index 0000000..e35bc44
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_SEQUENCE_OF_H
+#define        ASN_SEQUENCE_OF_H
+
+#include <asn_SET_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * SEQUENCE OF is the same as SET OF with a tiny difference:
+ * the delete operation preserves the initial order of elements
+ * and thus MAY operate in non-constant time.
+ */
+#define        A_SEQUENCE_OF(type)     A_SET_OF(type)
+
+#define        ASN_SEQUENCE_ADD(headptr, ptr)          \
+       asn_sequence_add((headptr), (ptr))
+
+/***********************************************
+ * Implementation of the SEQUENCE OF structure.
+ */
+
+#define        asn_sequence_add        asn_set_add
+#define        asn_sequence_empty      asn_set_empty
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is NOT a constant-time operation.
+ * The order of elements is preserved.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_;
+#define _A_SEQUENCE_FROM_VOID(ptr)     ((asn_anonymous_sequence_ *)(ptr))
+#define _A_CSEQUENCE_FROM_VOID(ptr)    ((const asn_anonymous_sequence_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_SEQUENCE_OF_H */
diff --git a/skeletons/asn_SET_OF.c b/skeletons/asn_SET_OF.c
new file mode 100644 (file)
index 0000000..944f2cb
--- /dev/null
@@ -0,0 +1,88 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_SET_OF.h>
+#include <errno.h>
+
+/*
+ * Add another element into the set.
+ */
+int
+asn_set_add(void *asn_set_of_x, void *ptr) {
+       asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+       if(as == 0 || ptr == 0) {
+               errno = EINVAL;         /* Invalid arguments */
+               return -1;
+       }
+
+       /*
+        * Make sure there's enough space to insert an element.
+        */
+       if(as->count == as->size) {
+               int _newsize = as->size ? (as->size << 1) : 4;
+               void *_new_arr;
+               _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0]));
+               if(_new_arr) {
+                       as->array = (void **)_new_arr;
+                       as->size = _newsize;
+               } else {
+                       /* ENOMEM */
+                       return -1;
+               }
+       }
+
+       as->array[as->count++] = ptr;
+
+       return 0;
+}
+
+void
+asn_set_del(void *asn_set_of_x, int number, int _do_free) {
+       asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+       if(as) {
+               void *ptr;
+               if(number < 0 || number >= as->count)
+                       return;
+
+               if(_do_free && as->free) {
+                       ptr = as->array[number];
+               } else {
+                       ptr = 0;
+               }
+
+               as->array[number] = as->array[--as->count];
+
+               /*
+                * Invoke the third-party function only when the state
+                * of the parent structure is consistent.
+                */
+               if(ptr) as->free(ptr);
+       }
+}
+
+/*
+ * Free the contents of the set, do not free the set itself.
+ */
+void
+asn_set_empty(void *asn_set_of_x) {
+       asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x);
+
+       if(as) {
+               if(as->array) {
+                       if(as->free) {
+                               while(as->count--)
+                                       as->free(as->array[as->count]);
+                       }
+                       FREEMEM(as->array);
+                       as->array = 0;
+               }
+               as->count = 0;
+               as->size = 0;
+       }
+
+}
+
diff --git a/skeletons/asn_SET_OF.h b/skeletons/asn_SET_OF.h
new file mode 100644 (file)
index 0000000..882e1a4
--- /dev/null
@@ -0,0 +1,72 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_SET_OF_H
+#define        ASN_SET_OF_H
+
+#ifdef __cplusplus
+#define A_SET_OF(type)                   \
+    struct {                             \
+        type **array;                    \
+        int count; /* Meaningful size */ \
+        int size;  /* Allocated size */  \
+        void (*free)(decltype(*array));  \
+    }
+#else   /* C */
+#define A_SET_OF(type)                   \
+    struct {                             \
+        type **array;                    \
+        int count; /* Meaningful size */ \
+        int size;  /* Allocated size */  \
+        void (*free)(type *);    \
+    }
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define        ASN_SET_ADD(headptr, ptr)               \
+       asn_set_add((headptr), (ptr))
+
+/*******************************************
+ * Implementation of the SET OF structure.
+ */
+
+/*
+ * Add another structure into the set by its pointer.
+ * RETURN VALUES:
+ * 0 for success and -1/errno for failure.
+ */
+int  asn_set_add(void *asn_set_of_x, void *ptr);
+
+/*
+ * Delete the element from the set by its number (base 0).
+ * This is a constant-time operation. The order of elements before the
+ * deleted ones is guaranteed, the order of elements after the deleted
+ * one is NOT guaranteed.
+ * If _do_free is given AND the (*free) is initialized, the element
+ * will be freed using the custom (*free) function as well.
+ */
+void asn_set_del(void *asn_set_of_x, int number, int _do_free);
+
+/*
+ * Empty the contents of the set. Will free the elements, if (*free) is given.
+ * Will NOT free the set itself.
+ */
+void asn_set_empty(void *asn_set_of_x);
+
+/*
+ * Cope with different conversions requirements to/from void in C and C++.
+ * This is mostly useful for support library.
+ */
+typedef A_SET_OF(void) asn_anonymous_set_;
+#define _A_SET_FROM_VOID(ptr)          ((asn_anonymous_set_ *)(ptr))
+#define _A_CSET_FROM_VOID(ptr)         ((const asn_anonymous_set_ *)(ptr))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_SET_OF_H */
diff --git a/skeletons/asn_application.c b/skeletons/asn_application.c
new file mode 100644 (file)
index 0000000..2bff460
--- /dev/null
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_application.h>
+#include <errno.h>
+
+static asn_enc_rval_t asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
+                                          enum asn_transfer_syntax syntax,
+                                          const asn_TYPE_descriptor_t *td,
+                                          const void *sptr,
+                                          asn_app_consume_bytes_f *callback,
+                                          void *callback_key);
+
+
+struct callback_count_bytes_key {
+    asn_app_consume_bytes_f *callback;
+    void *callback_key;
+    size_t computed_size;
+};
+
+/*
+ * Encoder which just counts bytes that come through it.
+ */
+static int
+callback_count_bytes_cb(const void *data, size_t size, void *keyp) {
+    struct callback_count_bytes_key *key = keyp;
+    int ret;
+
+    ret = key->callback(data, size, key->callback_key);
+    if(ret >= 0) {
+        key->computed_size += size;
+    }
+
+    return ret;
+}
+
+struct overrun_encoder_key {
+    void *buffer;
+    size_t buffer_size;
+    size_t computed_size;
+};
+
+struct dynamic_encoder_key {
+    void *buffer;
+    size_t buffer_size;
+    size_t computed_size;
+};
+
+struct callback_failure_catch_key {
+    asn_app_consume_bytes_f *callback;
+    void *callback_key;
+    int callback_failed;
+};
+
+/*
+ * Encoder which doesn't stop counting bytes
+ * even if it reaches the end of the buffer.
+ */
+static int
+overrun_encoder_cb(const void *data, size_t size, void *keyp) {
+    struct overrun_encoder_key *key = keyp;
+
+    if(key->computed_size + size > key->buffer_size) {
+        /*
+         * Avoid accident on the next call:
+         * stop adding bytes to the buffer.
+         */
+        key->buffer_size = 0;
+    } else {
+        memcpy((char *)key->buffer + key->computed_size, data, size);
+    }
+    key->computed_size += size;
+
+    return 0;
+}
+
+/*
+ * Encoder which dynamically allocates output, and continues
+ * to count even if allocation failed.
+ */
+static int
+dynamic_encoder_cb(const void *data, size_t size, void *keyp) {
+    struct dynamic_encoder_key *key = keyp;
+
+    if(key->buffer) {
+        if(key->computed_size + size >= key->buffer_size) {
+            void *p;
+            size_t new_size = key->buffer_size;
+
+            do {
+                new_size *= 2;
+            } while(new_size <= key->computed_size + size);
+
+            p = REALLOC(key->buffer, new_size);
+            if(p) {
+                key->buffer = p;
+                key->buffer_size = new_size;
+            } else {
+                FREEMEM(key->buffer);
+                key->buffer = 0;
+                key->buffer_size = 0;
+                key->computed_size += size;
+                return 0;
+            }
+        }
+        memcpy((char *)key->buffer + key->computed_size, data, size);
+    }
+
+    key->computed_size += size;
+
+    return 0;
+}
+
+/*
+ * Encoder which help convert the application level encoder failure into EIO.
+ */
+static int
+callback_failure_catch_cb(const void *data, size_t size, void *keyp) {
+    struct callback_failure_catch_key *key = keyp;
+    int ret;
+
+    ret = key->callback(data, size, key->callback_key);
+    if(ret < 0) {
+        key->callback_failed = 1;
+    }
+
+    return ret;
+}
+
+asn_enc_rval_t
+asn_encode(const asn_codec_ctx_t *opt_codec_ctx,
+           enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td,
+           const void *sptr, asn_app_consume_bytes_f *callback, void *callback_key) {
+    struct callback_failure_catch_key cb_key;
+    asn_enc_rval_t er = {0,0,0};
+
+    if(!callback) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    cb_key.callback = callback;
+    cb_key.callback_key = callback_key;
+    cb_key.callback_failed = 0;
+
+    er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                             callback_failure_catch_cb, &cb_key);
+    if(cb_key.callback_failed) {
+        assert(er.encoded == -1);
+        assert(errno == EBADF);
+        errno = EIO;
+    }
+
+    return er;
+}
+
+asn_enc_rval_t
+asn_encode_to_buffer(const asn_codec_ctx_t *opt_codec_ctx,
+                     enum asn_transfer_syntax syntax,
+                     const asn_TYPE_descriptor_t *td, const void *sptr,
+                     void *buffer, size_t buffer_size) {
+    struct overrun_encoder_key buf_key;
+    asn_enc_rval_t er = {0,0,0};
+
+    if(buffer_size > 0 && !buffer) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    buf_key.buffer = buffer;
+    buf_key.buffer_size = buffer_size;
+    buf_key.computed_size = 0;
+
+    er = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                             overrun_encoder_cb, &buf_key);
+
+    if(er.encoded >= 0 && (size_t)er.encoded != buf_key.computed_size) {
+        ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE
+                  " yet produced %" ASN_PRI_SIZE " bytes",
+                  er.encoded, buf_key.computed_size);
+        assert(er.encoded < 0 || (size_t)er.encoded == buf_key.computed_size);
+    }
+
+    return er;
+}
+
+asn_encode_to_new_buffer_result_t
+asn_encode_to_new_buffer(const asn_codec_ctx_t *opt_codec_ctx,
+                         enum asn_transfer_syntax syntax,
+                         const asn_TYPE_descriptor_t *td, const void *sptr) {
+    struct dynamic_encoder_key buf_key;
+    asn_encode_to_new_buffer_result_t res;
+
+    buf_key.buffer_size = 16;
+    buf_key.buffer = MALLOC(buf_key.buffer_size);
+    buf_key.computed_size = 0;
+
+    res.result = asn_encode_internal(opt_codec_ctx, syntax, td, sptr,
+                                     dynamic_encoder_cb, &buf_key);
+
+    if(res.result.encoded >= 0
+       && (size_t)res.result.encoded != buf_key.computed_size) {
+        ASN_DEBUG("asn_encode() returned %" ASN_PRI_SSIZE
+                  " yet produced %" ASN_PRI_SIZE " bytes",
+                  res.result.encoded, buf_key.computed_size);
+        assert(res.result.encoded < 0
+               || (size_t)res.result.encoded == buf_key.computed_size);
+    }
+
+    res.buffer = buf_key.buffer;
+
+    /* 0-terminate just in case. */
+    if(res.buffer) {
+        assert(buf_key.computed_size < buf_key.buffer_size);
+        ((char *)res.buffer)[buf_key.computed_size] = '\0';
+    }
+
+    return res;
+}
+
+static asn_enc_rval_t
+asn_encode_internal(const asn_codec_ctx_t *opt_codec_ctx,
+                    enum asn_transfer_syntax syntax,
+                    const asn_TYPE_descriptor_t *td, const void *sptr,
+                    asn_app_consume_bytes_f *callback, void *callback_key) {
+    asn_enc_rval_t er = {0,0,0};
+    enum xer_encoder_flags_e xer_flags = XER_F_CANONICAL;
+
+    (void)opt_codec_ctx; /* Parameters are not checked on encode yet. */
+
+    if(!td || !sptr) {
+        errno = EINVAL;
+        ASN__ENCODE_FAILED;
+    }
+
+    switch(syntax) {
+    case ATS_NONSTANDARD_PLAINTEXT:
+        if(td->op->print_struct) {
+            struct callback_count_bytes_key cb_key;
+            cb_key.callback = callback;
+            cb_key.callback_key = callback_key;
+            cb_key.computed_size = 0;
+            if(td->op->print_struct(td, sptr, 1, callback_count_bytes_cb,
+                                    &cb_key)
+                   < 0
+               || callback_count_bytes_cb("\n", 1, &cb_key) < 0) {
+                errno = EBADF; /* Structure has incorrect form. */
+                er.encoded = -1;
+                er.failed_type = td;
+                er.structure_ptr = sptr;
+            } else {
+                er.encoded = cb_key.computed_size;
+                er.failed_type = 0;
+                er.structure_ptr = 0;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+
+    case ATS_RANDOM:
+        errno = ENOENT; /* Randomization doesn't make sense on output. */
+        ASN__ENCODE_FAILED;
+
+    case ATS_BER:
+        /* BER is a superset of DER. */
+        /* Fall through. */
+    case ATS_DER:
+        if(td->op->der_encoder) {
+            er = der_encode(td, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->der_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* DER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+    case ATS_CER:
+        errno = ENOENT; /* Transfer syntax is not defined for any type. */
+        ASN__ENCODE_FAILED;
+
+#ifdef  ASN_DISABLE_OER_SUPPORT
+    case ATS_BASIC_OER:
+    case ATS_CANONICAL_OER:
+        errno = ENOENT; /* PER is not defined. */
+        ASN__ENCODE_FAILED;
+        break;
+#else /* ASN_DISABLE_OER_SUPPORT */
+    case ATS_BASIC_OER:
+        /* CANONICAL-OER is a superset of BASIC-OER. */
+        /* Fall through. */
+    case ATS_CANONICAL_OER:
+        if(td->op->oer_encoder) {
+            er = oer_encode(td, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->oer_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* OER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+#endif /* ASN_DISABLE_OER_SUPPORT */
+
+#ifdef  ASN_DISABLE_PER_SUPPORT
+    case ATS_UNALIGNED_BASIC_PER:
+    case ATS_UNALIGNED_CANONICAL_PER:
+    case ATS_ALIGNED_BASIC_PER:
+    case ATS_ALIGNED_CANONICAL_PER:
+        errno = ENOENT; /* PER is not defined. */
+        ASN__ENCODE_FAILED;
+        break;
+#else /* ASN_DISABLE_PER_SUPPORT */
+    case ATS_UNALIGNED_BASIC_PER:
+        /* CANONICAL-UPER is a superset of BASIC-UPER. */
+        /* Fall through. */
+    case ATS_UNALIGNED_CANONICAL_PER:
+        if(td->op->uper_encoder) {
+            er = uper_encode(td, 0, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->uper_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* UPER is not defined for this type. */
+                }
+            } else {
+                ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+                if(er.encoded == 0) {
+                    /* Enforce "Complete Encoding" of X.691 #11.1 */
+                    if(callback("\0", 1, callback_key) < 0) {
+                        errno = EBADF;
+                        ASN__ENCODE_FAILED;
+                    }
+                    er.encoded = 8; /* Exactly 8 zero bits is added. */
+                }
+                /* Convert bits into bytes */
+                er.encoded = (er.encoded + 7) >> 3;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+    case ATS_ALIGNED_BASIC_PER:
+        /* CANONICAL-APER is a superset of BASIC-APER. */
+        /* Fall through. */
+    case ATS_ALIGNED_CANONICAL_PER:
+        if(td->op->aper_encoder) {
+            er = aper_encode(td, 0, sptr, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->aper_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* APER is not defined for this type. */
+                }
+            } else {
+                ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+                if(er.encoded == 0) {
+                    /* Enforce "Complete Encoding" of X.691 #11.1 */
+                    if(callback("\0", 1, callback_key) < 0) {
+                        errno = EBADF;
+                        ASN__ENCODE_FAILED;
+                    }
+                    er.encoded = 8; /* Exactly 8 zero bits is added. */
+                }
+                /* Convert bits into bytes */
+                er.encoded = (er.encoded + 7) >> 3;
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+    case ATS_BASIC_XER:
+        /* CANONICAL-XER is a superset of BASIC-XER. */
+        xer_flags &= ~XER_F_CANONICAL;
+        xer_flags |= XER_F_BASIC;
+        /* Fall through. */
+    case ATS_CANONICAL_XER:
+        if(td->op->xer_encoder) {
+            er = xer_encode(td, sptr, xer_flags, callback, callback_key);
+            if(er.encoded == -1) {
+                if(er.failed_type && er.failed_type->op->xer_encoder) {
+                    errno = EBADF;  /* Structure has incorrect form. */
+                } else {
+                    errno = ENOENT; /* XER is not defined for this type. */
+                }
+            }
+        } else {
+            errno = ENOENT; /* Transfer syntax is not defined for this type. */
+            ASN__ENCODE_FAILED;
+        }
+        break;
+
+    default:
+        errno = ENOENT;
+        ASN__ENCODE_FAILED;
+    }
+
+    return er;
+}
+
+asn_dec_rval_t
+asn_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           enum asn_transfer_syntax syntax, const asn_TYPE_descriptor_t *td,
+           void **sptr, const void *buffer, size_t size) {
+    if(!td || !td->op || !sptr || (size && !buffer)) {
+        ASN__DECODE_FAILED;
+    }
+
+    switch(syntax) {
+    case ATS_CER:
+    case ATS_NONSTANDARD_PLAINTEXT:
+    default:
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+
+    case ATS_RANDOM:
+        if(!td->op->random_fill) {
+            ASN__DECODE_FAILED;
+        } else {
+            if(asn_random_fill(td, sptr, 16000) == 0) {
+                asn_dec_rval_t ret = {RC_OK, 0};
+                return ret;
+            } else {
+                ASN__DECODE_FAILED;
+            }
+        }
+        break;
+
+    case ATS_DER:
+    case ATS_BER:
+        return ber_decode(opt_codec_ctx, td, sptr, buffer, size);
+
+    case ATS_BASIC_OER:
+    case ATS_CANONICAL_OER:
+#ifdef  ASN_DISABLE_OER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return oer_decode(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_UNALIGNED_BASIC_PER:
+    case ATS_UNALIGNED_CANONICAL_PER:
+#ifdef  ASN_DISABLE_PER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return uper_decode_complete(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_ALIGNED_BASIC_PER:
+    case ATS_ALIGNED_CANONICAL_PER:
+#ifdef  ASN_DISABLE_PER_SUPPORT
+        errno = ENOENT;
+        ASN__DECODE_FAILED;
+#else
+        return aper_decode_complete(opt_codec_ctx, td, sptr, buffer, size);
+#endif
+
+    case ATS_BASIC_XER:
+    case ATS_CANONICAL_XER:
+        return xer_decode(opt_codec_ctx, td, sptr, buffer, size);
+    }
+}
+
diff --git a/skeletons/asn_application.h b/skeletons/asn_application.h
new file mode 100644 (file)
index 0000000..034f646
--- /dev/null
@@ -0,0 +1,171 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Application-level ASN.1 callbacks.
+ */
+#ifndef        ASN_APPLICATION_H
+#define        ASN_APPLICATION_H
+
+#include "asn_system.h"                /* for platform-dependent types */
+#include "asn_codecs.h"                /* for ASN.1 codecs specifics */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A selection of ASN.1 Transfer Syntaxes to use with generalized
+ * encoders and decoders declared further in this .h file.
+ */
+enum asn_transfer_syntax {
+    /* Avoid appearance of a default transfer syntax. */
+    ATS_INVALID = 0,
+    /* Plaintext output (not conforming to any standard), for debugging. */
+    ATS_NONSTANDARD_PLAINTEXT,
+    /* Returns a randomly generated structure. */
+    ATS_RANDOM,
+    /*
+     * X.690:
+     * BER: Basic Encoding Rules.
+     * DER: Distinguished Encoding Rules.
+     * CER: Canonical Encoding Rules.
+     * DER and CER are more strict variants of BER.
+     */
+    ATS_BER,
+    ATS_DER,
+    ATS_CER, /* Only decoding is supported */
+    /*
+     * X.696:
+     * OER: Octet Encoding Rules.
+     * CANONICAL-OER is a more strict variant of BASIC-OER.
+     */
+    ATS_BASIC_OER,
+    ATS_CANONICAL_OER,
+    /*
+     * X.691:
+     * PER: Packed Encoding Rules.
+     * CANONICAL-PER is a more strict variant of BASIC-PER.
+     * NOTE: Produces or consumes a complete encoding (X.691 (08/2015) #11.1).
+     */
+    ATS_UNALIGNED_BASIC_PER,
+    ATS_UNALIGNED_CANONICAL_PER,
+    ATS_ALIGNED_BASIC_PER,
+    ATS_ALIGNED_CANONICAL_PER,
+    /*
+     * X.693:
+     * XER: XML Encoding Rules.
+     * CANONICAL-XER is a more strict variant of BASIC-XER.
+     */
+    ATS_BASIC_XER,
+    ATS_CANONICAL_XER
+};
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * RETURN VALUES:
+ * The (.encoded) field of the return value is REDEFINED to mean the following:
+ * >=0: The computed size of the encoded data. Can exceed the (buffer_size).
+ *  -1: Error encoding the structure. See the error code in (errno):
+ *      EINVAL: Incorrect parameters to the function, such as NULLs.
+ *      ENOENT: Encoding transfer syntax is not defined (for this type).
+ *      EBADF:  The structure has invalid form or content constraint failed.
+ *      The (.failed_type) and (.structure_ptr) MIGHT be set to the appropriate
+ *      values at the place of failure, if at all possible.
+ * WARNING: The (.encoded) field of the return value can exceed the buffer_size.
+ * This is similar to snprintf(3) contract which might return values
+ * greater than the buffer size.
+ */
+asn_enc_rval_t asn_encode_to_buffer(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode, void *buffer, size_t buffer_size);
+
+/*
+ * A variant of asn_encode_to_buffer() with automatically allocated buffer.
+ * RETURN VALUES:
+ * On success, returns a newly allocated (.buffer) containing the whole message.
+ * The message size is returned in (.result.encoded).
+ * On failure:
+ *  (.buffer) is NULL,
+ *  (.result.encoded) as in asn_encode_to_buffer(),
+ *  The errno codes as in asn_encode_to_buffer(), plus the following:
+ *      ENOMEM: Memory allocation failed due to system or internal limits.
+ * The user is responsible for freeing the (.buffer).
+ */
+typedef struct asn_encode_to_new_buffer_result_s {
+    void *buffer;   /* NULL if failed to encode. */
+    asn_enc_rval_t result;
+} asn_encode_to_new_buffer_result_t;
+asn_encode_to_new_buffer_result_t asn_encode_to_new_buffer(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode);
+
+
+/*
+ * Generic type of an application-defined callback to return various
+ * types of data to the application.
+ * EXPECTED RETURN VALUES:
+ *  -1: Failed to consume bytes. Abort the mission.
+ * Non-negative return values indicate success, and ignored.
+ */
+typedef int(asn_app_consume_bytes_f)(const void *buffer, size_t size,
+                                     void *application_specific_key);
+
+
+/*
+ * A generic encoder for any supported transfer syntax.
+ * Returns the comprehensive encoding result descriptor (see asn_codecs.h).
+ * RETURN VALUES:
+ * The negative (.encoded) field of the return values is accompanied with the
+ * following error codes (errno):
+ *      EINVAL: Incorrect parameters to the function, such as NULLs.
+ *      ENOENT: Encoding transfer syntax is not defined (for this type).
+ *      EBADF:  The structure has invalid form or content constraint failed.
+ *      EIO:    The (callback) has returned negative value during encoding.
+ */
+asn_enc_rval_t asn_encode(
+    const asn_codec_ctx_t *opt_codec_parameters, /* See asn_codecs.h */
+    enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_encode,
+    const void *structure_to_encode,
+    asn_app_consume_bytes_f *callback, void *callback_key);
+
+
+/*
+ * A generic decoder for any supported transfer syntax.
+ */
+asn_dec_rval_t asn_decode(
+    const asn_codec_ctx_t *opt_codec_parameters, enum asn_transfer_syntax,
+    const struct asn_TYPE_descriptor_s *type_to_decode,
+    void **structure_ptr, /* Pointer to a target structure's pointer */
+    const void *buffer,   /* Data to be decoded */
+    size_t size           /* Size of that buffer */
+);
+
+
+/*
+ * A callback of this type is called whenever constraint validation fails
+ * on some ASN.1 type. See "constraints.h" for more details on constraint
+ * validation.
+ * This callback specifies a descriptor of the ASN.1 type which failed
+ * the constraint check, as well as human readable message on what
+ * particular constraint has failed.
+ */
+typedef void (asn_app_constraint_failed_f)(void *application_specific_key,
+       const struct asn_TYPE_descriptor_s *type_descriptor_which_failed,
+       const void *structure_which_failed_ptr,
+       const char *error_message_format, ...) CC_PRINTFLIKE(4, 5);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "constr_TYPE.h"       /* for asn_TYPE_descriptor_t */
+
+#endif /* ASN_APPLICATION_H */
diff --git a/skeletons/asn_bit_data.c b/skeletons/asn_bit_data.c
new file mode 100644 (file)
index 0000000..fe4b89b
--- /dev/null
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <asn_internal.h>
+#include <asn_bit_data.h>
+
+/*
+ * Create a contiguous non-refillable bit data structure.
+ * Can be freed by FREEMEM().
+ */
+asn_bit_data_t *
+asn_bit_data_new_contiguous(const void *data, size_t size_bits) {
+    size_t size_bytes = (size_bits + 7) / 8;
+    asn_bit_data_t *pd;
+    uint8_t *bytes;
+
+    /* Get the extensions map */
+    pd = CALLOC(1, sizeof(*pd) + size_bytes + 1);
+    if(!pd) {
+        return NULL;
+    }
+    bytes = (void *)(((char *)pd) + sizeof(*pd));
+    memcpy(bytes, data, size_bytes);
+    bytes[size_bytes] = 0;
+    pd->buffer = bytes;
+    pd->nboff = 0;
+    pd->nbits = size_bits;
+
+    return pd;
+}
+
+
+char *
+asn_bit_data_string(asn_bit_data_t *pd) {
+       static char buf[2][32];
+       static int n;
+       n = (n+1) % 2;
+    snprintf(buf[n], sizeof(buf[n]),
+             "{m=%" ASN_PRI_SIZE " span %" ASN_PRI_SIZE "[%" ASN_PRI_SIZE
+             "..%" ASN_PRI_SIZE "] (%" ASN_PRI_SIZE ")}",
+             pd->moved, ((uintptr_t)(pd->buffer) & 0xf), pd->nboff, pd->nbits,
+             pd->nbits - pd->nboff);
+    return buf[n];
+}
+
+void
+asn_get_undo(asn_bit_data_t *pd, int nbits) {
+       if((ssize_t)pd->nboff < nbits) {
+               assert((ssize_t)pd->nboff < nbits);
+       } else {
+               pd->nboff -= nbits;
+               pd->moved -= nbits;
+       }
+}
+
+/*
+ * Extract a small number of bits (<= 31) from the specified PER data pointer.
+ */
+int32_t
+asn_get_few_bits(asn_bit_data_t *pd, int nbits) {
+       size_t off;     /* Next after last bit offset */
+       ssize_t nleft;  /* Number of bits left in this stream */
+       uint32_t accum;
+       const uint8_t *buf;
+
+       if(nbits < 0)
+               return -1;
+
+       nleft = pd->nbits - pd->nboff;
+       if(nbits > nleft) {
+               int32_t tailv, vhead;
+               if(!pd->refill || nbits > 31) return -1;
+               /* Accumulate unused bytes before refill */
+               ASN_DEBUG("Obtain the rest %d bits (want %d)",
+                       (int)nleft, (int)nbits);
+               tailv = asn_get_few_bits(pd, nleft);
+               if(tailv < 0) return -1;
+               /* Refill (replace pd contents with new data) */
+               if(pd->refill(pd))
+                       return -1;
+               nbits -= nleft;
+               vhead = asn_get_few_bits(pd, nbits);
+               /* Combine the rest of previous pd with the head of new one */
+               tailv = (tailv << nbits) | vhead;  /* Could == -1 */
+               return tailv;
+       }
+
+       /*
+        * Normalize position indicator.
+        */
+       if(pd->nboff >= 8) {
+               pd->buffer += (pd->nboff >> 3);
+               pd->nbits  -= (pd->nboff & ~0x07);
+               pd->nboff  &= 0x07;
+       }
+       pd->moved += nbits;
+       pd->nboff += nbits;
+       off = pd->nboff;
+       buf = pd->buffer;
+
+       /*
+        * Extract specified number of bits.
+        */
+       if(off <= 8)
+               accum = nbits ? (buf[0]) >> (8 - off) : 0;
+       else if(off <= 16)
+               accum = ((buf[0] << 8) + buf[1]) >> (16 - off);
+       else if(off <= 24)
+               accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off);
+       else if(off <= 31)
+               accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16)
+                       + (buf[2] << 8) + (buf[3])) >> (32 - off);
+       else if(nbits <= 31) {
+               asn_bit_data_t tpd = *pd;
+               /* Here are we with our 31-bits limit plus 1..7 bits offset. */
+               asn_get_undo(&tpd, nbits);
+               /* The number of available bits in the stream allow
+                * for the following operations to take place without
+                * invoking the ->refill() function */
+               accum  = asn_get_few_bits(&tpd, nbits - 24) << 24;
+               accum |= asn_get_few_bits(&tpd, 24);
+       } else {
+               asn_get_undo(pd, nbits);
+               return -1;
+       }
+
+       accum &= (((uint32_t)1 << nbits) - 1);
+
+       ASN_DEBUG("  [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]",
+               (int)nbits, (int)nleft,
+               (int)pd->moved,
+               (((long)pd->buffer) & 0xf),
+               (int)pd->nboff, (int)pd->nbits,
+               ((pd->buffer != NULL)?pd->buffer[0]:0),
+               (int)(pd->nbits - pd->nboff),
+               (int)accum);
+
+       return accum;
+}
+
+/*
+ * Extract a large number of bits from the specified PER data pointer.
+ */
+int
+asn_get_many_bits(asn_bit_data_t *pd, uint8_t *dst, int alright, int nbits) {
+       int32_t value;
+
+       if(alright && (nbits & 7)) {
+               /* Perform right alignment of a first few bits */
+               value = asn_get_few_bits(pd, nbits & 0x07);
+               if(value < 0) return -1;
+               *dst++ = value; /* value is already right-aligned */
+               nbits &= ~7;
+       }
+
+       while(nbits) {
+               if(nbits >= 24) {
+                       value = asn_get_few_bits(pd, 24);
+                       if(value < 0) return -1;
+                       *(dst++) = value >> 16;
+                       *(dst++) = value >> 8;
+                       *(dst++) = value;
+                       nbits -= 24;
+               } else {
+                       value = asn_get_few_bits(pd, nbits);
+                       if(value < 0) return -1;
+                       if(nbits & 7) { /* implies left alignment */
+                               value <<= 8 - (nbits & 7),
+                               nbits += 8 - (nbits & 7);
+                               if(nbits > 24)
+                                       *dst++ = value >> 24;
+                       }
+                       if(nbits > 16)
+                               *dst++ = value >> 16;
+                       if(nbits > 8)
+                               *dst++ = value >> 8;
+                       *dst++ = value;
+                       break;
+               }
+       }
+
+       return 0;
+}
+
+/*
+ * Put a small number of bits (<= 31).
+ */
+int
+asn_put_few_bits(asn_bit_outp_t *po, uint32_t bits, int obits) {
+       size_t off;     /* Next after last bit offset */
+       size_t omsk;    /* Existing last byte meaningful bits mask */
+       uint8_t *buf;
+
+       if(obits <= 0 || obits >= 32) return obits ? -1 : 0;
+
+       ASN_DEBUG("[PER put %d bits %x to %p+%d bits]",
+                       obits, (int)bits, (void *)po->buffer, (int)po->nboff);
+
+       /*
+        * Normalize position indicator.
+        */
+       if(po->nboff >= 8) {
+               po->buffer += (po->nboff >> 3);
+               po->nbits  -= (po->nboff & ~0x07);
+               po->nboff  &= 0x07;
+       }
+
+       /*
+        * Flush whole-bytes output, if necessary.
+        */
+       if(po->nboff + obits > po->nbits) {
+               size_t complete_bytes;
+               if(!po->buffer) po->buffer = po->tmpspace;
+               complete_bytes = (po->buffer - po->tmpspace);
+               ASN_DEBUG("[PER output %ld complete + %ld]",
+                       (long)complete_bytes, (long)po->flushed_bytes);
+               if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0)
+                       return -1;
+               if(po->nboff)
+                       po->tmpspace[0] = po->buffer[0];
+               po->buffer = po->tmpspace;
+               po->nbits = 8 * sizeof(po->tmpspace);
+               po->flushed_bytes += complete_bytes;
+       }
+
+       /*
+        * Now, due to sizeof(tmpspace), we are guaranteed large enough space.
+        */
+       buf = po->buffer;
+       omsk = ~((1 << (8 - po->nboff)) - 1);
+       off = (po->nboff + obits);
+
+       /* Clear data of debris before meaningful bits */
+       bits &= (((uint32_t)1 << obits) - 1);
+
+       ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits,
+               (int)bits, (int)bits,
+               (int)po->nboff, (int)off,
+               buf[0], (int)(omsk&0xff),
+               (int)(buf[0] & omsk));
+
+       if(off <= 8)    /* Completely within 1 byte */
+               po->nboff = off,
+               bits <<= (8 - off),
+               buf[0] = (buf[0] & omsk) | bits;
+       else if(off <= 16)
+               po->nboff = off,
+               bits <<= (16 - off),
+               buf[0] = (buf[0] & omsk) | (bits >> 8),
+               buf[1] = bits;
+       else if(off <= 24)
+               po->nboff = off,
+               bits <<= (24 - off),
+               buf[0] = (buf[0] & omsk) | (bits >> 16),
+               buf[1] = bits >> 8,
+               buf[2] = bits;
+       else if(off <= 31)
+               po->nboff = off,
+               bits <<= (32 - off),
+               buf[0] = (buf[0] & omsk) | (bits >> 24),
+               buf[1] = bits >> 16,
+               buf[2] = bits >> 8,
+               buf[3] = bits;
+       else {
+               if(asn_put_few_bits(po, bits >> (obits - 24), 24)) return -1;
+               if(asn_put_few_bits(po, bits, obits - 24)) return -1;
+       }
+
+       ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]",
+               (int)bits, (int)bits, buf[0],
+               (long)(po->buffer - po->tmpspace));
+
+       return 0;
+}
+
+
+/*
+ * Output a large number of bits.
+ */
+int
+asn_put_many_bits(asn_bit_outp_t *po, const uint8_t *src, int nbits) {
+
+       while(nbits) {
+               uint32_t value;
+
+               if(nbits >= 24) {
+                       value = (src[0] << 16) | (src[1] << 8) | src[2];
+                       src += 3;
+                       nbits -= 24;
+                       if(asn_put_few_bits(po, value, 24))
+                               return -1;
+               } else {
+                       value = src[0];
+                       if(nbits > 8)
+                               value = (value << 8) | src[1];
+                       if(nbits > 16)
+                               value = (value << 8) | src[2];
+                       if(nbits & 0x07)
+                               value >>= (8 - (nbits & 0x07));
+                       if(asn_put_few_bits(po, value, nbits))
+                               return -1;
+                       break;
+               }
+       }
+
+       return 0;
+}
+
+
+int
+asn_put_aligned_flush(asn_bit_outp_t *po) {
+    uint32_t unused_bits = (0x7 & (8 - (po->nboff & 0x07)));
+    size_t complete_bytes =
+        (po->buffer ? po->buffer - po->tmpspace : 0) + ((po->nboff + 7) >> 3);
+
+    if(unused_bits) {
+        po->buffer[po->nboff >> 3] &= ~0u << unused_bits;
+    }
+
+    if(po->output(po->tmpspace, complete_bytes, po->op_key) < 0) {
+        return -1;
+    } else {
+        po->buffer = po->tmpspace;
+        po->nboff = 0;
+        po->nbits = 8 * sizeof(po->tmpspace);
+        po->flushed_bytes += complete_bytes;
+        return 0;
+    }
+}
+
diff --git a/skeletons/asn_bit_data.h b/skeletons/asn_bit_data.h
new file mode 100644 (file)
index 0000000..59de7af
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_BIT_DATA
+#define        ASN_BIT_DATA
+
+#include <asn_system.h>                /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * This structure describes a position inside an incoming PER bit stream.
+ */
+typedef struct asn_bit_data_s {
+  const uint8_t *buffer;  /* Pointer to the octet stream */
+         size_t  nboff;   /* Bit offset to the meaningful bit */
+         size_t  nbits;   /* Number of bits in the stream */
+         size_t  moved;   /* Number of bits moved through this bit stream */
+  int (*refill)(struct asn_bit_data_s *);
+  void *refill_key;
+} asn_bit_data_t;
+
+/*
+ * Create a contiguous non-refillable bit data structure.
+ * Can be freed by FREEMEM().
+ */
+asn_bit_data_t *asn_bit_data_new_contiguous(const void *data, size_t size_bits);
+
+/*
+ * Extract a small number of bits (<= 31) from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int32_t asn_get_few_bits(asn_bit_data_t *, int get_nbits);
+
+/* Undo the immediately preceeding "get_few_bits" operation */
+void asn_get_undo(asn_bit_data_t *, int get_nbits);
+
+/*
+ * Extract a large number of bits from the specified PER data pointer.
+ * This function returns -1 if the specified number of bits could not be
+ * extracted due to EOD or other conditions.
+ */
+int asn_get_many_bits(asn_bit_data_t *, uint8_t *dst, int right_align,
+                       int get_nbits);
+
+/* Non-thread-safe debugging function, don't use it */
+char *asn_bit_data_string(asn_bit_data_t *);
+
+/*
+ * This structure supports forming bit output.
+ */
+typedef struct asn_bit_outp_s {
+       uint8_t *buffer;        /* Pointer into the (tmpspace) */
+       size_t nboff;           /* Bit offset to the meaningful bit */
+       size_t nbits;           /* Number of bits left in (tmpspace) */
+       uint8_t tmpspace[32];   /* Preliminary storage to hold data */
+       int (*output)(const void *data, size_t size, void *op_key);
+       void *op_key;           /* Key for (output) data callback */
+       size_t flushed_bytes;   /* Bytes already flushed through (output) */
+} asn_bit_outp_t;
+
+/* Output a small number of bits (<= 31) */
+int asn_put_few_bits(asn_bit_outp_t *, uint32_t bits, int obits);
+
+/* Output a large number of bits */
+int asn_put_many_bits(asn_bit_outp_t *, const uint8_t *src, int put_nbits);
+
+/*
+ * Flush whole bytes (0 or more) through (outper) member.
+ * The least significant bits which are not used are guaranteed to be set to 0.
+ * Returns -1 if callback returns -1. Otherwise, 0.
+ */
+int asn_put_aligned_flush(asn_bit_outp_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_BIT_DATA */
diff --git a/skeletons/asn_codecs.h b/skeletons/asn_codecs.h
new file mode 100644 (file)
index 0000000..e75c270
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_CODECS_H
+#define        ASN_CODECS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * This structure defines a set of parameters that may be passed
+ * to every ASN.1 encoder or decoder function.
+ * WARNING: if max_stack_size member is set, and you are calling the
+ *   function pointers of the asn_TYPE_descriptor_t directly,
+ *   this structure must be ALLOCATED ON THE STACK!
+ *   If you can't always satisfy this requirement, use ber_decode(),
+ *   xer_decode() and uper_decode() functions instead.
+ */
+typedef struct asn_codec_ctx_s {
+       /*
+        * Limit the decoder routines to use no (much) more stack than a given
+        * number of bytes. Most of decoders are stack-based, and this
+        * would protect against stack overflows if the number of nested
+        * encodings is high.
+        * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based,
+        * and are safe from this kind of overflow.
+        * A value from getrlimit(RLIMIT_STACK) may be used to initialize
+        * this variable. Be careful in multithreaded environments, as the
+        * stack size is rather limited.
+        */
+       size_t  max_stack_size; /* 0 disables stack bounds checking */
+} asn_codec_ctx_t;
+
+/*
+ * Type of the return value of the encoding functions (der_encode, xer_encode).
+ */
+typedef struct asn_enc_rval_s {
+       /*
+        * Number of bytes encoded.
+        * -1 indicates failure to encode the structure.
+        * In this case, the members below this one are meaningful.
+        */
+       ssize_t encoded;
+
+       /*
+        * Members meaningful when (encoded == -1), for post mortem analysis.
+        */
+
+       /* Type which cannot be encoded */
+       const struct asn_TYPE_descriptor_s *failed_type;
+
+       /* Pointer to the structure of that type */
+       const void *structure_ptr;
+} asn_enc_rval_t;
+#define        ASN__ENCODE_FAILED do {                                 \
+       asn_enc_rval_t tmp_error;                               \
+       tmp_error.encoded = -1;                                 \
+       tmp_error.failed_type = td;                             \
+       tmp_error.structure_ptr = sptr;                         \
+       ASN_DEBUG("Failed to encode element %s", td ? td->name : "");   \
+       return tmp_error;                                       \
+} while(0)
+#define        ASN__ENCODED_OK(rval) do {                              \
+       rval.structure_ptr = 0;                                 \
+       rval.failed_type = 0;                                   \
+       return rval;                                            \
+} while(0)
+
+/*
+ * Type of the return value of the decoding functions (ber_decode, xer_decode)
+ * 
+ * Please note that the number of consumed bytes is ALWAYS meaningful,
+ * even if code==RC_FAIL. This is to indicate the number of successfully
+ * decoded bytes, hence providing a possibility to fail with more diagnostics
+ * (i.e., print the offending remainder of the buffer).
+ */
+enum asn_dec_rval_code_e {
+       RC_OK,          /* Decoded successfully */
+       RC_WMORE,       /* More data expected, call again */
+       RC_FAIL         /* Failure to decode data */
+};
+typedef struct asn_dec_rval_s {
+       enum asn_dec_rval_code_e code;  /* Result code */
+       size_t consumed;                /* Number of bytes consumed */
+} asn_dec_rval_t;
+#define        ASN__DECODE_FAILED do {                                 \
+       asn_dec_rval_t tmp_error;                               \
+       tmp_error.code = RC_FAIL;                               \
+       tmp_error.consumed = 0;                                 \
+       ASN_DEBUG("Failed to decode element %s", td ? td->name : "");   \
+       return tmp_error;                                       \
+} while(0)
+#define        ASN__DECODE_STARVED do {                                \
+       asn_dec_rval_t tmp_error;                               \
+       tmp_error.code = RC_WMORE;                              \
+       tmp_error.consumed = 0;                                 \
+       return tmp_error;                                       \
+} while(0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_CODECS_H */
diff --git a/skeletons/asn_codecs_prim.c b/skeletons/asn_codecs_prim.c
new file mode 100644 (file)
index 0000000..fc24247
--- /dev/null
@@ -0,0 +1,317 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+#include <errno.h>
+
+/*
+ * Decode an always-primitive type.
+ */
+asn_dec_rval_t
+ber_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buf_ptr, size_t size, int tag_mode) {
+    ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr;
+       asn_dec_rval_t rval;
+       ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */
+
+       /*
+        * If the structure is not there, allocate it.
+        */
+       if(st == NULL) {
+               st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st));
+               if(st == NULL) ASN__DECODE_FAILED;
+               *sptr = (void *)st;
+       }
+
+       ASN_DEBUG("Decoding %s as plain primitive (tm=%d)",
+               td->name, tag_mode);
+
+       /*
+        * Check tags and extract value length.
+        */
+       rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size,
+                       tag_mode, 0, &length, 0);
+       if(rval.code != RC_OK)
+               return rval;
+
+       ASN_DEBUG("%s length is %d bytes", td->name, (int)length);
+
+       /*
+        * Make sure we have this length.
+        */
+       buf_ptr = ((const char *)buf_ptr) + rval.consumed;
+       size -= rval.consumed;
+       if(length > (ber_tlv_len_t)size) {
+               rval.code = RC_WMORE;
+               rval.consumed = 0;
+               return rval;
+       }
+
+       st->size = (int)length;
+       /* The following better be optimized away. */
+       if(sizeof(st->size) != sizeof(length)
+                       && (ber_tlv_len_t)st->size != length) {
+               st->size = 0;
+               ASN__DECODE_FAILED;
+       }
+
+       st->buf = (uint8_t *)MALLOC(length + 1);
+       if(!st->buf) {
+               st->size = 0;
+               ASN__DECODE_FAILED;
+       }
+
+       memcpy(st->buf, buf_ptr, length);
+       st->buf[length] = '\0';         /* Just in case */
+
+       rval.code = RC_OK;
+       rval.consumed += length;
+
+       ASN_DEBUG("Took %ld/%ld bytes to encode %s",
+               (long)rval.consumed,
+               (long)length, td->name);
+
+       return rval;
+}
+
+/*
+ * Encode an always-primitive type using DER.
+ */
+asn_enc_rval_t
+der_encode_primitive(const asn_TYPE_descriptor_t *td, const void *sptr,
+                     int tag_mode, ber_tlv_tag_t tag,
+                     asn_app_consume_bytes_f *cb, void *app_key) {
+       asn_enc_rval_t erval = {0,0,0};
+       const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr;
+
+       ASN_DEBUG("%s %s as a primitive type (tm=%d)",
+               cb?"Encoding":"Estimating", td->name, tag_mode);
+
+       erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag,
+               cb, app_key);
+       ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded);
+       if(erval.encoded == -1) {
+               erval.failed_type = td;
+               erval.structure_ptr = sptr;
+               return erval;
+       }
+
+       if(cb && st->buf) {
+               if(cb(st->buf, st->size, app_key) < 0) {
+                       erval.encoded = -1;
+                       erval.failed_type = td;
+                       erval.structure_ptr = sptr;
+                       return erval;
+               }
+       } else {
+               assert(st->buf || st->size == 0);
+       }
+
+       erval.encoded += st->size;
+       ASN__ENCODED_OK(erval);
+}
+
+void
+ASN__PRIMITIVE_TYPE_free(const asn_TYPE_descriptor_t *td, void *sptr,
+                         enum asn_struct_free_method method) {
+    ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr;
+
+       if(!td || !sptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as a primitive type", td->name);
+
+       if(st->buf)
+               FREEMEM(st->buf);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(sptr, 0, sizeof(ASN__PRIMITIVE_TYPE_t));
+        break;
+    }
+}
+
+
+/*
+ * Local internal type passed around as an argument.
+ */
+struct xdp_arg_s {
+    const asn_TYPE_descriptor_t *type_descriptor;
+    void *struct_key;
+       xer_primitive_body_decoder_f *prim_body_decoder;
+       int decoded_something;
+       int want_more;
+};
+
+/*
+ * Since some kinds of primitive values can be encoded using value-specific
+ * tags (<MINUS-INFINITY>, <enum-element>, etc), the primitive decoder must
+ * be supplied with such tags to parse them as needed.
+ */
+static int
+xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) {
+       struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
+       enum xer_pbd_rval bret;
+
+       /*
+        * The chunk_buf is guaranteed to start at '<'.
+        */
+       assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c);
+
+       /*
+        * Decoding was performed once already. Prohibit doing it again.
+        */
+       if(arg->decoded_something)
+               return -1;
+
+       bret = arg->prim_body_decoder(arg->type_descriptor,
+               arg->struct_key, chunk_buf, chunk_size);
+       switch(bret) {
+       case XPBD_SYSTEM_FAILURE:
+       case XPBD_DECODER_LIMIT:
+       case XPBD_BROKEN_ENCODING:
+               break;
+       case XPBD_BODY_CONSUMED:
+               /* Tag decoded successfully */
+               arg->decoded_something = 1;
+               /* Fall through */
+       case XPBD_NOT_BODY_IGNORE:      /* Safe to proceed further */
+               return 0;
+       }
+
+       return -1;
+}
+
+static ssize_t
+xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) {
+       struct xdp_arg_s *arg = (struct xdp_arg_s *)key;
+       enum xer_pbd_rval bret;
+       size_t lead_wsp_size;
+
+       if(arg->decoded_something) {
+               if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) {
+                       /*
+                        * Example:
+                        * "<INTEGER>123<!--/--> </INTEGER>"
+                        *                      ^- chunk_buf position.
+                        */
+                       return chunk_size;
+               }
+               /*
+                * Decoding was done once already. Prohibit doing it again.
+                */
+               return -1;
+       }
+
+       if(!have_more) {
+               /*
+                * If we've received something like "1", we can't really
+                * tell whether it is really `1` or `123`, until we know
+                * that there is no more data coming.
+                * The have_more argument will be set to 1 once something
+                * like this is available to the caller of this callback:
+                * "1<tag_start..."
+                */
+               arg->want_more = 1;
+               return -1;
+       }
+
+       lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size);
+       chunk_buf = (const char *)chunk_buf + lead_wsp_size;
+       chunk_size -= lead_wsp_size;
+
+       bret = arg->prim_body_decoder(arg->type_descriptor,
+               arg->struct_key, chunk_buf, chunk_size);
+       switch(bret) {
+       case XPBD_SYSTEM_FAILURE:
+       case XPBD_DECODER_LIMIT:
+       case XPBD_BROKEN_ENCODING:
+               break;
+       case XPBD_BODY_CONSUMED:
+               /* Tag decoded successfully */
+               arg->decoded_something = 1;
+               /* Fall through */
+       case XPBD_NOT_BODY_IGNORE:      /* Safe to proceed further */
+               return lead_wsp_size + chunk_size;
+       }
+
+       return -1;
+}
+
+
+asn_dec_rval_t
+xer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     size_t struct_size, const char *opt_mname,
+                     const void *buf_ptr, size_t size,
+                     xer_primitive_body_decoder_f *prim_body_decoder) {
+    const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+       asn_struct_ctx_t s_ctx;
+       struct xdp_arg_s s_arg;
+       asn_dec_rval_t rc;
+
+       /*
+        * Create the structure if does not exist.
+        */
+       if(!*sptr) {
+               *sptr = CALLOC(1, struct_size);
+               if(!*sptr) ASN__DECODE_FAILED;
+       }
+
+       memset(&s_ctx, 0, sizeof(s_ctx));
+       s_arg.type_descriptor = td;
+       s_arg.struct_key = *sptr;
+       s_arg.prim_body_decoder = prim_body_decoder;
+       s_arg.decoded_something = 0;
+       s_arg.want_more = 0;
+
+       rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg,
+               xml_tag, buf_ptr, size,
+               xer_decode__unexpected_tag, xer_decode__primitive_body);
+       switch(rc.code) {
+       case RC_OK:
+               if(!s_arg.decoded_something) {
+                       char ch;
+                       ASN_DEBUG("Primitive body is not recognized, "
+                               "supplying empty one");
+                       /*
+                        * Decoding opportunity has come and gone.
+                        * Where's the result?
+                        * Try to feed with empty body, see if it eats it.
+                        */
+                       if(prim_body_decoder(s_arg.type_descriptor,
+                               s_arg.struct_key, &ch, 0)
+                                       != XPBD_BODY_CONSUMED) {
+                               /*
+                                * This decoder does not like empty stuff.
+                                */
+                               ASN__DECODE_FAILED;
+                       }
+               }
+               break;
+       case RC_WMORE:
+               /*
+                * Redo the whole thing later.
+                * We don't have a context to save intermediate parsing state.
+                */
+               rc.consumed = 0;
+               break;
+       case RC_FAIL:
+               rc.consumed = 0;
+               if(s_arg.want_more)
+                       rc.code = RC_WMORE;
+               else
+                       ASN__DECODE_FAILED;
+               break;
+       }
+       return rc;
+}
+
diff --git a/skeletons/asn_codecs_prim.h b/skeletons/asn_codecs_prim.h
new file mode 100644 (file)
index 0000000..fbc5576
--- /dev/null
@@ -0,0 +1,51 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_CODECS_PRIM_H
+#define        ASN_CODECS_PRIM_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct ASN__PRIMITIVE_TYPE_s {
+    uint8_t *buf;   /* Buffer with consecutive primitive encoding bytes */
+    size_t size;    /* Size of the buffer */
+} ASN__PRIMITIVE_TYPE_t;       /* Do not use this type directly! */
+
+asn_struct_free_f ASN__PRIMITIVE_TYPE_free;
+ber_type_decoder_f ber_decode_primitive;
+der_type_encoder_f der_encode_primitive;
+
+/*
+ * A callback specification for the xer_decode_primitive() function below.
+ */
+enum xer_pbd_rval {
+    XPBD_SYSTEM_FAILURE,  /* System failure (memory shortage, etc) */
+    XPBD_DECODER_LIMIT,   /* Hit some decoder limitation or deficiency */
+    XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */
+    XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */
+    XPBD_BODY_CONSUMED    /* Body is recognized and consumed */
+};
+typedef enum xer_pbd_rval(xer_primitive_body_decoder_f)(
+    const asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf,
+    size_t chunk_size);
+
+/*
+ * Specific function to decode simple primitive types.
+ * Also see xer_decode_general() in xer_decoder.h
+ */
+asn_dec_rval_t xer_decode_primitive(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+    size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size,
+    xer_primitive_body_decoder_f *prim_body_decoder);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_CODECS_PRIM_H */
diff --git a/skeletons/asn_internal.c b/skeletons/asn_internal.c
new file mode 100644 (file)
index 0000000..1aff95f
--- /dev/null
@@ -0,0 +1,48 @@
+#include <asn_internal.h>
+
+ssize_t
+asn__format_to_callback(int (*cb)(const void *, size_t, void *key), void *key,
+                        const char *fmt, ...) {
+    char scratch[64];
+    char *buf = scratch;
+    size_t buf_size = sizeof(scratch);
+    int wrote;
+    int cb_ret;
+
+    do {
+        va_list args;
+        va_start(args, fmt);
+
+        wrote = vsnprintf(buf, buf_size, fmt, args);
+        if(wrote < (ssize_t)buf_size) {
+            if(wrote < 0) {
+                if(buf != scratch) FREEMEM(buf);
+               va_end(args);
+                return -1;
+            }
+            break;
+        }
+
+        buf_size <<= 1;
+        if(buf == scratch) {
+            buf = MALLOC(buf_size);
+            if(!buf) return -1;
+        } else {
+            void *p = REALLOC(buf, buf_size);
+            if(!p) {
+                FREEMEM(buf);
+                return -1;
+            }
+            buf = p;
+        }
+    } while(1);
+
+    cb_ret = cb(buf, wrote, key);
+    if(buf != scratch) FREEMEM(buf);
+    if(cb_ret < 0) {
+        return -1;
+    }
+
+    return wrote;
+}
+
diff --git a/skeletons/asn_internal.h b/skeletons/asn_internal.h
new file mode 100644 (file)
index 0000000..c4105ad
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Declarations internally useful for the ASN.1 support code.
+ */
+#ifndef        ASN_INTERNAL_H
+#define        ASN_INTERNAL_H
+#define __EXTENSIONS__          /* for Sun */
+
+#include "asn_application.h"   /* Application-visible API */
+
+#ifndef        __NO_ASSERT_H__         /* Include assert.h only for internal use. */
+#include <assert.h>            /* for assert() macro */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Environment version might be used to avoid running with the old library */
+#define        ASN1C_ENVIRONMENT_VERSION       923     /* Compile-time version */
+int get_asn1c_environment_version(void);       /* Run-time version */
+
+#define        CALLOC(nmemb, size)     calloc(nmemb, size)
+#define        MALLOC(size)            malloc(size)
+#define        REALLOC(oldptr, size)   realloc(oldptr, size)
+#define        FREEMEM(ptr)            free(ptr)
+
+#define        asn_debug_indent        0
+#define ASN_DEBUG_INDENT_ADD(i) do{}while(0)
+
+#ifdef  EMIT_ASN_DEBUG
+#warning "Use ASN_EMIT_DEBUG instead of EMIT_ASN_DEBUG"
+#define ASN_EMIT_DEBUG  EMIT_ASN_DEBUG
+#endif
+
+/*
+ * A macro for debugging the ASN.1 internals.
+ * You may enable or override it.
+ */
+#ifndef        ASN_DEBUG       /* If debugging code is not defined elsewhere... */
+#if    ASN_EMIT_DEBUG == 1     /* And it was asked to emit this code... */
+#if !defined(BELL_LABS) /* Bell Labs */
+  //#if __STDC_VERSION__ >= 199901L
+#ifdef ASN_THREAD_SAFE
+/* Thread safety requires sacrifice in output indentation:
+ * Retain empty definition of ASN_DEBUG_INDENT_ADD. */
+#else  /* !ASN_THREAD_SAFE */
+#undef  ASN_DEBUG_INDENT_ADD
+#undef  asn_debug_indent
+int asn_debug_indent;
+#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0)
+#endif /* ASN_THREAD_SAFE */
+#if defined(BELL_LABS) /* Bell Labs version */
+extern int logAsn1c(const char *filename, int linenumber, const char *format, ...);  
+#define        ASN_DEBUG(fmt, args...) do {                    \
+    (void) logAsn1c(__FILE__, __LINE__, fmt, ##args);  \
+  } while(0)
+#else  
+#define        ASN_DEBUG(fmt, args...) do {                    \
+               int adi = asn_debug_indent;             \
+               while(adi--) fprintf(stderr, " ");      \
+               fprintf(stderr, fmt, ##args);           \
+               fprintf(stderr, " (%s:%d)\n",           \
+                       __FILE__, __LINE__);            \
+       } while(0)
+#endif /* BELL_LABS */  
+#else  /* !C99 */
+void CC_PRINTFLIKE(1, 2) ASN_DEBUG_f(const char *fmt, ...);
+#define        ASN_DEBUG       ASN_DEBUG_f
+#endif /* C99 */
+#else  /* ASN_EMIT_DEBUG != 1 */
+#if __STDC_VERSION__ >= 199901L
+#define ASN_DEBUG(...) do{}while(0)
+#else   /* not C99 */
+static void CC_PRINTFLIKE(1, 2) ASN_DEBUG(const char *fmt, ...) { (void)fmt; }
+#endif  /* C99 or better */
+#endif /* ASN_EMIT_DEBUG */
+#endif /* ASN_DEBUG */
+
+/*
+ * Print to a callback.
+ * The callback is expected to return negative values on error.
+ * 0 and positive values are treated as success.
+ * RETURN VALUES:
+ *  -1: Failed to format or invoke the callback.
+ *  >0: Size of the data that got delivered to the callback.
+ */
+ssize_t CC_PRINTFLIKE(3, 4)
+asn__format_to_callback(
+    int (*callback)(const void *, size_t, void *key), void *key,
+    const char *fmt, ...);
+
+/*
+ * Invoke the application-supplied callback and fail, if something is wrong.
+ */
+#define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0)
+#define ASN__E_CALLBACK(size, foo) \
+    do {                           \
+        if(foo) goto cb_failed;    \
+        er.encoded += (size);      \
+    } while(0)
+#define ASN__CALLBACK(buf, size) ASN__E_CALLBACK(size, ASN__E_cbc(buf, size))
+#define ASN__CALLBACK2(buf1, size1, buf2, size2) \
+    ASN__E_CALLBACK((size1) + (size2),           \
+                    ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2))
+#define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3)          \
+    ASN__E_CALLBACK((size1) + (size2) + (size3),                       \
+                    ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2) \
+                        || ASN__E_cbc(buf3, size3))
+
+#define ASN__TEXT_INDENT(nl, level)                                          \
+    do {                                                                     \
+        int tmp_level = (level);                                             \
+        int tmp_nl = ((nl) != 0);                                            \
+        int tmp_i;                                                           \
+        if(tmp_nl) ASN__CALLBACK("\n", 1);                                   \
+        if(tmp_level < 0) tmp_level = 0;                                     \
+        for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) ASN__CALLBACK("    ", 4); \
+    } while(0)
+
+#define        _i_INDENT(nl)   do {                        \
+        int tmp_i;                                  \
+        if((nl) && cb("\n", 1, app_key) < 0)        \
+            return -1;                              \
+        for(tmp_i = 0; tmp_i < ilevel; tmp_i++)     \
+            if(cb("    ", 4, app_key) < 0)          \
+                return -1;                          \
+    } while(0)
+
+/*
+ * Check stack against overflow, if limit is set.
+ */
+#define        ASN__DEFAULT_STACK_MAX  (30000)
+static int CC_NOTUSED
+ASN__STACK_OVERFLOW_CHECK(const asn_codec_ctx_t *ctx) {
+       if(ctx && ctx->max_stack_size) {
+
+               /* ctx MUST be allocated on the stack */
+               ptrdiff_t usedstack = ((const char *)ctx - (const char *)&ctx);
+               if(usedstack > 0) usedstack = -usedstack; /* grows up! */
+
+               /* double negative required to avoid int wrap-around */
+               if(usedstack < -(ptrdiff_t)ctx->max_stack_size) {
+                       ASN_DEBUG("Stack limit %ld reached",
+                               (long)ctx->max_stack_size);
+                       return -1;
+               }
+       }
+       return 0;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_INTERNAL_H */
diff --git a/skeletons/asn_ioc.h b/skeletons/asn_ioc.h
new file mode 100644 (file)
index 0000000..7de210e
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Run-time support for Information Object Classes.
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_IOC_H
+#define        ASN_IOC_H
+
+#include <asn_system.h>                /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;
+struct asn_ioc_cell_s;
+
+/*
+ * X.681, #13
+ */
+typedef struct asn_ioc_set_s {
+    size_t rows_count;
+    size_t columns_count;
+    const struct asn_ioc_cell_s *rows;
+} asn_ioc_set_t;
+
+
+typedef struct asn_ioc_cell_s {
+    const char *field_name; /* Is equal to corresponding column_name */
+    enum {
+        aioc__undefined = 0,
+        aioc__value,
+        aioc__type,
+        aioc__open_type,
+    } cell_kind;
+    struct asn_TYPE_descriptor_s *type_descriptor;
+    const void *value_sptr;
+    struct {
+        size_t types_count;
+        struct {
+            unsigned choice_position;
+        } *types;
+    } open_type;
+} asn_ioc_cell_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN_IOC_H */
diff --git a/skeletons/asn_random_fill.c b/skeletons/asn_random_fill.c
new file mode 100644 (file)
index 0000000..819cf70
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_random_fill.h>
+#include <constr_TYPE.h>
+
+int
+asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+                size_t length) {
+
+    if(td && td->op->random_fill) {
+        asn_random_fill_result_t res =
+            td->op->random_fill(td, struct_ptr, 0, length);
+        return (res.code == ARFILL_OK) ? 0 : -1;
+    } else {
+        return -1;
+    }
+}
+
+static uintmax_t
+asn__intmax_range(intmax_t lb, intmax_t ub) {
+    assert(lb <= ub);
+    if((ub < 0) == (lb < 0)) {
+        return ub - lb;
+    } else if(lb < 0) {
+        return 1 + ((uintmax_t)ub + (uintmax_t)-(lb + 1));
+    } else {
+        assert(!"Unreachable");
+        return 0;
+    }
+}
+
+intmax_t
+asn_random_between(intmax_t lb, intmax_t rb) {
+    if(lb == rb) {
+        return lb;
+    } else {
+        const uintmax_t intmax_max = ((~(uintmax_t)0) >> 1);
+        uintmax_t range = asn__intmax_range(lb, rb);
+        uintmax_t value = 0;
+        uintmax_t got_entropy = 0;
+
+        assert(RAND_MAX > 0xffffff);    /* Seen 7ffffffd! */
+        assert(range < intmax_max);
+
+        for(; got_entropy < range;) {
+            got_entropy = (got_entropy << 24) | 0xffffff;
+            value = (value << 24) | (random() % 0xffffff);
+        }
+
+        return lb + (intmax_t)(value % (range + 1));
+    }
+}
diff --git a/skeletons/asn_random_fill.h b/skeletons/asn_random_fill.h
new file mode 100644 (file)
index 0000000..47f9b8a
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN_RANDOM_FILL
+#define        ASN_RANDOM_FILL
+
+/* Forward declarations */
+struct asn_TYPE_descriptor_s;
+struct asn_encoding_constraints_s;
+
+/*
+ * Initialize a structure with random data according to the type specification
+ * and optional member constraints.
+ * ARGUMENTS:
+ *  (max_length)        - See (approx_max_length_limit).
+ *  (memb_constraints)  - Member constraints, if exist.
+ *                        The type can be constrained differently according
+ *                        to PER and OER specifications, so we find a value
+ *                        at the intersection of these constraints.
+ * In case the return differs from ARFILL_OK, the (struct_ptr) contents
+ * and (current_length) value remain in their original state.
+ */
+typedef struct asn_random_fill_result_s {
+    enum {
+        ARFILL_FAILED = -1, /* System error (memory?) */
+        ARFILL_OK = 0,      /* Initialization succeeded */
+        ARFILL_SKIPPED = 1  /* Not done due to (length?) constraint */
+    } code;
+    size_t length; /* Approximate number of bytes created. */
+} asn_random_fill_result_t;
+typedef asn_random_fill_result_t(asn_random_fill_f)(
+    const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+    const struct asn_encoding_constraints_s *memb_constraints,
+    size_t max_length);
+
+/*
+ * Returns 0 if the structure was properly initialized, -1 otherwise.
+ * The (approx_max_length_limit) specifies the approximate limit of the
+ * resulting structure in units closely resembling bytes. The actual result
+ * might be several times larger or smaller than the length limit.
+ */
+int asn_random_fill(const struct asn_TYPE_descriptor_s *td, void **struct_ptr,
+                    size_t approx_max_length_limit);
+
+/*
+ * Returns a random number between min and max.
+ */
+intmax_t asn_random_between(intmax_t min, intmax_t max);
+
+#endif /* ASN_RANDOM_FILL */
diff --git a/skeletons/asn_system.h b/skeletons/asn_system.h
new file mode 100644 (file)
index 0000000..fa8cf11
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * Miscellaneous system-dependent types.
+ */
+#ifndef        ASN_SYSTEM_H
+#define        ASN_SYSTEM_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE 1
+#endif
+
+#ifndef _BSD_SOURCE
+#define _BSD_SOURCE /* for snprintf() on some linux systems  */
+#endif
+
+#include <stdio.h>     /* For snprintf(3) */
+#include <stdlib.h>    /* For *alloc(3) */
+#include <string.h>    /* For memcpy(3) */
+#include <sys/types.h> /* For size_t */
+#include <limits.h>    /* For LONG_MAX */
+#include <stdarg.h>    /* For va_start */
+#include <stddef.h>    /* for offsetof and ptrdiff_t */
+
+#ifdef _WIN32
+
+#include <malloc.h>
+#define         snprintf       _snprintf
+#define         vsnprintf      _vsnprintf
+
+/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */
+#define sys_ntohl(l)   ((((l) << 24)  & 0xff000000)    \
+                       | (((l) << 8) & 0xff0000)       \
+                       | (((l) >> 8)  & 0xff00)        \
+                       | ((l >> 24) & 0xff))
+
+#ifdef _MSC_VER                        /* MSVS.Net */
+#ifndef __cplusplus
+#define inline __inline
+#endif
+#ifndef        ASSUMESTDTYPES  /* Standard types have been defined elsewhere */
+#define        ssize_t         SSIZE_T
+#if _MSC_VER < 1600
+typedef        char            int8_t;
+typedef        short           int16_t;
+typedef        int             int32_t;
+typedef        unsigned char   uint8_t;
+typedef        unsigned short  uint16_t;
+typedef        unsigned int    uint32_t;
+#else /* _MSC_VER >= 1600 */
+#include <stdint.h>
+#endif /* _MSC_VER < 1600 */
+#endif /* ASSUMESTDTYPES */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <float.h>
+#define isnan _isnan
+#define finite _finite
+#define copysign _copysign
+#define        ilogb   _logb
+#else  /* !_MSC_VER */
+#include <stdint.h>
+#endif /* _MSC_VER */
+
+#else  /* !_WIN32 */
+
+#if defined(__vxworks)
+#include <types/vxTypes.h>
+#else  /* !defined(__vxworks) */
+
+#include <inttypes.h>  /* C99 specifies this file */
+#include <netinet/in.h> /* for ntohl() */
+#define        sys_ntohl(foo)  ntohl(foo)
+#endif /* defined(__vxworks) */
+
+#endif /* _WIN32 */
+
+#if    __GNUC__ >= 3 || defined(__clang__)
+#define CC_ATTRIBUTE(attr)    __attribute__((attr))
+#else
+#define CC_ATTRIBUTE(attr)
+#endif
+#define CC_PRINTFLIKE(fmt, var)     CC_ATTRIBUTE(format(printf, fmt, var))
+#define        CC_NOTUSED                  CC_ATTRIBUTE(unused)
+#ifndef CC_ATTR_NO_SANITIZE
+#define CC_ATTR_NO_SANITIZE(what)   CC_ATTRIBUTE(no_sanitize(what))
+#endif
+
+/* Figure out if thread safety is requested */
+#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT))
+#define        ASN_THREAD_SAFE
+#endif /* Thread safety */
+
+#ifndef        offsetof        /* If not defined by <stddef.h> */
+#define        offsetof(s, m)  ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0))
+#endif /* offsetof */
+
+#ifndef        MIN             /* Suitable for comparing primitive types (integers) */
+#if defined(__GNUC__)
+#define        MIN(a,b)        ({ __typeof a _a = a; __typeof b _b = b;        \
+       ((_a)<(_b)?(_a):(_b)); })
+#else  /* !__GNUC__ */
+#define        MIN(a,b)        ((a)<(b)?(a):(b))       /* Unsafe variant */
+#endif /* __GNUC__ */
+#endif /* MIN */
+
+#if __STDC_VERSION__ >= 199901L
+#ifndef SIZE_MAX
+#define SIZE_MAX   ((~((size_t)0)) >> 1)
+#endif
+
+#ifndef RSIZE_MAX   /* C11, Annex K */
+#define RSIZE_MAX   (SIZE_MAX >> 1)
+#endif
+#ifndef RSSIZE_MAX   /* Halve signed size even further than unsigned */
+#define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+#else   /* Old compiler */
+#undef  SIZE_MAX
+#undef  RSIZE_MAX
+#undef  RSSIZE_MAX
+#define SIZE_MAX   ((~((size_t)0)) >> 1)
+#define RSIZE_MAX   (SIZE_MAX >> 1)
+#define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
+#endif
+
+#if __STDC_VERSION__ >= 199901L
+#define ASN_PRI_SIZE "zu"
+#define ASN_PRI_SSIZE "zd"
+#define ASN_PRIuMAX PRIuMAX
+#define ASN_PRIdMAX PRIdMAX
+#else
+#define ASN_PRI_SIZE "lu"
+#define ASN_PRI_SSIZE "ld"
+#if LLONG_MAX > LONG_MAX
+#define ASN_PRIuMAX "llu"
+#define ASN_PRIdMAX "lld"
+#else
+#define ASN_PRIuMAX "lu"
+#define ASN_PRIdMAX "ld"
+#endif
+#endif
+
+#endif /* ASN_SYSTEM_H */
diff --git a/skeletons/ber_decoder.c b/skeletons/ber_decoder.c
new file mode 100644 (file)
index 0000000..75d6016
--- /dev/null
@@ -0,0 +1,283 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {                                    \
+               size_t num = num_bytes;                                 \
+               ptr = ((const char *)ptr) + num;                        \
+               size -= num;                                            \
+               consumed_myself += num;                                 \
+       } while(0)
+#undef RETURN
+#define        RETURN(_code)   do {                                            \
+               asn_dec_rval_t rval;                                    \
+               rval.code = _code;                                      \
+               if(opt_ctx) opt_ctx->step = step; /* Save context */    \
+               if(_code == RC_OK || opt_ctx)                           \
+                       rval.consumed = consumed_myself;                \
+               else                                                    \
+                       rval.consumed = 0;      /* Context-free */      \
+               return rval;                                            \
+       } while(0)
+
+/*
+ * The BER decoder of any type.
+ */
+asn_dec_rval_t
+ber_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+           const void *ptr, size_t size) {
+    asn_codec_ctx_t s_codec_ctx;
+
+       /*
+        * Stack checker requires that the codec context
+        * must be allocated on the stack.
+        */
+       if(opt_codec_ctx) {
+               if(opt_codec_ctx->max_stack_size) {
+                       s_codec_ctx = *opt_codec_ctx;
+                       opt_codec_ctx = &s_codec_ctx;
+               }
+       } else {
+               /* If context is not given, be security-conscious anyway */
+               memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+               s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+               opt_codec_ctx = &s_codec_ctx;
+       }
+
+       /*
+        * Invoke type-specific decoder.
+        */
+       return type_descriptor->op->ber_decoder(opt_codec_ctx, type_descriptor,
+               struct_ptr,     /* Pointer to the destination structure */
+               ptr, size,      /* Buffer and its size */
+               0               /* Default tag mode is 0 */
+               );
+}
+
+/*
+ * Check the set of <TL<TL<TL...>>> tags matches the definition.
+ */
+asn_dec_rval_t
+ber_check_tags(const asn_codec_ctx_t *opt_codec_ctx,
+               const asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx,
+               const void *ptr, size_t size, int tag_mode, int last_tag_form,
+               ber_tlv_len_t *last_length, int *opt_tlv_form) {
+    ssize_t consumed_myself = 0;
+       ssize_t tag_len;
+       ssize_t len_len;
+       ber_tlv_tag_t tlv_tag;
+       ber_tlv_len_t tlv_len;
+       ber_tlv_len_t limit_len = -1;
+       int expect_00_terminators = 0;
+       int tlv_constr = -1;    /* If CHOICE, opt_tlv_form is not given */
+       int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */
+       int tagno;
+
+       /*
+        * Make sure we didn't exceed the maximum stack size.
+        */
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               RETURN(RC_FAIL);
+
+       /*
+        * So what does all this implicit skip stuff mean?
+        * Imagine two types,
+        *      A ::= [5] IMPLICIT      T
+        *      B ::= [2] EXPLICIT      T
+        * Where T is defined as
+        *      T ::= [4] IMPLICIT SEQUENCE { ... }
+        * 
+        * Let's say, we are starting to decode type A, given the
+        * following TLV stream: <5> <0>. What does this mean?
+        * It means that the type A contains type T which is,
+        * in turn, empty.
+        * Remember though, that we are still in A. We cannot
+        * just pass control to the type T decoder. Why? Because
+        * the type T decoder expects <4> <0>, not <5> <0>.
+        * So, we must make sure we are going to receive <5> while
+        * still in A, then pass control to the T decoder, indicating
+        * that the tag <4> was implicitly skipped. The decoder of T
+        * hence will be prepared to treat <4> as valid tag, and decode
+        * it appropriately.
+        */
+
+       tagno = step    /* Continuing where left previously */
+               + (tag_mode==1?-1:0)
+               ;
+       ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)",
+               td->name, (long)size, tag_mode, step, tagno);
+       /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */
+
+       if(tag_mode == 0 && tagno == (int)td->tags_count) {
+               /*
+                * This must be the _untagged_ ANY type,
+                * which outermost tag isn't known in advance.
+                * Fetch the tag and length separately.
+                */
+               tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
+               switch(tag_len) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+               tlv_constr = BER_TLV_CONSTRUCTED(ptr);
+               len_len = ber_fetch_length(tlv_constr,
+                       (const char *)ptr + tag_len, size - tag_len, &tlv_len);
+               switch(len_len) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+               ASN_DEBUG("Advancing %ld in ANY case",
+                       (long)(tag_len + len_len));
+               ADVANCE(tag_len + len_len);
+       } else {
+               assert(tagno < (int)td->tags_count);    /* At least one loop */
+       }
+       for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) {
+
+               /*
+                * Fetch and process T from TLV.
+                */
+               tag_len = ber_fetch_tag(ptr, size, &tlv_tag);
+                       ASN_DEBUG("Fetching tag from {%p,%ld}: "
+                               "len %ld, step %d, tagno %d got %s",
+                               ptr, (long)size,
+                               (long)tag_len, step, tagno,
+                               ber_tlv_tag_string(tlv_tag));
+               switch(tag_len) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+
+               tlv_constr = BER_TLV_CONSTRUCTED(ptr);
+
+               /*
+                * If {I}, don't check anything.
+                * If {I,B,C}, check B and C unless we're at I.
+                */
+               if(tag_mode != 0 && step == 0) {
+                       /*
+                        * We don't expect tag to match here.
+                        * It's just because we don't know how the tag
+                        * is supposed to look like.
+                        */
+               } else {
+                   assert(tagno >= 0); /* Guaranteed by the code above */
+                   if(tlv_tag != td->tags[tagno]) {
+                       /*
+                        * Unexpected tag. Too bad.
+                        */
+                       ASN_DEBUG("Expected: %s, "
+                               "expectation failed (tn=%d, tm=%d)",
+                               ber_tlv_tag_string(td->tags[tagno]),
+                               tagno, tag_mode
+                       );
+                       RETURN(RC_FAIL);
+                   }
+               }
+
+               /*
+                * Attention: if there are more tags expected,
+                * ensure that the current tag is presented
+                * in constructed form (it contains other tags!).
+                * If this one is the last one, check that the tag form
+                * matches the one given in descriptor.
+                */
+               if(tagno < ((int)td->tags_count - 1)) {
+                       if(tlv_constr == 0) {
+                               ASN_DEBUG("tlv_constr = %d, expfail",
+                                       tlv_constr);
+                               RETURN(RC_FAIL);
+                       }
+               } else {
+                       if(last_tag_form != tlv_constr
+                       && last_tag_form != -1) {
+                               ASN_DEBUG("last_tag_form %d != %d",
+                                       last_tag_form, tlv_constr);
+                               RETURN(RC_FAIL);
+                       }
+               }
+
+               /*
+                * Fetch and process L from TLV.
+                */
+               len_len = ber_fetch_length(tlv_constr,
+                       (const char *)ptr + tag_len, size - tag_len, &tlv_len);
+               ASN_DEBUG("Fetching len = %ld", (long)len_len);
+               switch(len_len) {
+               case -1: RETURN(RC_FAIL);
+               case 0: RETURN(RC_WMORE);
+               }
+
+               /*
+                * FIXME
+                * As of today, the chain of tags
+                * must either contain several indefinite length TLVs,
+                * or several definite length ones.
+                * No mixing is allowed.
+                */
+               if(tlv_len == -1) {
+                       /*
+                        * Indefinite length.
+                        */
+                       if(limit_len == -1) {
+                               expect_00_terminators++;
+                       } else {
+                               ASN_DEBUG("Unexpected indefinite length "
+                                       "in a chain of definite lengths");
+                               RETURN(RC_FAIL);
+                       }
+                       ADVANCE(tag_len + len_len);
+                       continue;
+               } else {
+                       if(expect_00_terminators) {
+                               ASN_DEBUG("Unexpected definite length "
+                                       "in a chain of indefinite lengths");
+                               RETURN(RC_FAIL);
+                       }
+               }
+
+               /*
+                * Check that multiple TLVs specify ever decreasing length,
+                * which is consistent.
+                */
+               if(limit_len == -1) {
+                       limit_len    = tlv_len + tag_len + len_len;
+                       if(limit_len < 0) {
+                               /* Too great tlv_len value? */
+                               RETURN(RC_FAIL);
+                       }
+               } else if(limit_len != tlv_len + tag_len + len_len) {
+                       /*
+                        * Inner TLV specifies length which is inconsistent
+                        * with the outer TLV's length value.
+                        */
+                       ASN_DEBUG("Outer TLV is %ld and inner is %ld",
+                               (long)limit_len, (long)tlv_len);
+                       RETURN(RC_FAIL);
+               }
+
+               ADVANCE(tag_len + len_len);
+
+               limit_len -= (tag_len + len_len);
+               if((ssize_t)size > limit_len) {
+                       /*
+                        * Make sure that we won't consume more bytes
+                        * from the parent frame than the inferred limit.
+                        */
+                       size = limit_len;
+               }
+       }
+
+       if(opt_tlv_form)
+               *opt_tlv_form = tlv_constr;
+       if(expect_00_terminators)
+               *last_length = -expect_00_terminators;
+       else
+               *last_length = tlv_len;
+
+       RETURN(RC_OK);
+}
diff --git a/skeletons/ber_decoder.h b/skeletons/ber_decoder.h
new file mode 100644 (file)
index 0000000..1ac2a5e
--- /dev/null
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BER_DECODER_H_
+#define        _BER_DECODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+struct asn_codec_ctx_s;                /* Forward declaration */
+
+/*
+ * The BER decoder of any type.
+ * This function may be invoked directly from the application.
+ * Decodes BER, DER and CER data (DER and CER are different subsets of BER).
+ *
+ * NOTE: Use the der_encode() function (der_encoder.h) to produce encoding
+ * which is compliant with ber_decode().
+ */
+asn_dec_rval_t ber_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of that buffer */
+);
+
+/*
+ * Type of generic function which decodes the byte stream into the structure.
+ */
+typedef asn_dec_rval_t(ber_type_decoder_f)(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr,
+    const void *buf_ptr, size_t size, int tag_mode);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Check that all tags correspond to the type definition (as given in head).
+ * On return, last_length would contain either a non-negative length of the
+ * value part of the last TLV, or the negative number of expected
+ * "end of content" sequences. The number may only be negative if the
+ * head->last_tag_form is non-zero.
+ */
+asn_dec_rval_t ber_check_tags(
+    const struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    asn_struct_ctx_t *opt_ctx, /* saved decoding context */
+    const void *ptr, size_t size,
+    int tag_mode,      /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+    int last_tag_form, /* {-1,0:1}: any, primitive, constr */
+    ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BER_DECODER_H_ */
diff --git a/skeletons/ber_tlv_length.c b/skeletons/ber_tlv_length.c
new file mode 100644 (file)
index 0000000..0a0deec
--- /dev/null
@@ -0,0 +1,168 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ber_tlv_length.h>
+#include <ber_tlv_tag.h>
+
+ssize_t
+ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
+               ber_tlv_len_t *len_r) {
+       const uint8_t *buf = (const uint8_t *)bufptr;
+       unsigned oct;
+
+       if(size == 0)
+               return 0;       /* Want more */
+
+       oct = *(const uint8_t *)buf;
+       if((oct & 0x80) == 0) {
+               /*
+                * Short definite length.
+                */
+               *len_r = oct;   /* & 0x7F */
+               return 1;
+       } else {
+               ber_tlv_len_t len;
+               size_t skipped;
+
+               if(_is_constructed && oct == 0x80) {
+                       *len_r = -1;    /* Indefinite length */
+                       return 1;
+               }
+
+               if(oct == 0xff) {
+                       /* Reserved in standard for future use. */
+                       return -1;
+               }
+
+               oct &= 0x7F;    /* Leave only the 7 LS bits */
+               for(len = 0, buf++, skipped = 1;
+                       oct && (++skipped <= size); buf++, oct--) {
+
+                       /* Verify that we won't overflow. */
+                       if(!(len >> ((8 * sizeof(len)) - (8+1)))) {
+                               len = (len << 8) | *buf;
+                       } else {
+                               /* Too large length value. */
+                               return -1;
+                       }
+               }
+
+               if(oct == 0) {
+                       if(len < 0 || len > RSSIZE_MAX) {
+                               /* Length value out of sane range. */
+                               return -1;
+                       }
+
+                       *len_r = len;
+                       return skipped;
+               }
+
+               return 0;       /* Want more */
+       }
+
+}
+
+ssize_t
+ber_skip_length(const asn_codec_ctx_t *opt_codec_ctx,
+               int _is_constructed, const void *ptr, size_t size) {
+       ber_tlv_len_t vlen;     /* Length of V in TLV */
+       ssize_t tl;             /* Length of L in TLV */
+       ssize_t ll;             /* Length of L in TLV */
+       size_t skip;
+
+       /*
+        * Make sure we didn't exceed the maximum stack size.
+        */
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               return -1;
+
+       /*
+        * Determine the size of L in TLV.
+        */
+       ll = ber_fetch_length(_is_constructed, ptr, size, &vlen);
+       if(ll <= 0) return ll;
+
+       /*
+        * Definite length.
+        */
+       if(vlen >= 0) {
+               skip = ll + vlen;
+               if(skip > size)
+                       return 0;       /* Want more */
+               return skip;
+       }
+
+       /*
+        * Indefinite length!
+        */
+       ASN_DEBUG("Skipping indefinite length");
+       for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) {
+               ber_tlv_tag_t tag;
+
+               /* Fetch the tag */
+               tl = ber_fetch_tag(ptr, size, &tag);
+               if(tl <= 0) return tl;
+
+               ll = ber_skip_length(opt_codec_ctx,
+                       BER_TLV_CONSTRUCTED(ptr),
+                       ((const char *)ptr) + tl, size - tl);
+               if(ll <= 0) return ll;
+
+               skip += tl + ll;
+
+               /*
+                * This may be the end of the indefinite length structure,
+                * two consecutive 0 octets.
+                * Check if it is true.
+                */
+               if(((const uint8_t *)ptr)[0] == 0
+               && ((const uint8_t *)ptr)[1] == 0)
+                       return skip;
+
+               ptr = ((const char *)ptr) + tl + ll;
+               size -= tl + ll;
+       }
+
+       /* UNREACHABLE */
+}
+
+size_t
+der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) {
+       size_t required_size;   /* Size of len encoding */
+       uint8_t *buf = (uint8_t *)bufp;
+       uint8_t *end;
+       int i;
+
+       if(len <= 127) {
+               /* Encoded in 1 octet */
+               if(size) *buf = (uint8_t)len;
+               return 1;
+       }
+
+       /*
+        * Compute the size of the subsequent bytes.
+        */
+       for(required_size = 1, i = 8; i < 8 * (int)sizeof(len); i += 8) {
+               if(len >> i)
+                       required_size++;
+               else
+                       break;
+       }
+
+       if(size <= required_size)
+               return required_size + 1;
+
+       *buf++ = (uint8_t)(0x80 | required_size);  /* Length of the encoding */
+
+       /*
+        * Produce the len encoding, space permitting.
+        */
+       end = buf + required_size;
+       for(i -= 8; buf < end; i -= 8, buf++)
+               *buf = (uint8_t)(len >> i);
+
+       return required_size + 1;
+}
+
diff --git a/skeletons/ber_tlv_length.h b/skeletons/ber_tlv_length.h
new file mode 100644 (file)
index 0000000..d1e4d48
--- /dev/null
@@ -0,0 +1,50 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BER_TLV_LENGTH_H_
+#define        _BER_TLV_LENGTH_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ssize_t ber_tlv_len_t;
+
+/*
+ * This function tries to fetch the length of the BER TLV value and place it
+ * in *len_r.
+ * RETURN VALUES:
+ *      0:     More data expected than bufptr contains.
+ *     -1:     Fatal error deciphering length.
+ *     >0:     Number of bytes used from bufptr.
+ * On return with >0, len_r is constrained as -1..MAX, where -1 mean
+ * that the value is of indefinite length.
+ */
+ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size,
+       ber_tlv_len_t *len_r);
+
+/*
+ * This function expects bufptr to be positioned over L in TLV.
+ * It returns number of bytes occupied by L and V together, suitable
+ * for skipping. The function properly handles indefinite length.
+ * RETURN VALUES:
+ *     Standard {-1,0,>0} convention.
+ */
+ssize_t ber_skip_length(
+       const struct asn_codec_ctx_s *opt_codec_ctx,    /* optional context */
+       int _is_constructed, const void *bufptr, size_t size);
+
+/*
+ * This function serializes the length (L from TLV) in DER format.
+ * It always returns number of bytes necessary to represent the length,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BER_TLV_LENGTH_H_ */
diff --git a/skeletons/ber_tlv_tag.c b/skeletons/ber_tlv_tag.c
new file mode 100644 (file)
index 0000000..4a7d732
--- /dev/null
@@ -0,0 +1,144 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <ber_tlv_tag.h>
+#include <errno.h>
+
+ssize_t
+ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) {
+       ber_tlv_tag_t val;
+       ber_tlv_tag_t tclass;
+       size_t skipped;
+
+       if(size == 0)
+               return 0;
+
+       val = *(const uint8_t *)ptr;
+       tclass = (val >> 6);
+       if((val &= 0x1F) != 0x1F) {
+               /*
+                * Simple form: everything encoded in a single octet.
+                * Tag Class is encoded using two least significant bits.
+                */
+               *tag_r = (val << 2) | tclass;
+               return 1;
+       }
+
+       /*
+        * Each octet contains 7 bits of useful information.
+        * The MSB is 0 if it is the last octet of the tag.
+        */
+       for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2;
+                       skipped <= size;
+                               ptr = ((const char *)ptr) + 1, skipped++) {
+               unsigned int oct = *(const uint8_t *)ptr;
+               if(oct & 0x80) {
+                       val = (val << 7) | (oct & 0x7F);
+                       /*
+                        * Make sure there are at least 9 bits spare
+                        * at the MS side of a value.
+                        */
+                       if(val >> ((8 * sizeof(val)) - 9)) {
+                               /*
+                                * We would not be able to accomodate
+                                * any more tag bits.
+                                */
+                               return -1;
+                       }
+               } else {
+                       val = (val << 7) | oct;
+                       *tag_r = (val << 2) | tclass;
+                       return skipped;
+               }
+       }
+
+       return 0;       /* Want more */
+}
+
+
+ssize_t
+ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) {
+       char buf[sizeof("[APPLICATION ]") + 32];
+       ssize_t ret;
+
+       ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf));
+       if(ret >= (ssize_t)sizeof(buf) || ret < 2) {
+               errno = EPERM;
+               return -1;
+       }
+
+       return fwrite(buf, 1, ret, f);
+}
+
+ssize_t
+ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) {
+       const char *type = 0;
+       int ret;
+
+       switch(tag & 0x3) {
+       case ASN_TAG_CLASS_UNIVERSAL:   type = "UNIVERSAL ";    break;
+       case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION ";  break;
+       case ASN_TAG_CLASS_CONTEXT:     type = "";              break;
+       case ASN_TAG_CLASS_PRIVATE:     type = "PRIVATE ";      break;
+       }
+
+       ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2);
+       if(ret <= 0 && size) buf[0] = '\0';     /* against broken libc's */
+
+       return ret;
+}
+
+char *
+ber_tlv_tag_string(ber_tlv_tag_t tag) {
+       static char buf[sizeof("[APPLICATION ]") + 32];
+
+       (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf));
+
+       return buf;
+}
+
+
+size_t
+ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) {
+       int tclass = BER_TAG_CLASS(tag);
+       ber_tlv_tag_t tval = BER_TAG_VALUE(tag);
+       uint8_t *buf = (uint8_t *)bufp;
+       uint8_t *end;
+       size_t required_size;
+       size_t i;
+
+       if(tval <= 30) {
+               /* Encoded in 1 octet */
+               if(size) buf[0] = (tclass << 6) | tval;
+               return 1;
+       } else if(size) {
+               *buf++ = (tclass << 6) | 0x1F;
+               size--;
+       }
+
+       /*
+        * Compute the size of the subsequent bytes.
+        */
+       for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) {
+               if(tval >> i)
+                       required_size++;
+               else
+                       break;
+       }
+
+       if(size < required_size)
+               return required_size + 1;
+
+       /*
+        * Fill in the buffer, space permitting.
+        */
+       end = buf + required_size - 1;
+       for(i -= 7; buf < end; i -= 7, buf++)
+               *buf = 0x80 | ((tval >> i) & 0x7F);
+       *buf = (tval & 0x7F);   /* Last octet without high bit */
+
+       return required_size + 1;
+}
+
diff --git a/skeletons/ber_tlv_tag.h b/skeletons/ber_tlv_tag.h
new file mode 100644 (file)
index 0000000..ce227ad
--- /dev/null
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _BER_TLV_TAG_H_
+#define        _BER_TLV_TAG_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum asn_tag_class {
+       ASN_TAG_CLASS_UNIVERSAL         = 0,    /* 0b00 */
+       ASN_TAG_CLASS_APPLICATION       = 1,    /* 0b01 */
+       ASN_TAG_CLASS_CONTEXT           = 2,    /* 0b10 */
+       ASN_TAG_CLASS_PRIVATE           = 3     /* 0b11 */
+};
+typedef unsigned ber_tlv_tag_t;        /* BER TAG from Tag-Length-Value */
+
+/*
+ * Tag class is encoded together with tag value for optimization purposes.
+ */
+#define        BER_TAG_CLASS(tag)      ((tag) & 0x3)
+#define        BER_TAG_VALUE(tag)      ((tag) >> 2)
+#define        BER_TLV_CONSTRUCTED(tagptr)     (((*(const uint8_t *)tagptr)&0x20)?1:0)
+
+#define        BER_TAGS_EQUAL(tag1, tag2)      ((tag1) == (tag2))
+
+/*
+ * Several functions for printing the TAG in the canonical form
+ * (i.e. "[PRIVATE 0]").
+ * Return values correspond to their libc counterparts (if any).
+ */
+ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen);
+ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *);
+char *ber_tlv_tag_string(ber_tlv_tag_t tag);
+
+
+/*
+ * This function tries to fetch the tag from the input stream.
+ * RETURN VALUES:
+ *      0:     More data expected than bufptr contains.
+ *     -1:     Fatal error deciphering tag.
+ *     >0:     Number of bytes used from bufptr. tag_r will contain the tag.
+ */
+ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r);
+
+/*
+ * This function serializes the tag (T from TLV) in BER format.
+ * It always returns number of bytes necessary to represent the tag,
+ * it is a caller's responsibility to check the return value
+ * against the supplied buffer's size.
+ */
+size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BER_TLV_TAG_H_ */
diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
new file mode 100644 (file)
index 0000000..86dcbb0
--- /dev/null
@@ -0,0 +1,1533 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_CHOICE.h>
+#include <per_opentype.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define        LEFT    ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define        SIZE_VIOLATION  (ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {            \
+               size_t num = num_bytes;         \
+               ptr = ((const char *)ptr) + num;\
+               size -= num;                    \
+               if(ctx->left >= 0)              \
+                       ctx->left -= num;       \
+               consumed_myself += num;         \
+       } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef NEXT_PHASE
+#define        NEXT_PHASE(ctx) do {                    \
+               ctx->phase++;                   \
+               ctx->step = 0;                  \
+       } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef RETURN
+#define        RETURN(_code)   do {                    \
+               rval.code = _code;              \
+               rval.consumed = consumed_myself;\
+               return rval;                    \
+       } while(0)
+
+/*
+ * See the definitions.
+ */
+static unsigned _fetch_present_idx(const void *struct_ptr, unsigned off,
+                                   unsigned size);
+static void _set_present_idx(void *sptr, unsigned offset, unsigned size,
+                             unsigned pres);
+static const void *_get_member_ptr(const asn_TYPE_descriptor_t *,
+                                   const void *sptr, asn_TYPE_member_t **elm,
+                                   unsigned *present);
+
+/*
+ * Tags are canonically sorted in the tag to member table.
+ */
+static int
+_search4tag(const void *ap, const void *bp) {
+       const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+       const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+       int a_class = BER_TAG_CLASS(a->el_tag);
+       int b_class = BER_TAG_CLASS(b->el_tag);
+
+       if(a_class == b_class) {
+               ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+               ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+               if(a_value == b_value)
+                       return 0;
+               else if(a_value < b_value)
+                       return -1;
+               else
+                       return 1;
+       } else if(a_class < b_class) {
+               return -1;
+       } else {
+               return 1;
+       }
+}
+
+/*
+ * The decoder of the CHOICE type.
+ */
+asn_dec_rval_t
+CHOICE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const void *ptr, size_t size, int tag_mode) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_CHOICE_specifics_t *specs =
+               (const asn_CHOICE_specifics_t *)td->specifics;
+       asn_TYPE_member_t *elements = td->elements;
+
+       /*
+        * Parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       ber_tlv_tag_t tlv_tag;  /* T from TLV */
+       ssize_t tag_len;        /* Length of TLV's T */
+       asn_dec_rval_t rval;    /* Return code from subparsers */
+
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+
+       ASN_DEBUG("Decoding %s as CHOICE", td->name);
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) {
+                       RETURN(RC_FAIL);
+               }
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+       
+       /*
+        * Start to parse where left previously
+        */
+       switch(ctx->phase) {
+       case 0:
+               /*
+                * PHASE 0.
+                * Check that the set of tags associated with given structure
+                * perfectly fits our expectations.
+                */
+
+               if(tag_mode || td->tags_count) {
+                       rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+                               tag_mode, -1, &ctx->left, 0);
+                       if(rval.code != RC_OK) {
+                               ASN_DEBUG("%s tagging check failed: %d",
+                                       td->name, rval.code);
+                               return rval;
+                       }
+
+                       if(ctx->left >= 0) {
+                               /* ?Substracted below! */
+                               ctx->left += rval.consumed;
+                       }
+                       ADVANCE(rval.consumed);
+               } else {
+                       ctx->left = -1;
+               }
+
+               NEXT_PHASE(ctx);
+
+               ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
+                       (long)ctx->left, (long)size);
+
+               /* Fall through */
+       case 1:
+               /*
+                * Fetch the T from TLV.
+                */
+               tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+               ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len);
+               switch(tag_len) {
+               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                       /* Fall through */
+               case -1: RETURN(RC_FAIL);
+               }
+
+               do {
+                       const asn_TYPE_tag2member_t *t2m;
+                       asn_TYPE_tag2member_t key;
+
+                       key.el_tag = tlv_tag;
+                       t2m = (const asn_TYPE_tag2member_t *)bsearch(&key,
+                                       specs->tag2el, specs->tag2el_count,
+                                       sizeof(specs->tag2el[0]), _search4tag);
+                       if(t2m) {
+                               /*
+                                * Found the element corresponding to the tag.
+                                */
+                               NEXT_PHASE(ctx);
+                               ctx->step = t2m->el_no;
+                               break;
+                       } else if(specs->ext_start == -1) {
+                               ASN_DEBUG("Unexpected tag %s "
+                                       "in non-extensible CHOICE %s",
+                                       ber_tlv_tag_string(tlv_tag), td->name);
+                               RETURN(RC_FAIL);
+                       } else {
+                               /* Skip this tag */
+                               ssize_t skip;
+
+                               ASN_DEBUG("Skipping unknown tag %s",
+                                       ber_tlv_tag_string(tlv_tag));
+
+                               skip = ber_skip_length(opt_codec_ctx,
+                                       BER_TLV_CONSTRUCTED(ptr),
+                                       (const char *)ptr + tag_len,
+                                       LEFT - tag_len);
+
+                               switch(skip) {
+                               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                                       /* Fall through */
+                               case -1: RETURN(RC_FAIL);
+                               }
+
+                               ADVANCE(skip + tag_len);
+                               RETURN(RC_OK);
+                       }
+               } while(0);
+
+       case 2:
+               /*
+                * PHASE 2.
+                * Read in the element.
+                */
+           do {
+               asn_TYPE_member_t *elm;/* CHOICE's element */
+               void *memb_ptr;         /* Pointer to the member */
+               void **memb_ptr2;       /* Pointer to that pointer */
+
+               elm = &elements[ctx->step];
+
+               /*
+                * Compute the position of the member inside a structure,
+                * and also a type of containment (it may be contained
+                * as pointer or using inline inclusion).
+                */
+               if(elm->flags & ATF_POINTER) {
+                       /* Member is a pointer to another structure */
+                       memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+               } else {
+                       /*
+                        * A pointer to a pointer
+                        * holding the start of the structure
+                        */
+                       memb_ptr = (char *)st + elm->memb_offset;
+                       memb_ptr2 = &memb_ptr;
+               }
+               /* Set presence to be able to free it properly at any time */
+               _set_present_idx(st, specs->pres_offset,
+                               specs->pres_size, ctx->step + 1);
+               /*
+                * Invoke the member fetch routine according to member's type
+                */
+               rval = elm->type->op->ber_decoder(opt_codec_ctx, elm->type,
+                               memb_ptr2, ptr, LEFT, elm->tag_mode);
+               switch(rval.code) {
+               case RC_OK:
+                       break;
+               case RC_WMORE: /* More data expected */
+                       if(!SIZE_VIOLATION) {
+                               ADVANCE(rval.consumed);
+                               RETURN(RC_WMORE);
+                       }
+                       RETURN(RC_FAIL);
+               case RC_FAIL: /* Fatal error */
+                       RETURN(rval.code);
+               } /* switch(rval) */
+               
+               ADVANCE(rval.consumed);
+         } while(0);
+
+               NEXT_PHASE(ctx);
+
+               /* Fall through */
+       case 3:
+               ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d",
+                       td->name, (long)ctx->left, (long)size,
+                       tag_mode, td->tags_count);
+
+               if(ctx->left > 0) {
+                       /*
+                        * The type must be fully decoded
+                        * by the CHOICE member-specific decoder.
+                        */
+                       RETURN(RC_FAIL);
+               }
+
+               if(ctx->left == -1
+               && !(tag_mode || td->tags_count)) {
+                       /*
+                        * This is an untagged CHOICE.
+                        * It doesn't contain nothing
+                        * except for the member itself, including all its tags.
+                        * The decoding is completed.
+                        */
+                       NEXT_PHASE(ctx);
+                       break;
+               }
+
+               /*
+                * Read in the "end of data chunks"'s.
+                */
+               while(ctx->left < 0) {
+                       ssize_t tl;
+
+                       tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+                       switch(tl) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       /*
+                        * Expected <0><0>...
+                        */
+                       if(((const uint8_t *)ptr)[0] == 0) {
+                               if(LEFT < 2) {
+                                       if(SIZE_VIOLATION)
+                                               RETURN(RC_FAIL);
+                                       else
+                                               RETURN(RC_WMORE);
+                               } else if(((const uint8_t *)ptr)[1] == 0) {
+                                       /*
+                                        * Correctly finished with <0><0>.
+                                        */
+                                       ADVANCE(2);
+                                       ctx->left++;
+                                       continue;
+                               }
+                       } else {
+                               ASN_DEBUG("Unexpected continuation in %s",
+                                       td->name);
+                               RETURN(RC_FAIL);
+                       }
+
+                       /* UNREACHABLE */
+               }
+
+               NEXT_PHASE(ctx);
+       case 4:
+               /* No meaningful work here */
+               break;
+       }
+       
+       RETURN(RC_OK);
+}
+
+asn_enc_rval_t
+CHOICE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       asn_TYPE_member_t *elm; /* CHOICE element */
+       asn_enc_rval_t erval = {0,0,0};
+       const void *memb_ptr;
+       size_t computed_size = 0;
+       unsigned present;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("%s %s as CHOICE",
+               cb?"Encoding":"Estimating", td->name);
+
+       present = _fetch_present_idx(sptr,
+               specs->pres_offset, specs->pres_size);
+
+       /*
+        * If the structure was not initialized, it cannot be encoded:
+        * can't deduce what to encode in the choice type.
+        */
+       if(present == 0 || present > td->elements_count) {
+               if(present == 0 && td->elements_count == 0) {
+                       /* The CHOICE is empty?! */
+                       erval.encoded = 0;
+                       ASN__ENCODED_OK(erval);
+               }
+               ASN__ENCODE_FAILED;
+       }
+
+       /*
+        * Seek over the present member of the structure.
+        */
+       elm = &td->elements[present-1];
+       if(elm->flags & ATF_POINTER) {
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(memb_ptr == 0) {
+                       if(elm->optional) {
+                               erval.encoded = 0;
+                               ASN__ENCODED_OK(erval);
+                       }
+                       /* Mandatory element absent */
+                       ASN__ENCODE_FAILED;
+               }
+       } else {
+        memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+    }
+
+       /*
+        * If the CHOICE itself is tagged EXPLICIT:
+        * T ::= [2] EXPLICIT CHOICE { ... }
+        * Then emit the appropriate tags.
+        */
+       if(tag_mode == 1 || td->tags_count) {
+               /*
+                * For this, we need to pre-compute the member.
+                */
+               ssize_t ret;
+
+               /* Encode member with its tag */
+               erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+                       elm->tag_mode, elm->tag, 0, 0);
+               if(erval.encoded == -1)
+                       return erval;
+
+               /* Encode CHOICE with parent or my own tag */
+               ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag,
+                       cb, app_key);
+               if(ret == -1)
+                       ASN__ENCODE_FAILED;
+               computed_size += ret;
+       }
+
+       /*
+        * Encode the single underlying member.
+        */
+       erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+               elm->tag_mode, elm->tag, cb, app_key);
+       if(erval.encoded == -1)
+               return erval;
+
+       ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)",
+               (long)erval.encoded, (long)computed_size);
+
+       erval.encoded += computed_size;
+
+       return erval;
+}
+
+ber_tlv_tag_t
+CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) {
+       const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       unsigned present;
+
+       assert(tag_mode == 0); (void)tag_mode;
+       assert(tag == 0); (void)tag;
+
+       /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
+
+       if(present > 0 && present <= td->elements_count) {
+               const asn_TYPE_member_t *elm = &td->elements[present-1];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)
+                                       ((const char *)ptr + elm->memb_offset);
+               } else {
+                       memb_ptr = (const void *)
+                                       ((const char *)ptr + elm->memb_offset);
+               }
+
+               return asn_TYPE_outmost_tag(elm->type, memb_ptr,
+                       elm->tag_mode, elm->tag);
+       } else {
+               return (ber_tlv_tag_t)-1;
+       }
+}
+
+int
+CHOICE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+       if(present > 0 && present <= td->elements_count) {
+               asn_TYPE_member_t *elm = &td->elements[present-1];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) {
+                               if(elm->optional)
+                                       return 0;
+                               ASN__CTFAIL(app_key, td, sptr,
+                                       "%s: mandatory CHOICE element %s absent (%s:%d)",
+                                       td->name, elm->name, __FILE__, __LINE__);
+                               return -1;
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               if(elm->encoding_constraints.general_constraints) {
+                       return elm->encoding_constraints.general_constraints(elm->type, memb_ptr,
+                               ctfailcb, app_key);
+               } else {
+                       return elm->type->encoding_constraints.general_constraints(elm->type,
+                                       memb_ptr, ctfailcb, app_key);
+               }
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: no CHOICE element given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+#undef XER_ADVANCE
+#define        XER_ADVANCE(num_bytes)  do {                    \
+               size_t num = num_bytes;                 \
+               buf_ptr = (const void *)(((const char *)buf_ptr) + num); \
+               size -= num;                            \
+               consumed_myself += num;                 \
+       } while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+CHOICE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const char *opt_mname, const void *buf_ptr, size_t size) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+       /*
+        * Parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       asn_dec_rval_t rval;            /* Return value of a decoder */
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+       size_t edx;                     /* Element index */
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) RETURN(RC_FAIL);
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+       if(ctx->phase == 0 && !*xml_tag)
+               ctx->phase = 1; /* Skip the outer tag checking phase */
+
+       /*
+        * Phases of XER/XML processing:
+        * Phase 0: Check that the opening tag matches our expectations.
+        * Phase 1: Processing body and reacting on closing tag.
+        * Phase 2: Processing inner type.
+        * Phase 3: Only waiting for closing tag.
+        * Phase 4: Skipping unknown extensions.
+        * Phase 5: PHASED OUT
+        */
+       for(edx = ctx->step; ctx->phase <= 4;) {
+               pxer_chunk_type_e ch_type;      /* XER chunk type */
+               ssize_t ch_size;                /* Chunk size */
+               xer_check_tag_e tcv;            /* Tag check value */
+               asn_TYPE_member_t *elm;
+
+               /*
+                * Go inside the member.
+                */
+               if(ctx->phase == 2) {
+                       asn_dec_rval_t tmprval;
+                       void *memb_ptr;         /* Pointer to the member */
+                       void **memb_ptr2;       /* Pointer to that pointer */
+                       unsigned old_present;
+
+                       elm = &td->elements[edx];
+
+                       if(elm->flags & ATF_POINTER) {
+                               /* Member is a pointer to another structure */
+                               memb_ptr2 = (void **)((char *)st
+                                       + elm->memb_offset);
+                       } else {
+                               memb_ptr = (char *)st + elm->memb_offset;
+                               memb_ptr2 = &memb_ptr;
+                       }
+
+                       /* Start/Continue decoding the inner member */
+                       tmprval = elm->type->op->xer_decoder(opt_codec_ctx,
+                                       elm->type, memb_ptr2, elm->name,
+                                       buf_ptr, size);
+                       XER_ADVANCE(tmprval.consumed);
+                       ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d",
+                               elm->type->name, tmprval.code);
+                       old_present = _fetch_present_idx(st,
+                               specs->pres_offset, specs->pres_size);
+                       assert(old_present == 0 || old_present == edx + 1);
+                       /* Record what we've got */
+                       _set_present_idx(st,
+                               specs->pres_offset, specs->pres_size, edx + 1);
+                       if(tmprval.code != RC_OK)
+                               RETURN(tmprval.code);
+                       ctx->phase = 3;
+                       /* Fall through */
+               }
+
+               /* No need to wait for closing tag; special mode. */
+               if(ctx->phase == 3 && !*xml_tag) {
+                       ctx->phase = 5; /* Phase out */
+                       RETURN(RC_OK);
+               }
+
+               /*
+                * Get the next part of the XML stream.
+                */
+               ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type);
+               if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+                       switch(ch_type) {
+                       case PXER_WMORE:
+                RETURN(RC_WMORE);
+                       case PXER_COMMENT:      /* Got XML comment */
+                       case PXER_TEXT:         /* Ignore free-standing text */
+                               XER_ADVANCE(ch_size);   /* Skip silently */
+                               continue;
+                       case PXER_TAG:
+                               break;  /* Check the rest down there */
+                       }
+               }
+
+               tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+               ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d",
+                       ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
+                       ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
+                       ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
+                       ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
+               xml_tag, tcv);
+
+               /* Skip the extensions section */
+               if(ctx->phase == 4) {
+                       ASN_DEBUG("skip_unknown(%d, %ld)",
+                               tcv, (long)ctx->left);
+                       switch(xer_skip_unknown(tcv, &ctx->left)) {
+                       case -1:
+                               ctx->phase = 5;
+                               RETURN(RC_FAIL);
+                       case 1:
+                               ctx->phase = 3;
+                               /* Fall through */
+                       case 0:
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       case 2:
+                               ctx->phase = 3;
+                               break;
+                       }
+               }
+
+               switch(tcv) {
+               case XCT_BOTH:
+                       break;  /* No CHOICE? */
+               case XCT_CLOSING:
+                       if(ctx->phase != 3)
+                               break;
+                       XER_ADVANCE(ch_size);
+                       ctx->phase = 5; /* Phase out */
+                       RETURN(RC_OK);
+               case XCT_OPENING:
+                       if(ctx->phase == 0) {
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 1; /* Processing body phase */
+                               continue;
+                       }
+                       /* Fall through */
+               case XCT_UNKNOWN_OP:
+               case XCT_UNKNOWN_BO:
+
+                       if(ctx->phase != 1)
+                               break;  /* Really unexpected */
+
+                       /*
+                        * Search which inner member corresponds to this tag.
+                        */
+                       for(edx = 0; edx < td->elements_count; edx++) {
+                               elm = &td->elements[edx];
+                               tcv = xer_check_tag(buf_ptr,ch_size,elm->name);
+                               switch(tcv) {
+                               case XCT_BOTH:
+                               case XCT_OPENING:
+                                       /*
+                                        * Process this member.
+                                        */
+                                       ctx->step = edx;
+                                       ctx->phase = 2;
+                                       break;
+                               case XCT_UNKNOWN_OP:
+                               case XCT_UNKNOWN_BO:
+                                       continue;
+                               default:
+                                       edx = td->elements_count;
+                                       break;  /* Phase out */
+                               }
+                               break;
+                       }
+                       if(edx != td->elements_count)
+                               continue;
+
+                       /* It is expected extension */
+                       if(specs->ext_start != -1) {
+                               ASN_DEBUG("Got anticipated extension");
+                               /*
+                                * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+                                * By using a mask. Only record a pure
+                                * <opening> tags.
+                                */
+                               if(tcv & XCT_CLOSING) {
+                                       /* Found </extension> without body */
+                                       ctx->phase = 3; /* Terminating */
+                               } else {
+                                       ctx->left = 1;
+                                       ctx->phase = 4; /* Skip ...'s */
+                               }
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       }
+
+                       /* Fall through */
+               default:
+                       break;
+               }
+
+               ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]"
+                       " (ph=%d, tag=%s)",
+                       ch_size>0?((const uint8_t *)buf_ptr)[0]:'?',
+                       ch_size>1?((const uint8_t *)buf_ptr)[1]:'?',
+                       ch_size>2?((const uint8_t *)buf_ptr)[2]:'?',
+                       ch_size>3?((const uint8_t *)buf_ptr)[3]:'?',
+                       td->name, ctx->phase, xml_tag);
+               break;
+       }
+
+       ctx->phase = 5; /* Phase out, just in case */
+       RETURN(RC_FAIL);
+}
+
+
+asn_enc_rval_t
+CHOICE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                  enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+       const asn_CHOICE_specifics_t *specs =
+               (const asn_CHOICE_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       unsigned present = 0;
+
+       if(!sptr)
+               ASN__ENCODE_FAILED;
+
+       /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+
+       if(present == 0 || present > td->elements_count) {
+               ASN__ENCODE_FAILED;
+       }  else {
+               asn_enc_rval_t tmper = {0,0,0};
+               asn_TYPE_member_t *elm = &td->elements[present-1];
+               const void *memb_ptr = NULL;
+               const char *mname = elm->name;
+               unsigned int mlen = strlen(mname);
+
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!memb_ptr) ASN__ENCODE_FAILED;
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+
+        er.encoded = 0;
+
+               if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel);
+               ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+               tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
+                               ilevel + 1, flags, cb, app_key);
+               if(tmper.encoded == -1) return tmper;
+               er.encoded += tmper.encoded;
+
+               ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+       }
+
+       if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1);
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+asn_dec_rval_t
+CHOICE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_dec_rval_t rv;
+       const asn_per_constraint_t *ct;
+       asn_TYPE_member_t *elm; /* CHOICE's element */
+       void *memb_ptr;
+       void **memb_ptr2;
+       void *st = *sptr;
+       int value;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints) ct = &td->encoding_constraints.per_constraints->value;
+       else ct = 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               value = per_get_few_bits(pd, 1);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value) ct = 0;       /* Not restricted */
+       }
+
+       if(ct && ct->range_bits >= 0) {
+               value = per_get_few_bits(pd, ct->range_bits);
+               if(value < 0) ASN__DECODE_STARVED;
+               ASN_DEBUG("CHOICE %s got index %d in range %d",
+                       td->name, value, ct->range_bits);
+               if(value > ct->upper_bound)
+                       ASN__DECODE_FAILED;
+       } else {
+               if(specs->ext_start == -1)
+                       ASN__DECODE_FAILED;
+               value = uper_get_nsnnwn(pd);
+               if(value < 0) ASN__DECODE_STARVED;
+               value += specs->ext_start;
+               if((unsigned)value >= td->elements_count)
+                       ASN__DECODE_FAILED;
+       }
+
+       /* Adjust if canonical order is different from natural order */
+       if(specs->from_canonical_order) {
+        ASN_DEBUG("CHOICE presence from wire %d", value);
+               value = specs->from_canonical_order[value];
+        ASN_DEBUG("CHOICE presence index effective %d", value);
+    }
+
+       /* Set presence to be able to free it later */
+       _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1);
+
+       elm = &td->elements[value];
+       if(elm->flags & ATF_POINTER) {
+               /* Member is a pointer to another structure */
+               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+       } else {
+               memb_ptr = (char *)st + elm->memb_offset;
+               memb_ptr2 = &memb_ptr;
+       }
+       ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name);
+
+       if(ct && ct->range_bits >= 0) {
+               rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+                       elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+       } else {
+               rv = uper_open_type_get(opt_codec_ctx, elm->type,
+                       elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+       }
+
+       if(rv.code != RC_OK)
+               ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d",
+                       elm->name, td->name, rv.code);
+       return rv;
+}
+
+asn_enc_rval_t
+CHOICE_encode_uper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+       const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       asn_TYPE_member_t *elm; /* CHOICE's element */
+       const asn_per_constraint_t *ct;
+       const void *memb_ptr;
+       unsigned present;
+       int present_enc;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Encoding %s as CHOICE", td->name);
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ct = 0;
+
+       present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+
+       /*
+        * If the structure was not initialized properly, it cannot be encoded:
+        * can't deduce what to encode in the choice type.
+        */
+       if(present == 0 || present > td->elements_count)
+               ASN__ENCODE_FAILED;
+       else
+               present--;
+
+       ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present);
+
+    /* Adjust if canonical order is different from natural order */
+    if(specs->to_canonical_order)
+        present_enc = specs->to_canonical_order[present];
+    else
+        present_enc = present;
+
+    if(ct && ct->range_bits >= 0) {
+               if(present_enc < ct->lower_bound
+               || present_enc > ct->upper_bound) {
+                       if(ct->flags & APC_EXTENSIBLE) {
+                ASN_DEBUG(
+                    "CHOICE member %d (enc %d) is an extension (%ld..%ld)",
+                    present, present_enc, ct->lower_bound, ct->upper_bound);
+                if(per_put_few_bits(po, 1, 1))
+                                       ASN__ENCODE_FAILED;
+                       } else {
+                               ASN__ENCODE_FAILED;
+                       }
+                       ct = 0;
+               }
+       }
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+        ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)",
+                  present, present_enc, ct->lower_bound, ct->upper_bound);
+        if(per_put_few_bits(po, 0, 1))
+                       ASN__ENCODE_FAILED;
+    }
+
+
+       elm = &td->elements[present];
+    ASN_DEBUG("CHOICE member \"%s\" %d (as %d)", elm->name, present,
+              present_enc);
+    if(elm->flags & ATF_POINTER) {
+               /* Member is a pointer to another structure */
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+       } else {
+        memb_ptr = (const char *)sptr + elm->memb_offset;
+    }
+
+    if(ct && ct->range_bits >= 0) {
+        if(per_put_few_bits(po, present_enc, ct->range_bits))
+            ASN__ENCODE_FAILED;
+
+        return elm->type->op->uper_encoder(
+            elm->type, elm->encoding_constraints.per_constraints, memb_ptr, po);
+    } else {
+        asn_enc_rval_t rval = {0,0,0};
+        if(specs->ext_start == -1) ASN__ENCODE_FAILED;
+        if(uper_put_nsnnwn(po, present_enc - specs->ext_start))
+            ASN__ENCODE_FAILED;
+        if(uper_open_type_put(elm->type,
+                              elm->encoding_constraints.per_constraints,
+                              memb_ptr, po))
+            ASN__ENCODE_FAILED;
+        rval.encoded = 0;
+        ASN__ENCODED_OK(rval);
+    }
+}
+
+asn_dec_rval_t
+CHOICE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       asn_dec_rval_t rv;
+       const asn_per_constraint_t *ct;
+       const asn_per_constraint_t *ext_ct = NULL;
+       asn_TYPE_member_t *elm; /* CHOICE's element */
+       void *memb_ptr;
+       void **memb_ptr2;
+       void *st = *sptr;
+       int value;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ct = 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               value = per_get_few_bits(pd, 1);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value) {
+                 ext_ct = ct;
+                 ct = 0;       /* Not restricted */
+               }
+       }
+
+
+       if(ct && ct->range_bits >= 0) {
+               value = per_get_few_bits(pd, ct->range_bits);
+               if(value < 0) ASN__DECODE_STARVED;
+               ASN_DEBUG("CHOICE %s got index %d in range %d",
+                         td->name, value, ct->range_bits);
+               if(value > ct->upper_bound)
+                       ASN__DECODE_FAILED;
+       } else {
+               if(specs->ext_start == -1)
+                       ASN__DECODE_FAILED;
+               value = aper_get_nsnnwn(pd, ext_ct->range_bits);
+               if(value < 0) ASN__DECODE_STARVED;
+               value += specs->ext_start;
+               if((unsigned)value >= td->elements_count)
+                       ASN__DECODE_FAILED;
+       }
+
+       /* Adjust if canonical order is different from natural order */
+       if(specs->from_canonical_order)
+               value = specs->from_canonical_order[value];
+
+       /* Set presence to be able to free it later */
+       _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1);
+
+       elm = &td->elements[value];
+       if(elm->flags & ATF_POINTER) {
+               /* Member is a pointer to another structure */
+               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+       } else {
+               memb_ptr = (char *)st + elm->memb_offset;
+               memb_ptr2 = &memb_ptr;
+       }
+       ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name);
+
+       if(ct && ct->range_bits >= 0) {
+               rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+                                                elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+       } else {
+               rv = aper_open_type_get(opt_codec_ctx, elm->type,
+                                       elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+       }
+
+       if(rv.code != RC_OK)
+               ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d",
+                         elm->name, td->name, rv.code);
+       return rv;
+}
+
+asn_enc_rval_t
+CHOICE_encode_aper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   const void *sptr, asn_per_outp_t *po) {
+       const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *elm; /* CHOICE's element */
+       const asn_per_constraint_t *ct = NULL;
+       const asn_per_constraint_t *ext_ct = NULL;
+       const void *memb_ptr;
+       unsigned present;
+       int present_enc;
+       
+       if(!sptr) ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name);
+
+       if(constraints) ct = &constraints->value;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->value;
+       else ct = NULL;
+
+       present = _fetch_present_idx(sptr,
+                                    specs->pres_offset, specs->pres_size);
+
+       /*
+        * If the structure was not initialized properly, it cannot be encoded:
+        * can't deduce what to encode in the choice type.
+        */
+       if(present <= 0 || (unsigned)present > td->elements_count)
+               ASN__ENCODE_FAILED;
+       else
+               present--;
+
+       /* Adjust if canonical order is different from natural order */
+       if(specs->to_canonical_order)
+               present_enc = specs->to_canonical_order[present];
+       else
+               present_enc = present;
+       
+       ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present);
+
+       if(ct && (ct->range_bits >= 0)) {
+         // Value is not within the range of the primary values ?
+         if(present < ct->lower_bound || present > ct->upper_bound) {
+           if(ct->flags & APC_EXTENSIBLE) {
+             ASN_DEBUG("CHOICE member %d (enc %d) is an extension (%ld..%ld)",
+                       present, present_enc, ct->lower_bound, ct->upper_bound);
+             // X691/23.5 Extension marker = 1 
+             if(per_put_few_bits(po, 1, 1)) {
+               ASN__ENCODE_FAILED;
+             }
+           } else {
+             ASN__ENCODE_FAILED;
+           }
+           // no more need of constraint.
+           ext_ct = ct;
+           ct = NULL;
+         }
+       }
+       
+       if(ct && (ct->flags & APC_EXTENSIBLE)) {
+         ASN_DEBUG("CHOICE member %d (enc %d) is not an extension (%ld..%ld)",
+                   present, present, ct->lower_bound, ct->upper_bound);
+         // X691.23.5 Extension marker = 0
+         if(per_put_few_bits(po, 0, 1)) {
+           ASN__ENCODE_FAILED;
+         }
+       }
+
+       elm = &td->elements[present];
+       if(elm->flags & ATF_POINTER) {
+               /* Member is a pointer to another structure */
+               memb_ptr = *(const void *const *)((const char *)sptr + elm->memb_offset);
+               if(!memb_ptr) ASN__ENCODE_FAILED;
+       } else {
+               memb_ptr = (const char *)sptr + elm->memb_offset;
+       }
+
+       if(ct && (ct->range_bits >= 0)) {
+               // By construction (ct != 0), the alternative value is a non extended one.
+               // X691/23.7 X691/23.6 alternative value encoded as a range_bits bits value.
+               if(per_put_few_bits(po, present_enc, ct->range_bits))
+                       ASN__ENCODE_FAILED;
+
+               return elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints,
+                                                  memb_ptr, po);
+       } else {
+               asn_enc_rval_t rval = {0,0,0};
+               if(specs->ext_start == -1)
+                       ASN__ENCODE_FAILED;
+               // X691/23.8 normally encoded as a small non negative whole number
+               
+               if(ext_ct && aper_put_nsnnwn(po, ext_ct->range_bits, present_enc - specs->ext_start))
+                       ASN__ENCODE_FAILED;
+               if(aper_open_type_put(elm->type, elm->encoding_constraints.per_constraints,
+                                     memb_ptr, po))
+                       ASN__ENCODE_FAILED;
+               rval.encoded = 0;
+               ASN__ENCODED_OK(rval);
+       }
+}
+
+int
+CHOICE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+             asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_CHOICE_specifics_t *specs = (const asn_CHOICE_specifics_t *)td->specifics;
+       unsigned present;
+
+       if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
+
+       /*
+        * Print that element.
+        */
+       if(present > 0 && present <= td->elements_count) {
+               asn_TYPE_member_t *elm = &td->elements[present-1];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               /* Print member's name and stuff */
+               if(0) {
+                       if(cb(elm->name, strlen(elm->name), app_key) < 0
+                       || cb(": ", 2, app_key) < 0)
+                               return -1;
+               }
+
+               return elm->type->op->print_struct(elm->type, memb_ptr, ilevel,
+                       cb, app_key);
+       } else {
+               return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+       }
+}
+
+void
+CHOICE_free(const asn_TYPE_descriptor_t *td, void *ptr,
+            enum asn_struct_free_method method) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+       if(!td || !ptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as CHOICE", td->name);
+
+       /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
+
+       /*
+        * Free that element.
+        */
+       if(present > 0 && present <= td->elements_count) {
+               asn_TYPE_member_t *elm = &td->elements[present-1];
+               void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
+                       if(memb_ptr)
+                               ASN_STRUCT_FREE(*elm->type, memb_ptr);
+               } else {
+                       memb_ptr = (void *)((char *)ptr + elm->memb_offset);
+                       ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
+               }
+       }
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(ptr, 0, specs->struct_size);
+        break;
+    }
+}
+
+
+/*
+ * The following functions functions offer protection against -fshort-enums,
+ * compatible with little- and big-endian machines.
+ * If assertion is triggered, either disable -fshort-enums, or add an entry
+ * here with the ->pres_size of your target stracture.
+ * Unless the target structure is packed, the ".present" member
+ * is guaranteed to be aligned properly. ASN.1 compiler itself does not
+ * produce packed code.
+ */
+static unsigned
+_fetch_present_idx(const void *struct_ptr, unsigned pres_offset,
+                   unsigned pres_size) {
+    const void *present_ptr;
+       unsigned present;
+
+       present_ptr = ((const char *)struct_ptr) + pres_offset;
+
+       switch(pres_size) {
+       case sizeof(int):       present = *(const unsigned int *)present_ptr; break;
+       case sizeof(short):     present = *(const unsigned short *)present_ptr; break;
+       case sizeof(char):      present = *(const unsigned char *)present_ptr; break;
+       default:
+               /* ANSI C mandates enum to be equivalent to integer */
+               assert(pres_size != sizeof(int));
+               return 0;       /* If not aborted, pass back safe value */
+       }
+
+       return present;
+}
+
+static void
+_set_present_idx(void *struct_ptr, unsigned pres_offset, unsigned pres_size,
+                 unsigned present) {
+    void *present_ptr;
+       present_ptr = ((char *)struct_ptr) + pres_offset;
+
+       switch(pres_size) {
+       case sizeof(int):       *(unsigned int *)present_ptr   = present; break;
+       case sizeof(short):     *(unsigned short *)present_ptr = present; break;
+       case sizeof(char):      *(unsigned char *)present_ptr  = present; break;
+       default:
+               /* ANSI C mandates enum to be equivalent to integer */
+               assert(pres_size != sizeof(int));
+       }
+}
+
+static const void *
+_get_member_ptr(const asn_TYPE_descriptor_t *td, const void *sptr,
+                asn_TYPE_member_t **elm_ptr, unsigned *present_out) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned present;
+
+    if(!sptr) {
+        *elm_ptr = NULL;
+        *present_out = 0;
+        return NULL;
+    }
+
+    /*
+        * Figure out which CHOICE element is encoded.
+        */
+       present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+    *present_out = present;
+
+    /*
+     * The presence index is intentionally 1-based to avoid
+     * treating zeroed structure as a valid one.
+     */
+       if(present > 0 && present <= td->elements_count) {
+        asn_TYPE_member_t *const elm = &td->elements[present - 1];
+        const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+        *elm_ptr = elm;
+        return memb_ptr;
+    } else {
+        *elm_ptr = NULL;
+        return NULL;
+    }
+
+}
+
+int
+CHOICE_compare(const asn_TYPE_descriptor_t *td, const void *aptr, const void *bptr) {
+    asn_TYPE_member_t *aelm;
+    asn_TYPE_member_t *belm;
+    unsigned apresent = 0;
+    unsigned bpresent = 0;
+    const void *amember = _get_member_ptr(td, aptr, &aelm, &apresent);
+    const void *bmember = _get_member_ptr(td, bptr, &belm, &bpresent);
+
+    if(amember && bmember) {
+        if(apresent == bpresent) {
+            assert(aelm == belm);
+            return aelm->type->op->compare_struct(aelm->type, amember, bmember);
+        } else if(apresent < bpresent) {
+            return -1;
+        } else {
+            return 1;
+        }
+    } else if(!amember) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+/*
+ * Return the 1-based choice variant presence index.
+ * Returns 0 in case of error.
+ */
+unsigned
+CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, const void *sptr) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    return _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+}
+
+/*
+ * Sets or resets the 1-based choice variant presence index.
+ * In case a previous index is not zero, the currently selected structure
+ * member is freed and zeroed-out first.
+ * Returns 0 on success and -1 on error.
+ */
+int
+CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, void *sptr,
+                            unsigned present) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    unsigned old_present;
+
+    if(!sptr) {
+        return -1;
+    }
+
+    if(present > td->elements_count)
+        return -1;
+
+    old_present =
+        _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size);
+    if(present == old_present)
+        return 0;
+
+    if(old_present != 0) {
+        assert(old_present <= td->elements_count);
+        ASN_STRUCT_RESET(*td, sptr);
+    }
+
+    _set_present_idx(sptr, specs->pres_offset, specs->pres_size, present);
+
+    return 0;
+}
+
+
+asn_random_fill_result_t
+CHOICE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constr,
+                   size_t max_length) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_random_fill_result_t res;
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    const asn_TYPE_member_t *elm;
+    unsigned present;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *st = *sptr;
+
+    if(max_length == 0) return result_skipped;
+
+    (void)constr;
+
+    if(st == NULL) {
+        st = CALLOC(1, specs->struct_size);
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    present = asn_random_between(1, td->elements_count);
+    elm = &td->elements[present - 1];
+
+       if(elm->flags & ATF_POINTER) {
+               /* Member is a pointer to another structure */
+               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+       } else {
+               memb_ptr = (char *)st + elm->memb_offset;
+               memb_ptr2 = &memb_ptr;
+       }
+
+    res = elm->type->op->random_fill(elm->type, memb_ptr2,
+                                    &elm->encoding_constraints, max_length);
+    _set_present_idx(st, specs->pres_offset, specs->pres_size, present);
+    if(res.code == ARFILL_OK) {
+        *sptr = st;
+    } else {
+        if(st == *sptr) {
+            ASN_STRUCT_RESET(*td, st);
+        } else {
+            ASN_STRUCT_FREE(*td, st);
+        }
+    }
+
+    return res;
+}
+
+
+asn_TYPE_operation_t asn_OP_CHOICE = {
+       CHOICE_free,
+       CHOICE_print,
+       CHOICE_compare,
+       CHOICE_decode_ber,
+       CHOICE_encode_der,
+       CHOICE_decode_xer,
+       CHOICE_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       CHOICE_decode_oer,
+       CHOICE_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       CHOICE_decode_uper,
+       CHOICE_encode_uper,
+       CHOICE_decode_aper,
+       CHOICE_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       CHOICE_random_fill,
+       CHOICE_outmost_tag
+};
diff --git a/skeletons/constr_CHOICE.h b/skeletons/constr_CHOICE.h
new file mode 100644 (file)
index 0000000..a1999ed
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _CONSTR_CHOICE_H_
+#define        _CONSTR_CHOICE_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_CHOICE_specifics_s {
+       /*
+        * Target structure description.
+        */
+       unsigned struct_size;       /* Size of the target structure. */
+       unsigned ctx_offset;        /* Offset of the asn_codec_ctx_t member */
+       unsigned pres_offset;       /* Identifier of the present member */
+       unsigned pres_size;         /* Size of the identifier (enum) */
+
+       /*
+        * Tags to members mapping table.
+        */
+       const asn_TYPE_tag2member_t *tag2el;
+       unsigned tag2el_count;
+
+       /* Canonical ordering of CHOICE elements, for PER */
+       const unsigned *to_canonical_order;
+       const unsigned *from_canonical_order;
+
+       /*
+        * Extensions-related stuff.
+        */
+       signed ext_start; /* First member of extensions, or -1 */
+} asn_CHOICE_specifics_t;
+
+/*
+ * A set specialized functions dealing with the CHOICE type.
+ */
+asn_struct_free_f CHOICE_free;
+asn_struct_print_f CHOICE_print;
+asn_struct_compare_f CHOICE_compare;
+asn_constr_check_f CHOICE_constraint;
+ber_type_decoder_f CHOICE_decode_ber;
+der_type_encoder_f CHOICE_encode_der;
+xer_type_decoder_f CHOICE_decode_xer;
+xer_type_encoder_f CHOICE_encode_xer;
+oer_type_decoder_f CHOICE_decode_oer;
+oer_type_encoder_f CHOICE_encode_oer;
+per_type_decoder_f CHOICE_decode_uper;
+per_type_encoder_f CHOICE_encode_uper;
+per_type_decoder_f CHOICE_decode_aper;
+per_type_encoder_f CHOICE_encode_aper;
+asn_outmost_tag_f CHOICE_outmost_tag;
+asn_random_fill_f CHOICE_random_fill;
+extern asn_TYPE_operation_t asn_OP_CHOICE;
+
+/*
+ * Return the 1-based choice variant presence index.
+ * Returns 0 in case of error.
+ */
+unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td,
+                                     const void *structure_ptr);
+
+/*
+ * Sets or resets the 1-based choice variant presence index.
+ * In case a previous index is not zero, the currently selected structure
+ * member is freed and zeroed-out first.
+ * Returns 0 on success and -1 on error.
+ */
+int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td,
+                                void *structure_ptr, unsigned present);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_CHOICE_H_ */
diff --git a/skeletons/constr_CHOICE_oer.c b/skeletons/constr_CHOICE_oer.c
new file mode 100644 (file)
index 0000000..a4c591c
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <constr_CHOICE.h>
+#include <errno.h>
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef  RETURN
+#define RETURN(_code)                    \
+    do {                                 \
+        asn_dec_rval_t rval;             \
+        rval.code = _code;               \
+        rval.consumed = consumed_myself; \
+        return rval;                     \
+    } while(0)
+
+#undef  ADVANCE
+#define ADVANCE(num_bytes)               \
+    do {                                 \
+        size_t num = num_bytes;          \
+        ptr = ((const char *)ptr) + num; \
+        size -= num;                     \
+        consumed_myself += num;          \
+    } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef  NEXT_PHASE
+#define NEXT_PHASE(ctx) \
+    do {                \
+        ctx->phase++;   \
+        ctx->step = 0;  \
+    } while(0)
+#undef  SET_PHASE
+#define SET_PHASE(ctx, value) \
+    do {                      \
+        ctx->phase = value;   \
+        ctx->step = 0;        \
+    } while(0)
+
+/*
+ * Tags are canonically sorted in the tag to member table.
+ */
+static int
+_search4tag(const void *ap, const void *bp) {
+    const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+    const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+    int a_class = BER_TAG_CLASS(a->el_tag);
+    int b_class = BER_TAG_CLASS(b->el_tag);
+
+    if(a_class == b_class) {
+        ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+        ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+        if(a_value == b_value)
+            return 0;
+        else if(a_value < b_value)
+            return -1;
+        else
+            return 1;
+    } else if(a_class < b_class) {
+        return -1;
+    } else {
+        return 1;
+    }
+}
+
+/*
+ * X.696 (08/2015) #8.7 Encoding of tags
+ */
+static ssize_t
+oer_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) {
+    ber_tlv_tag_t val;
+    ber_tlv_tag_t tclass;
+    size_t skipped;
+
+    if(size == 0)
+        return 0;
+
+    val = *(const uint8_t *)ptr;
+    tclass = (val >> 6);
+    if((val & 0x3F) != 0x3F) {
+        /* #8.7.1 */
+        *tag_r = ((val & 0x3F) << 2) | tclass;
+        return 1;
+    }
+
+    /*
+     * Each octet contains 7 bits of useful information.
+     * The MSB is 0 if it is the last octet of the tag.
+     */
+    for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size;
+        ptr = ((const char *)ptr) + 1, skipped++) {
+        unsigned int oct = *(const uint8_t *)ptr;
+        if(oct & 0x80) {
+            val = (val << 7) | (oct & 0x7F);
+            /*
+             * Make sure there are at least 9 bits spare
+             * at the MS side of a value.
+             */
+            if(val >> ((8 * sizeof(val)) - 9)) {
+                /*
+                 * We would not be able to accomodate
+                 * any more tag bits.
+                 */
+                return -1;
+            }
+        } else {
+            val = (val << 7) | oct;
+            *tag_r = (val << 2) | tclass;
+            return skipped;
+        }
+    }
+
+    return 0; /* Want more */
+}
+
+asn_dec_rval_t
+CHOICE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td,
+                  const asn_oer_constraints_t *constraints, void **struct_ptr,
+                  const void *ptr, size_t size) {
+    /*
+     * Bring closer parts of structure description.
+     */
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_TYPE_member_t *elements = td->elements;
+
+    /*
+     * Parts of the structure being constructed.
+     */
+    void *st = *struct_ptr; /* Target structure. */
+    asn_struct_ctx_t *ctx;  /* Decoder context */
+
+    ssize_t consumed_myself = 0; /* Consumed bytes from ptr */
+
+    (void)constraints;
+
+    ASN_DEBUG("Decoding %s as CHOICE", td->name);
+
+    /*
+     * Create the target structure if it is not present already.
+     */
+    if(st == 0) {
+        st = *struct_ptr = CALLOC(1, specs->struct_size);
+        if(st == 0) {
+            RETURN(RC_FAIL);
+        }
+    }
+
+    /*
+     * Restore parsing context.
+     */
+    ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+    switch(ctx->phase) {
+    case 0: {
+        /*
+         * Discover the tag.
+         */
+        ber_tlv_tag_t tlv_tag; /* T from TLV */
+        ssize_t tag_len;       /* Length of TLV's T */
+
+        tag_len = oer_fetch_tag(ptr, size, &tlv_tag);
+        switch(tag_len) {
+        case 0:
+            ASN__DECODE_STARVED;
+        case -1:
+            ASN__DECODE_FAILED;
+        }
+
+        do {
+            const asn_TYPE_tag2member_t *t2m;
+            asn_TYPE_tag2member_t key = {0, 0, 0, 0};
+            key.el_tag = tlv_tag;
+
+            t2m = (const asn_TYPE_tag2member_t *)bsearch(
+                &key, specs->tag2el, specs->tag2el_count,
+                sizeof(specs->tag2el[0]), _search4tag);
+            if(t2m) {
+                /*
+                 * Found the element corresponding to the tag.
+                 */
+                NEXT_PHASE(ctx);
+                ctx->step = t2m->el_no;
+                break;
+            } else if(specs->ext_start == -1) {
+                ASN_DEBUG(
+                    "Unexpected tag %s "
+                    "in non-extensible CHOICE %s",
+                    ber_tlv_tag_string(tlv_tag), td->name);
+                RETURN(RC_FAIL);
+            } else {
+                /* Skip open type extension */
+                ASN_DEBUG(
+                    "Not implemented skipping open type extension for tag %s",
+                    ber_tlv_tag_string(tlv_tag));
+                RETURN(RC_FAIL);
+            }
+        } while(0);
+
+
+        ADVANCE(tag_len);
+    }
+        /* Fall through */
+    case 1: {
+        asn_TYPE_member_t *elm = &elements[ctx->step]; /* CHOICE's element */
+        void *memb_ptr;         /* Pointer to the member */
+        void **memb_ptr2;       /* Pointer to that pointer */
+        asn_dec_rval_t rval = {0,0};
+
+        /*
+         * Compute the position of the member inside a structure,
+         * and also a type of containment (it may be contained
+         * as pointer or using inline inclusion).
+         */
+        if(elm->flags & ATF_POINTER) {
+            /* Member is a pointer to another structure */
+            memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+        } else {
+            /*
+             * A pointer to a pointer
+             * holding the start of the structure
+             */
+            memb_ptr = (char *)st + elm->memb_offset;
+            memb_ptr2 = &memb_ptr;
+        }
+
+        /* Set presence to be able to free it properly at any time */
+        (void)CHOICE_variant_set_presence(td, st, ctx->step + 1);
+
+        if(specs->ext_start >= 0 && specs->ext_start <= ctx->step) {
+            ssize_t got =
+                oer_open_type_get(opt_codec_ctx, elm->type,
+                                  elm->encoding_constraints.oer_constraints,
+                                  memb_ptr2, ptr, size);
+            if(got < 0) ASN__DECODE_FAILED;
+            if(got == 0) ASN__DECODE_STARVED;
+            rval.code = RC_OK;
+            rval.consumed = got;
+        } else {
+            rval = elm->type->op->oer_decoder(
+                opt_codec_ctx, elm->type,
+                elm->encoding_constraints.oer_constraints, memb_ptr2, ptr,
+                size);
+        }
+        rval.consumed += consumed_myself;
+        switch(rval.code) {
+        case RC_OK:
+            NEXT_PHASE(ctx);
+        case RC_WMORE:
+            break;
+        case RC_FAIL:
+            SET_PHASE(ctx, 3);  /* => 3 */
+        }
+        return rval;
+    }
+    case 2:
+        /* Already decoded everything */
+        RETURN(RC_OK);
+    case 3:
+        /* Failed to decode, after all */
+        RETURN(RC_FAIL);
+    }
+
+    RETURN(RC_FAIL);
+}
+
+/*
+ * X.696 (08/2015) #8.7 Encoding of tags
+ */
+static ssize_t
+oer_put_tag(ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
+    uint8_t tclass = BER_TAG_CLASS(tag);
+    ber_tlv_tag_t tval = BER_TAG_VALUE(tag);
+
+    if(tval < 0x3F) {
+        uint8_t b = (uint8_t)((tclass << 6) | tval);
+        if(cb(&b, 1, app_key) < 0) {
+            return -1;
+        }
+        return 1;
+    } else {
+        uint8_t buf[1 + 2 * sizeof(tval)];
+        uint8_t *b = &buf[sizeof(buf)-1]; /* Last addressable */
+        size_t encoded;
+        for(; ; tval >>= 7) {
+            if(tval >> 7) {
+                *b-- = 0x80 | (tval & 0x7f);
+            } else {
+                *b-- = tval & 0x7f;
+                break;
+            }
+        }
+        *b = (uint8_t)((tclass << 6) | 0x3F);
+        encoded = sizeof(buf) - (b - buf);
+        if(cb(b, encoded, app_key) < 0) {
+            return -1;
+        }
+        return encoded;
+    }
+
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+CHOICE_encode_oer(const asn_TYPE_descriptor_t *td,
+                  const asn_oer_constraints_t *constraints, const void *sptr,
+                  asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_CHOICE_specifics_t *specs =
+        (const asn_CHOICE_specifics_t *)td->specifics;
+    asn_TYPE_member_t *elm; /* CHOICE element */
+    unsigned present;
+    const void *memb_ptr;
+    ber_tlv_tag_t tag;
+    ssize_t tag_len;
+    asn_enc_rval_t er = {0, 0, 0};
+
+    (void)constraints;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    ASN_DEBUG("OER %s encoding as CHOICE", td->name);
+
+    present = CHOICE_variant_get_presence(td, sptr);
+    if(present == 0 || present > td->elements_count) {
+        ASN_DEBUG("CHOICE %s member is not selected", td->name);
+        ASN__ENCODE_FAILED;
+    }
+
+    elm = &td->elements[present-1];
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr =
+            *(const void *const *)((const char *)sptr + elm->memb_offset);
+        if(memb_ptr == 0) {
+            /* Mandatory element absent */
+            ASN__ENCODE_FAILED;
+        }
+    } else {
+        memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+    }
+
+    tag = asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag);
+    if(tag == 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    tag_len = oer_put_tag(tag, cb, app_key);
+    if(tag_len < 0) {
+        ASN__ENCODE_FAILED;
+    }
+
+    if(specs->ext_start >= 0 && (unsigned)specs->ext_start <= (present-1)) {
+        ssize_t encoded = oer_open_type_put(elm->type,
+                               elm->encoding_constraints.oer_constraints,
+                               memb_ptr, cb, app_key);
+        if(encoded < 0) ASN__ENCODE_FAILED;
+        er.encoded = tag_len + encoded;
+    } else {
+        er = elm->type->op->oer_encoder(
+            elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb,
+            app_key);
+        if(er.encoded >= 0) er.encoded += tag_len;
+    }
+
+    return er;
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
new file mode 100644 (file)
index 0000000..43dcac7
--- /dev/null
@@ -0,0 +1,2059 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SEQUENCE.h>
+#include <OPEN_TYPE.h>
+#include <per_opentype.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define        LEFT    ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define        SIZE_VIOLATION  (ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {            \
+               size_t num = num_bytes;         \
+               ptr = ((const char *)ptr) + num; \
+               size -= num;                    \
+               if(ctx->left >= 0)              \
+                       ctx->left -= num;       \
+               consumed_myself += num;         \
+       } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef NEXT_PHASE
+#undef PHASE_OUT
+#define        NEXT_PHASE(ctx) do {                    \
+               ctx->phase++;                   \
+               ctx->step = 0;                  \
+       } while(0)
+#define        PHASE_OUT(ctx)  do { ctx->phase = 10; } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef RETURN
+#define        RETURN(_code)   do {                    \
+               rval.code = _code;              \
+               rval.consumed = consumed_myself;\
+               return rval;                    \
+       } while(0)
+
+/*
+ * Check whether we are inside the extensions group.
+ */
+#define IN_EXTENSION_GROUP(specs, memb_idx) \
+    ((specs)->first_extension >= 0          \
+     && (unsigned)(specs)->first_extension <= (memb_idx))
+
+/*
+ * Tags are canonically sorted in the tag2element map.
+ */
+static int
+_t2e_cmp(const void *ap, const void *bp) {
+       const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+       const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+       int a_class = BER_TAG_CLASS(a->el_tag);
+       int b_class = BER_TAG_CLASS(b->el_tag);
+
+       if(a_class == b_class) {
+               ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+               ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+               if(a_value == b_value) {
+                       if(a->el_no > b->el_no)
+                               return 1;
+                       /*
+                        * Important: we do not check
+                        * for a->el_no <= b->el_no!
+                        */
+                       return 0;
+               } else if(a_value < b_value)
+                       return -1;
+               else
+                       return 1;
+       } else if(a_class < b_class) {
+               return -1;
+       } else {
+               return 1;
+       }
+}
+
+
+/*
+ * The decoder of the SEQUENCE type.
+ */
+asn_dec_rval_t
+SEQUENCE_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                    const void *ptr, size_t size, int tag_mode) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elements = td->elements;
+
+    /*
+        * Parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       ber_tlv_tag_t tlv_tag;  /* T from TLV */
+       asn_dec_rval_t rval;    /* Return code from subparsers */
+
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+       size_t edx;                     /* SEQUENCE element's index */
+
+       ASN_DEBUG("Decoding %s as SEQUENCE", td->name);
+       
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) {
+                       RETURN(RC_FAIL);
+               }
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+       
+       /*
+        * Start to parse where left previously
+        */
+       switch(ctx->phase) {
+       case 0:
+               /*
+                * PHASE 0.
+                * Check that the set of tags associated with given structure
+                * perfectly fits our expectations.
+                */
+
+               rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+                       tag_mode, 1, &ctx->left, 0);
+               if(rval.code != RC_OK) {
+                       ASN_DEBUG("%s tagging check failed: %d",
+                               td->name, rval.code);
+                       return rval;
+               }
+
+               if(ctx->left >= 0)
+                       ctx->left += rval.consumed; /* ?Substracted below! */
+               ADVANCE(rval.consumed);
+
+               NEXT_PHASE(ctx);
+
+               ASN_DEBUG("Structure consumes %ld bytes, buffer %ld",
+                       (long)ctx->left, (long)size);
+
+               /* Fall through */
+       case 1:
+               /*
+                * PHASE 1.
+                * From the place where we've left it previously,
+                * try to decode the next member from the list of
+                * this structure's elements.
+                * (ctx->step) stores the member being processed
+                * between invocations and the microphase {0,1} of parsing
+                * that member:
+                *      step = (<member_number> * 2 + <microphase>).
+                */
+         for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count;
+                       edx++, ctx->step = (ctx->step & ~1) + 2) {
+               void *memb_ptr;         /* Pointer to the member */
+               void **memb_ptr2;       /* Pointer to that pointer */
+               ssize_t tag_len;        /* Length of TLV's T */
+               size_t opt_edx_end;     /* Next non-optional element */
+               size_t n;
+               int use_bsearch;
+
+               if(ctx->step & 1)
+                       goto microphase2;
+
+               /*
+                * MICROPHASE 1: Synchronize decoding.
+                */
+               ASN_DEBUG("In %s SEQUENCE left %d, edx=%" ASN_PRI_SIZE " flags=%d"
+                               " opt=%d ec=%d",
+                       td->name, (int)ctx->left, edx,
+                       elements[edx].flags, elements[edx].optional,
+                       td->elements_count);
+
+        if(ctx->left == 0 /* No more stuff is expected */
+           && (
+                  /* Explicit OPTIONAL specification reaches the end */
+                  (edx + elements[edx].optional == td->elements_count) ||
+                  /* All extensions are optional */
+                  IN_EXTENSION_GROUP(specs, edx))) {
+            ASN_DEBUG("End of SEQUENCE %s", td->name);
+            /*
+             * Found the legitimate end of the structure.
+             */
+            PHASE_OUT(ctx);
+            RETURN(RC_OK);
+        }
+
+               /*
+                * Fetch the T from TLV.
+                */
+               tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+               ASN_DEBUG("Current tag in %s SEQUENCE for element %" ASN_PRI_SIZE " "
+                       "(%s) is %s encoded in %d bytes, of frame %ld",
+                       td->name, edx, elements[edx].name,
+                       ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT);
+               switch(tag_len) {
+               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                       /* Fall through */
+               case -1: RETURN(RC_FAIL);
+               }
+
+        if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
+            if(LEFT < 2) {
+                if(SIZE_VIOLATION) {
+                    RETURN(RC_FAIL);
+                } else {
+                    RETURN(RC_WMORE);
+                }
+            } else if(((const uint8_t *)ptr)[1] == 0) {
+                ASN_DEBUG("edx = %" ASN_PRI_SIZE ", opt = %d, ec=%d", edx,
+                          elements[edx].optional, td->elements_count);
+                if((edx + elements[edx].optional == td->elements_count)
+                   || IN_EXTENSION_GROUP(specs, edx)) {
+                    /*
+                     * Yeah, baby! Found the terminator
+                     * of the indefinite length structure.
+                     */
+                    /*
+                     * Proceed to the canonical
+                     * finalization function.
+                     * No advancing is necessary.
+                     */
+                    goto phase3;
+                }
+            }
+        }
+
+               /*
+                * Find the next available type with this tag.
+                */
+               use_bsearch = 0;
+               opt_edx_end = edx + elements[edx].optional + 1;
+               if(opt_edx_end > td->elements_count)
+                       opt_edx_end = td->elements_count;       /* Cap */
+               else if(opt_edx_end - edx > 8) {
+                       /* Limit the scope of linear search... */
+                       opt_edx_end = edx + 8;
+                       use_bsearch = 1;
+                       /* ... and resort to bsearch() */
+               }
+               for(n = edx; n < opt_edx_end; n++) {
+                       if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) {
+                               /*
+                                * Found element corresponding to the tag
+                                * being looked at.
+                                * Reposition over the right element.
+                                */
+                               edx = n;
+                               ctx->step = 1 + 2 * edx;        /* Remember! */
+                               goto microphase2;
+                       } else if(elements[n].flags & ATF_ANY_TYPE) {
+                               /*
+                                * This is the ANY type, which may bear
+                                * any flag whatsoever.
+                                */
+                               edx = n;
+                               ctx->step = 1 + 2 * edx;        /* Remember! */
+                               goto microphase2;
+                       } else if(elements[n].tag == (ber_tlv_tag_t)-1) {
+                               use_bsearch = 1;
+                               break;
+                       }
+               }
+               if(use_bsearch) {
+                       /*
+                        * Resort to a binary search over
+                        * sorted array of tags.
+                        */
+                       const asn_TYPE_tag2member_t *t2m;
+                       asn_TYPE_tag2member_t key = {0, 0, 0, 0};
+                       key.el_tag = tlv_tag;
+                       key.el_no = edx;
+                       t2m = (const asn_TYPE_tag2member_t *)bsearch(&key,
+                               specs->tag2el, specs->tag2el_count,
+                               sizeof(specs->tag2el[0]), _t2e_cmp);
+                       if(t2m) {
+                               const asn_TYPE_tag2member_t *best = 0;
+                               const asn_TYPE_tag2member_t *t2m_f, *t2m_l;
+                               size_t edx_max = edx + elements[edx].optional;
+                               /*
+                                * Rewind to the first element with that tag,
+                                * `cause bsearch() does not guarantee order.
+                                */
+                               t2m_f = t2m + t2m->toff_first;
+                               t2m_l = t2m + t2m->toff_last;
+                               for(t2m = t2m_f; t2m <= t2m_l; t2m++) {
+                                       if(t2m->el_no > edx_max) break;
+                                       if(t2m->el_no < edx) continue;
+                                       best = t2m;
+                               }
+                               if(best) {
+                                       edx = best->el_no;
+                                       ctx->step = 1 + 2 * edx;
+                                       goto microphase2;
+                               }
+                       }
+                       n = opt_edx_end;
+               }
+               if(n == opt_edx_end) {
+                       /*
+                        * If tag is unknown, it may be either
+                        * an unknown (thus, incorrect) tag,
+                        * or an extension (...),
+                        * or an end of the indefinite-length structure.
+                        */
+                       if(!IN_EXTENSION_GROUP(specs,
+                               edx + elements[edx].optional)) {
+                               ASN_DEBUG("Unexpected tag %s (at %" ASN_PRI_SIZE ")",
+                                       ber_tlv_tag_string(tlv_tag), edx);
+                               ASN_DEBUG("Expected tag %s (%s)%s",
+                                       ber_tlv_tag_string(elements[edx].tag),
+                                       elements[edx].name,
+                                       elements[edx].optional
+                                               ?" or alternatives":"");
+                               RETURN(RC_FAIL);
+                       } else {
+                               /* Skip this tag */
+                               ssize_t skip;
+                               edx += elements[edx].optional;
+
+                               ASN_DEBUG("Skipping unexpected %s (at %" ASN_PRI_SIZE ")",
+                                       ber_tlv_tag_string(tlv_tag), edx);
+                               skip = ber_skip_length(opt_codec_ctx,
+                                       BER_TLV_CONSTRUCTED(ptr),
+                                       (const char *)ptr + tag_len,
+                                       LEFT - tag_len);
+                               ASN_DEBUG("Skip length %d in %s",
+                                       (int)skip, td->name);
+                               switch(skip) {
+                               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                                       /* Fall through */
+                               case -1: RETURN(RC_FAIL);
+                               }
+
+                               ADVANCE(skip + tag_len);
+                               ctx->step -= 2;
+                               edx--;
+                               continue;  /* Try again with the next tag */
+                       }
+               }
+
+               /*
+                * MICROPHASE 2: Invoke the member-specific decoder.
+                */
+               ctx->step |= 1;         /* Confirm entering next microphase */
+       microphase2:
+               ASN_DEBUG("Inside SEQUENCE %s MF2", td->name);
+               
+               /*
+                * Compute the position of the member inside a structure,
+                * and also a type of containment (it may be contained
+                * as pointer or using inline inclusion).
+                */
+               if(elements[edx].flags & ATF_POINTER) {
+                       /* Member is a pointer to another structure */
+                       memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset);
+               } else {
+                       /*
+                        * A pointer to a pointer
+                        * holding the start of the structure
+                        */
+                       memb_ptr = (char *)st + elements[edx].memb_offset;
+                       memb_ptr2 = &memb_ptr;
+               }
+               /*
+                * Invoke the member fetch routine according to member's type
+                */
+               if(elements[edx].flags & ATF_OPEN_TYPE) {
+                       rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT);
+        } else {
+                       rval = elements[edx].type->op->ber_decoder(opt_codec_ctx,
+                                       elements[edx].type,
+                                       memb_ptr2, ptr, LEFT,
+                                       elements[edx].tag_mode);
+               }
+               ASN_DEBUG("In %s SEQUENCE decoded %" ASN_PRI_SIZE " %s of %d "
+                       "in %d bytes rval.code %d, size=%d",
+                       td->name, edx, elements[edx].type->name,
+                       (int)LEFT, (int)rval.consumed, rval.code, (int)size);
+               switch(rval.code) {
+               case RC_OK:
+                       break;
+               case RC_WMORE: /* More data expected */
+                       if(!SIZE_VIOLATION) {
+                               ADVANCE(rval.consumed);
+                               RETURN(RC_WMORE);
+                       }
+                       ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)",
+                               (long)ctx->left, (long)size);
+                       /* Fall through */
+               case RC_FAIL: /* Fatal error */
+                       RETURN(RC_FAIL);
+               } /* switch(rval) */
+               
+               ADVANCE(rval.consumed);
+         }     /* for(all structure members) */
+
+       phase3:
+               ctx->phase = 3;
+        /* Fall through */
+       case 3: /* 00 and other tags expected */
+       case 4: /* only 00's expected */
+
+               ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld",
+                       td->name, (long)ctx->left, (long)size);
+
+               /*
+                * Skip everything until the end of the SEQUENCE.
+                */
+               while(ctx->left) {
+                       ssize_t tl, ll;
+
+                       tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+                       switch(tl) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       /*
+                        * If expected <0><0>...
+                        */
+                       if(ctx->left < 0
+                               && ((const uint8_t *)ptr)[0] == 0) {
+                               if(LEFT < 2) {
+                                       if(SIZE_VIOLATION)
+                                               RETURN(RC_FAIL);
+                                       else
+                                               RETURN(RC_WMORE);
+                               } else if(((const uint8_t *)ptr)[1] == 0) {
+                                       /*
+                                        * Correctly finished with <0><0>.
+                                        */
+                                       ADVANCE(2);
+                                       ctx->left++;
+                                       ctx->phase = 4;
+                                       continue;
+                               }
+                       }
+
+                       if(!IN_EXTENSION_GROUP(specs, td->elements_count)
+                       || ctx->phase == 4) {
+                               ASN_DEBUG("Unexpected continuation "
+                                       "of a non-extensible type "
+                                       "%s (SEQUENCE): %s",
+                                       td->name,
+                                       ber_tlv_tag_string(tlv_tag));
+                               RETURN(RC_FAIL);
+                       }
+
+                       ll = ber_skip_length(opt_codec_ctx,
+                               BER_TLV_CONSTRUCTED(ptr),
+                               (const char *)ptr + tl, LEFT - tl);
+                       switch(ll) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       ADVANCE(tl + ll);
+               }
+
+               PHASE_OUT(ctx);
+       }
+       
+       RETURN(RC_OK);
+}
+
+
+/*
+ * The DER encoder of the SEQUENCE type.
+ */
+asn_enc_rval_t
+SEQUENCE_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int tag_mode, ber_tlv_tag_t tag,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t computed_size = 0;
+       asn_enc_rval_t erval = {0,0,0};
+       ssize_t ret;
+       size_t edx;
+
+       ASN_DEBUG("%s %s as SEQUENCE",
+               cb?"Encoding":"Estimating", td->name);
+
+       /*
+        * Gather the length of the underlying members sequence.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+
+               const void *memb_ptr;           /* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) {
+                               ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present",
+                                       elm->name, edx);
+                               if(elm->optional)
+                                       continue;
+                               /* Mandatory element is missing */
+                               ASN__ENCODE_FAILED;
+                       }
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+               }
+
+               /* Eliminate default values */
+               if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+                       continue;
+
+               erval = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+                       elm->tag_mode, elm->tag,
+                       0, 0);
+               if(erval.encoded == -1)
+                       return erval;
+               computed_size += erval.encoded;
+               ASN_DEBUG("Member %" ASN_PRI_SIZE " %s estimated %ld bytes",
+                       edx, elm->name, (long)erval.encoded);
+       }
+
+       /*
+        * Encode the TLV for the sequence itself.
+        */
+       ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
+       ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size);
+       if(ret == -1)
+               ASN__ENCODE_FAILED;
+       erval.encoded = computed_size + ret;
+
+       if(!cb) ASN__ENCODED_OK(erval);
+
+       /*
+        * Encode all members.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               asn_enc_rval_t tmperval = {0,0,0};
+        const void *memb_ptr;           /* Pointer to the member */
+        const void *const *memb_ptr2;   /* Pointer to that pointer */
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) continue;
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+               }
+
+               /* Eliminate default values */
+        if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+            continue;
+
+               tmperval = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+                       elm->tag_mode, elm->tag, cb, app_key);
+               if(tmperval.encoded == -1)
+                       return tmperval;
+               computed_size -= tmperval.encoded;
+               ASN_DEBUG("Member %" ASN_PRI_SIZE " %s of SEQUENCE %s encoded in %ld bytes",
+                       edx, elm->name, td->name, (long)tmperval.encoded);
+       }
+
+       if(computed_size != 0)
+               /*
+                * Encoded size is not equal to the computed size.
+                */
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(erval);
+}
+
+
+#undef XER_ADVANCE
+#define XER_ADVANCE(num_bytes)           \
+    do {                                 \
+        size_t num = (num_bytes);        \
+        ptr = ((const char *)ptr) + num; \
+        size -= num;                     \
+        consumed_myself += num;          \
+    } while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+SEQUENCE_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                    const char *opt_mname, const void *ptr, size_t size) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SEQUENCE_specifics_t *specs
+               = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       asn_TYPE_member_t *elements = td->elements;
+       const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+       /*
+        * ... and parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       asn_dec_rval_t rval;            /* Return value from a decoder */
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+       size_t edx;                     /* Element index */
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) RETURN(RC_FAIL);
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+
+       /*
+        * Phases of XER/XML processing:
+        * Phase 0: Check that the opening tag matches our expectations.
+        * Phase 1: Processing body and reacting on closing tag.
+        * Phase 2: Processing inner type.
+        * Phase 3: Skipping unknown extensions.
+        * Phase 4: PHASED OUT
+        */
+       for(edx = ctx->step; ctx->phase <= 3;) {
+               pxer_chunk_type_e ch_type;      /* XER chunk type */
+               ssize_t ch_size;                /* Chunk size */
+               xer_check_tag_e tcv;            /* Tag check value */
+               asn_TYPE_member_t *elm;
+
+               /*
+                * Go inside the inner member of a sequence.
+                */
+               if(ctx->phase == 2) {
+                       asn_dec_rval_t tmprval;
+                       void *memb_ptr_dontuse;         /* Pointer to the member */
+                       void **memb_ptr2;       /* Pointer to that pointer */
+
+                       elm = &td->elements[edx];
+
+                       if(elm->flags & ATF_POINTER) {
+                               /* Member is a pointer to another structure */
+                               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+                       } else {
+                               memb_ptr_dontuse = (char *)st + elm->memb_offset;
+                               memb_ptr2 = &memb_ptr_dontuse;  /* Only use of memb_ptr_dontuse */
+                       }
+
+                       if(elm->flags & ATF_OPEN_TYPE) {
+                               tmprval = OPEN_TYPE_xer_get(opt_codec_ctx, td, st, elm, ptr, size);
+                       } else {
+                               /* Invoke the inner type decoder, m.b. multiple times */
+                               tmprval = elm->type->op->xer_decoder(opt_codec_ctx,
+                                               elm->type, memb_ptr2, elm->name,
+                                               ptr, size);
+                       }
+                       XER_ADVANCE(tmprval.consumed);
+                       if(tmprval.code != RC_OK)
+                               RETURN(tmprval.code);
+                       ctx->phase = 1; /* Back to body processing */
+                       ctx->step = ++edx;
+                       ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d",
+                               ctx->phase, ctx->step);
+                       /* Fall through */
+               }
+
+               /*
+                * Get the next part of the XML stream.
+                */
+               ch_size = xer_next_token(&ctx->context, ptr, size,
+                       &ch_type);
+               if(ch_size == -1) {
+                   RETURN(RC_FAIL);
+               } else {
+                       switch(ch_type) {
+                       case PXER_WMORE:
+                               RETURN(RC_WMORE);
+                       case PXER_COMMENT:      /* Got XML comment */
+                       case PXER_TEXT:         /* Ignore free-standing text */
+                               XER_ADVANCE(ch_size);   /* Skip silently */
+                               continue;
+                       case PXER_TAG:
+                               break;  /* Check the rest down there */
+                       }
+               }
+
+               tcv = xer_check_tag(ptr, ch_size, xml_tag);
+               ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]",
+                       tcv, ctx->phase, xml_tag);
+
+               /* Skip the extensions section */
+               if(ctx->phase == 3) {
+                       switch(xer_skip_unknown(tcv, &ctx->left)) {
+                       case -1:
+                               ctx->phase = 4;
+                               RETURN(RC_FAIL);
+                       case 0:
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       case 1:
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 1;
+                               continue;
+                       case 2:
+                               ctx->phase = 1;
+                               break;
+                       }
+               }
+
+               switch(tcv) {
+               case XCT_CLOSING:
+                       if(ctx->phase == 0) break;
+                       ctx->phase = 0;
+                       /* Fall through */
+               case XCT_BOTH:
+            if(ctx->phase == 0) {
+                if(edx >= td->elements_count ||
+                   /* Explicit OPTIONAL specs reaches the end */
+                   (edx + elements[edx].optional == td->elements_count) ||
+                   /* All extensions are optional */
+                   IN_EXTENSION_GROUP(specs, edx)) {
+                    XER_ADVANCE(ch_size);
+                                       ctx->phase = 4; /* Phase out */
+                                       RETURN(RC_OK);
+                               } else {
+                                       ASN_DEBUG("Premature end of XER SEQUENCE");
+                                       RETURN(RC_FAIL);
+                               }
+                       }
+                       /* Fall through */
+               case XCT_OPENING:
+                       if(ctx->phase == 0) {
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 1; /* Processing body phase */
+                               continue;
+                       }
+                       /* Fall through */
+               case XCT_UNKNOWN_OP:
+               case XCT_UNKNOWN_BO:
+
+                       ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%" ASN_PRI_SIZE "",
+                               tcv, ctx->phase, edx);
+                       if(ctx->phase != 1) {
+                               break;  /* Really unexpected */
+                       }
+
+                       if(edx < td->elements_count) {
+                               /*
+                                * Search which member corresponds to this tag.
+                                */
+                               size_t n;
+                               size_t edx_end = edx + elements[edx].optional + 1;
+                               if(edx_end > td->elements_count)
+                                       edx_end = td->elements_count;
+                               for(n = edx; n < edx_end; n++) {
+                                       elm = &td->elements[n];
+                                       tcv = xer_check_tag(ptr, ch_size, elm->name);
+                                       switch(tcv) {
+                                       case XCT_BOTH:
+                                       case XCT_OPENING:
+                                               /*
+                                                * Process this member.
+                                                */
+                                               ctx->step = edx = n;
+                                               ctx->phase = 2;
+                                               break;
+                                       case XCT_UNKNOWN_OP:
+                                       case XCT_UNKNOWN_BO:
+                                               continue;
+                                       default:
+                                               n = edx_end;
+                                               break;  /* Phase out */
+                                       }
+                                       break;
+                               }
+                               if(n != edx_end)
+                                       continue;
+                       } else {
+                               ASN_DEBUG("Out of defined members: %" ASN_PRI_SIZE "/%u",
+                                       edx, td->elements_count);
+                       }
+
+                       /* It is expected extension */
+                       if(IN_EXTENSION_GROUP(specs,
+                               edx + (edx < td->elements_count
+                                       ? elements[edx].optional : 0))) {
+                               ASN_DEBUG("Got anticipated extension at %" ASN_PRI_SIZE "",
+                                       edx);
+                               /*
+                                * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+                                * By using a mask. Only record a pure
+                                * <opening> tags.
+                                */
+                               if(tcv & XCT_CLOSING) {
+                                       /* Found </extension> without body */
+                               } else {
+                                       ctx->left = 1;
+                                       ctx->phase = 3; /* Skip ...'s */
+                               }
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       }
+
+                       /* Fall through */
+               default:
+                       break;
+               }
+
+               ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]",
+                       size>0?((const char *)ptr)[0]:'.',
+                       size>1?((const char *)ptr)[1]:'.',
+                       size>2?((const char *)ptr)[2]:'.',
+                       size>3?((const char *)ptr)[3]:'.',
+                       size>4?((const char *)ptr)[4]:'.',
+                       size>5?((const char *)ptr)[5]:'.');
+               break;
+       }
+
+       ctx->phase = 4; /* "Phase out" on hard failure */
+       RETURN(RC_FAIL);
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    int ilevel, enum xer_encoder_flags_e flags,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+    int xcan = (flags & XER_F_CANONICAL);
+    asn_TYPE_descriptor_t *tmp_def_val_td = 0;
+    void *tmp_def_val = 0;
+    size_t edx;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    er.encoded = 0;
+
+    for(edx = 0; edx < td->elements_count; edx++) {
+        asn_enc_rval_t tmper = {0,0,0};
+        asn_TYPE_member_t *elm = &td->elements[edx];
+        const void *memb_ptr;
+        const char *mname = elm->name;
+        unsigned int mlen = strlen(mname);
+
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!memb_ptr) {
+                assert(tmp_def_val == 0);
+                if(elm->default_value_set) {
+                    if(elm->default_value_set(&tmp_def_val)) {
+                        ASN__ENCODE_FAILED;
+                    } else {
+                        memb_ptr = tmp_def_val;
+                        tmp_def_val_td = elm->type;
+                    }
+                } else if(elm->optional) {
+                    continue;
+                } else {
+                    /* Mandatory element is missing */
+                    ASN__ENCODE_FAILED;
+                }
+            }
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+
+        if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+        ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+        /* Print the member itself */
+        tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1,
+                                           flags, cb, app_key);
+        if(tmp_def_val) {
+            ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val);
+            tmp_def_val = 0;
+        }
+        if(tmper.encoded == -1) return tmper;
+        er.encoded += tmper.encoded;
+
+        ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+    }
+
+    if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+    ASN__ENCODED_OK(er);
+cb_failed:
+    if(tmp_def_val) ASN_STRUCT_FREE(*tmp_def_val_td, tmp_def_val);
+    ASN__ENCODE_FAILED;
+}
+
+int
+SEQUENCE_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+               asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t edx;
+       int ret;
+
+       if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /* Dump preamble */
+       if(cb(td->name, strlen(td->name), app_key) < 0
+       || cb(" ::= {", 6, app_key) < 0)
+               return -1;
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) {
+                               if(elm->optional) continue;
+                               /* Print <absent> line */
+                               /* Fall through */
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               /* Indentation */
+               _i_INDENT(1);
+
+               /* Print the member's name and stuff */
+               if(cb(elm->name, strlen(elm->name), app_key) < 0
+               || cb(": ", 2, app_key) < 0)
+                       return -1;
+
+               /* Print the member itself */
+               ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1,
+                       cb, app_key);
+               if(ret) return ret;
+       }
+
+       ilevel--;
+       _i_INDENT(1);
+
+       return (cb("}", 1, app_key) < 0) ? -1 : 0;
+}
+
+void
+SEQUENCE_free(const asn_TYPE_descriptor_t *td, void *sptr,
+              enum asn_struct_free_method method) {
+    size_t edx;
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    asn_struct_ctx_t *ctx; /* Decoder context */
+
+       if(!td || !sptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as SEQUENCE", td->name);
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               void *memb_ptr;
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
+                       if(memb_ptr)
+                               ASN_STRUCT_FREE(*elm->type, memb_ptr);
+               } else {
+                       memb_ptr = (void *)((char *)sptr + elm->memb_offset);
+                       ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
+               }
+       }
+
+       /* Clean parsing context */
+       ctx = (asn_struct_ctx_t *)((char *)sptr + specs->ctx_offset);
+       FREEMEM(ctx->ptr);
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(sptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(
+            sptr, 0,
+            ((const asn_SEQUENCE_specifics_t *)(td->specifics))->struct_size);
+        break;
+    }
+}
+
+int
+SEQUENCE_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                    asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    size_t edx;
+
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       /*
+        * Iterate over structure members and check their validity.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) {
+                               if(elm->optional)
+                                       continue;
+                               ASN__CTFAIL(app_key, td, sptr,
+                               "%s: mandatory element %s absent (%s:%d)",
+                               td->name, elm->name, __FILE__, __LINE__);
+                               return -1;
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               if(elm->encoding_constraints.general_constraints) {
+                       int ret = elm->encoding_constraints.general_constraints(elm->type, memb_ptr,
+                               ctfailcb, app_key);
+                       if(ret) return ret;
+               } else {
+                       return elm->type->encoding_constraints.general_constraints(elm->type,
+                               memb_ptr, ctfailcb, app_key);
+               }
+       }
+
+       return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+SEQUENCE_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, void **sptr,
+                     asn_per_data_t *pd) {
+    const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       void *st = *sptr;       /* Target structure. */
+       int extpresent;         /* Extension additions are present */
+       uint8_t *opres;         /* Presence of optional root members */
+       asn_per_data_t opmd;
+       asn_dec_rval_t rv;
+       size_t edx;
+
+       (void)constraints;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name);
+
+       /* Handle extensions */
+       if(specs->first_extension < 0) {
+               extpresent = 0;
+       } else {
+               extpresent = per_get_few_bits(pd, 1);
+               if(extpresent < 0) ASN__DECODE_STARVED;
+       }
+
+       /* Prepare a place and read-in the presence bitmap */
+       memset(&opmd, 0, sizeof(opmd));
+       if(specs->roms_count) {
+               opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1);
+               if(!opres) ASN__DECODE_FAILED;
+               /* Get the presence map */
+               if(per_get_many_bits(pd, opres, 0, specs->roms_count)) {
+                       FREEMEM(opres);
+                       ASN__DECODE_STARVED;
+               }
+               opmd.buffer = opres;
+               opmd.nbits = specs->roms_count;
+               ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)",
+                       td->name, specs->roms_count, *opres);
+       } else {
+               opres = 0;
+       }
+
+       /*
+        * Get the sequence ROOT elements.
+        */
+    for(edx = 0;
+        edx < (specs->first_extension < 0 ? td->elements_count
+                                          : (size_t)specs->first_extension);
+        edx++) {
+        asn_TYPE_member_t *elm = &td->elements[edx];
+               void *memb_ptr;         /* Pointer to the member */
+               void **memb_ptr2;       /* Pointer to that pointer */
+
+               assert(!IN_EXTENSION_GROUP(specs, edx));
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+               } else {
+                       memb_ptr = (char *)st + elm->memb_offset;
+                       memb_ptr2 = &memb_ptr;
+               }
+
+               /* Deal with optionality */
+               if(elm->optional) {
+                       int present = per_get_few_bits(&opmd, 1);
+                       ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)",
+                               td->name, elm->name, present,
+                               (int)opmd.nboff, (int)opmd.nbits);
+                       if(present == 0) {
+                               /* This element is not present */
+                               if(elm->default_value_set) {
+                                       /* Fill-in DEFAULT */
+                                       if(elm->default_value_set(memb_ptr2)) {
+                                               FREEMEM(opres);
+                                               ASN__DECODE_FAILED;
+                                       }
+                                       ASN_DEBUG("Filled-in default");
+                               }
+                               /* The member is just not present */
+                               continue;
+                       }
+                       /* Fall through */
+               }
+
+               /* Fetch the member from the stream */
+               ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name);
+
+               if(elm->flags & ATF_OPEN_TYPE) {
+                       rv = OPEN_TYPE_uper_get(opt_codec_ctx, td, st, elm, pd);
+               } else {
+                       rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+                                       elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+               }
+               if(rv.code != RC_OK) {
+                       ASN_DEBUG("Failed decode %s in %s",
+                               elm->name, td->name);
+                       FREEMEM(opres);
+                       return rv;
+               }
+       }
+
+       /* Optionality map is not needed anymore */
+       FREEMEM(opres);
+
+       /*
+        * Deal with extensions.
+        */
+       if(extpresent) {
+               ssize_t bmlength;
+               uint8_t *epres;         /* Presence of extension members */
+               asn_per_data_t epmd;
+
+               bmlength = uper_get_nslength(pd);
+               if(bmlength < 0) ASN__DECODE_STARVED;
+
+               ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name);
+
+               epres = (uint8_t *)MALLOC((bmlength + 15) >> 3);
+               if(!epres) ASN__DECODE_STARVED;
+
+               /* Get the extensions map */
+               if(per_get_many_bits(pd, epres, 0, bmlength)) {
+                       FREEMEM(epres);
+                       ASN__DECODE_STARVED;
+               }
+
+               memset(&epmd, 0, sizeof(epmd));
+               epmd.buffer = epres;
+               epmd.nbits = bmlength;
+               ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)",
+                       td->name, (long)bmlength, *epres);
+
+           /* Go over extensions and read them in */
+        for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+            asn_TYPE_member_t *elm = &td->elements[edx];
+            void *memb_ptr;   /* Pointer to the member */
+            void **memb_ptr2; /* Pointer to that pointer */
+            int present;
+
+            /* Fetch the pointer to this member */
+            if(elm->flags & ATF_POINTER) {
+                memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+            } else {
+                memb_ptr = (void *)((char *)st + elm->memb_offset);
+                memb_ptr2 = &memb_ptr;
+            }
+
+            present = per_get_few_bits(&epmd, 1);
+            if(present <= 0) {
+                if(present < 0) break; /* No more extensions */
+                continue;
+            }
+
+            ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name,
+                      *memb_ptr2);
+            rv = uper_open_type_get(opt_codec_ctx, elm->type,
+                                    elm->encoding_constraints.per_constraints,
+                                    memb_ptr2, pd);
+            if(rv.code != RC_OK) {
+                FREEMEM(epres);
+                return rv;
+            }
+           }
+
+               /* Skip over overflow extensions which aren't present
+                * in this system's version of the protocol */
+               for(;;) {
+                       ASN_DEBUG("Getting overflow extensions");
+                       switch(per_get_few_bits(&epmd, 1)) {
+                       case -1: break;
+                       case 0: continue;
+                       default:
+                               if(uper_open_type_skip(opt_codec_ctx, pd)) {
+                                       FREEMEM(epres);
+                                       ASN__DECODE_STARVED;
+                               }
+                ASN_DEBUG("Skipped overflow extension");
+                continue;
+                       }
+                       break;
+               }
+
+               FREEMEM(epres);
+       }
+
+    if(specs->first_extension >= 0) {
+        unsigned i;
+        /* Fill DEFAULT members in extensions */
+        for(i = specs->roms_count; i < specs->roms_count + specs->aoms_count;
+            i++) {
+            asn_TYPE_member_t *elm;
+            void **memb_ptr2; /* Pointer to member pointer */
+
+            edx = specs->oms[i];
+            elm = &td->elements[edx];
+
+            if(!elm->default_value_set) continue;
+
+            /* Fetch the pointer to this member */
+            if(elm->flags & ATF_POINTER) {
+                memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+                if(*memb_ptr2) continue;
+            } else {
+                continue; /* Extensions are all optionals */
+            }
+
+            /* Set default value */
+            if(elm->default_value_set(memb_ptr2)) {
+                ASN__DECODE_FAILED;
+            }
+        }
+    }
+
+       rv.consumed = 0;
+       rv.code = RC_OK;
+       return rv;
+}
+
+static int
+SEQUENCE__handle_extensions(const asn_TYPE_descriptor_t *td, const void *sptr,
+                            asn_per_outp_t *po1, asn_per_outp_t *po2) {
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    int exts_present = 0;
+    int exts_count = 0;
+    size_t edx;
+
+    if(specs->first_extension < 0) {
+        return 0;
+    }
+
+    /* Find out which extensions are present */
+    for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+        asn_TYPE_member_t *elm = &td->elements[edx];
+        const void *memb_ptr;         /* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+        int present;
+
+        /* Fetch the pointer to this member */
+        if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            present = (*memb_ptr2 != 0);
+        } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+                       present = 1;
+               }
+
+        ASN_DEBUG("checking %s:%s (@%" ASN_PRI_SIZE ") present => %d", elm->name,
+                  elm->type->name, edx, present);
+        exts_count++;
+        exts_present += present;
+
+        /* Encode as presence marker */
+        if(po1 && per_put_few_bits(po1, present, 1)) {
+            return -1;
+        }
+        /* Encode as open type field */
+        if(po2 && present
+           && uper_open_type_put(elm->type,
+                                 elm->encoding_constraints.per_constraints,
+                                 *memb_ptr2, po2))
+            return -1;
+    }
+
+    return exts_present ? exts_count : 0;
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_uper(const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, const void *sptr,
+                     asn_per_outp_t *po) {
+    const asn_SEQUENCE_specifics_t *specs
+               = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       int n_extensions;
+       size_t edx;
+       size_t i;
+
+       (void)constraints;
+
+       if(!sptr)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = 0;
+
+       ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name);
+
+       /*
+        * X.691#18.1 Whether structure is extensible
+        * and whether to encode extensions
+        */
+    if(specs->first_extension < 0) {
+        n_extensions = 0; /* There are no extensions to encode */
+    } else {
+        n_extensions = SEQUENCE__handle_extensions(td, sptr, 0, 0);
+        if(n_extensions < 0) ASN__ENCODE_FAILED;
+        if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) {
+            ASN__ENCODE_FAILED;
+        }
+    }
+
+       /* Encode a presence bitmap */
+       for(i = 0; i < specs->roms_count; i++) {
+               asn_TYPE_member_t *elm;
+               const void *memb_ptr;           /* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+        int present;
+
+               edx = specs->oms[i];
+               elm = &td->elements[edx];
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            present = (*memb_ptr2 != 0);
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+                       present = 1;
+               }
+
+               /* Eliminate default values */
+        if(present && elm->default_value_cmp
+           && elm->default_value_cmp(*memb_ptr2) == 0)
+            present = 0;
+
+               ASN_DEBUG("Element %s %s %s->%s is %s",
+                       elm->flags & ATF_POINTER ? "ptr" : "inline",
+                       elm->default_value_cmp ? "def" : "wtv",
+                       td->name, elm->name, present ? "present" : "absent");
+               if(per_put_few_bits(po, present, 1))
+                       ASN__ENCODE_FAILED;
+       }
+
+       /*
+        * Encode the sequence ROOT elements.
+        */
+    ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension,
+              td->elements_count);
+       for(edx = 0;
+               edx < ((specs->first_extension < 0) ? td->elements_count
+                                            : (size_t)specs->first_extension);
+               edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;         /* Pointer to the member */
+               const void *const *memb_ptr2; /* Pointer to that pointer */
+
+               ASN_DEBUG("About to encode %s", elm->type->name);
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) {
+                               ASN_DEBUG("Element %s %" ASN_PRI_SIZE " not present",
+                                       elm->name, edx);
+                               if(elm->optional)
+                                       continue;
+                               /* Mandatory element is missing */
+                               ASN__ENCODE_FAILED;
+                       }
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr;
+               }
+
+               /* Eliminate default values */
+               if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+                       continue;
+
+        ASN_DEBUG("Encoding %s->%s:%s", td->name, elm->name, elm->type->name);
+        er = elm->type->op->uper_encoder(
+            elm->type, elm->encoding_constraints.per_constraints, *memb_ptr2,
+            po);
+        if(er.encoded == -1) return er;
+    }
+
+       /* No extensions to encode */
+       if(!n_extensions) ASN__ENCODED_OK(er);
+
+       ASN_DEBUG("Length of extensions %d bit-map", n_extensions);
+       /* #18.8. Write down the presence bit-map length. */
+       if(uper_put_nslength(po, n_extensions))
+               ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Bit-map of %d elements", n_extensions);
+       /* #18.7. Encoding the extensions presence bit-map. */
+       /* TODO: act upon NOTE in #18.7 for canonical PER */
+       if(SEQUENCE__handle_extensions(td, sptr, po, 0) != n_extensions)
+               ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Writing %d extensions", n_extensions);
+       /* #18.9. Encode extensions as open type fields. */
+       if(SEQUENCE__handle_extensions(td, sptr, 0, po) != n_extensions)
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+asn_dec_rval_t
+SEQUENCE_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       void *st = *sptr;       /* Target structure. */
+       int extpresent;         /* Extension additions are present */
+       uint8_t *opres;         /* Presence of optional root members */
+       asn_per_data_t opmd;
+       asn_dec_rval_t rv;
+       size_t edx;
+
+       (void)constraints;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }
+
+       ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name);
+
+       /* Handle extensions */
+       if(specs->first_extension < 0) {
+               extpresent = 0;
+       } else {
+               extpresent = per_get_few_bits(pd, 1);
+               if(extpresent < 0) ASN__DECODE_STARVED;
+       }
+
+       /* Prepare a place and read-in the presence bitmap */
+       memset(&opmd, 0, sizeof(opmd));
+       if(specs->roms_count) {
+               opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1);
+               if(!opres) ASN__DECODE_FAILED;
+               /* Get the presence map */
+               if(per_get_many_bits(pd, opres, 0, specs->roms_count)) {
+                       FREEMEM(opres);
+                       ASN__DECODE_STARVED;
+               }
+               opmd.buffer = opres;
+               opmd.nbits = specs->roms_count;
+               ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)",
+                         td->name, specs->roms_count, *opres);
+       } else {
+               opres = 0;
+       }
+
+       /*
+        * Get the sequence ROOT elements.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               void *memb_ptr;         /* Pointer to the member */
+               void **memb_ptr2;       /* Pointer to that pointer */
+#if 0
+               int padding;
+#endif
+
+               if(IN_EXTENSION_GROUP(specs, edx))
+                       continue;
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+               } else {
+                       memb_ptr = (char *)st + elm->memb_offset;
+                       memb_ptr2 = &memb_ptr;
+               }
+#if 0
+               /* Get Padding */
+               padding = (8 - (pd->moved % 8)) % 8;
+               if(padding > 0)
+                       ASN_DEBUG("For element %s,offset= %ld Padding bits = %d", td->name, pd->moved, padding);
+#if 0 /* old way of removing padding */
+               per_get_few_bits(pd, padding);
+#else /* Experimental fix proposed by @mhanna123 */
+               if(edx != (td->elements_count-1))
+                       per_get_few_bits(pd, padding);
+               else {
+                       if(specs->roms_count && (padding > 0))
+                               ASN_DEBUG(">>>>> not skipping padding of %d bits for element:%ld out of %d", padding, edx, td->elements_count);
+                       else
+                               per_get_few_bits(pd, padding);
+               }
+#endif /* dealing with padding */
+#endif
+               /* Deal with optionality */
+               if(elm->optional) {
+                       int present = per_get_few_bits(&opmd, 1);
+                       ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)",
+                                 td->name, elm->name, present,
+                                 (int)opmd.nboff, (int)opmd.nbits);
+                       if(present == 0) {
+                               /* This element is not present */
+                               if(elm->default_value_set) {
+                                       /* Fill-in DEFAULT */
+                                       if(elm->default_value_set(memb_ptr2)) {
+                                               FREEMEM(opres);
+                                               ASN__DECODE_FAILED;
+                                       }
+                                       ASN_DEBUG("Filled-in default");
+                               }
+                               /* The member is just not present */
+                               continue;
+                       }
+                       /* Fall through */
+               }
+
+               /* Fetch the member from the stream */
+               ASN_DEBUG("Decoding member \"%s\" in %s", elm->name, td->name);
+
+               if(elm->flags & ATF_OPEN_TYPE) {
+                       rv = OPEN_TYPE_aper_get(opt_codec_ctx, td, st, elm, pd);
+               } else {
+                       rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+                                       elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+               }
+               if(rv.code != RC_OK) {
+                       ASN_DEBUG("Failed decode %s in %s",
+                                 elm->name, td->name);
+                       FREEMEM(opres);
+                       return rv;
+               }
+       }
+
+       /* Optionality map is not needed anymore */
+       FREEMEM(opres);
+
+       /*
+        * Deal with extensions.
+        */
+       if(extpresent) {
+               ssize_t bmlength;
+               uint8_t *epres;         /* Presence of extension members */
+               asn_per_data_t epmd;
+
+               bmlength = aper_get_nslength(pd);
+               if(bmlength < 0) ASN__DECODE_STARVED;
+
+               ASN_DEBUG("Extensions %" ASN_PRI_SSIZE " present in %s", bmlength, td->name);
+
+               epres = (uint8_t *)MALLOC((bmlength + 15) >> 3);
+               if(!epres) ASN__DECODE_STARVED;
+
+               /* Get the extensions map */
+               if(per_get_many_bits(pd, epres, 0, bmlength))
+                       ASN__DECODE_STARVED;
+
+               memset(&epmd, 0, sizeof(epmd));
+               epmd.buffer = epres;
+               epmd.nbits = bmlength;
+               ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)",
+                         td->name, bmlength, *epres);
+
+               /* Go over extensions and read them in */
+               for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+                       asn_TYPE_member_t *elm = &td->elements[edx];
+                       void *memb_ptr;         /* Pointer to the member */
+                       void **memb_ptr2;       /* Pointer to that pointer */
+                       int present;
+
+                       if(!IN_EXTENSION_GROUP(specs, edx)) {
+                               ASN_DEBUG("%ld is not extension", edx);
+                               continue;
+                       }
+
+                       /* Fetch the pointer to this member */
+                       if(elm->flags & ATF_POINTER) {
+                               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+                       } else {
+                               memb_ptr = (void *)((char *)st + elm->memb_offset);
+                               memb_ptr2 = &memb_ptr;
+                       }
+
+                       present = per_get_few_bits(&epmd, 1);
+                       if(present <= 0) {
+                               if(present < 0) break;  /* No more extensions */
+                               continue;
+                       }
+
+                       ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2);
+                       rv = aper_open_type_get(opt_codec_ctx, elm->type,
+                                               elm->encoding_constraints.per_constraints, memb_ptr2, pd);
+                       if(rv.code != RC_OK) {
+                               FREEMEM(epres);
+                               return rv;
+                       }
+               }
+
+               /* Skip over overflow extensions which aren't present
+                * in this system's version of the protocol */
+               for(;;) {
+                       ASN_DEBUG("Getting overflow extensions");
+                       switch(per_get_few_bits(&epmd, 1)) {
+                       case -1:
+                               break;
+                       case 0:
+                               continue;
+                       default:
+                               if(aper_open_type_skip(opt_codec_ctx, pd)) {
+                                       FREEMEM(epres);
+                                       ASN__DECODE_STARVED;
+                               }
+                       }
+                       break;
+               }
+
+               FREEMEM(epres);
+       }
+
+       /* Fill DEFAULT members in extensions */
+       for(edx = specs->roms_count; edx < specs->roms_count
+               + specs->aoms_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               void **memb_ptr2;       /* Pointer to member pointer */
+
+               if(!elm->default_value_set) continue;
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (void **)((char *)st
+                                             + elm->memb_offset);
+                       if(*memb_ptr2) continue;
+               } else {
+                       continue;       /* Extensions are all optionals */
+               }
+
+               /* Set default value */
+               if(elm->default_value_set(memb_ptr2)) {
+                       ASN__DECODE_FAILED;
+               }
+       }
+
+       rv.consumed = 0;
+       rv.code = RC_OK;
+       return rv;
+}
+
+static int
+SEQUENCE_handle_extensions_aper(const asn_TYPE_descriptor_t *td,
+                                const void *sptr,
+                                asn_per_outp_t *po1, asn_per_outp_t *po2) {
+       const asn_SEQUENCE_specifics_t *specs
+           = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       int exts_present = 0;
+       int exts_count = 0;
+       size_t edx;
+
+       if(specs->first_extension < 0) {
+               return 0;
+       }
+
+       /* Find out which extensions are present */
+       for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;           /* Pointer to the member */
+               const void * const *memb_ptr2;  /* Pointer to that pointer */
+               int present;
+
+               if(!IN_EXTENSION_GROUP(specs, edx)) {
+                       ASN_DEBUG("%s (@%ld) is not extension", elm->type->name, edx);
+                       continue;
+               }
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+                       present = (*memb_ptr2 != 0);
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+                       memb_ptr2 = &memb_ptr;
+                       present = 1;
+               }
+
+               ASN_DEBUG("checking %s (@%ld) present => %d",
+                         elm->type->name, edx, present);
+               exts_count++;
+               exts_present += present;
+
+               /* Encode as presence marker */
+               if(po1 && per_put_few_bits(po1, present, 1))
+                       return -1;
+               /* Encode as open type field */
+               if(po2 && present && aper_open_type_put(elm->type,
+                                                       elm->encoding_constraints.per_constraints, *memb_ptr2, po2))
+                       return -1;
+
+       }
+
+       return exts_present ? exts_count : 0;
+}
+
+asn_enc_rval_t
+SEQUENCE_encode_aper(const asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints,
+                     const void *sptr, asn_per_outp_t *po) {
+       const asn_SEQUENCE_specifics_t *specs
+           = (const asn_SEQUENCE_specifics_t *)td->specifics;
+       asn_enc_rval_t er = {0,0,0};
+       int n_extensions;
+       size_t edx;
+       size_t i;
+
+       (void)constraints;
+
+       if(!sptr)
+               ASN__ENCODE_FAILED;
+
+       er.encoded = 0;
+
+       ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name);
+
+       /*
+        * X.691#18.1 Whether structure is extensible
+        * and whether to encode extensions
+        */
+       if(specs->first_extension < 0) {
+               n_extensions = 0; /* There are no extensions to encode */
+       } else {
+               n_extensions = SEQUENCE_handle_extensions_aper(td, sptr, 0, 0);
+               if(n_extensions < 0) ASN__ENCODE_FAILED;
+               if(per_put_few_bits(po, n_extensions ? 1 : 0, 1)) {
+                       ASN__ENCODE_FAILED;
+               }
+       }
+
+       /* Encode a presence bitmap */
+       for(i = 0; i < specs->roms_count; i++) {
+               asn_TYPE_member_t *elm;
+               const void *memb_ptr;    /* Pointer to the member */
+               const void * const *memb_ptr2;       /* Pointer to that pointer */
+               int present;
+
+               edx = specs->oms[i];
+               elm = &td->elements[edx];
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+                       present = (*memb_ptr2 != 0);
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+                       memb_ptr2 = &memb_ptr;
+                       present = 1;
+               }
+
+               /* Eliminate default values */
+               if(present && elm->default_value_cmp
+                       && elm->default_value_cmp(memb_ptr2) == 1)
+                       present = 0;
+
+               ASN_DEBUG("Element %s %s %s->%s is %s",
+                         elm->flags & ATF_POINTER ? "ptr" : "inline",
+                         elm->default_value_cmp ? "def" : "wtv",
+                         td->name, elm->name, present ? "present" : "absent");
+               if(per_put_few_bits(po, present, 1))
+                       ASN__ENCODE_FAILED;
+       }
+
+       /*
+        * Encode the sequence ROOT elements.
+        */
+       ASN_DEBUG("first_extension = %d, elements = %d", specs->first_extension,
+              td->elements_count);
+       for(edx = 0;
+               edx < ((specs->first_extension < 0) ? td->elements_count
+                                            : (size_t)specs->first_extension);
+               edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;          /* Pointer to the member */
+               const void * const *memb_ptr2; /* Pointer to that pointer */
+
+               if(IN_EXTENSION_GROUP(specs, edx))
+                       continue;
+
+               ASN_DEBUG("About to encode %s", elm->type->name);
+
+               /* Fetch the pointer to this member */
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr2 = (const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!*memb_ptr2) {
+                               ASN_DEBUG("Element %s %ld not present",
+                                         elm->name, edx);
+                               if(elm->optional)
+                                       continue;
+                               /* Mandatory element is missing */
+                               ASN__ENCODE_FAILED;
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+                       memb_ptr2 = &memb_ptr;
+               }
+
+               /* Eliminate default values */
+               if(elm->default_value_cmp && elm->default_value_cmp(memb_ptr2) == 1)
+                       continue;
+
+               ASN_DEBUG("Encoding %s->%s", td->name, elm->name);
+               er = elm->type->op->aper_encoder(elm->type, elm->encoding_constraints.per_constraints,
+                                                *memb_ptr2, po);
+               if(er.encoded == -1)
+                       return er;
+       }
+
+       /* No extensions to encode */
+       if(!n_extensions) ASN__ENCODED_OK(er);
+
+       ASN_DEBUG("Length of %d bit-map", n_extensions);
+       /* #18.8. Write down the presence bit-map length. */
+       if(aper_put_nslength(po, n_extensions))
+               ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Bit-map of %d elements", n_extensions);
+       /* #18.7. Encoding the extensions presence bit-map. */
+       /* TODO: act upon NOTE in #18.7 for canonical PER */
+       if(SEQUENCE_handle_extensions_aper(td, sptr, po, 0) != n_extensions)
+               ASN__ENCODE_FAILED;
+
+       ASN_DEBUG("Writing %d extensions", n_extensions);
+       /* #18.9. Encode extensions as open type fields. */
+       if(SEQUENCE_handle_extensions_aper(td, sptr, 0, po) != n_extensions)
+               ASN__ENCODE_FAILED;
+
+       ASN__ENCODED_OK(er);
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+SEQUENCE_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+                 const void *bptr) {
+    size_t edx;
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *amemb;
+               const void *bmemb;
+        int ret;
+
+               if(elm->flags & ATF_POINTER) {
+            amemb =
+                *(const void *const *)((const char *)aptr + elm->memb_offset);
+            bmemb =
+                *(const void *const *)((const char *)bptr + elm->memb_offset);
+            if(!amemb) {
+                if(!bmemb) continue;
+                if(elm->default_value_cmp
+                   && elm->default_value_cmp(bmemb) == 0) {
+                    /* A is absent, but B is present and equal to DEFAULT */
+                    continue;
+                }
+                return -1;
+            } else if(!bmemb) {
+                if(elm->default_value_cmp
+                   && elm->default_value_cmp(amemb) == 0) {
+                    /* B is absent, but A is present and equal to DEFAULT */
+                    continue;
+                }
+                return 1;
+            }
+               } else {
+            amemb = (const void *)((const char *)aptr + elm->memb_offset);
+            bmemb = (const void *)((const char *)bptr + elm->memb_offset);
+               }
+
+        ret = elm->type->op->compare_struct(elm->type, amemb, bmemb);
+        if(ret != 0) return ret;
+    }
+
+    return 0;
+}
+
+asn_TYPE_operation_t asn_OP_SEQUENCE = {
+       SEQUENCE_free,
+       SEQUENCE_print,
+       SEQUENCE_compare,
+       SEQUENCE_decode_ber,
+       SEQUENCE_encode_der,
+       SEQUENCE_decode_xer,
+       SEQUENCE_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       SEQUENCE_decode_oer,
+       SEQUENCE_encode_oer,
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       SEQUENCE_decode_uper,
+       SEQUENCE_encode_uper,
+       SEQUENCE_decode_aper,
+       SEQUENCE_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       SEQUENCE_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+
+
+asn_random_fill_result_t
+SEQUENCE_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constr,
+                   size_t max_length) {
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    void *st = *sptr;
+    size_t edx;
+
+    if(max_length == 0) return result_skipped;
+
+    (void)constr;
+
+    if(st == NULL) {
+        st = CALLOC(1, specs->struct_size);
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    for(edx = 0; edx < td->elements_count; edx++) {
+        const asn_TYPE_member_t *elm = &td->elements[edx];
+        void *memb_ptr;   /* Pointer to the member */
+        void **memb_ptr2; /* Pointer to that pointer */
+        asn_random_fill_result_t tmpres;
+
+        if(elm->optional && asn_random_between(0, 4) == 2) {
+            /* Sometimes decide not to fill the optional value */
+            continue;
+        }
+
+        if(elm->flags & ATF_POINTER) {
+            /* Member is a pointer to another structure */
+            memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+        } else {
+            memb_ptr = (char *)st + elm->memb_offset;
+            memb_ptr2 = &memb_ptr;
+        }
+
+        tmpres = elm->type->op->random_fill(
+            elm->type, memb_ptr2, &elm->encoding_constraints,
+            max_length > result_ok.length ? max_length - result_ok.length : 0);
+        switch(tmpres.code) {
+        case ARFILL_OK:
+            result_ok.length += tmpres.length;
+            continue;
+        case ARFILL_SKIPPED:
+            assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL);
+            continue;
+        case ARFILL_FAILED:
+            if(st == *sptr) {
+                ASN_STRUCT_RESET(*td, st);
+            } else {
+                ASN_STRUCT_FREE(*td, st);
+            }
+            return tmpres;
+        }
+    }
+
+    *sptr = st;
+
+    return result_ok;
+}
+
diff --git a/skeletons/constr_SEQUENCE.h b/skeletons/constr_SEQUENCE.h
new file mode 100644 (file)
index 0000000..a22ed3a
--- /dev/null
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _CONSTR_SEQUENCE_H_
+#define        _CONSTR_SEQUENCE_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SEQUENCE_specifics_s {
+       /*
+        * Target structure description.
+        */
+       unsigned struct_size;   /* Size of the target structure. */
+       unsigned ctx_offset;    /* Offset of the asn_struct_ctx_t member */
+
+       /*
+        * Tags to members mapping table (sorted).
+        */
+       const asn_TYPE_tag2member_t *tag2el;
+       unsigned tag2el_count;
+
+       /*
+        * Optional members of the extensions root (roms) or additions (aoms).
+        * Meaningful for PER.
+        */
+       const int *oms;         /* Optional MemberS */
+       unsigned roms_count;    /* Root optional members count */
+       unsigned aoms_count;    /* Additions optional members count */
+
+       /*
+        * Description of an extensions group.
+        * Root components are clustered at the beginning of the structure,
+        * whereas extensions are clustered at the end. -1 means not extensible.
+        */
+       signed first_extension;       /* First extension addition */
+} asn_SEQUENCE_specifics_t;
+
+
+/*
+ * A set specialized functions dealing with the SEQUENCE type.
+ */
+asn_struct_free_f SEQUENCE_free;
+asn_struct_print_f SEQUENCE_print;
+asn_struct_compare_f SEQUENCE_compare;
+asn_constr_check_f SEQUENCE_constraint;
+ber_type_decoder_f SEQUENCE_decode_ber;
+der_type_encoder_f SEQUENCE_encode_der;
+xer_type_decoder_f SEQUENCE_decode_xer;
+xer_type_encoder_f SEQUENCE_encode_xer;
+oer_type_decoder_f SEQUENCE_decode_oer;
+oer_type_encoder_f SEQUENCE_encode_oer;
+per_type_decoder_f SEQUENCE_decode_uper;
+per_type_encoder_f SEQUENCE_encode_uper;
+per_type_decoder_f SEQUENCE_decode_aper;
+per_type_encoder_f SEQUENCE_encode_aper;
+asn_random_fill_f  SEQUENCE_random_fill;
+extern asn_TYPE_operation_t asn_OP_SEQUENCE;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_SEQUENCE_H_ */
diff --git a/skeletons/constr_SEQUENCE_OF.c b/skeletons/constr_SEQUENCE_OF.c
new file mode 100644 (file)
index 0000000..10f18cf
--- /dev/null
@@ -0,0 +1,358 @@
+/*-
+ * Copyright (c) 2003, 2004, 2006 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SEQUENCE_OF.h>
+#include <asn_SEQUENCE_OF.h>
+
+/*
+ * The DER encoder of the SEQUENCE OF type.
+ */
+asn_enc_rval_t
+SEQUENCE_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *ptr,
+                       int tag_mode, ber_tlv_tag_t tag,
+                       asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_TYPE_member_t *elm = td->elements;
+       const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(ptr);
+       size_t computed_size = 0;
+       ssize_t encoding_size = 0;
+       asn_enc_rval_t erval = {0,0,0};
+       int edx;
+
+       ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name);
+
+       /*
+        * Gather the length of the underlying members sequence.
+        */
+       for(edx = 0; edx < list->count; edx++) {
+               void *memb_ptr = list->array[edx];
+               if(!memb_ptr) continue;
+               erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+                       0, elm->tag,
+                       0, 0);
+               if(erval.encoded == -1)
+                       return erval;
+               computed_size += erval.encoded;
+       }
+
+       /*
+        * Encode the TLV for the sequence itself.
+        */
+       encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag,
+               cb, app_key);
+       if(encoding_size == -1) {
+               erval.encoded = -1;
+               erval.failed_type = td;
+               erval.structure_ptr = ptr;
+               return erval;
+       }
+
+       computed_size += encoding_size;
+       if(!cb) {
+               erval.encoded = computed_size;
+               ASN__ENCODED_OK(erval);
+       }
+
+       ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name);
+
+       /*
+        * Encode all members.
+        */
+       for(edx = 0; edx < list->count; edx++) {
+               void *memb_ptr = list->array[edx];
+               if(!memb_ptr) continue;
+               erval = elm->type->op->der_encoder(elm->type, memb_ptr,
+                       0, elm->tag,
+                       cb, app_key);
+               if(erval.encoded == -1)
+                       return erval;
+               encoding_size += erval.encoded;
+       }
+
+       if(computed_size != (size_t)encoding_size) {
+               /*
+                * Encoded size is not equal to the computed size.
+                */
+               erval.encoded = -1;
+               erval.failed_type = td;
+               erval.structure_ptr = ptr;
+       } else {
+               erval.encoded = computed_size;
+               erval.structure_ptr = 0;
+               erval.failed_type = 0;
+       }
+
+       return erval;
+}
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       int ilevel, enum xer_encoder_flags_e flags,
+                       asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+    const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_sequence_ *list = _A_CSEQUENCE_FROM_VOID(sptr);
+    const char *mname = specs->as_XMLValueList
+                            ? 0
+                            : ((*elm->name) ? elm->name : elm->type->xml_tag);
+    size_t mlen = mname ? strlen(mname) : 0;
+    int xcan = (flags & XER_F_CANONICAL);
+    int i;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    er.encoded = 0;
+
+    for(i = 0; i < list->count; i++) {
+        asn_enc_rval_t tmper = {0,0,0};
+        void *memb_ptr = list->array[i];
+        if(!memb_ptr) continue;
+
+        if(mname) {
+            if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+            ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+        }
+
+        tmper = elm->type->op->xer_encoder(elm->type, memb_ptr, ilevel + 1,
+                                           flags, cb, app_key);
+        if(tmper.encoded == -1) return tmper;
+        er.encoded += tmper.encoded;
+        if(tmper.encoded == 0 && specs->as_XMLValueList) {
+            const char *name = elm->type->xml_tag;
+            size_t len = strlen(name);
+            if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1);
+            ASN__CALLBACK3("<", 1, name, len, "/>", 2);
+        }
+
+        if(mname) {
+            ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+        }
+    }
+
+    if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+    ASN__ENCODED_OK(er);
+cb_failed:
+    ASN__ENCODE_FAILED;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_uper(const asn_TYPE_descriptor_t *td,
+                        const asn_per_constraints_t *constraints,
+                        const void *sptr, asn_per_outp_t *po) {
+    const asn_anonymous_sequence_ *list;
+       const asn_per_constraint_t *ct;
+       asn_enc_rval_t er = {0,0,0};
+       const asn_TYPE_member_t *elm = td->elements;
+       size_t encoded_edx;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+    list = _A_CSEQUENCE_FROM_VOID(sptr);
+
+    er.encoded = 0;
+
+       ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count);
+
+    if(constraints) ct = &constraints->size;
+    else if(td->encoding_constraints.per_constraints)
+        ct = &td->encoding_constraints.per_constraints->size;
+    else ct = 0;
+
+    /* If extensible constraint, check if size is in root */
+    if(ct) {
+        int not_in_root =
+            (list->count < ct->lower_bound || list->count > ct->upper_bound);
+        ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound,
+                  ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+        if(ct->flags & APC_EXTENSIBLE) {
+            /* Declare whether size is in extension root */
+            if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED;
+            if(not_in_root) ct = 0;
+        } else if(not_in_root && ct->effective_bits >= 0) {
+            ASN__ENCODE_FAILED;
+        }
+
+    }
+
+    if(ct && ct->effective_bits >= 0) {
+        /* X.691, #19.5: No length determinant */
+        if(per_put_few_bits(po, list->count - ct->lower_bound,
+                            ct->effective_bits))
+            ASN__ENCODE_FAILED;
+    } else if(list->count == 0) {
+        /* When the list is empty add only the length determinant
+         * X.691, #20.6 and #11.9.4.1
+         */
+        if (uper_put_length(po, 0, 0)) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+    for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) {
+        ssize_t may_encode;
+        size_t edx;
+        int need_eom = 0;
+
+        if(ct && ct->effective_bits >= 0) {
+            may_encode = list->count;
+        } else {
+            may_encode =
+                uper_put_length(po, list->count - encoded_edx, &need_eom);
+            if(may_encode < 0) ASN__ENCODE_FAILED;
+        }
+
+        for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) {
+            void *memb_ptr = list->array[edx];
+            if(!memb_ptr) ASN__ENCODE_FAILED;
+            er = elm->type->op->uper_encoder(
+                elm->type, elm->encoding_constraints.per_constraints, memb_ptr,
+                po);
+            if(er.encoded == -1) ASN__ENCODE_FAILED;
+        }
+
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+
+        encoded_edx += may_encode;
+    }
+
+       ASN__ENCODED_OK(er);
+}
+
+asn_enc_rval_t
+SEQUENCE_OF_encode_aper(const asn_TYPE_descriptor_t *td,
+                        const asn_per_constraints_t *constraints,
+                        const void *sptr, asn_per_outp_t *po) {
+       const asn_anonymous_sequence_ *list;
+       const asn_per_constraint_t *ct;
+       asn_enc_rval_t er = {0,0,0};
+       asn_TYPE_member_t *elm = td->elements;
+       int seq;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+       list = _A_CSEQUENCE_FROM_VOID(sptr);
+
+       er.encoded = 0;
+
+       ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count);
+
+       if(constraints) ct = &constraints->size;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->size;
+       else ct = 0;
+
+       /* If extensible constraint, check if size is in root */
+       if(ct) {
+               int not_in_root = (list->count < ct->lower_bound
+                               || list->count > ct->upper_bound);
+               ASN_DEBUG("lb %ld ub %ld %s",
+                       ct->lower_bound, ct->upper_bound,
+                       ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+               if(ct->flags & APC_EXTENSIBLE) {
+                       /* Declare whether size is in extension root */
+                       if(per_put_few_bits(po, not_in_root, 1))
+                               ASN__ENCODE_FAILED;
+                       if(not_in_root) ct = 0;
+               } else if(not_in_root && ct->effective_bits >= 0)
+                       ASN__ENCODE_FAILED;
+       }
+
+       if(ct && ct->effective_bits >= 0) {
+               /* X.691, #19.5: No length determinant */
+/*              if(per_put_few_bits(po, list->count - ct->lower_bound,
+                                ct->effective_bits))
+                        ASN__ENCODE_FAILED;
+*/
+               if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0)
+                       ASN__ENCODE_FAILED;
+       }
+
+       for(seq = -1; seq < list->count;) {
+               ssize_t mayEncode;
+               if(seq < 0) seq = 0;
+               if(ct && ct->effective_bits >= 0) {
+                       mayEncode = list->count;
+               } else {
+                       mayEncode = aper_put_length(po, -1, list->count - seq);
+                       if(mayEncode < 0) ASN__ENCODE_FAILED;
+               }
+
+               while(mayEncode--) {
+                       void *memb_ptr = list->array[seq++];
+                       if(!memb_ptr) ASN__ENCODE_FAILED;
+                       er = elm->type->op->aper_encoder(elm->type,
+                               elm->encoding_constraints.per_constraints, memb_ptr, po);
+                       if(er.encoded == -1)
+                               ASN__ENCODE_FAILED;
+               }
+       }
+
+       ASN__ENCODED_OK(er);
+}
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+int
+SEQUENCE_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+               const void *bptr) {
+    const asn_anonymous_sequence_ *a = _A_CSEQUENCE_FROM_VOID(aptr);
+    const asn_anonymous_sequence_ *b = _A_CSEQUENCE_FROM_VOID(bptr);
+    ssize_t idx;
+
+    if(a && b) {
+        ssize_t common_length = (a->count < b->count ? a->count : b->count);
+        for(idx = 0; idx < common_length; idx++) {
+            int ret = td->elements->type->op->compare_struct(
+                td->elements->type, a->array[idx], b->array[idx]);
+            if(ret) return ret;
+        }
+
+        if(idx < b->count) /* more elements in b */
+            return -1;    /* a is shorter, so put it first */
+        if(idx < a->count) return 1;
+
+    } else if(!a) {
+        return -1;
+    } else if(!b) {
+        return 1;
+    }
+
+    return 0;
+}
+
+
+asn_TYPE_operation_t asn_OP_SEQUENCE_OF = {
+       SEQUENCE_OF_free,
+       SEQUENCE_OF_print,
+       SEQUENCE_OF_compare,
+       SEQUENCE_OF_decode_ber,
+       SEQUENCE_OF_encode_der,
+       SEQUENCE_OF_decode_xer,
+       SEQUENCE_OF_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       SEQUENCE_OF_decode_oer, /* Same as SET OF decoder. */
+       SEQUENCE_OF_encode_oer, /* Same as SET OF encoder */
+#endif  /* ASN_DISABLE_OER_SUPPORT */
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       SEQUENCE_OF_decode_uper, /* Same as SET OF decoder */
+       SEQUENCE_OF_encode_uper,
+       SEQUENCE_OF_decode_aper,
+       SEQUENCE_OF_encode_aper,
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       SEQUENCE_OF_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+
diff --git a/skeletons/constr_SEQUENCE_OF.h b/skeletons/constr_SEQUENCE_OF.h
new file mode 100644 (file)
index 0000000..6857f0f
--- /dev/null
@@ -0,0 +1,41 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _CONSTR_SEQUENCE_OF_H_
+#define        _CONSTR_SEQUENCE_OF_H_
+
+#include <asn_application.h>
+#include <constr_SET_OF.h>             /* Implemented using SET OF */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A set specialized functions dealing with the SEQUENCE OF type.
+ * Generally implemented using SET OF.
+ */
+asn_struct_compare_f SEQUENCE_OF_compare;
+der_type_encoder_f SEQUENCE_OF_encode_der;
+xer_type_encoder_f SEQUENCE_OF_encode_xer;
+per_type_encoder_f SEQUENCE_OF_encode_uper;
+per_type_encoder_f SEQUENCE_OF_encode_aper;
+extern asn_TYPE_operation_t asn_OP_SEQUENCE_OF;
+
+#define        SEQUENCE_OF_free        SET_OF_free
+#define        SEQUENCE_OF_print       SET_OF_print
+#define        SEQUENCE_OF_constraint  SET_OF_constraint
+#define        SEQUENCE_OF_decode_ber  SET_OF_decode_ber
+#define        SEQUENCE_OF_decode_xer  SET_OF_decode_xer
+#define        SEQUENCE_OF_decode_oer  SET_OF_decode_oer
+#define        SEQUENCE_OF_encode_oer  SET_OF_encode_oer
+#define        SEQUENCE_OF_decode_uper SET_OF_decode_uper
+#define        SEQUENCE_OF_decode_aper SET_OF_decode_aper
+#define        SEQUENCE_OF_random_fill SET_OF_random_fill
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_SET_OF_H_ */
diff --git a/skeletons/constr_SEQUENCE_oer.c b/skeletons/constr_SEQUENCE_oer.c
new file mode 100644 (file)
index 0000000..ecb589c
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <constr_SEQUENCE.h>
+#include <OPEN_TYPE.h>
+#include <errno.h>
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef  ADVANCE
+#define ADVANCE(num_bytes)                   \
+    do {                                     \
+        size_t num = num_bytes;              \
+        ptr = ((const char *)ptr) + num;     \
+        size -= num;                         \
+        consumed_myself += num;              \
+    } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef  NEXT_PHASE
+#undef PHASE_OUT
+#define NEXT_PHASE(ctx) \
+    do {                \
+        ctx->phase++;   \
+        ctx->step = 0;  \
+    } while(0)
+
+/*
+ * Check whether we are inside the extensions group.
+ */
+#define IN_EXTENSION_GROUP(specs, memb_idx) \
+    ((specs)->first_extension >= 0          \
+     && (unsigned)(specs)->first_extension <= (memb_idx))
+
+#define IN_ROOT_GROUP_PRED(edx)                            \
+    edx < (specs->first_extension < 0 ? td->elements_count \
+                                      : (size_t)specs->first_extension)
+
+#define FOR_IN_ROOT_GROUP(edx) for(edx = 0; IN_ROOT_GROUP_PRED(edx); edx++)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef  RETURN
+#define RETURN(_code)   do {                    \
+                rval.code = _code;              \
+                rval.consumed = consumed_myself;\
+                return rval;                    \
+        } while(0)
+
+/*
+ * Return pointer to a member.
+ */
+static void **
+element_ptrptr(void *struct_ptr, asn_TYPE_member_t *elm, void **tmp_save_ptr) {
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        return (void **)((char *)struct_ptr + elm->memb_offset);
+    } else {
+        assert(tmp_save_ptr);
+        *tmp_save_ptr = (void *)((char *)struct_ptr + elm->memb_offset);
+        return tmp_save_ptr;
+    }
+}
+
+static const void *
+element_ptr(const void *struct_ptr, const asn_TYPE_member_t *elm) {
+    if(elm->flags & ATF_POINTER) {
+        /* Member is a pointer to another structure */
+        return *(const void *const *)((const char *)struct_ptr
+                                      + elm->memb_offset);
+    } else {
+        return (const void *)((const char *)struct_ptr + elm->memb_offset);
+    }
+}
+
+asn_dec_rval_t
+SEQUENCE_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                    const asn_TYPE_descriptor_t *td,
+                    const asn_oer_constraints_t *constraints, void **struct_ptr,
+                    const void *ptr, size_t size) {
+    const asn_SEQUENCE_specifics_t *specs =
+        (const asn_SEQUENCE_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    void *st = *struct_ptr; /* Target structure */
+    asn_struct_ctx_t *ctx; /* Decoder context */
+    size_t consumed_myself = 0; /* Consumed bytes from ptr. */
+
+    (void)constraints;
+
+    if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+        ASN__DECODE_FAILED;
+
+    /*
+     * Create the target structure if it is not present already.
+     */
+    if(st == 0) {
+        st = *struct_ptr = CALLOC(1, specs->struct_size);
+        if(st == 0) {
+            RETURN(RC_FAIL);
+        }
+    }
+
+    /*
+     * Restore parsing context.
+     */
+    ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+    /*
+     * Start to parse where left previously.
+     */
+    switch(ctx->phase) {
+    case 0: {
+        /*
+         * Fetch preamble.
+         */
+        asn_bit_data_t *preamble;
+        int has_extensions_bit = (specs->first_extension >= 0);
+        size_t preamble_bits = (has_extensions_bit + specs->roms_count);
+        size_t preamble_bytes = ((7 + preamble_bits) >> 3);
+
+        ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 0", td->name);
+
+        ASN_DEBUG(
+            "Expecting preamble bits %" ASN_PRI_SIZE " for %s (including %d extension bits)",
+            preamble_bits, td->name, has_extensions_bit);
+
+        if(preamble_bytes > size) {
+            ASN__DECODE_STARVED;
+        }
+
+        preamble = asn_bit_data_new_contiguous(ptr, preamble_bits);
+        if(!preamble) {
+            RETURN(RC_FAIL);
+        }
+        preamble->nboff = has_extensions_bit;
+        ctx->ptr = preamble;
+        ADVANCE(preamble_bytes);
+    }
+        NEXT_PHASE(ctx);
+        /* FALL THROUGH */
+    case 1: {
+        /* Decode components of the extension root */
+        asn_bit_data_t *preamble = ctx->ptr;
+        size_t edx;
+
+        ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 1 (Root)", td->name);
+
+        assert(preamble);
+
+        for(edx = (ctx->step >> 1); IN_ROOT_GROUP_PRED(edx);
+            edx++, ctx->step = (ctx->step & ~1) + 2) {
+            asn_TYPE_member_t *elm = &td->elements[edx];
+
+            ASN_DEBUG("Decoding %s->%s", td->name, elm->name);
+
+            assert(!IN_EXTENSION_GROUP(specs, edx));
+
+            if(ctx->step & 1) {
+                goto microphase2_decode_continues;
+            }
+
+
+            if(elm->optional) {
+                int32_t present = asn_get_few_bits(preamble, 1);
+                if(present < 0) {
+                    ASN_DEBUG("Presence map ended prematurely: %d", present);
+                    RETURN(RC_FAIL);
+                } else if(present == 0) {
+                    if(elm->default_value_set) {
+                        /* Fill-in DEFAULT */
+                        void *tmp;
+                        if(elm->default_value_set(
+                               element_ptrptr(st, elm, &tmp))) {
+                            RETURN(RC_FAIL);
+                        }
+                    }
+                    /* The member is not present. */
+                    continue;
+                }
+                /* Present OPTIONAL or DEFAULT component. */
+            }
+
+            /*
+             * MICROPHASE 2: Invoke the member-specific decoder.
+             */
+            ctx->step |= 1; /* Confirm entering next microphase */
+        microphase2_decode_continues:
+            if(elm->flags & ATF_OPEN_TYPE) {
+                rval = OPEN_TYPE_oer_get(opt_codec_ctx, td, st, elm, ptr, size);
+            } else {
+                void *save_memb_ptr; /* Temporary reference. */
+                void **memb_ptr2;  /* Pointer to a pointer to a memmber */
+
+                memb_ptr2 = element_ptrptr(st, elm, &save_memb_ptr);
+
+                rval = elm->type->op->oer_decoder(
+                    opt_codec_ctx, elm->type,
+                    elm->encoding_constraints.oer_constraints, memb_ptr2, ptr,
+                    size);
+            }
+            switch(rval.code) {
+            case RC_OK:
+                ADVANCE(rval.consumed);
+                break;
+            case RC_WMORE:
+                ASN_DEBUG("More bytes needed at element %s \"%s\"", td->name,
+                          elm->name);
+                ADVANCE(rval.consumed);
+                RETURN(RC_WMORE);
+            case RC_FAIL:
+                ASN_DEBUG("Decoding failed at element %s \"%s\"", td->name,
+                          elm->name);
+                RETURN(RC_FAIL);
+            }
+        } /* for(all root members) */
+
+    }
+        NEXT_PHASE(ctx);
+        /* FALL THROUGH */
+    case 2:
+        assert(ctx->ptr);
+        {
+        /* Cleanup preamble. */
+        asn_bit_data_t *preamble = ctx->ptr;
+        asn_bit_data_t *extadds;
+        int has_extensions_bit = (specs->first_extension >= 0);
+        int extensions_present =
+            has_extensions_bit
+            && (preamble->buffer == NULL
+                || (((const uint8_t *)preamble->buffer)[0] & 0x80));
+        uint8_t unused_bits;
+        size_t len = 0;
+        ssize_t len_len;
+
+        ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 2", td->name);
+
+        preamble->buffer = 0; /* Will do extensions_present==1 next time. */
+
+        if(!extensions_present) {
+            ctx->phase = 10;
+            RETURN(RC_OK);
+        }
+
+        /*
+         * X.696 (08/2015) #16.1 (c), #16.4
+         * Read in the extension addition presence bitmap.
+         */
+
+        len_len = oer_fetch_length(ptr, size, &len);
+        if(len_len > 0) {
+            ADVANCE(len_len);
+        } else if(len_len < 0) {
+            RETURN(RC_FAIL);
+        } else {
+            RETURN(RC_WMORE);
+        }
+
+        if(len == 0) {
+            /* 16.4.1-2 */
+            RETURN(RC_FAIL);
+        } else if(len > size) {
+            RETURN(RC_WMORE);
+        }
+
+        /* Account for unused bits */
+        unused_bits = 0x7 & *(const uint8_t *)ptr;
+        ADVANCE(1);
+        len--;
+        if(unused_bits && len == 0) {
+            RETURN(RC_FAIL);
+        }
+
+        /* Get the extensions map */
+        extadds = asn_bit_data_new_contiguous(ptr, len * 8 - unused_bits);
+        if(!extadds) {
+            RETURN(RC_FAIL);
+        }
+        FREEMEM(preamble);
+        ctx->ptr = extadds;
+        ADVANCE(len);
+    }
+        NEXT_PHASE(ctx);
+        ctx->step =
+            (specs->first_extension < 0 ? td->elements_count
+                                        : (size_t)specs->first_extension);
+        /* Fall through */
+    case 3:
+        ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 3 (Extensions)", td->name);
+        for(; ctx->step < (signed)td->elements_count; ctx->step++) {
+            asn_bit_data_t *extadds = ctx->ptr;
+            size_t edx = ctx->step;
+            asn_TYPE_member_t *elm = &td->elements[edx];
+            void *tmp_memb_ptr;
+            void **memb_ptr2 = element_ptrptr(st, elm, &tmp_memb_ptr);
+
+            switch(asn_get_few_bits(extadds, 1)) {
+            case -1:
+                /*
+                 * Not every one of our extensions is known to the remote side.
+                 * Continue filling in their defaults though.
+                 */
+                /* Fall through */
+            case 0:
+                /* Fill-in DEFAULT */
+                if(elm->default_value_set
+                   && elm->default_value_set(memb_ptr2)) {
+                    RETURN(RC_FAIL);
+                }
+                continue;
+            case 1: {
+                /* Read OER open type */
+                ssize_t ot_size =
+                    oer_open_type_get(opt_codec_ctx, elm->type,
+                                      elm->encoding_constraints.oer_constraints,
+                                      memb_ptr2, ptr, size);
+                assert(ot_size <= (ssize_t)size);
+                if(ot_size > 0) {
+                    ADVANCE(ot_size);
+                } else if(ot_size < 0) {
+                    RETURN(RC_FAIL);
+                } else {
+                    /* Roll back open type parsing */
+                    asn_get_undo(extadds, 1);
+                    RETURN(RC_WMORE);
+                }
+                break;
+            }
+            default:
+                RETURN(RC_FAIL);
+            }
+        }
+
+        NEXT_PHASE(ctx);
+        /* Fall through */
+    case 4:
+        ASN_DEBUG("OER SEQUENCE %s Decoding PHASE 4", td->name);
+        /* Read in the rest of Open Types while ignoring them */
+        for(;;) {
+            asn_bit_data_t *extadds = ctx->ptr;
+            switch(asn_get_few_bits(extadds, 1)) {
+            case 0:
+                continue;
+            case 1: {
+                ssize_t skipped = oer_open_type_skip(ptr, size);
+                if(skipped > 0) {
+                    ADVANCE(skipped);
+                } else if(skipped < 0) {
+                    RETURN(RC_FAIL);
+                } else {
+                    asn_get_undo(extadds, 1);
+                    RETURN(RC_WMORE);
+                }
+                continue;
+            }
+            case -1:
+                /* No more Open Type encoded components */
+                break;
+            default:
+                RETURN(RC_FAIL);
+            }
+            break;
+        }
+    }
+
+    RETURN(RC_OK);
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+SEQUENCE_encode_oer(const asn_TYPE_descriptor_t *td,
+                    const asn_oer_constraints_t *constraints, const void *sptr,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_SEQUENCE_specifics_t *specs = (const asn_SEQUENCE_specifics_t *)td->specifics;
+    size_t computed_size = 0;
+    int has_extensions_bit = (specs->first_extension >= 0);
+    size_t preamble_bits = (has_extensions_bit + specs->roms_count);
+    uint32_t has_extensions = 0;
+    size_t edx;
+    int ret;
+
+    (void)constraints;
+
+    if(preamble_bits) {
+        asn_bit_outp_t preamble;
+
+        memset(&preamble, 0, sizeof(preamble));
+        preamble.output = cb;
+        preamble.op_key = app_key;
+
+        if(has_extensions_bit) {
+            for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+                asn_TYPE_member_t *elm = &td->elements[edx];
+                const void *memb_ptr = element_ptr(sptr, elm);
+                if(memb_ptr) {
+                    if(elm->default_value_cmp
+                       && elm->default_value_cmp(memb_ptr) == 0) {
+                        /* Do not encode default values in extensions */
+                    } else {
+                        has_extensions = 1;
+                        break;
+                    }
+                }
+            }
+            ret = asn_put_few_bits(&preamble, has_extensions, 1);
+            assert(ret == 0);
+            if(ret < 0) {
+                ASN__ENCODE_FAILED;
+            }
+        }
+
+        /*
+         * Encode optional components bitmap.
+         */
+        if(specs->roms_count) {
+            FOR_IN_ROOT_GROUP(edx) {
+                asn_TYPE_member_t *elm = &td->elements[edx];
+
+                if(IN_EXTENSION_GROUP(specs, edx)) break;
+
+                if(elm->optional) {
+                    const void *memb_ptr = element_ptr(sptr, elm);
+                    uint32_t has_component = memb_ptr != NULL;
+                    if(has_component && elm->default_value_cmp
+                       && elm->default_value_cmp(memb_ptr) == 0) {
+                        has_component = 0;
+                    }
+                    ret = asn_put_few_bits(&preamble, has_component, 1);
+                    if(ret < 0) {
+                        ASN__ENCODE_FAILED;
+                    }
+                }
+            }
+        }
+
+        asn_put_aligned_flush(&preamble);
+        computed_size += preamble.flushed_bytes;
+    }   /* if(preamble_bits) */
+
+    /*
+     * Put root components and extensions root.
+     */
+    for(edx = 0; edx < td->elements_count; edx++) {
+        asn_TYPE_member_t *elm = &td->elements[edx];
+        asn_enc_rval_t er = {0,0,0};
+        const void *memb_ptr;
+
+        if(IN_EXTENSION_GROUP(specs, edx)) break;
+
+        memb_ptr = element_ptr(sptr, elm);
+        if(memb_ptr) {
+            if(elm->default_value_cmp
+               && elm->default_value_cmp(memb_ptr) == 0) {
+                /* Skip default values in encoding */
+                continue;
+            }
+        } else {
+            if(elm->optional) continue;
+            /* Mandatory element is missing */
+            ASN__ENCODE_FAILED;
+        }
+        if(!elm->type->op->oer_encoder) {
+            ASN_DEBUG("OER encoder is not defined for type %s", elm->type->name);
+            ASN__ENCODE_FAILED;
+        }
+        er = elm->type->op->oer_encoder(
+            elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb,
+            app_key);
+        if(er.encoded == -1) {
+            ASN_DEBUG("... while encoding %s member \"%s\"\n", td->name,
+                      elm->name);
+            return er;
+        }
+        computed_size += er.encoded;
+    }
+
+    /*
+     * Before encode extensions, encode extensions additions presense bitmap
+     # X.696 (08/2015) #16.4.
+     */
+    if(has_extensions) {
+        asn_bit_outp_t extadds;
+
+        /* Special case allowing us to use exactly one byte for #8.6 */
+        size_t aoms_length_bits = specs->aoms_count;
+        size_t aoms_length_bytes = (7 + aoms_length_bits) >> 3;
+        uint8_t unused_bits = 0x07 & (8 - (aoms_length_bits & 0x07));
+
+        assert(1 + aoms_length_bytes <= 127);
+
+        memset(&extadds, 0, sizeof(extadds));
+        extadds.output = cb;
+        extadds.op_key = app_key;
+
+        /* #8.6 length determinant */
+        ret = asn_put_few_bits(&extadds, (1 + aoms_length_bytes), 8);
+        if(ret < 0) ASN__ENCODE_FAILED;
+
+        /* Number of unused bytes, #16.4.2 */
+        ret = asn_put_few_bits(&extadds, unused_bits, 8);
+        if(ret < 0) ASN__ENCODE_FAILED;
+
+        /* Encode presence bitmap #16.4.3 */
+        for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+            asn_TYPE_member_t *elm = &td->elements[edx];
+            const void *memb_ptr = element_ptr(sptr, elm);
+            if(memb_ptr && elm->default_value_cmp
+               && elm->default_value_cmp(memb_ptr) == 0) {
+                memb_ptr = 0;   /* Do not encode default value. */
+            }
+            ret |= asn_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1);
+        }
+        if(ret < 0) ASN__ENCODE_FAILED;
+
+        asn_put_aligned_flush(&extadds);
+        computed_size += extadds.flushed_bytes;
+
+        /* Now, encode extensions */
+        for(edx = specs->first_extension; edx < td->elements_count; edx++) {
+            asn_TYPE_member_t *elm = &td->elements[edx];
+            const void *memb_ptr = element_ptr(sptr, elm);
+
+            if(memb_ptr) {
+                if(elm->default_value_cmp
+                   && elm->default_value_cmp(memb_ptr) == 0) {
+                    /* Do not encode default value. */
+                } else {
+                    ssize_t wrote = oer_open_type_put(
+                        elm->type, elm->encoding_constraints.oer_constraints,
+                        memb_ptr, cb, app_key);
+                    if(wrote == -1) {
+                        ASN__ENCODE_FAILED;
+                    }
+                    computed_size += wrote;
+                }
+            } else if(!elm->optional) {
+                ASN__ENCODE_FAILED;
+            }
+        }
+    }   /* if(has_extensions) */
+
+
+    {
+        asn_enc_rval_t er = {0, 0, 0};
+        er.encoded = computed_size;
+        ASN__ENCODED_OK(er);
+    }
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
new file mode 100644 (file)
index 0000000..554a7dd
--- /dev/null
@@ -0,0 +1,1149 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SET.h>
+
+/* Check that all the mandatory members are present */
+static int _SET_is_populated(const asn_TYPE_descriptor_t *td, const void *st);
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define        LEFT    ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define        SIZE_VIOLATION  (ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {            \
+               size_t num = num_bytes;         \
+               ptr = ((const char *)ptr) + num;\
+               size -= num;                    \
+               if(ctx->left >= 0)              \
+                       ctx->left -= num;       \
+               consumed_myself += num;         \
+       } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef NEXT_PHASE
+#define        NEXT_PHASE(ctx) do {                    \
+               ctx->phase++;                   \
+               ctx->step = 0;                  \
+       } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef RETURN
+#define        RETURN(_code)   do {                    \
+               rval.code = _code;              \
+               rval.consumed = consumed_myself;\
+               return rval;                    \
+       } while(0)
+
+/*
+ * Tags are canonically sorted in the tag2element map.
+ */
+static int
+_t2e_cmp(const void *ap, const void *bp) {
+       const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap;
+       const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp;
+
+       int a_class = BER_TAG_CLASS(a->el_tag);
+       int b_class = BER_TAG_CLASS(b->el_tag);
+
+       if(a_class == b_class) {
+               ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag);
+               ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag);
+
+               if(a_value == b_value)
+                       return 0;
+               else if(a_value < b_value)
+                       return -1;
+               else
+                       return 1;
+       } else if(a_class < b_class) {
+               return -1;
+       } else {
+               return 1;
+       }
+}
+
+/*
+ * The decoder of the SET type.
+ */
+asn_dec_rval_t
+SET_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+               const asn_TYPE_descriptor_t *td, void **struct_ptr,
+               const void *ptr, size_t size, int tag_mode) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *elements = td->elements;
+
+       /*
+        * Parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       ber_tlv_tag_t tlv_tag;  /* T from TLV */
+       asn_dec_rval_t rval;    /* Return code from subparsers */
+
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+       size_t edx;                     /* SET element's index */
+
+       ASN_DEBUG("Decoding %s as SET", td->name);
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) {
+                       RETURN(RC_FAIL);
+               }
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+       
+       /*
+        * Start to parse where left previously
+        */
+       switch(ctx->phase) {
+       case 0:
+               /*
+                * PHASE 0.
+                * Check that the set of tags associated with given structure
+                * perfectly fits our expectations.
+                */
+
+               rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+                       tag_mode, 1, &ctx->left, 0);
+               if(rval.code != RC_OK) {
+                       ASN_DEBUG("%s tagging check failed: %d",
+                               td->name, rval.code);
+                       return rval;
+               }
+
+               if(ctx->left >= 0)
+                       ctx->left += rval.consumed; /* ?Substracted below! */
+               ADVANCE(rval.consumed);
+
+               NEXT_PHASE(ctx);
+
+               ASN_DEBUG("Structure advertised %ld bytes, "
+                       "buffer contains %ld", (long)ctx->left, (long)size);
+
+               /* Fall through */
+       case 1:
+               /*
+                * PHASE 1.
+                * From the place where we've left it previously,
+                * try to decode the next member from the list of
+                * this structure's elements.
+                * Note that elements in BER may arrive out of
+                * order, yet DER mandates that they shall arive in the
+                * canonical order of their tags. So, there is a room
+                * for optimization.
+                */
+         for(;; ctx->step = 0) {
+               const asn_TYPE_tag2member_t *t2m;
+               asn_TYPE_tag2member_t key;
+               void *memb_ptr;         /* Pointer to the member */
+               void **memb_ptr2;       /* Pointer to that pointer */
+               ssize_t tag_len;        /* Length of TLV's T */
+
+               if(ctx->step & 1) {
+                       edx = ctx->step >> 1;
+                       goto microphase2;
+               }
+
+               /*
+                * MICROPHASE 1: Synchronize decoding.
+                */
+
+               if(ctx->left == 0)
+                       /*
+                        * No more things to decode.
+                        * Exit out of here and check whether all mandatory
+                        * elements have been received (in the next phase).
+                        */
+                       break;
+
+               /*
+                * Fetch the T from TLV.
+                */
+               tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+               switch(tag_len) {
+               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                       /* Fall through */
+               case -1: RETURN(RC_FAIL);
+               }
+
+               if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
+                       if(LEFT < 2) {
+                               if(SIZE_VIOLATION)
+                                       RETURN(RC_FAIL);
+                               else
+                                       RETURN(RC_WMORE);
+                       } else if(((const uint8_t *)ptr)[1] == 0) {
+                               /*
+                                * Found the terminator of the
+                                * indefinite length structure.
+                                * Invoke the generic finalization function.
+                                */
+                               goto phase3;
+                       }
+               }
+
+               key.el_tag = tlv_tag;
+               t2m = (const asn_TYPE_tag2member_t *)bsearch(&key,
+                               specs->tag2el, specs->tag2el_count,
+                               sizeof(specs->tag2el[0]), _t2e_cmp);
+               if(t2m) {
+                       /*
+                        * Found the element corresponding to the tag.
+                        */
+                       edx = t2m->el_no;
+                       ctx->step = (edx << 1) + 1;
+                       ASN_DEBUG("Got tag %s (%s), edx %" ASN_PRI_SSIZE "",
+                               ber_tlv_tag_string(tlv_tag), td->name, edx);
+               } else if(specs->extensible == 0) {
+                       ASN_DEBUG("Unexpected tag %s "
+                               "in non-extensible SET %s",
+                               ber_tlv_tag_string(tlv_tag), td->name);
+                       RETURN(RC_FAIL);
+               } else {
+                       /* Skip this tag */
+                       ssize_t skip;
+
+                       ASN_DEBUG("Skipping unknown tag %s",
+                               ber_tlv_tag_string(tlv_tag));
+
+                       skip = ber_skip_length(opt_codec_ctx,
+                               BER_TLV_CONSTRUCTED(ptr),
+                               (const char *)ptr + tag_len, LEFT - tag_len);
+
+                       switch(skip) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       ADVANCE(skip + tag_len);
+                       continue;  /* Try again with the next tag */
+               }
+
+               /*
+                * MICROPHASE 2: Invoke the member-specific decoder.
+                */
+       microphase2:
+
+               /*
+                * Check for duplications: must not overwrite
+                * already decoded elements.
+                */
+               if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset, edx)) {
+                       ASN_DEBUG("SET %s: Duplicate element %s (%" ASN_PRI_SSIZE ")",
+                               td->name, elements[edx].name, edx);
+                       RETURN(RC_FAIL);
+               }
+               
+               /*
+                * Compute the position of the member inside a structure,
+                * and also a type of containment (it may be contained
+                * as pointer or using inline inclusion).
+                */
+               if(elements[edx].flags & ATF_POINTER) {
+                       /* Member is a pointer to another structure */
+                       memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset);
+               } else {
+                       /*
+                        * A pointer to a pointer
+                        * holding the start of the structure
+                        */
+                       memb_ptr = (char *)st + elements[edx].memb_offset;
+                       memb_ptr2 = &memb_ptr;
+               }
+               /*
+                * Invoke the member fetch routine according to member's type
+                */
+               rval = elements[edx].type->op->ber_decoder(opt_codec_ctx,
+                               elements[edx].type,
+                               memb_ptr2, ptr, LEFT,
+                               elements[edx].tag_mode);
+               switch(rval.code) {
+               case RC_OK:
+                       ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx);
+                       break;
+               case RC_WMORE: /* More data expected */
+                       if(!SIZE_VIOLATION) {
+                               ADVANCE(rval.consumed);
+                               RETURN(RC_WMORE);
+                       }
+                       /* Fall through */
+               case RC_FAIL: /* Fatal error */
+                       RETURN(RC_FAIL);
+               } /* switch(rval) */
+               
+               ADVANCE(rval.consumed);
+         }     /* for(all structure members) */
+
+       phase3:
+               ctx->phase = 3;
+               /* Fall through */
+       case 3:
+       case 4: /* Only 00 is expected */
+               ASN_DEBUG("SET %s Leftover: %ld, size = %ld",
+                       td->name, (long)ctx->left, (long)size);
+
+               /*
+                * Skip everything until the end of the SET.
+                */
+               while(ctx->left) {
+                       ssize_t tl, ll;
+
+                       tl = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+                       switch(tl) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       /*
+                        * If expected <0><0>...
+                        */
+                       if(ctx->left < 0
+                               && ((const uint8_t *)ptr)[0] == 0) {
+                               if(LEFT < 2) {
+                                       if(SIZE_VIOLATION)
+                                               RETURN(RC_FAIL);
+                                       else
+                                               RETURN(RC_WMORE);
+                               } else if(((const uint8_t *)ptr)[1] == 0) {
+                                       /*
+                                        * Correctly finished with <0><0>.
+                                        */
+                                       ADVANCE(2);
+                                       ctx->left++;
+                                       ctx->phase = 4;
+                                       continue;
+                               }
+                       }
+
+                       if(specs->extensible == 0 || ctx->phase == 4) {
+                               ASN_DEBUG("Unexpected continuation "
+                                       "of a non-extensible type %s "
+                                       "(ptr=%02x)",
+                                       td->name, *(const uint8_t *)ptr);
+                               RETURN(RC_FAIL);
+                       }
+
+                       ll = ber_skip_length(opt_codec_ctx,
+                               BER_TLV_CONSTRUCTED(ptr),
+                               (const char *)ptr + tl, LEFT - tl);
+                       switch(ll) {
+                       case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                               /* Fall through */
+                       case -1: RETURN(RC_FAIL);
+                       }
+
+                       ADVANCE(tl + ll);
+               }
+
+               ctx->phase = 5;
+        /* Fall through */
+       case 5:
+               /* Check that all mandatory elements are present. */
+               if(!_SET_is_populated(td, st))
+                       RETURN(RC_FAIL);
+
+               NEXT_PHASE(ctx);
+       }
+       
+       RETURN(RC_OK);
+}
+
+static int
+_SET_is_populated(const asn_TYPE_descriptor_t *td, const void *st) {
+    const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics;
+       size_t edx;
+
+       /*
+        * Check that all mandatory elements are present.
+        */
+       for(edx = 0; edx < td->elements_count;
+               edx += (8 * sizeof(specs->_mandatory_elements[0]))) {
+               unsigned int midx, pres, must;
+
+               midx = edx/(8 * sizeof(specs->_mandatory_elements[0]));
+        pres = ((const unsigned int *)((const char *)st
+                                       + specs->pres_offset))[midx];
+        must = sys_ntohl(specs->_mandatory_elements[midx]);
+
+               if((pres & must) == must) {
+                       /*
+                        * Yes, everything seems to be in place.
+                        */
+               } else {
+                       ASN_DEBUG("One or more mandatory elements "
+                               "of a SET %s %d (%08x.%08x)=%08x "
+                               "are not present",
+                               td->name,
+                               midx,
+                               pres,
+                               must,
+                               (~(pres & must) & must)
+                       );
+                       return 0;
+               }
+       }
+
+       return 1;
+}
+
+/*
+ * The DER encoder of the SET type.
+ */
+asn_enc_rval_t
+SET_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr, int tag_mode,
+               ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics;
+       size_t computed_size = 0;
+       asn_enc_rval_t er;
+       int t2m_build_own = (specs->tag2el_count != td->elements_count);
+       const asn_TYPE_tag2member_t *t2m;
+       asn_TYPE_tag2member_t *t2m_build;
+       size_t t2m_count;
+       ssize_t ret;
+       size_t edx;
+
+       /*
+        * Use existing, or build our own tags map.
+        */
+       if(t2m_build_own) {
+        t2m_build = (asn_TYPE_tag2member_t *)CALLOC(td->elements_count,
+                                                    sizeof(t2m_build[0]));
+        if(!t2m_build) ASN__ENCODE_FAILED;
+               t2m_count = 0;
+       } else {
+               t2m_build = NULL;
+               /*
+                * There is no untagged CHOICE in this SET.
+                * Employ existing table.
+                */
+       }
+
+       /*
+        * Gather the length of the underlying members sequence.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               asn_enc_rval_t tmper;
+               const void *memb_ptr_dontuse; /* Pointer to the member */
+        const void *const *memb_ptr2; /* Pointer to that pointer */
+
+        /*
+                * Compute the length of the encoding of this member.
+                */
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) {
+                               if(!elm->optional) {
+                                       /* Mandatory elements missing */
+                                       FREEMEM(t2m_build);
+                                       ASN__ENCODE_FAILED;
+                               }
+                               if(t2m_build) {
+                                       t2m_build[t2m_count].el_no = edx;
+                                       t2m_build[t2m_count].el_tag = 0;
+                                       t2m_count++;
+                               }
+                               continue;
+                       }
+               } else {
+            memb_ptr_dontuse =
+                (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */
+               }
+
+               /* Eliminate default values */
+        if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0) {
+            if(t2m_build) {
+                               t2m_build[t2m_count].el_no = edx;
+                               t2m_build[t2m_count].el_tag = 0;
+                               t2m_count++;
+                       }
+                       continue;
+               }
+
+               tmper = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+                       elm->tag_mode, elm->tag,
+                       0, 0);
+               if(tmper.encoded == -1)
+                       return tmper;
+               computed_size += tmper.encoded;
+
+               /*
+                * Remember the outmost tag of this member.
+                */
+               if(t2m_build) {
+                       t2m_build[t2m_count].el_no = edx;
+                       t2m_build[t2m_count].el_tag = asn_TYPE_outmost_tag(
+                               elm->type, *memb_ptr2, elm->tag_mode, elm->tag);
+                       t2m_count++;
+               } else {
+                       /*
+                        * No dynamic sorting is necessary.
+                        */
+               }
+       }
+
+       /*
+        * Finalize order of the components.
+        */
+       if(t2m_build) {
+               /*
+                * Sort the underlying members according to their
+                * canonical tags order. DER encoding mandates it.
+                */
+               qsort(t2m_build, t2m_count, sizeof(specs->tag2el[0]), _t2e_cmp);
+               t2m = t2m_build;
+       } else {
+               /*
+                * Tags are already sorted by the compiler.
+                */
+               t2m = specs->tag2el;
+               t2m_count = specs->tag2el_count;
+       }
+       assert(t2m_count == td->elements_count);
+
+       /*
+        * Encode the TLV for the sequence itself.
+        */
+       ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
+       if(ret == -1) {
+               FREEMEM(t2m_build);
+               ASN__ENCODE_FAILED;
+       }
+       er.encoded = computed_size + ret;
+
+       if(!cb) {
+               FREEMEM(t2m_build);
+               ASN__ENCODED_OK(er);
+    }
+
+       /*
+        * Encode all members.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm;
+               asn_enc_rval_t tmper;
+
+               const void *memb_ptr_dontuse;           /* Pointer to the member */
+        const void *const *memb_ptr2;       /* Pointer to that pointer */
+
+        /* Encode according to the tag order */
+               elm = &td->elements[t2m[edx].el_no];
+
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr2 =
+                (const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!*memb_ptr2) continue;
+               } else {
+            memb_ptr_dontuse =
+                (const void *)((const char *)sptr + elm->memb_offset);
+            memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */
+               }
+
+               /* Eliminate default values */
+        if(elm->default_value_cmp && elm->default_value_cmp(*memb_ptr2) == 0)
+            continue;
+
+               tmper = elm->type->op->der_encoder(elm->type, *memb_ptr2,
+                       elm->tag_mode, elm->tag, cb, app_key);
+               if(tmper.encoded == -1)
+                       return tmper;
+               computed_size -= tmper.encoded;
+       }
+
+       if(computed_size != 0) {
+               /*
+                * Encoded size is not equal to the computed size.
+                */
+               FREEMEM(t2m_build);
+               ASN__ENCODE_FAILED;
+       }
+
+    FREEMEM(t2m_build);
+       ASN__ENCODED_OK(er);
+}
+
+#undef XER_ADVANCE
+#define        XER_ADVANCE(num_bytes)  do {                    \
+               size_t num = num_bytes;                 \
+               buf_ptr = ((const char *)buf_ptr) + num;\
+               size -= num;                            \
+               consumed_myself += num;                 \
+       } while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+SET_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+               const asn_TYPE_descriptor_t *td, void **struct_ptr,
+               const char *opt_mname, const void *buf_ptr, size_t size) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *elements = td->elements;
+       const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+       /*
+        * ... and parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       asn_dec_rval_t rval;            /* Return value from a decoder */
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+       size_t edx;                     /* Element index */
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) RETURN(RC_FAIL);
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+       /*
+        * Phases of XER/XML processing:
+        * Phase 0: Check that the opening tag matches our expectations.
+        * Phase 1: Processing body and reacting on closing tag.
+        * Phase 2: Processing inner type.
+        * Phase 3: Skipping unknown extensions.
+        * Phase 4: PHASED OUT
+        */
+       for(edx = ctx->step; ctx->phase <= 3;) {
+               pxer_chunk_type_e ch_type;      /* XER chunk type */
+               ssize_t ch_size;                /* Chunk size */
+               xer_check_tag_e tcv;            /* Tag check value */
+               const asn_TYPE_member_t *elm;
+
+               /*
+                * Go inside the inner member of a set.
+                */
+               if(ctx->phase == 2) {
+                       asn_dec_rval_t tmprval;
+                       void *memb_ptr_dontuse; /* Pointer to the member */
+                       void **memb_ptr2;       /* Pointer to that pointer */
+
+                       if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset,
+                                       edx)) {
+                               ASN_DEBUG("SET %s: Duplicate element %s (%" ASN_PRI_SSIZE ")",
+                               td->name, elements[edx].name, edx);
+                               RETURN(RC_FAIL);
+                       }
+
+                       elm = &elements[edx];
+
+                       if(elm->flags & ATF_POINTER) {
+                               /* Member is a pointer to another structure */
+                               memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+                       } else {
+                               memb_ptr_dontuse = (char *)st + elm->memb_offset;
+                               memb_ptr2 = &memb_ptr_dontuse; /* Only use of memb_ptr_dontuse */
+                       }
+
+                       /* Invoke the inner type decoder, m.b. multiple times */
+                       tmprval = elm->type->op->xer_decoder(opt_codec_ctx,
+                                       elm->type, memb_ptr2, elm->name,
+                                       buf_ptr, size);
+                       XER_ADVANCE(tmprval.consumed);
+                       if(tmprval.code != RC_OK)
+                               RETURN(tmprval.code);
+                       ctx->phase = 1; /* Back to body processing */
+                       ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx);
+                       ASN_DEBUG("XER/SET phase => %d", ctx->phase);
+                       /* Fall through */
+               }
+
+               /*
+                * Get the next part of the XML stream.
+                */
+               ch_size = xer_next_token(&ctx->context,
+                       buf_ptr, size, &ch_type);
+               if(ch_size == -1) {
+                       RETURN(RC_FAIL);
+               } else {
+                       switch(ch_type) {
+            case PXER_WMORE:
+                RETURN(RC_WMORE);
+                       case PXER_COMMENT:      /* Got XML comment */
+                       case PXER_TEXT:         /* Ignore free-standing text */
+                               XER_ADVANCE(ch_size);   /* Skip silently */
+                               continue;
+                       case PXER_TAG:
+                               break;  /* Check the rest down there */
+                       }
+               }
+
+               tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+               ASN_DEBUG("XER/SET: tcv = %d, ph=%d", tcv, ctx->phase);
+
+               /* Skip the extensions section */
+               if(ctx->phase == 3) {
+                       switch(xer_skip_unknown(tcv, &ctx->left)) {
+                       case -1:
+                               ctx->phase = 4;
+                               RETURN(RC_FAIL);
+                       case 1:
+                               ctx->phase = 1;
+                               /* Fall through */
+                       case 0:
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       case 2:
+                               ctx->phase = 1;
+                               break;
+                       }
+               }
+
+               switch(tcv) {
+               case XCT_CLOSING:
+                       if(ctx->phase == 0) break;
+                       ctx->phase = 0;
+                       /* Fall through */
+               case XCT_BOTH:
+                       if(ctx->phase == 0) {
+                               if(_SET_is_populated(td, st)) {
+                                       XER_ADVANCE(ch_size);
+                                       ctx->phase = 4; /* Phase out */
+                                       RETURN(RC_OK);
+                               } else {
+                                       ASN_DEBUG("Premature end of XER SET");
+                                       RETURN(RC_FAIL);
+                               }
+                       }
+                       /* Fall through */
+               case XCT_OPENING:
+                       if(ctx->phase == 0) {
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 1; /* Processing body phase */
+                               continue;
+                       }
+                       /* Fall through */
+               case XCT_UNKNOWN_OP:
+               case XCT_UNKNOWN_BO:
+
+                       ASN_DEBUG("XER/SET: tcv=%d, ph=%d", tcv, ctx->phase);
+                       if(ctx->phase != 1)
+                               break;  /* Really unexpected */
+
+                       /*
+                        * Search which member corresponds to this tag.
+                        */
+                       for(edx = 0; edx < td->elements_count; edx++) {
+                               switch(xer_check_tag(buf_ptr, ch_size,
+                                       elements[edx].name)) {
+                               case XCT_BOTH:
+                               case XCT_OPENING:
+                                       /*
+                                        * Process this member.
+                                        */
+                                       ctx->step = edx;
+                                       ctx->phase = 2;
+                                       break;
+                               case XCT_UNKNOWN_OP:
+                               case XCT_UNKNOWN_BO:
+                                       continue;
+                               default:
+                                       edx = td->elements_count;
+                                       break;  /* Phase out */
+                               }
+                               break;
+                       }
+                       if(edx != td->elements_count)
+                               continue;
+
+                       /* It is expected extension */
+                       if(specs->extensible) {
+                               ASN_DEBUG("Got anticipated extension");
+                               /*
+                                * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+                                * By using a mask. Only record a pure
+                                * <opening> tags.
+                                */
+                               if(tcv & XCT_CLOSING) {
+                                       /* Found </extension> without body */
+                               } else {
+                                       ctx->left = 1;
+                                       ctx->phase = 3; /* Skip ...'s */
+                               }
+                               XER_ADVANCE(ch_size);
+                               continue;
+                       }
+
+                       /* Fall through */
+               default:
+                       break;
+               }
+
+               ASN_DEBUG("Unexpected XML tag in SET, expected \"%s\"",
+                       xml_tag);
+               break;
+       }
+
+       ctx->phase = 4; /* "Phase out" on hard failure */
+       RETURN(RC_FAIL);
+}
+
+asn_enc_rval_t
+SET_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+               enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+               void *app_key) {
+    const asn_SET_specifics_t *specs = (const asn_SET_specifics_t *)td->specifics;
+       asn_enc_rval_t er;
+       int xcan = (flags & XER_F_CANONICAL);
+       const asn_TYPE_tag2member_t *t2m = specs->tag2el_cxer;
+       size_t t2m_count = specs->tag2el_cxer_count;
+       size_t edx;
+
+       if(!sptr)
+               ASN__ENCODE_FAILED;
+
+       assert(t2m_count == td->elements_count);
+
+       er.encoded = 0;
+
+       for(edx = 0; edx < t2m_count; edx++) {
+               asn_enc_rval_t tmper;
+               asn_TYPE_member_t *elm;
+        const void *memb_ptr;
+        const char *mname;
+               size_t mlen;
+
+               elm = &td->elements[t2m[edx].el_no];
+               mname = elm->name;
+               mlen = strlen(elm->name);
+
+               if(elm->flags & ATF_POINTER) {
+            memb_ptr =
+                *(const void *const *)((const char *)sptr + elm->memb_offset);
+            if(!memb_ptr) {
+                               if(elm->optional)
+                                       continue;
+                               /* Mandatory element missing */
+                               ASN__ENCODE_FAILED;
+                       }
+               } else {
+            memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+        }
+
+               if(!xcan)
+                       ASN__TEXT_INDENT(1, ilevel);
+               ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+               /* Print the member itself */
+               tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
+                               ilevel + 1, flags, cb, app_key);
+               if(tmper.encoded == -1) return tmper;
+               er.encoded += tmper.encoded;
+
+               ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+       }
+
+       if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+int
+SET_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+          asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t edx;
+       int ret;
+
+       if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /* Dump preamble */
+       if(cb(td->name, strlen(td->name), app_key) < 0
+       || cb(" ::= {", 6, app_key) < 0)
+               return -1;
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) {
+                               if(elm->optional) continue;
+                               /* Print <absent> line */
+                               /* Fall through */
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               _i_INDENT(1);
+
+               /* Print the member's name and stuff */
+               if(cb(elm->name, strlen(elm->name), app_key) < 0
+               || cb(": ", 2, app_key) < 0)
+                       return -1;
+
+               /* Print the member itself */
+               ret = elm->type->op->print_struct(elm->type, memb_ptr, ilevel + 1,
+                       cb, app_key);
+               if(ret) return ret;
+       }
+
+       ilevel--;
+       _i_INDENT(1);
+
+       return (cb("}", 1, app_key) < 0) ? -1 : 0;
+}
+
+void
+SET_free(const asn_TYPE_descriptor_t *td, void *ptr,
+         enum asn_struct_free_method method) {
+    size_t edx;
+
+       if(!td || !ptr)
+               return;
+
+       ASN_DEBUG("Freeing %s as SET", td->name);
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               void *memb_ptr;
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
+                       if(memb_ptr)
+                               ASN_STRUCT_FREE(*elm->type, memb_ptr);
+               } else {
+                       memb_ptr = (void *)((char *)ptr + elm->memb_offset);
+                       ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr);
+               }
+       }
+
+    switch(method) {
+    case ASFM_FREE_EVERYTHING:
+        FREEMEM(ptr);
+        break;
+    case ASFM_FREE_UNDERLYING:
+        break;
+    case ASFM_FREE_UNDERLYING_AND_RESET:
+        memset(ptr, 0,
+               ((const asn_SET_specifics_t *)(td->specifics))->struct_size);
+        break;
+    }
+}
+
+int
+SET_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+               asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    size_t edx;
+
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       /*
+        * Iterate over structure members and check their validity.
+        */
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *memb_ptr;
+
+               if(elm->flags & ATF_POINTER) {
+                       memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
+                       if(!memb_ptr) {
+                               if(elm->optional)
+                                       continue;
+                               ASN__CTFAIL(app_key, td, sptr,
+                               "%s: mandatory element %s absent (%s:%d)",
+                               td->name, elm->name, __FILE__, __LINE__);
+                               return -1;
+                       }
+               } else {
+                       memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
+               }
+
+               if(elm->encoding_constraints.general_constraints) {
+                       return elm->encoding_constraints.general_constraints(
+                                       elm->type, memb_ptr, ctfailcb, app_key);
+               } else {
+                       return elm->type->encoding_constraints.general_constraints(
+                                       elm->type, memb_ptr, ctfailcb, app_key);
+               }
+       }
+
+       return 0;
+}
+
+int
+SET_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+            const void *bptr) {
+    size_t edx;
+
+       for(edx = 0; edx < td->elements_count; edx++) {
+               asn_TYPE_member_t *elm = &td->elements[edx];
+               const void *amemb;
+               const void *bmemb;
+               int ret;
+
+               if(elm->flags & ATF_POINTER) {
+            amemb =
+                *(const void *const *)((const char *)aptr + elm->memb_offset);
+            bmemb =
+                *(const void *const *)((const char *)bptr + elm->memb_offset);
+            if(!amemb) {
+                if(!bmemb) continue;
+                return -1;
+            } else if(!bmemb) {
+                return 1;
+            }
+               } else {
+            amemb = (const void *)((const char *)aptr + elm->memb_offset);
+            bmemb = (const void *)((const char *)bptr + elm->memb_offset);
+               }
+
+        ret = elm->type->op->compare_struct(elm->type, amemb, bmemb);
+        if(ret != 0) return ret;
+    }
+
+    return 0;
+}
+
+
+asn_TYPE_operation_t asn_OP_SET = {
+       SET_free,
+       SET_print,
+       SET_compare,
+       SET_decode_ber,
+       SET_encode_der,
+       SET_decode_xer,
+       SET_encode_xer,
+       0,      /* SET_decode_oer */
+       0,      /* SET_encode_oer */
+       0,      /* SET_decode_uper */
+       0,      /* SET_encode_uper */
+       0,      /* SET_decode_aper */
+       0,      /* SET_encode_aper */
+       SET_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+
+
+asn_random_fill_result_t
+SET_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constr,
+                   size_t max_length) {
+    const asn_SET_specifics_t *specs =
+        (const asn_SET_specifics_t *)td->specifics;
+    asn_random_fill_result_t result_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    void *st = *sptr;
+    size_t edx;
+
+    if(max_length == 0) return result_skipped;
+
+    (void)constr;
+
+    if(st == NULL) {
+        st = CALLOC(1, specs->struct_size);
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    for(edx = 0; edx < td->elements_count; edx++) {
+        const asn_TYPE_member_t *elm = &td->elements[edx];
+        void *memb_ptr;   /* Pointer to the member */
+        void **memb_ptr2; /* Pointer to that pointer */
+        asn_random_fill_result_t tmpres;
+
+        if(elm->optional && asn_random_between(0, 4) == 2) {
+            /* Sometimes decide not to fill the optional value */
+            continue;
+        }
+
+        if(elm->flags & ATF_POINTER) {
+            /* Member is a pointer to another structure */
+            memb_ptr2 = (void **)((char *)st + elm->memb_offset);
+        } else {
+            memb_ptr = (char *)st + elm->memb_offset;
+            memb_ptr2 = &memb_ptr;
+        }
+
+        tmpres = elm->type->op->random_fill(
+            elm->type, memb_ptr2, &elm->encoding_constraints,
+            max_length > result_ok.length ? max_length - result_ok.length : 0);
+        switch(tmpres.code) {
+        case ARFILL_OK:
+            result_ok.length += tmpres.length;
+            continue;
+        case ARFILL_SKIPPED:
+            assert(!(elm->flags & ATF_POINTER) || *memb_ptr2 == NULL);
+            continue;
+        case ARFILL_FAILED:
+            if(st == *sptr) {
+                ASN_STRUCT_RESET(*td, st);
+            } else {
+                ASN_STRUCT_FREE(*td, st);
+            }
+            return tmpres;
+        }
+    }
+
+    *sptr = st;
+
+    return result_ok;
+}
+
diff --git a/skeletons/constr_SET.h b/skeletons/constr_SET.h
new file mode 100644 (file)
index 0000000..d64a00f
--- /dev/null
@@ -0,0 +1,87 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _CONSTR_SET_H_
+#define        _CONSTR_SET_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct asn_SET_specifics_s {
+       /*
+        * Target structure description.
+        */
+       unsigned struct_size;       /* Size of the target structure. */
+       unsigned ctx_offset;        /* Offset of the asn_struct_ctx_t member */
+       unsigned pres_offset;       /* Offset of _presence_map member */
+
+       /*
+        * Tags to members mapping table (sorted).
+        * Sometimes suitable for DER encoding (untagged CHOICE is present);
+        * if so, tag2el_count will be greater than td->elements_count.
+        */
+       const asn_TYPE_tag2member_t *tag2el;
+       unsigned tag2el_count;
+
+       /*
+        * Tags to members mapping table, second edition.
+        * Suitable for CANONICAL-XER encoding.
+        */
+       const asn_TYPE_tag2member_t *tag2el_cxer;
+       unsigned tag2el_cxer_count;
+
+       /*
+        * Extensions-related stuff.
+        */
+       int extensible;                             /* Whether SET is extensible */
+       const unsigned int *_mandatory_elements;    /* Bitmask of mandatory ones */
+} asn_SET_specifics_t;
+
+/*
+ * A set specialized functions dealing with the SET type.
+ */
+asn_struct_free_f SET_free;
+asn_struct_print_f SET_print;
+asn_struct_compare_f SET_compare;
+asn_constr_check_f SET_constraint;
+ber_type_decoder_f SET_decode_ber;
+der_type_encoder_f SET_encode_der;
+xer_type_decoder_f SET_decode_xer;
+xer_type_encoder_f SET_encode_xer;
+per_type_decoder_f SET_decode_uper;
+per_type_encoder_f SET_encode_uper;
+asn_random_fill_f  SET_random_fill;
+extern asn_TYPE_operation_t asn_OP_SET;
+
+/***********************
+ * Some handy helpers. *
+ ***********************/
+
+/*
+ * Figure out whether the SET member indicated by PR_x has already been decoded.
+ * It is very simple bitfield test, despite its visual complexity.
+ */
+#define        ASN_SET_ISPRESENT(set_ptr, PR_x)                                \
+       ASN_SET_ISPRESENT2(&((set_ptr)->_presence_map), PR_x)
+#define        ASN_SET_ISPRESENT2(map_ptr, PR_x)                               \
+       (((unsigned int *)(map_ptr))                                    \
+               [(PR_x) / (8 * sizeof(unsigned int))]                   \
+               & (1u << ((8 * sizeof(unsigned int)) - 1                        \
+               - ((PR_x) % (8 * sizeof(unsigned int))))))
+
+#define        ASN_SET_MKPRESENT(map_ptr, PR_x)                                \
+       (((unsigned int *)(map_ptr))                                    \
+               [(PR_x) / (8 * sizeof(unsigned int))]                   \
+               |= (1u << ((8 * sizeof(unsigned int)) - 1               \
+               - ((PR_x) % (8 * sizeof(unsigned int))))))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_SET_H_ */
diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c
new file mode 100644 (file)
index 0000000..bf1dc27
--- /dev/null
@@ -0,0 +1,1441 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_SET_OF.h>
+#include <asn_SET_OF.h>
+
+/*
+ * Number of bytes left for this structure.
+ * (ctx->left) indicates the number of bytes _transferred_ for the structure.
+ * (size) contains the number of bytes in the buffer passed.
+ */
+#define        LEFT    ((size<(size_t)ctx->left)?size:(size_t)ctx->left)
+
+/*
+ * If the subprocessor function returns with an indication that it wants
+ * more data, it may well be a fatal decoding problem, because the
+ * size is constrained by the <TLV>'s L, even if the buffer size allows
+ * reading more data.
+ * For example, consider the buffer containing the following TLVs:
+ * <T:5><L:1><V> <T:6>...
+ * The TLV length clearly indicates that one byte is expected in V, but
+ * if the V processor returns with "want more data" even if the buffer
+ * contains way more data than the V processor have seen.
+ */
+#define        SIZE_VIOLATION  (ctx->left >= 0 && (size_t)ctx->left <= size)
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {            \
+               size_t num = num_bytes;         \
+               ptr = ((const char *)ptr) + num;\
+               size -= num;                    \
+               if(ctx->left >= 0)              \
+                       ctx->left -= num;       \
+               consumed_myself += num;         \
+       } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef NEXT_PHASE
+#undef PHASE_OUT
+#define        NEXT_PHASE(ctx) do {                    \
+               ctx->phase++;                   \
+               ctx->step = 0;                  \
+       } while(0)
+#define        PHASE_OUT(ctx)  do { ctx->phase = 10; } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef RETURN
+#define        RETURN(_code)   do {                    \
+               rval.code = _code;              \
+               rval.consumed = consumed_myself;\
+               return rval;                    \
+       } while(0)
+
+/*
+ * The decoder of the SET OF type.
+ */
+asn_dec_rval_t
+SET_OF_decode_ber(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const void *ptr, size_t size, int tag_mode) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements; /* Single one */
+
+    /*
+        * Parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       ber_tlv_tag_t tlv_tag;  /* T from TLV */
+       asn_dec_rval_t rval;    /* Return code from subparsers */
+
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+
+       ASN_DEBUG("Decoding %s as SET OF", td->name);
+       
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) {
+                       RETURN(RC_FAIL);
+               }
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+       
+       /*
+        * Start to parse where left previously
+        */
+       switch(ctx->phase) {
+       case 0:
+               /*
+                * PHASE 0.
+                * Check that the set of tags associated with given structure
+                * perfectly fits our expectations.
+                */
+
+               rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size,
+                       tag_mode, 1, &ctx->left, 0);
+               if(rval.code != RC_OK) {
+                       ASN_DEBUG("%s tagging check failed: %d",
+                               td->name, rval.code);
+                       return rval;
+               }
+
+               if(ctx->left >= 0)
+                       ctx->left += rval.consumed; /* ?Substracted below! */
+               ADVANCE(rval.consumed);
+
+               ASN_DEBUG("Structure consumes %ld bytes, "
+                       "buffer %ld", (long)ctx->left, (long)size);
+
+               NEXT_PHASE(ctx);
+               /* Fall through */
+       case 1:
+               /*
+                * PHASE 1.
+                * From the place where we've left it previously,
+                * try to decode the next item.
+                */
+         for(;; ctx->step = 0) {
+               ssize_t tag_len;        /* Length of TLV's T */
+
+               if(ctx->step & 1)
+                       goto microphase2;
+
+               /*
+                * MICROPHASE 1: Synchronize decoding.
+                */
+
+               if(ctx->left == 0) {
+                       ASN_DEBUG("End of SET OF %s", td->name);
+                       /*
+                        * No more things to decode.
+                        * Exit out of here.
+                        */
+                       PHASE_OUT(ctx);
+                       RETURN(RC_OK);
+               }
+
+               /*
+                * Fetch the T from TLV.
+                */
+               tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag);
+               switch(tag_len) {
+               case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE);
+                       /* Fall through */
+               case -1: RETURN(RC_FAIL);
+               }
+
+               if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) {
+                       if(LEFT < 2) {
+                               if(SIZE_VIOLATION)
+                                       RETURN(RC_FAIL);
+                               else
+                                       RETURN(RC_WMORE);
+                       } else if(((const uint8_t *)ptr)[1] == 0) {
+                               /*
+                                * Found the terminator of the
+                                * indefinite length structure.
+                                */
+                               break;
+                       }
+               }
+
+               /* Outmost tag may be unknown and cannot be fetched/compared */
+               if(elm->tag != (ber_tlv_tag_t)-1) {
+                   if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) {
+                       /*
+                        * The new list member of expected type has arrived.
+                        */
+                   } else {
+                       ASN_DEBUG("Unexpected tag %s fixed SET OF %s",
+                               ber_tlv_tag_string(tlv_tag), td->name);
+                       ASN_DEBUG("%s SET OF has tag %s",
+                               td->name, ber_tlv_tag_string(elm->tag));
+                       RETURN(RC_FAIL);
+                   }
+               }
+
+               /*
+                * MICROPHASE 2: Invoke the member-specific decoder.
+                */
+               ctx->step |= 1;         /* Confirm entering next microphase */
+       microphase2:
+               
+               /*
+                * Invoke the member fetch routine according to member's type
+                */
+               rval = elm->type->op->ber_decoder(opt_codec_ctx,
+                               elm->type, &ctx->ptr, ptr, LEFT, 0);
+               ASN_DEBUG("In %s SET OF %s code %d consumed %d",
+                       td->name, elm->type->name,
+                       rval.code, (int)rval.consumed);
+               switch(rval.code) {
+               case RC_OK:
+                       {
+                               asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+                               if(ASN_SET_ADD(list, ctx->ptr) != 0)
+                                       RETURN(RC_FAIL);
+                               else
+                                       ctx->ptr = 0;
+                       }
+                       break;
+               case RC_WMORE: /* More data expected */
+                       if(!SIZE_VIOLATION) {
+                               ADVANCE(rval.consumed);
+                               RETURN(RC_WMORE);
+                       }
+                       /* Fall through */
+               case RC_FAIL: /* Fatal error */
+                       ASN_STRUCT_FREE(*elm->type, ctx->ptr);
+                       ctx->ptr = 0;
+                       RETURN(RC_FAIL);
+               } /* switch(rval) */
+               
+               ADVANCE(rval.consumed);
+         }     /* for(all list members) */
+
+               NEXT_PHASE(ctx);
+       case 2:
+               /*
+                * Read in all "end of content" TLVs.
+                */
+               while(ctx->left < 0) {
+                       if(LEFT < 2) {
+                               if(LEFT > 0 && ((const char *)ptr)[0] != 0) {
+                                       /* Unexpected tag */
+                                       RETURN(RC_FAIL);
+                               } else {
+                                       RETURN(RC_WMORE);
+                               }
+                       }
+                       if(((const char *)ptr)[0] == 0
+                       && ((const char *)ptr)[1] == 0) {
+                               ADVANCE(2);
+                               ctx->left++;
+                       } else {
+                               RETURN(RC_FAIL);
+                       }
+               }
+
+               PHASE_OUT(ctx);
+       }
+       
+       RETURN(RC_OK);
+}
+
+/*
+ * Internally visible buffer holding a single encoded element.
+ */
+struct _el_buffer {
+       uint8_t *buf;
+       size_t length;
+       size_t allocated_size;
+    unsigned bits_unused;
+};
+/* Append bytes to the above structure */
+static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) {
+    struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr;
+
+    if(el_buf->length + size > el_buf->allocated_size) {
+        size_t new_size = el_buf->allocated_size ? el_buf->allocated_size : 8;
+        void *p;
+
+        do {
+            new_size <<= 2;
+        } while(el_buf->length + size > new_size);
+
+        p = REALLOC(el_buf->buf, new_size);
+        if(p) {
+            el_buf->buf = p;
+            el_buf->allocated_size = new_size;
+        } else {
+            return -1;
+        }
+    }
+
+    memcpy(el_buf->buf + el_buf->length, buffer, size);
+
+    el_buf->length += size;
+    return 0;
+}
+
+static void assert_unused_bits(const struct _el_buffer* p) {
+    if(p->length) {
+        assert((p->buf[p->length-1] & ~(0xff << p->bits_unused)) == 0);
+    } else {
+        assert(p->bits_unused == 0);
+    }
+}
+
+static int _el_buf_cmp(const void *ap, const void *bp) {
+    const struct _el_buffer *a = (const struct _el_buffer *)ap;
+    const struct _el_buffer *b = (const struct _el_buffer *)bp;
+    size_t common_len;
+    int ret = 0;
+
+    if(a->length < b->length)
+        common_len = a->length;
+    else
+        common_len = b->length;
+
+    if (a->buf && b->buf) {
+        ret = memcmp(a->buf, b->buf, common_len);
+    }
+    if(ret == 0) {
+        if(a->length < b->length)
+            ret = -1;
+        else if(a->length > b->length)
+            ret = 1;
+        /* Ignore unused bits. */
+        assert_unused_bits(a);
+        assert_unused_bits(b);
+    }
+
+    return ret;
+}
+
+static void
+SET_OF__encode_sorted_free(struct _el_buffer *el_buf, size_t count) {
+    size_t i;
+
+    for(i = 0; i < count; i++) {
+        FREEMEM(el_buf[i].buf);
+    }
+
+    FREEMEM(el_buf);
+}
+
+enum SET_OF__encode_method {
+    SOES_DER,   /* Distinguished Encoding Rules */
+    SOES_CUPER  /* Canonical Unaligned Packed Encoding Rules */
+};
+
+static struct _el_buffer *
+SET_OF__encode_sorted(const asn_TYPE_member_t *elm,
+                      const asn_anonymous_set_ *list,
+                      enum SET_OF__encode_method method) {
+    struct _el_buffer *encoded_els;
+    int edx;
+
+    encoded_els =
+        (struct _el_buffer *)CALLOC(list->count, sizeof(encoded_els[0]));
+    if(encoded_els == NULL) {
+        return NULL;
+    }
+
+       /*
+        * Encode all members.
+        */
+    for(edx = 0; edx < list->count; edx++) {
+        const void *memb_ptr = list->array[edx];
+        struct _el_buffer *encoding_el = &encoded_els[edx];
+        asn_enc_rval_t erval = {0,0,0};
+
+        if(!memb_ptr) break;
+
+        /*
+                * Encode the member into the prepared space.
+                */
+        switch(method) {
+        case SOES_DER:
+            erval = elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag,
+                                               _el_addbytes, encoding_el);
+            break;
+        case SOES_CUPER:
+            erval = uper_encode(elm->type,
+                                elm->encoding_constraints.per_constraints,
+                                memb_ptr, _el_addbytes, encoding_el);
+            if(erval.encoded != -1) {
+                size_t extra_bits = erval.encoded % 8;
+                assert(encoding_el->length == (size_t)(erval.encoded + 7) / 8);
+                encoding_el->bits_unused = (8 - extra_bits) & 0x7;
+            }
+            break;
+        default:
+            assert(!"Unreachable");
+            break;
+        }
+        if(erval.encoded < 0) break;
+       }
+
+    if(edx == list->count) {
+        /*
+         * Sort the encoded elements according to their encoding.
+         */
+        qsort(encoded_els, list->count, sizeof(encoded_els[0]), _el_buf_cmp);
+
+        return encoded_els;
+    } else {
+        SET_OF__encode_sorted_free(encoded_els, edx);
+        return NULL;
+    }
+}
+
+
+/*
+ * The DER encoder of the SET OF type.
+ */
+asn_enc_rval_t
+SET_OF_encode_der(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+    size_t computed_size = 0;
+    ssize_t encoding_size = 0;
+    struct _el_buffer *encoded_els;
+    int edx;
+
+       ASN_DEBUG("Estimating size for SET OF %s", td->name);
+
+    /*
+     * Gather the length of the underlying members sequence.
+     */
+    for(edx = 0; edx < list->count; edx++) {
+        void *memb_ptr = list->array[edx];
+        asn_enc_rval_t erval = {0,0,0};
+
+        if(!memb_ptr) ASN__ENCODE_FAILED;
+
+        erval =
+            elm->type->op->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0);
+        if(erval.encoded == -1) return erval;
+        computed_size += erval.encoded;
+       }
+
+
+    /*
+     * Encode the TLV for the sequence itself.
+     */
+    encoding_size =
+        der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
+    if(encoding_size < 0) {
+        ASN__ENCODE_FAILED;
+    }
+    computed_size += encoding_size;
+
+    if(!cb || list->count == 0) {
+        asn_enc_rval_t erval = {0,0,0};
+        erval.encoded = computed_size;
+        ASN__ENCODED_OK(erval);
+    }
+
+    ASN_DEBUG("Encoding members of %s SET OF", td->name);
+
+    /*
+     * DER mandates dynamic sorting of the SET OF elements
+     * according to their encodings. Build an array of the
+     * encoded elements.
+     */
+    encoded_els = SET_OF__encode_sorted(elm, list, SOES_DER);
+
+    /*
+     * Report encoded elements to the application.
+     * Dispose of temporary sorted members table.
+     */
+    for(edx = 0; edx < list->count; edx++) {
+        struct _el_buffer *encoded_el = &encoded_els[edx];
+        /* Report encoded chunks to the application */
+        if(cb(encoded_el->buf, encoded_el->length, app_key) < 0) {
+            break;
+        } else {
+            encoding_size += encoded_el->length;
+        }
+    }
+
+    SET_OF__encode_sorted_free(encoded_els, list->count);
+
+    if(edx == list->count) {
+        asn_enc_rval_t erval = {0,0,0};
+        assert(computed_size == (size_t)encoding_size);
+        erval.encoded = computed_size;
+        ASN__ENCODED_OK(erval);
+    } else {
+        ASN__ENCODE_FAILED;
+    }
+}
+
+#undef XER_ADVANCE
+#define        XER_ADVANCE(num_bytes)  do {                    \
+               size_t num = num_bytes;                 \
+               buf_ptr = ((const char *)buf_ptr) + num;\
+               size -= num;                            \
+               consumed_myself += num;                 \
+       } while(0)
+
+/*
+ * Decode the XER (XML) data.
+ */
+asn_dec_rval_t
+SET_OF_decode_xer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td, void **struct_ptr,
+                  const char *opt_mname, const void *buf_ptr, size_t size) {
+    /*
+        * Bring closer parts of structure description.
+        */
+       const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *element = td->elements;
+       const char *elm_tag;
+       const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
+
+       /*
+        * ... and parts of the structure being constructed.
+        */
+       void *st = *struct_ptr; /* Target structure. */
+       asn_struct_ctx_t *ctx;  /* Decoder context */
+
+       asn_dec_rval_t rval = {RC_OK, 0};/* Return value from a decoder */
+       ssize_t consumed_myself = 0;    /* Consumed bytes from ptr */
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(st == 0) {
+               st = *struct_ptr = CALLOC(1, specs->struct_size);
+               if(st == 0) RETURN(RC_FAIL);
+       }
+
+       /* Which tag is expected for the downstream */
+       if(specs->as_XMLValueList) {
+               elm_tag = (specs->as_XMLValueList == 1) ? 0 : "";
+       } else {
+               elm_tag = (*element->name)
+                               ? element->name : element->type->xml_tag;
+       }
+
+       /*
+        * Restore parsing context.
+        */
+       ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+       /*
+        * Phases of XER/XML processing:
+        * Phase 0: Check that the opening tag matches our expectations.
+        * Phase 1: Processing body and reacting on closing tag.
+        * Phase 2: Processing inner type.
+        */
+       for(; ctx->phase <= 2;) {
+               pxer_chunk_type_e ch_type;      /* XER chunk type */
+               ssize_t ch_size;                /* Chunk size */
+               xer_check_tag_e tcv;            /* Tag check value */
+
+               /*
+                * Go inside the inner member of a set.
+                */
+               if(ctx->phase == 2) {
+                       asn_dec_rval_t tmprval = {RC_OK, 0};
+
+                       /* Invoke the inner type decoder, m.b. multiple times */
+                       ASN_DEBUG("XER/SET OF element [%s]", elm_tag);
+                       tmprval = element->type->op->xer_decoder(opt_codec_ctx,
+                                       element->type, &ctx->ptr, elm_tag,
+                                       buf_ptr, size);
+                       if(tmprval.code == RC_OK) {
+                               asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+                               if(ASN_SET_ADD(list, ctx->ptr) != 0)
+                                       RETURN(RC_FAIL);
+                               ctx->ptr = 0;
+                               XER_ADVANCE(tmprval.consumed);
+                       } else {
+                               XER_ADVANCE(tmprval.consumed);
+                               RETURN(tmprval.code);
+                       }
+                       ctx->phase = 1; /* Back to body processing */
+                       ASN_DEBUG("XER/SET OF phase => %d", ctx->phase);
+                       /* Fall through */
+               }
+
+               /*
+                * Get the next part of the XML stream.
+                */
+               ch_size = xer_next_token(&ctx->context,
+                       buf_ptr, size, &ch_type);
+               if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+                       switch(ch_type) {
+            case PXER_WMORE:
+                RETURN(RC_WMORE);
+                       case PXER_COMMENT:      /* Got XML comment */
+                       case PXER_TEXT:         /* Ignore free-standing text */
+                               XER_ADVANCE(ch_size);   /* Skip silently */
+                               continue;
+                       case PXER_TAG:
+                               break;  /* Check the rest down there */
+                       }
+               }
+
+               tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+               ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s",
+                       tcv, ctx->phase, xml_tag);
+               switch(tcv) {
+               case XCT_CLOSING:
+                       if(ctx->phase == 0) break;
+                       ctx->phase = 0;
+                       /* Fall through */
+               case XCT_BOTH:
+                       if(ctx->phase == 0) {
+                               /* No more things to decode */
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 3; /* Phase out */
+                               RETURN(RC_OK);
+                       }
+                       /* Fall through */
+               case XCT_OPENING:
+                       if(ctx->phase == 0) {
+                               XER_ADVANCE(ch_size);
+                               ctx->phase = 1; /* Processing body phase */
+                               continue;
+                       }
+                       /* Fall through */
+               case XCT_UNKNOWN_OP:
+               case XCT_UNKNOWN_BO:
+
+                       ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase);
+                       if(ctx->phase == 1) {
+                               /*
+                                * Process a single possible member.
+                                */
+                               ctx->phase = 2;
+                               continue;
+                       }
+                       /* Fall through */
+               default:
+                       break;
+               }
+
+               ASN_DEBUG("Unexpected XML tag in SET OF");
+               break;
+       }
+
+       ctx->phase = 3; /* "Phase out" on hard failure */
+       RETURN(RC_FAIL);
+}
+
+
+
+typedef struct xer_tmp_enc_s {
+       void *buffer;
+       size_t offset;
+       size_t size;
+} xer_tmp_enc_t;
+static int
+SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) {
+       xer_tmp_enc_t *t = (xer_tmp_enc_t *)key;
+       if(t->offset + size >= t->size) {
+               size_t newsize = (t->size << 2) + size;
+               void *p = REALLOC(t->buffer, newsize);
+               if(!p) return -1;
+               t->buffer = p;
+               t->size = newsize;
+       }
+       memcpy((char *)t->buffer + t->offset, buffer, size);
+       t->offset += size;
+       return 0;
+}
+static int
+SET_OF_xer_order(const void *aptr, const void *bptr) {
+       const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr;
+       const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr;
+       size_t minlen = a->offset;
+       int ret;
+       if(b->offset < minlen) minlen = b->offset;
+       /* Well-formed UTF-8 has this nice lexicographical property... */
+       ret = memcmp(a->buffer, b->buffer, minlen);
+       if(ret != 0) return ret;
+       if(a->offset == b->offset)
+               return 0;
+       if(a->offset == minlen)
+               return -1;
+       return 1;
+}
+
+
+asn_enc_rval_t
+SET_OF_encode_xer(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+                  enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb,
+                  void *app_key) {
+    asn_enc_rval_t er = {0,0,0};
+       const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *elm = td->elements;
+    const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+    const char *mname = specs->as_XMLValueList
+               ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag);
+       size_t mlen = mname ? strlen(mname) : 0;
+       int xcan = (flags & XER_F_CANONICAL);
+       xer_tmp_enc_t *encs = 0;
+       size_t encs_count = 0;
+       void *original_app_key = app_key;
+       asn_app_consume_bytes_f *original_cb = cb;
+       int i;
+
+       if(!sptr) ASN__ENCODE_FAILED;
+
+       if(xcan) {
+               encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0]));
+               if(!encs) ASN__ENCODE_FAILED;
+               cb = SET_OF_encode_xer_callback;
+       }
+
+       er.encoded = 0;
+
+       for(i = 0; i < list->count; i++) {
+               asn_enc_rval_t tmper = {0,0,0};
+
+               void *memb_ptr = list->array[i];
+               if(!memb_ptr) continue;
+
+               if(encs) {
+                       memset(&encs[encs_count], 0, sizeof(encs[0]));
+                       app_key = &encs[encs_count];
+                       encs_count++;
+               }
+
+               if(mname) {
+                       if(!xcan) ASN__TEXT_INDENT(1, ilevel);
+                       ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+               }
+
+               if(!xcan && specs->as_XMLValueList == 1)
+                       ASN__TEXT_INDENT(1, ilevel + 1);
+               tmper = elm->type->op->xer_encoder(elm->type, memb_ptr,
+                               ilevel + (specs->as_XMLValueList != 2),
+                               flags, cb, app_key);
+               if(tmper.encoded == -1) return tmper;
+               er.encoded += tmper.encoded;
+               if(tmper.encoded == 0 && specs->as_XMLValueList) {
+                       const char *name = elm->type->xml_tag;
+                       size_t len = strlen(name);
+                       ASN__CALLBACK3("<", 1, name, len, "/>", 2);
+               }
+
+               if(mname) {
+                       ASN__CALLBACK3("</", 2, mname, mlen, ">", 1);
+               }
+
+       }
+
+       if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1);
+
+       if(encs) {
+               xer_tmp_enc_t *enc = encs;
+               xer_tmp_enc_t *end = encs + encs_count;
+               ssize_t control_size = 0;
+
+               er.encoded = 0;
+               cb = original_cb;
+               app_key = original_app_key;
+               qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order);
+
+               for(; enc < end; enc++) {
+                       ASN__CALLBACK(enc->buffer, enc->offset);
+                       FREEMEM(enc->buffer);
+                       enc->buffer = 0;
+                       control_size += enc->offset;
+               }
+               assert(control_size == er.encoded);
+       }
+
+       goto cleanup;
+cb_failed:
+       ASN__ENCODE_FAILED;
+cleanup:
+       if(encs) {
+               size_t n;
+               for(n = 0; n < encs_count; n++) {
+                       FREEMEM(encs[n].buffer);
+               }
+               FREEMEM(encs);
+       }
+       ASN__ENCODED_OK(er);
+}
+
+int
+SET_OF_print(const asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+             asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_TYPE_member_t *elm = td->elements;
+       const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+       int ret;
+       int i;
+
+       if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
+
+       /* Dump preamble */
+       if(cb(td->name, strlen(td->name), app_key) < 0
+       || cb(" ::= {", 6, app_key) < 0)
+               return -1;
+
+       for(i = 0; i < list->count; i++) {
+               const void *memb_ptr = list->array[i];
+               if(!memb_ptr) continue;
+
+               _i_INDENT(1);
+
+               ret = elm->type->op->print_struct(elm->type, memb_ptr,
+                       ilevel + 1, cb, app_key);
+               if(ret) return ret;
+       }
+
+       ilevel--;
+       _i_INDENT(1);
+
+       return (cb("}", 1, app_key) < 0) ? -1 : 0;
+}
+
+void
+SET_OF_free(const asn_TYPE_descriptor_t *td, void *ptr,
+            enum asn_struct_free_method method) {
+    if(td && ptr) {
+               const asn_SET_OF_specifics_t *specs;
+               asn_TYPE_member_t *elm = td->elements;
+               asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr);
+               asn_struct_ctx_t *ctx;  /* Decoder context */
+               int i;
+
+               /*
+                * Could not use set_of_empty() because of (*free)
+                * incompatibility.
+                */
+               for(i = 0; i < list->count; i++) {
+                       void *memb_ptr = list->array[i];
+                       if(memb_ptr)
+                       ASN_STRUCT_FREE(*elm->type, memb_ptr);
+               }
+               list->count = 0;        /* No meaningful elements left */
+
+               asn_set_empty(list);    /* Remove (list->array) */
+
+               specs = (const asn_SET_OF_specifics_t *)td->specifics;
+               ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset);
+               if(ctx->ptr) {
+                       ASN_STRUCT_FREE(*elm->type, ctx->ptr);
+                       ctx->ptr = 0;
+               }
+
+        switch(method) {
+        case ASFM_FREE_EVERYTHING:
+            FREEMEM(ptr);
+            break;
+        case ASFM_FREE_UNDERLYING:
+            break;
+        case ASFM_FREE_UNDERLYING_AND_RESET:
+            memset(ptr, 0, specs->struct_size);
+            break;
+        }
+    }
+}
+
+int
+SET_OF_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                  asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+    const asn_TYPE_member_t *elm = td->elements;
+       asn_constr_check_f *constr;
+       const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr);
+       int i;
+
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+
+       constr = elm->encoding_constraints.general_constraints;
+       if(!constr) constr = elm->type->encoding_constraints.general_constraints;
+
+       /*
+        * Iterate over the members of an array.
+        * Validate each in turn, until one fails.
+        */
+       for(i = 0; i < list->count; i++) {
+               const void *memb_ptr = list->array[i];
+               int ret;
+
+               if(!memb_ptr) continue;
+
+               ret = constr(elm->type, memb_ptr, ctfailcb, app_key);
+               if(ret) return ret;
+       }
+
+       return 0;
+}
+
+#ifndef ASN_DISABLE_PER_SUPPORT
+
+asn_dec_rval_t
+SET_OF_decode_uper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    asn_dec_rval_t rv = {RC_OK, 0};
+       const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    const asn_TYPE_member_t *elm = td->elements; /* Single one */
+    void *st = *sptr;
+       asn_anonymous_set_ *list;
+       const asn_per_constraint_t *ct;
+       int repeat = 0;
+       ssize_t nelems;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }                                                                       
+       list = _A_SET_FROM_VOID(st);
+
+       /* Figure out which constraints to use */
+       if(constraints) ct = &constraints->size;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->size;
+       else ct = 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               int value = per_get_few_bits(pd, 1);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value) ct = 0;       /* Not restricted! */
+       }
+
+       if(ct && ct->effective_bits >= 0) {
+               /* X.691, #19.5: No length determinant */
+               nelems = per_get_few_bits(pd, ct->effective_bits);
+               ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s",
+                       (long)nelems, ct->lower_bound, td->name);
+               if(nelems < 0)  ASN__DECODE_STARVED;
+               nelems += ct->lower_bound;
+       } else {
+               nelems = -1;
+       }
+
+       do {
+               int i;
+               if(nelems < 0) {
+                       nelems = uper_get_length(pd, -1, 0, &repeat);
+            ASN_DEBUG("Got to decode %" ASN_PRI_SSIZE " elements (eff %d)",
+                      nelems, (int)(ct ? ct->effective_bits : -1));
+            if(nelems < 0) ASN__DECODE_STARVED;
+               }
+
+               for(i = 0; i < nelems; i++) {
+                       void *ptr = 0;
+                       ASN_DEBUG("SET OF %s decoding", elm->type->name);
+                       rv = elm->type->op->uper_decoder(opt_codec_ctx, elm->type,
+                               elm->encoding_constraints.per_constraints, &ptr, pd);
+                       ASN_DEBUG("%s SET OF %s decoded %d, %p",
+                               td->name, elm->type->name, rv.code, ptr);
+                       if(rv.code == RC_OK) {
+                               if(ASN_SET_ADD(list, ptr) == 0) {
+                    if(rv.consumed == 0 && nelems > 200) {
+                        /* Protect from SET OF NULL compression bombs. */
+                        ASN__DECODE_FAILED;
+                    }
+                                       continue;
+                }
+                               ASN_DEBUG("Failed to add element into %s",
+                                       td->name);
+                               /* Fall through */
+                               rv.code = RC_FAIL;
+                       } else {
+                               ASN_DEBUG("Failed decoding %s of %s (SET OF)",
+                                       elm->type->name, td->name);
+                       }
+                       if(ptr) ASN_STRUCT_FREE(*elm->type, ptr);
+                       return rv;
+               }
+
+               nelems = -1;    /* Allow uper_get_length() */
+       } while(repeat);
+
+       ASN_DEBUG("Decoded %s as SET OF", td->name);
+
+       rv.code = RC_OK;
+       rv.consumed = 0;
+       return rv;
+}
+
+asn_enc_rval_t
+SET_OF_encode_uper(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+    const asn_anonymous_set_ *list;
+    const asn_per_constraint_t *ct;
+    const asn_TYPE_member_t *elm = td->elements;
+    struct _el_buffer *encoded_els;
+    asn_enc_rval_t er = {0,0,0};
+    size_t encoded_edx;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    list = _A_CSET_FROM_VOID(sptr);
+
+    er.encoded = 0;
+
+    ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count);
+
+    if(constraints) ct = &constraints->size;
+    else if(td->encoding_constraints.per_constraints)
+        ct = &td->encoding_constraints.per_constraints->size;
+    else ct = 0;
+
+    /* If extensible constraint, check if size is in root */
+    if(ct) {
+        int not_in_root =
+            (list->count < ct->lower_bound || list->count > ct->upper_bound);
+        ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound,
+                  ct->flags & APC_EXTENSIBLE ? "ext" : "fix");
+        if(ct->flags & APC_EXTENSIBLE) {
+            /* Declare whether size is in extension root */
+            if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED;
+            if(not_in_root) ct = 0;
+        } else if(not_in_root && ct->effective_bits >= 0) {
+            ASN__ENCODE_FAILED;
+        }
+
+    }
+
+    if(ct && ct->effective_bits >= 0) {
+        /* X.691, #19.5: No length determinant */
+        if(per_put_few_bits(po, list->count - ct->lower_bound,
+                            ct->effective_bits))
+            ASN__ENCODE_FAILED;
+    } else if(list->count == 0) {
+        /* When the list is empty add only the length determinant
+         * X.691, #20.6 and #11.9.4.1
+         */
+        if (uper_put_length(po, 0, 0)) {
+            ASN__ENCODE_FAILED;
+        }
+        ASN__ENCODED_OK(er);
+    }
+
+
+    /*
+     * Canonical UPER #22.1 mandates dynamic sorting of the SET OF elements
+     * according to their encodings. Build an array of the encoded elements.
+     */
+    encoded_els = SET_OF__encode_sorted(elm, list, SOES_CUPER);
+
+    for(encoded_edx = 0; (ssize_t)encoded_edx < list->count;) {
+        ssize_t may_encode;
+        size_t edx;
+        int need_eom = 0;
+
+        if(ct && ct->effective_bits >= 0) {
+            may_encode = list->count;
+        } else {
+            may_encode =
+                uper_put_length(po, list->count - encoded_edx, &need_eom);
+            if(may_encode < 0) ASN__ENCODE_FAILED;
+        }
+
+        for(edx = encoded_edx; edx < encoded_edx + may_encode; edx++) {
+            const struct _el_buffer *el = &encoded_els[edx];
+            if(asn_put_many_bits(po, el->buf,
+                                 (8 * el->length) - el->bits_unused) < 0) {
+                break;
+            }
+        }
+
+        if(need_eom && uper_put_length(po, 0, 0))
+            ASN__ENCODE_FAILED; /* End of Message length */
+
+        encoded_edx += may_encode;
+    }
+
+    SET_OF__encode_sorted_free(encoded_els, list->count);
+
+    if((ssize_t)encoded_edx == list->count) {
+        ASN__ENCODED_OK(er);
+    } else {
+        ASN__ENCODE_FAILED;
+    }
+}
+
+asn_dec_rval_t
+SET_OF_decode_aper(const asn_codec_ctx_t *opt_codec_ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       asn_dec_rval_t rv = {RC_OK, 0};
+       const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+       const asn_TYPE_member_t *elm = td->elements; /* Single one */
+       void *st = *sptr;
+       asn_anonymous_set_ *list;
+       const asn_per_constraint_t *ct;
+       int repeat = 0;
+       ssize_t nelems;
+
+       if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Create the target structure if it is not present already.
+        */
+       if(!st) {
+               st = *sptr = CALLOC(1, specs->struct_size);
+               if(!st) ASN__DECODE_FAILED;
+       }
+       list = _A_SET_FROM_VOID(st);
+
+       /* Figure out which constraints to use */
+       if(constraints) ct = &constraints->size;
+       else if(td->encoding_constraints.per_constraints)
+               ct = &td->encoding_constraints.per_constraints->size;
+       else ct = 0;
+
+       if(ct && ct->flags & APC_EXTENSIBLE) {
+               int value = per_get_few_bits(pd, 1);
+               if(value < 0) ASN__DECODE_STARVED;
+               if(value) ct = 0;       /* Not restricted! */
+       }
+
+       if(ct && ct->effective_bits >= 0) {
+               /* X.691, #19.5: No length determinant */
+               nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound + 1);
+               ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s",
+                         (long)nelems, ct->lower_bound, td->name);
+               if(nelems < 0)  ASN__DECODE_STARVED;
+               nelems += ct->lower_bound;
+       } else {
+               nelems = -1;
+       }
+
+       do {
+               int i;
+               if(nelems < 0) {
+                       nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1,
+                                                ct ? ct->effective_bits : -1, &repeat);
+                       ASN_DEBUG("Got to decode %d elements (eff %d)",
+                                 (int)nelems, (int)(ct ? ct->effective_bits : -1));
+                       if(nelems < 0) ASN__DECODE_STARVED;
+               }
+
+               for(i = 0; i < nelems; i++) {
+                       void *ptr = 0;
+                       ASN_DEBUG("SET OF %s decoding", elm->type->name);
+                       rv = elm->type->op->aper_decoder(opt_codec_ctx, elm->type,
+                                                        elm->encoding_constraints.per_constraints, &ptr, pd);
+                       ASN_DEBUG("%s SET OF %s decoded %d, %p",
+                                 td->name, elm->type->name, rv.code, ptr);
+                       if(rv.code == RC_OK) {
+                               if(ASN_SET_ADD(list, ptr) == 0)
+                                       continue;
+                               ASN_DEBUG("Failed to add element into %s",
+                                         td->name);
+                               /* Fall through */
+                               rv.code = RC_FAIL;
+                       } else {
+                               ASN_DEBUG("Failed decoding %s of %s (SET OF)",
+                                         elm->type->name, td->name);
+                       }
+                       if(ptr) ASN_STRUCT_FREE(*elm->type, ptr);
+                       return rv;
+               }
+
+               nelems = -1;    /* Allow uper_get_length() */
+       } while(repeat);
+
+       ASN_DEBUG("Decoded %s as SET OF", td->name);
+
+       rv.code = RC_OK;
+       rv.consumed = 0;
+       return rv;
+}
+
+#endif  /* ASN_DISABLE_PER_SUPPORT */
+
+struct comparable_ptr {
+    const asn_TYPE_descriptor_t *td;
+    const void *sptr;
+};
+
+static int
+SET_OF__compare_cb(const void *aptr, const void *bptr) {
+    const struct comparable_ptr *a = aptr;
+    const struct comparable_ptr *b = bptr;
+    assert(a->td == b->td);
+    return a->td->op->compare_struct(a->td, a->sptr, b->sptr);
+}
+
+int
+SET_OF_compare(const asn_TYPE_descriptor_t *td, const void *aptr,
+               const void *bptr) {
+    const asn_anonymous_set_ *a = _A_CSET_FROM_VOID(aptr);
+    const asn_anonymous_set_ *b = _A_CSET_FROM_VOID(bptr);
+
+    if(a && b) {
+        struct comparable_ptr *asorted;
+        struct comparable_ptr *bsorted;
+        ssize_t common_length;
+        ssize_t idx;
+
+        if(a->count == 0) {
+            if(b->count) return -1;
+            return 0;
+        } else if(b->count == 0) {
+            return 1;
+        }
+
+        asorted = MALLOC(a->count * sizeof(asorted[0]));
+        bsorted = MALLOC(b->count * sizeof(bsorted[0]));
+        if(!asorted || !bsorted) {
+            FREEMEM(asorted);
+            FREEMEM(bsorted);
+            return -1;
+        }
+
+        for(idx = 0; idx < a->count; idx++) {
+            asorted[idx].td = td->elements->type;
+            asorted[idx].sptr = a->array[idx];
+        }
+
+        for(idx = 0; idx < b->count; idx++) {
+            bsorted[idx].td = td->elements->type;
+            bsorted[idx].sptr = b->array[idx];
+        }
+
+        qsort(asorted, a->count, sizeof(asorted[0]), SET_OF__compare_cb);
+        qsort(bsorted, b->count, sizeof(bsorted[0]), SET_OF__compare_cb);
+
+        common_length = (a->count < b->count ? a->count : b->count);
+        for(idx = 0; idx < common_length; idx++) {
+            int ret = td->elements->type->op->compare_struct(
+                td->elements->type, asorted[idx].sptr, bsorted[idx].sptr);
+            if(ret) {
+                FREEMEM(asorted);
+                FREEMEM(bsorted);
+                return ret;
+            }
+        }
+
+        FREEMEM(asorted);
+        FREEMEM(bsorted);
+
+        if(idx < b->count) /* more elements in b */
+            return -1;     /* a is shorter, so put it first */
+        if(idx < a->count) return 1;
+    } else if(!a) {
+        return -1;
+    } else if(!b) {
+        return 1;
+    }
+
+       return 0;
+}
+
+
+asn_TYPE_operation_t asn_OP_SET_OF = {
+       SET_OF_free,
+       SET_OF_print,
+       SET_OF_compare,
+       SET_OF_decode_ber,
+       SET_OF_encode_der,
+       SET_OF_decode_xer,
+       SET_OF_encode_xer,
+#ifdef ASN_DISABLE_OER_SUPPORT
+       0,
+       0,
+#else
+       SET_OF_decode_oer,
+       SET_OF_encode_oer,
+#endif
+#ifdef ASN_DISABLE_PER_SUPPORT
+       0,
+       0,
+       0,
+       0,
+#else
+       SET_OF_decode_uper,
+       SET_OF_encode_uper,
+       SET_OF_decode_aper,
+       0,      /* SET_OF_encode_aper */
+#endif /* ASN_DISABLE_PER_SUPPORT */
+       SET_OF_random_fill,
+       0       /* Use generic outmost tag fetcher */
+};
+
+
+asn_random_fill_result_t
+SET_OF_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
+                   const asn_encoding_constraints_t *constraints,
+                   size_t max_length) {
+    const asn_SET_OF_specifics_t *specs =
+        (const asn_SET_OF_specifics_t *)td->specifics;
+    asn_random_fill_result_t res_ok = {ARFILL_OK, 0};
+    asn_random_fill_result_t result_failed = {ARFILL_FAILED, 0};
+    asn_random_fill_result_t result_skipped = {ARFILL_SKIPPED, 0};
+    const asn_TYPE_member_t *elm = td->elements;
+    void *st = *sptr;
+    long max_elements = 5;
+    long slb = 0;   /* Lower size bound */
+    long sub = 0;   /* Upper size bound */
+    size_t rnd_len;
+
+    if(max_length == 0) return result_skipped;
+
+    if(st == NULL) {
+        st = (*sptr = CALLOC(1, specs->struct_size));
+        if(st == NULL) {
+            return result_failed;
+        }
+    }
+
+    switch(asn_random_between(0, 6)) {
+    case 0: max_elements = 0; break;
+    case 1: max_elements = 1; break;
+    case 2: max_elements = 5; break;
+    case 3: max_elements = max_length; break;
+    case 4: max_elements = max_length / 2; break;
+    case 5: max_elements = max_length / 4; break;
+    default: break;
+    }
+    sub = slb + max_elements;
+
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
+    if(constraints->per_constraints) {
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
+        if(pc->flags & APC_SEMI_CONSTRAINED) {
+            slb = pc->lower_bound;
+            sub = pc->lower_bound + max_elements;
+        } else if(pc->flags & APC_CONSTRAINED) {
+            slb = pc->lower_bound;
+            sub = pc->upper_bound;
+            if(sub - slb > max_elements) sub = slb + max_elements;
+        }
+    }
+
+    /* Bias towards edges of allowed space */
+    switch(asn_random_between(-1, 4)) {
+    default:
+    case -1:
+        /* Prepare lengths somewhat outside of constrained range. */
+        if(constraints->per_constraints
+           && (constraints->per_constraints->size.flags & APC_EXTENSIBLE)) {
+            switch(asn_random_between(0, 5)) {
+            default:
+            case 0:
+                rnd_len = 0;
+                break;
+            case 1:
+                if(slb > 0) {
+                    rnd_len = slb - 1;
+                } else {
+                    rnd_len = 0;
+                }
+                break;
+            case 2:
+                rnd_len = asn_random_between(0, slb);
+                break;
+            case 3:
+                if(sub < (ssize_t)max_length) {
+                    rnd_len = sub + 1;
+                } else {
+                    rnd_len = max_length;
+                }
+                break;
+            case 4:
+                if(sub < (ssize_t)max_length) {
+                    rnd_len = asn_random_between(sub + 1, max_length);
+                } else {
+                    rnd_len = max_length;
+                }
+                break;
+            case 5:
+                rnd_len = max_length;
+                break;
+            }
+            break;
+        }
+        /* Fall through */
+    case 0:
+        rnd_len = asn_random_between(slb, sub);
+        break;
+    case 1:
+        if(slb < sub) {
+            rnd_len = asn_random_between(slb + 1, sub);
+            break;
+        }
+        /* Fall through */
+    case 2:
+        rnd_len = asn_random_between(slb, slb);
+        break;
+    case 3:
+        if(slb < sub) {
+            rnd_len = asn_random_between(slb, sub - 1);
+            break;
+        }
+        /* Fall through */
+    case 4:
+        rnd_len = asn_random_between(sub, sub);
+        break;
+    }
+
+    for(; rnd_len > 0; rnd_len--) {
+        asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+        void *ptr = 0;
+        asn_random_fill_result_t tmpres = elm->type->op->random_fill(
+            elm->type, &ptr, &elm->encoding_constraints,
+            (max_length > res_ok.length ? max_length - res_ok.length : 0)
+                / rnd_len);
+        switch(tmpres.code) {
+        case ARFILL_OK:
+            ASN_SET_ADD(list, ptr);
+            res_ok.length += tmpres.length;
+            break;
+        case ARFILL_SKIPPED:
+            break;
+        case ARFILL_FAILED:
+            assert(ptr == 0);
+            return tmpres;
+        }
+    }
+
+    return res_ok;
+}
+
diff --git a/skeletons/constr_SET_OF.h b/skeletons/constr_SET_OF.h
new file mode 100644 (file)
index 0000000..7681062
--- /dev/null
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        CONSTR_SET_OF_H
+#define        CONSTR_SET_OF_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct asn_SET_OF_specifics_s {
+    /*
+     * Target structure description.
+     */
+    unsigned struct_size;       /* Size of the target structure. */
+    unsigned ctx_offset;        /* Offset of the asn_struct_ctx_t member */
+
+    /* XER-specific stuff */
+    int as_XMLValueList; /* The member type must be encoded like this */
+} asn_SET_OF_specifics_t;
+
+/*
+ * A set specialized functions dealing with the SET OF type.
+ */
+asn_struct_free_f SET_OF_free;
+asn_struct_print_f SET_OF_print;
+asn_struct_compare_f SET_OF_compare;
+asn_constr_check_f SET_OF_constraint;
+ber_type_decoder_f SET_OF_decode_ber;
+der_type_encoder_f SET_OF_encode_der;
+xer_type_decoder_f SET_OF_decode_xer;
+xer_type_encoder_f SET_OF_encode_xer;
+oer_type_decoder_f SET_OF_decode_oer;
+oer_type_encoder_f SET_OF_encode_oer;
+per_type_decoder_f SET_OF_decode_uper;
+per_type_encoder_f SET_OF_encode_uper;
+per_type_decoder_f SET_OF_decode_aper;
+per_type_encoder_f SET_OF_encode_aper;
+asn_random_fill_f  SET_OF_random_fill;
+extern asn_TYPE_operation_t asn_OP_SET_OF;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CONSTR_SET_OF_H */
diff --git a/skeletons/constr_SET_OF_oer.c b/skeletons/constr_SET_OF_oer.c
new file mode 100644 (file)
index 0000000..5200518
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef ASN_DISABLE_OER_SUPPORT
+
+#include <asn_internal.h>
+#include <constr_SET_OF.h>
+#include <asn_SET_OF.h>
+#include <errno.h>
+
+/*
+ * This macro "eats" the part of the buffer which is definitely "consumed",
+ * i.e. was correctly converted into local representation or rightfully skipped.
+ */
+#undef  ADVANCE
+#define ADVANCE(num_bytes)                   \
+    do {                                     \
+        size_t num = num_bytes;              \
+        ptr = ((const char *)ptr) + num;     \
+        size -= num;                         \
+        consumed_myself += num;              \
+    } while(0)
+
+/*
+ * Switch to the next phase of parsing.
+ */
+#undef  NEXT_PHASE
+#define NEXT_PHASE(ctx) \
+    do {                \
+        ctx->phase++;   \
+        ctx->step = 0;  \
+    } while(0)
+#undef  SET_PHASE
+#define SET_PHASE(ctx, value) \
+    do {                      \
+        ctx->phase = value;   \
+        ctx->step = 0;        \
+    } while(0)
+
+/*
+ * Return a standardized complex structure.
+ */
+#undef  RETURN
+#define RETURN(_code)                    \
+    do {                                 \
+        asn_dec_rval_t rval;             \
+        rval.code = _code;               \
+        rval.consumed = consumed_myself; \
+        return rval;                     \
+    } while(0)
+
+/*
+ * The SEQUENCE OF and SET OF values utilize a "quantity field".
+ * It is is a pointless combination of #8.6 (length determinant, capable
+ * of encoding tiny and huge numbers in the shortest possible number of octets)
+ * and the variable sized integer. What could have been encoded by #8.6 alone
+ * is required to be encoded by #8.6 followed by that number of unsigned octets.
+ * This doesn't make too much sense. It seems that the original version of OER
+ * standard have been using the unconstrained unsigned integer as a quantity
+ * field, and this legacy have gone through ISO/ITU-T standardization process.
+ */
+static ssize_t
+oer_fetch_quantity(const void *ptr, size_t size, size_t *qty_r) {
+    const uint8_t *b;
+    const uint8_t *bend;
+    size_t len = 0;
+    size_t qty;
+
+    ssize_t len_len = oer_fetch_length(ptr, size, &len);
+    if(len_len <= 0) {
+        *qty_r = 0;
+        return len_len;
+    }
+
+    if((len_len + len) > size) {
+        *qty_r = 0;
+        return 0;
+    }
+
+    b = (const uint8_t *)ptr + len_len;
+    bend = b + len;
+
+    /* Skip the leading 0-bytes */
+    for(; b < bend && *b == 0; b++) {
+    }
+
+    if((bend - b) > (ssize_t)sizeof(size_t)) {
+        /* Length is not representable by the native size_t type */
+        *qty_r = 0;
+        return -1;
+    }
+
+    for(qty = 0; b < bend; b++) {
+        qty = (qty << 8) + *b;
+    }
+
+    if(qty > RSIZE_MAX) { /* A bit of C11 validation */
+        *qty_r = 0;
+        return -1;
+    }
+
+    *qty_r = qty;
+    assert((size_t)len_len + len == (size_t)(bend - (const uint8_t *)ptr));
+    return len_len + len;
+}
+
+asn_dec_rval_t
+SET_OF_decode_oer(const asn_codec_ctx_t *opt_codec_ctx,
+                  const asn_TYPE_descriptor_t *td,
+                  const asn_oer_constraints_t *constraints, void **struct_ptr,
+                  const void *ptr, size_t size) {
+    const asn_SET_OF_specifics_t *specs = (const asn_SET_OF_specifics_t *)td->specifics;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    void *st = *struct_ptr; /* Target structure */
+    asn_struct_ctx_t *ctx; /* Decoder context */
+    size_t consumed_myself = 0; /* Consumed bytes from ptr. */
+
+    (void)constraints;
+
+    if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx))
+        ASN__DECODE_FAILED;
+
+    /*
+     * Create the target structure if it is not present already.
+     */
+    if(st == 0) {
+        st = *struct_ptr = CALLOC(1, specs->struct_size);
+        if(st == 0) {
+            RETURN(RC_FAIL);
+        }
+    }
+
+    /*
+     * Restore parsing context.
+     */
+    ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset);
+
+    /*
+     * Start to parse where left previously.
+     */
+    switch(ctx->phase) {
+    case 0: {
+        /*
+         * Fetch number of elements to decode.
+         */
+        size_t length = 0;
+        size_t len_size = oer_fetch_quantity(ptr, size, &length);
+        switch(len_size) {
+        case 0:
+            RETURN(RC_WMORE);
+        case -1:
+            RETURN(RC_FAIL);
+        default:
+            ADVANCE(len_size);
+            ctx->left = length;
+        }
+    }
+        NEXT_PHASE(ctx);
+        /* FALL THROUGH */
+    case 1: {
+        /* Decode components of the extension root */
+        asn_TYPE_member_t *elm = td->elements;
+        asn_anonymous_set_ *list = _A_SET_FROM_VOID(st);
+        const void *base_ptr = ptr;
+        ber_tlv_len_t base_ctx_left = ctx->left;
+
+        assert(td->elements_count == 1);
+
+        ASN_DEBUG("OER SET OF %s Decoding PHASE 1", td->name);
+
+        for(; ctx->left > 0; ctx->left--) {
+            asn_dec_rval_t rv = elm->type->op->oer_decoder(
+                opt_codec_ctx, elm->type,
+                elm->encoding_constraints.oer_constraints, &ctx->ptr, ptr,
+                size);
+            ADVANCE(rv.consumed);
+            switch(rv.code) {
+            case RC_OK:
+                if(ASN_SET_ADD(list, ctx->ptr) != 0) {
+                    RETURN(RC_FAIL);
+                } else {
+                    ctx->ptr = 0;
+                    /*
+                     * This check is to avoid compression bomb with
+                     * specs like SEQUENCE/SET OF NULL which don't
+                     * consume data at all.
+                     */
+                    if(rv.consumed == 0 && base_ptr == ptr
+                       && (base_ctx_left - ctx->left) > 200) {
+                        ASN__DECODE_FAILED;
+                    }
+                    break;
+                }
+            case RC_WMORE:
+                RETURN(RC_WMORE);
+            case RC_FAIL:
+                ASN_STRUCT_FREE(*elm->type, ctx->ptr);
+                ctx->ptr = 0;
+                SET_PHASE(ctx, 3);
+                RETURN(RC_FAIL);
+            }
+        }
+        /* Decoded decently. */
+        NEXT_PHASE(ctx);
+    }
+        /* Fall through */
+    case 2:
+        /* Ignore fully decoded */
+        assert(ctx->left == 0);
+        RETURN(RC_OK);
+    case 3:
+        /* Failed to decode. */
+        RETURN(RC_FAIL);
+    }
+
+    return rval;
+}
+
+static ssize_t
+oer_put_quantity(size_t qty, asn_app_consume_bytes_f *cb, void *app_key) {
+    uint8_t buf[1 + sizeof(size_t)];
+    uint8_t *b = &buf[sizeof(size_t)]; /* Last addressable */
+    size_t encoded;
+
+    do {
+        *b-- = qty;
+        qty >>= 8;
+    } while(qty);
+
+    *b = sizeof(buf) - (b-buf) - 1;
+    encoded = sizeof(buf) - (b-buf);
+    if(cb(b, encoded, app_key) < 0)
+        return -1;
+    return encoded;
+}
+
+/*
+ * Encode as Canonical OER.
+ */
+asn_enc_rval_t
+SET_OF_encode_oer(const asn_TYPE_descriptor_t *td,
+                  const asn_oer_constraints_t *constraints, const void *sptr,
+                  asn_app_consume_bytes_f *cb, void *app_key) {
+    const asn_TYPE_member_t *elm;
+    const asn_anonymous_set_ *list;
+    size_t computed_size = 0;
+    ssize_t qty_len;
+    int n;
+
+    (void)constraints;
+
+    if(!sptr) ASN__ENCODE_FAILED;
+
+    elm = td->elements;
+    list = _A_CSET_FROM_VOID(sptr);
+
+    qty_len = oer_put_quantity(list->count, cb, app_key);
+    if(qty_len < 0) {
+        ASN__ENCODE_FAILED;
+    }
+    computed_size += qty_len;
+
+    for(n = 0; n < list->count; n++) {
+        void *memb_ptr = list->array[n];
+        asn_enc_rval_t er = {0,0,0};
+        er = elm->type->op->oer_encoder(
+            elm->type, elm->encoding_constraints.oer_constraints, memb_ptr, cb,
+            app_key);
+        if(er.encoded < 0) {
+            return er;
+        } else {
+            computed_size += er.encoded;
+        }
+    }
+
+    {
+        asn_enc_rval_t erval = {0,0,0};
+        erval.encoded = computed_size;
+        ASN__ENCODED_OK(erval);
+    }
+}
+
+#endif  /* ASN_DISABLE_OER_SUPPORT */
diff --git a/skeletons/constr_TYPE.c b/skeletons/constr_TYPE.c
new file mode 100644 (file)
index 0000000..aefaefd
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <constr_TYPE.h>
+#include <errno.h>
+
+/*
+ * Version of the ASN.1 infrastructure shipped with compiler.
+ */
+int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; }
+
+static asn_app_consume_bytes_f _print2fp;
+
+/*
+ * Return the outmost tag of the type.
+ */
+ber_tlv_tag_t
+asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor,
+               const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) {
+
+       if(tag_mode)
+               return tag;
+
+       if(type_descriptor->tags_count)
+               return type_descriptor->tags[0];
+
+       return type_descriptor->op->outmost_tag(type_descriptor, struct_ptr, 0, 0);
+}
+
+/*
+ * Print the target language's structure in human readable form.
+ */
+int
+asn_fprint(FILE *stream, const asn_TYPE_descriptor_t *td,
+           const void *struct_ptr) {
+    if(!stream) stream = stdout;
+    if(!td || !struct_ptr) {
+        errno = EINVAL;
+        return -1;
+       }
+
+       /* Invoke type-specific printer */
+    if(td->op->print_struct(td, struct_ptr, 1, _print2fp, stream)) {
+        return -1;
+    }
+
+    /* Terminate the output */
+    if(_print2fp("\n", 1, stream)) {
+        return -1;
+    }
+
+    return fflush(stream);
+}
+
+/* Dump the data into the specified stdio stream */
+static int
+_print2fp(const void *buffer, size_t size, void *app_key) {
+       FILE *stream = (FILE *)app_key;
+
+       if(fwrite(buffer, 1, size, stream) != size)
+               return -1;
+
+       return 0;
+}
+
+
+/*
+ * Some compilers do not support variable args macros.
+ * This function is a replacement of ASN_DEBUG() macro.
+ */
+void ASN_DEBUG_f(const char *fmt, ...);
+void ASN_DEBUG_f(const char *fmt, ...) {
+       va_list ap;
+       va_start(ap, fmt);
+       vfprintf(stderr, fmt, ap);
+       fprintf(stderr, "\n");
+       va_end(ap);
+}
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
new file mode 100644 (file)
index 0000000..d80dea5
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+/*
+ * This file contains the declaration structure called "ASN.1 Type Definition",
+ * which holds all information necessary for encoding and decoding routines.
+ * This structure even contains pointer to these encoding and decoding routines
+ * for each defined ASN.1 type.
+ */
+#ifndef        _CONSTR_TYPE_H_
+#define        _CONSTR_TYPE_H_
+
+#include <ber_tlv_length.h>
+#include <ber_tlv_tag.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+struct asn_TYPE_member_s;      /* Forward declaration */
+
+/*
+ * This type provides the context information for various ASN.1 routines,
+ * primarily ones doing decoding. A member _asn_ctx of this type must be
+ * included into certain target language's structures, such as compound types.
+ */
+typedef struct asn_struct_ctx_s {
+       short phase;            /* Decoding phase */
+       short step;             /* Elementary step of a phase */
+       int context;            /* Other context information */
+       void *ptr;              /* Decoder-specific stuff (stack elements) */
+       ber_tlv_len_t left;     /* Number of bytes left, -1 for indefinite */
+} asn_struct_ctx_t;
+
+#include <ber_decoder.h>       /* Basic Encoding Rules decoder */
+#include <der_encoder.h>       /* Distinguished Encoding Rules encoder */
+#include <xer_decoder.h>       /* Decoder of XER (XML, text) */
+#include <xer_encoder.h>       /* Encoder into XER (XML, text) */
+#include <per_decoder.h>       /* Packet Encoding Rules decoder */
+#include <per_encoder.h>       /* Packet Encoding Rules encoder */
+#include <constraints.h>       /* Subtype constraints support */
+#include <asn_random_fill.h>   /* Random structures support */
+
+#ifdef  ASN_DISABLE_OER_SUPPORT
+typedef void (oer_type_decoder_f)(void);
+typedef void (oer_type_encoder_f)(void);
+typedef void asn_oer_constraints_t;
+#else
+#include <oer_decoder.h>       /* Octet Encoding Rules encoder */
+#include <oer_encoder.h>       /* Octet Encoding Rules encoder */
+#endif
+
+/*
+ * Free the structure according to its specification.
+ * Use one of ASN_STRUCT_{FREE,RESET,CONTENTS_ONLY} macros instead.
+ * Do not use directly.
+ */
+enum asn_struct_free_method {
+    ASFM_FREE_EVERYTHING,   /* free(struct_ptr) and underlying members */
+    ASFM_FREE_UNDERLYING,   /* free underlying members */
+    ASFM_FREE_UNDERLYING_AND_RESET   /* FREE_UNDERLYING + memset(0) */
+};
+typedef void (asn_struct_free_f)(
+               const struct asn_TYPE_descriptor_s *type_descriptor,
+               void *struct_ptr, enum asn_struct_free_method);
+
+/*
+ * Free the structure including freeing the memory pointed to by ptr itself.
+ */
+#define ASN_STRUCT_FREE(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_EVERYTHING)
+
+/*
+ * Free the memory used by the members of the structure without freeing the
+ * the structure pointer itself.
+ * ZERO-OUT the structure to the safe clean state.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ *  statically or arranged on the stack, yet its elements are dynamic.)
+ */
+#define ASN_STRUCT_RESET(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING_AND_RESET)
+
+/*
+ * Free memory used by the members of the structure without freeing
+ * the structure pointer itself.
+ * (Retaining the pointer may be useful in case the structure is allocated
+ *  statically or arranged on the stack, yet its elements are dynamic.)
+ * AVOID using it in the application code;
+ * Use a safer ASN_STRUCT_RESET() instead.
+ */
+#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \
+    (asn_DEF).op->free_struct(&(asn_DEF), (ptr), ASFM_FREE_UNDERLYING)
+
+/*
+ * Print the structure according to its specification.
+ */
+typedef int(asn_struct_print_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr,
+    int level, /* Indentation level */
+    asn_app_consume_bytes_f *callback, void *app_key);
+
+/*
+ * Compare two structs between each other.
+ * Returns <0 if struct_A is "smaller" than struct_B, >0 if "greater",
+ * and =0 if "equal to", for some type-specific, stable definition of
+ * "smaller", "greater" and "equal to".
+ */
+typedef int (asn_struct_compare_f)(
+               const struct asn_TYPE_descriptor_s *type_descriptor,
+               const void *struct_A,
+               const void *struct_B);
+
+/*
+ * Return the outmost tag of the type.
+ * If the type is untagged CHOICE, the dynamic operation is performed.
+ * NOTE: This function pointer type is only useful internally.
+ * Do not use it in your application.
+ */
+typedef ber_tlv_tag_t (asn_outmost_tag_f)(
+               const struct asn_TYPE_descriptor_s *type_descriptor,
+               const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag);
+/* The instance of the above function type; used internally. */
+asn_outmost_tag_f asn_TYPE_outmost_tag;
+
+/*
+ * Fetch the desired type of the Open Type based on the
+ * Information Object Set driven constraints.
+ */
+typedef struct asn_type_selector_result_s {
+    const struct asn_TYPE_descriptor_s *type_descriptor; /* Type encoded. */
+    unsigned presence_index; /* Associated choice variant. */
+} asn_type_selector_result_t;
+typedef asn_type_selector_result_t(asn_type_selector_f)(
+    const struct asn_TYPE_descriptor_s *parent_type_descriptor,
+    const void *parent_structure_ptr);
+
+/*
+ * Generalized functions for dealing with the speciic type.
+ * May be directly invoked by applications.
+ */
+typedef struct asn_TYPE_operation_s {
+    asn_struct_free_f *free_struct;     /* Free the structure */
+    asn_struct_print_f *print_struct;   /* Human readable output */
+    asn_struct_compare_f *compare_struct; /* Compare two structures */
+    ber_type_decoder_f *ber_decoder;      /* Generic BER decoder */
+    der_type_encoder_f *der_encoder;      /* Canonical DER encoder */
+    xer_type_decoder_f *xer_decoder;      /* Generic XER decoder */
+    xer_type_encoder_f *xer_encoder;      /* [Canonical] XER encoder */
+    oer_type_decoder_f *oer_decoder;      /* Generic OER decoder */
+    oer_type_encoder_f *oer_encoder;      /* Canonical OER encoder */
+    per_type_decoder_f *uper_decoder;     /* Unaligned PER decoder */
+    per_type_encoder_f *uper_encoder;     /* Unaligned PER encoder */
+    per_type_decoder_f *aper_decoder;     /* Aligned PER decoder */
+    per_type_encoder_f *aper_encoder;     /* Aligned PER encoder */
+    asn_random_fill_f *random_fill;       /* Initialize with a random value */
+    asn_outmost_tag_f *outmost_tag;       /* <optional, internal> */
+} asn_TYPE_operation_t;
+
+/*
+ * A constraints tuple specifying both the OER and PER constraints.
+ */
+typedef struct asn_encoding_constraints_s {
+    const struct asn_oer_constraints_s *oer_constraints;
+    const struct asn_per_constraints_s *per_constraints;
+    asn_constr_check_f *general_constraints;
+} asn_encoding_constraints_t;
+
+/*
+ * The definitive description of the destination language's structure.
+ */
+typedef struct asn_TYPE_descriptor_s {
+    const char *name;       /* A name of the ASN.1 type. "" in some cases. */
+    const char *xml_tag;    /* Name used in XML tag */
+
+    /*
+     * Generalized functions for dealing with the specific type.
+     * May be directly invoked by applications.
+     */
+    asn_TYPE_operation_t *op;
+
+    /***********************************************************************
+     * Internally useful members. Not to be used by applications directly. *
+     **********************************************************************/
+
+    /*
+     * Tags that are expected to occur.
+     */
+    const ber_tlv_tag_t *tags;      /* Effective tags sequence for this type */
+    unsigned tags_count;            /* Number of tags which are expected */
+    const ber_tlv_tag_t *all_tags;  /* Every tag for BER/containment */
+    unsigned all_tags_count;        /* Number of tags */
+
+    /* OER, PER, and general constraints */
+    asn_encoding_constraints_t encoding_constraints;
+
+    /*
+     * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE).
+     */
+    struct asn_TYPE_member_s *elements;
+    unsigned elements_count;
+
+    /*
+     * Additional information describing the type, used by appropriate
+     * functions above.
+     */
+    const void *specifics;
+} asn_TYPE_descriptor_t;
+
+/*
+ * This type describes an element of the constructed type,
+ * i.e. SEQUENCE, SET, CHOICE, etc.
+ */
+  enum asn_TYPE_flags_e {
+    ATF_NOFLAGS,
+    ATF_POINTER = 0x01,   /* Represented by the pointer */
+    ATF_OPEN_TYPE = 0x02, /* Open Type */
+    ATF_ANY_TYPE = 0x04   /* ANY type (deprecated!) */
+  };
+typedef struct asn_TYPE_member_s {
+    enum asn_TYPE_flags_e flags; /* Element's presentation flags */
+    unsigned optional;      /* Following optional members, including current */
+    unsigned memb_offset;   /* Offset of the element */
+    ber_tlv_tag_t tag;      /* Outmost (most immediate) tag */
+    int tag_mode;           /* IMPLICIT/no/EXPLICIT tag at current level */
+    asn_TYPE_descriptor_t *type;            /* Member type descriptor */
+    asn_type_selector_f *type_selector;     /* IoS runtime type selector */
+    asn_encoding_constraints_t encoding_constraints;
+    int (*default_value_cmp)(const void *sptr); /* Compare DEFAULT <value> */
+    int (*default_value_set)(void **sptr);      /* Set DEFAULT <value> */
+    const char *name; /* ASN.1 identifier of the element */
+} asn_TYPE_member_t;
+
+/*
+ * BER tag to element number mapping.
+ */
+typedef struct asn_TYPE_tag2member_s {
+    ber_tlv_tag_t el_tag;   /* Outmost tag of the member */
+    unsigned el_no;         /* Index of the associated member, base 0 */
+    int toff_first;         /* First occurence of the el_tag, relative */
+    int toff_last;          /* Last occurence of the el_tag, relative */
+} asn_TYPE_tag2member_t;
+
+/*
+ * This function prints out the contents of the target language's structure
+ * (struct_ptr) into the file pointer (stream) in human readable form.
+ * RETURN VALUES:
+ *      0: The structure is printed.
+ *     -1: Problem dumping the structure.
+ * (See also xer_fprint() in xer_encoder.h)
+ */
+int asn_fprint(FILE *stream, /* Destination stream descriptor */
+               const asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */
+               const void *struct_ptr);         /* Structure to be printed */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _CONSTR_TYPE_H_ */
diff --git a/skeletons/constraints.c b/skeletons/constraints.c
new file mode 100644 (file)
index 0000000..df3c6c1
--- /dev/null
@@ -0,0 +1,93 @@
+#include <asn_internal.h>
+#include <constraints.h>
+
+int
+asn_generic_no_constraint(const asn_TYPE_descriptor_t *type_descriptor,
+                          const void *struct_ptr,
+                          asn_app_constraint_failed_f *cb, void *key) {
+    (void)type_descriptor;     /* Unused argument */
+       (void)struct_ptr;       /* Unused argument */
+       (void)cb;       /* Unused argument */
+       (void)key;      /* Unused argument */
+
+       /* Nothing to check */
+       return 0;
+}
+
+int
+asn_generic_unknown_constraint(const asn_TYPE_descriptor_t *type_descriptor,
+                               const void *struct_ptr,
+                               asn_app_constraint_failed_f *cb, void *key) {
+    (void)type_descriptor;     /* Unused argument */
+       (void)struct_ptr;       /* Unused argument */
+       (void)cb;       /* Unused argument */
+       (void)key;      /* Unused argument */
+
+       /* Unknown how to check */
+       return 0;
+}
+
+struct errbufDesc {
+    const asn_TYPE_descriptor_t *failed_type;
+    const void *failed_struct_ptr;
+       char *errbuf;
+       size_t errlen;
+};
+
+static void
+_asn_i_ctfailcb(void *key, const asn_TYPE_descriptor_t *td, const void *sptr,
+                const char *fmt, ...) {
+    struct errbufDesc *arg = key;
+       va_list ap;
+       ssize_t vlen;
+       ssize_t maxlen;
+
+       arg->failed_type = td;
+       arg->failed_struct_ptr = sptr;
+
+       maxlen = arg->errlen;
+       if(maxlen <= 0)
+               return;
+
+       va_start(ap, fmt);
+       vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap);
+       va_end(ap);
+       if(vlen >= maxlen) {
+               arg->errbuf[maxlen-1] = '\0';   /* Ensuring libc correctness */
+               arg->errlen = maxlen - 1;       /* Not counting termination */
+               return;
+       } else if(vlen >= 0) {
+               arg->errbuf[vlen] = '\0';       /* Ensuring libc correctness */
+               arg->errlen = vlen;             /* Not counting termination */
+       } else {
+               /*
+                * The libc on this system is broken.
+                */
+               vlen = sizeof("<broken vsnprintf>") - 1;
+               maxlen--;
+               arg->errlen = vlen < maxlen ? vlen : maxlen;
+               memcpy(arg->errbuf, "<broken vsnprintf>", arg->errlen);
+               arg->errbuf[arg->errlen] = 0;
+       }
+
+       return;
+}
+
+int
+asn_check_constraints(const asn_TYPE_descriptor_t *type_descriptor,
+                      const void *struct_ptr, char *errbuf, size_t *errlen) {
+    struct errbufDesc arg;
+    int ret;
+
+    arg.failed_type = 0;
+    arg.failed_struct_ptr = 0;
+    arg.errbuf = errbuf;
+    arg.errlen = errlen ? *errlen : 0;
+
+    ret = type_descriptor->encoding_constraints.general_constraints(
+        type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg);
+    if(ret == -1 && errlen) *errlen = arg.errlen;
+
+    return ret;
+}
+
diff --git a/skeletons/constraints.h b/skeletons/constraints.h
new file mode 100644 (file)
index 0000000..0bd86a9
--- /dev/null
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        ASN1_CONSTRAINTS_VALIDATOR_H
+#define        ASN1_CONSTRAINTS_VALIDATOR_H
+
+#include <asn_system.h>                /* Platform-dependent types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;          /* Forward declaration */
+
+/*
+ * Validate the structure according to the ASN.1 constraints.
+ * If errbuf and errlen are given, they shall be pointing to the appropriate
+ * buffer space and its length before calling this function. Alternatively,
+ * they could be passed as NULL's. If constraints validation fails,
+ * errlen will contain the actual number of bytes taken from the errbuf
+ * to encode an error message (properly 0-terminated).
+ * 
+ * RETURN VALUES:
+ * This function returns 0 in case all ASN.1 constraints are met
+ * and -1 if one or more constraints were failed.
+ */
+int asn_check_constraints(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Target language's structure */
+    char *errbuf,           /* Returned error description */
+    size_t *errlen          /* Length of the error description */
+);
+
+
+/*
+ * Generic type for constraint checking callback,
+ * associated with every type descriptor.
+ */
+typedef int(asn_constr_check_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr,
+    asn_app_constraint_failed_f *optional_callback, /* Log the error */
+    void *optional_app_key /* Opaque key passed to a callback */
+);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+asn_constr_check_f asn_generic_no_constraint;  /* No constraint whatsoever */
+asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */
+
+/*
+ * Invoke the callback with a complete error message.
+ */
+#define        ASN__CTFAIL     if(ctfailcb) ctfailcb
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ASN1_CONSTRAINTS_VALIDATOR_H */
diff --git a/skeletons/converter-example.c b/skeletons/converter-example.c
new file mode 100644 (file)
index 0000000..c691f90
--- /dev/null
@@ -0,0 +1,1032 @@
+/*
+ * Generic converter template for a selected ASN.1 type.
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * 
+ * To compile with your own ASN.1 type, redefine the PDU as shown:
+ * 
+ * cc -DPDU=MyCustomType -o myDecoder.o -c converter-example.c
+ */
+#ifdef    HAVE_CONFIG_H
+#include <config.h>
+#endif
+#define __EXTENSIONS__
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>    /* for atoi(3) */
+#include <getopt.h>    /* for getopt(3) */
+#include <string.h>    /* for strerror(3) */
+#include <sysexits.h>    /* for EX_* exit codes */
+#include <errno.h>    /* for errno */
+#include <unistd.h>    /* for isatty(3) */
+#include <asn_application.h>
+#include <asn_internal.h>    /* for ASN__DEFAULT_STACK_MAX */
+
+/* Convert "Type" defined by -DPDU into "asn_DEF_Type" */
+#ifdef PDU
+#define    ASN_DEF_PDU(t)    asn_DEF_ ## t
+#define    DEF_PDU_Type(t)    ASN_DEF_PDU(t)
+#define    PDU_Type    DEF_PDU_Type(PDU)
+extern asn_TYPE_descriptor_t PDU_Type;    /* ASN.1 type to be decoded */
+#define PDU_Type_Ptr (&PDU_Type)
+#else   /* !PDU */
+#define PDU_Type_Ptr    NULL
+#endif  /* PDU */
+
+#ifdef ASN_PDU_COLLECTION /* Generated by asn1c -pdu=... */
+extern asn_TYPE_descriptor_t *asn_pdu_collection[];
+#endif
+
+#ifndef NO_ASN_PDU
+#if !defined(PDU) && !defined(ASN_PDU_COLLECTION)
+#error Define -DPDU to compile this example converter.
+#error `asn1c -pdu=...` adds necessary flags automatically.
+#endif
+#endif
+
+/*
+ * Open file and parse its contens.
+ */
+static void *data_decode_from_file(enum asn_transfer_syntax,
+                                   asn_TYPE_descriptor_t *asnTypeOfPDU,
+                                   FILE *file, const char *name,
+                                   ssize_t suggested_bufsize, int first_pdu);
+static int write_out(const void *buffer, size_t size, void *key);
+static FILE *argument_to_file(char *av[], int idx);
+static char *argument_to_name(char *av[], int idx);
+
+       int opt_debug;   /* -d (or -dd) */
+static int opt_check;   /* -c (constraints checking) */
+static int opt_stack;   /* -s (maximum stack size) */
+static int opt_nopad;   /* -per-nopad (PER input is not padded between msgs) */
+static int opt_onepdu;  /* -1 (decode single PDU) */
+
+#ifdef    JUNKTEST        /* Enable -J <probability> */
+#define JUNKOPT "J:"
+static double opt_jprob;    /* Junk bit probability */
+static int    junk_failures;
+static void   junk_bytes_with_probability(uint8_t *, size_t, double prob);
+
+#define RANDOPT "R:"
+static ssize_t random_max_size = 0; /* Size of the random data */
+
+#if !defined(__FreeBSD__) && !(defined(__APPLE__) && defined(__MACH__))
+static void
+srandomdev(void) {
+    FILE *f = fopen("/dev/urandom", "rb");
+    unsigned seed;
+    if(f) {
+        if(fread(&seed, 1, sizeof(seed), f) != sizeof(seed)) {
+            seed = time(NULL);
+        }
+        fclose(f);
+    } else {
+        seed = time(NULL);
+    }
+    srandom(seed);
+}
+#endif
+
+#else   /* !JUNKTEST */
+#define    JUNKOPT
+#define    RANDOPT
+#endif  /* JUNKTEST */
+
+/* Debug output function */
+static void CC_PRINTFLIKE(1, 2)
+DEBUG(const char *fmt, ...) {
+    va_list ap;
+    if(!opt_debug) return;
+    fprintf(stderr, "AD: ");
+    va_start(ap, fmt);
+    vfprintf(stderr, fmt, ap);
+    va_end(ap);
+    fprintf(stderr, "\n");
+}
+
+static const char *
+ats_simple_name(enum asn_transfer_syntax syntax) {
+    switch(syntax) {
+    case ATS_INVALID:
+        return "/dev/null";
+    case ATS_NONSTANDARD_PLAINTEXT:
+        return "plaintext";
+    case ATS_BER:
+        return "BER";
+    case ATS_DER:
+        return "DER";
+    case ATS_CER:
+        return "CER";
+    case ATS_BASIC_OER:
+    case ATS_CANONICAL_OER:
+        return "OER";
+    case ATS_BASIC_XER:
+    case ATS_CANONICAL_XER:
+        return "XER";
+    case ATS_UNALIGNED_BASIC_PER:
+    case ATS_UNALIGNED_CANONICAL_PER:
+        return "PER";
+    default:
+        return "<?>";
+    }
+}
+
+#define CODEC_OFFSET(fname)  ((ptrdiff_t)&(((asn_TYPE_operation_t *)0)->fname))
+typedef struct {
+    const char *name;
+    enum asn_transfer_syntax syntax;
+    ptrdiff_t codec_offset;
+    const char *full_name;
+} syntax_selector;
+
+static syntax_selector input_encodings[] = {
+    {"ber", ATS_BER, CODEC_OFFSET(ber_decoder),
+     "Input is in BER (Basic Encoding Rules) or DER"},
+    {"oer", ATS_BASIC_OER, CODEC_OFFSET(oer_decoder),
+     "Input is in OER (Octet Encoding Rules)"},
+    {"per", ATS_UNALIGNED_BASIC_PER, CODEC_OFFSET(uper_decoder),
+     "Input is in Unaligned PER (Packed Encoding Rules)"},
+    {"aper", ATS_ALIGNED_BASIC_PER, CODEC_OFFSET(aper_decoder),
+     "Input is in Aligned PER (Packed Encoding Rules)"},
+    {"xer", ATS_BASIC_XER, CODEC_OFFSET(xer_decoder),
+     "Input is in XER (XML Encoding Rules)"},
+    {0, ATS_INVALID, 0, 0}};
+
+static syntax_selector output_encodings[] = {
+    {"der", ATS_DER, CODEC_OFFSET(der_encoder),
+     "Output as DER (Distinguished Encoding Rules)"},
+    {"oer", ATS_CANONICAL_OER, CODEC_OFFSET(oer_encoder),
+     "Output as Canonical OER (Octet Encoding Rules)"},
+    {"per", ATS_UNALIGNED_CANONICAL_PER, CODEC_OFFSET(uper_encoder),
+     "Output as Unaligned PER (Packed Encoding Rules)"},
+    {"aper", ATS_ALIGNED_CANONICAL_PER, CODEC_OFFSET(aper_encoder),
+     "Output as Aligned PER (Packed Encoding Rules)"},
+    {"xer", ATS_BASIC_XER, CODEC_OFFSET(xer_encoder),
+     "Output as XER (XML Encoding Rules)"},
+    {"text", ATS_NONSTANDARD_PLAINTEXT, CODEC_OFFSET(print_struct),
+     "Output as plain semi-structured text"},
+    {"null", ATS_INVALID, CODEC_OFFSET(print_struct),
+     "Verify (decode) input, but do not output"},
+    {0, ATS_INVALID, 0, 0}};
+
+static int
+has_codec_defined(const asn_TYPE_descriptor_t *td,
+                  const syntax_selector *element) {
+    return *(const void *const *)(const void *)((const char *)td->op
+                                                + element->codec_offset) != 0;
+}
+
+/*
+ * Select ASN.1 Transfer Enocoding Syntax by command line name.
+ */
+static const syntax_selector *
+ats_by_name(const char *name, const asn_TYPE_descriptor_t *td,
+            const syntax_selector *first_element) {
+    const syntax_selector *element;
+    for(element = first_element; element->name; element++) {
+        if(strcmp(element->name, name) == 0) {
+            if(td && td->op && has_codec_defined(td, element)) {
+                return element;
+            }
+        }
+    }
+    return NULL;
+}
+
+int
+main(int ac, char *av[]) {
+    FILE *binary_out;
+    asn_TYPE_descriptor_t *pduType = PDU_Type_Ptr;
+    asn_TYPE_descriptor_t *anyPduType = PDU_Type_Ptr;
+    ssize_t suggested_bufsize = 8192;  /* close or equal to stdio buffer */
+    int number_of_iterations = 1;
+    int num;
+    int ch;
+    const syntax_selector *sel;
+    enum asn_transfer_syntax isyntax = ATS_INVALID;
+    enum asn_transfer_syntax osyntax = ATS_BASIC_XER;
+
+    if(!anyPduType) {
+#ifdef  ASN_PDU_COLLECTION
+        anyPduType = asn_pdu_collection[0];
+        if(!anyPduType) {
+            fprintf(stderr,
+                    "Empty PDU collection, no reference PDU to choose from.\n");
+            exit(EX_SOFTWARE);
+        }
+#else
+        fprintf(stderr, "Either asn1c -pdu=... or cc -DPDU should be used.\n");
+        exit(EX_SOFTWARE);
+#endif
+    }
+
+    /* Figure out if a specialty decoder needs to be default */
+#ifndef ASN_DISABLE_OER_SUPPORT
+    isyntax = ATS_BASIC_OER;
+#endif
+#ifndef ASN_DISABLE_PER_SUPPORT
+    isyntax = ATS_UNALIGNED_BASIC_PER;
+#endif
+
+    /*
+     * Pocess the command-line argments.
+     */
+    while((ch = getopt(ac, av, "i:o:1b:cdn:p:hs:" JUNKOPT RANDOPT)) != -1)
+    switch(ch) {
+    case 'i':
+        sel = ats_by_name(optarg, anyPduType, input_encodings);
+        if(sel) {
+            isyntax = sel->syntax;
+        } else {
+            fprintf(stderr, "-i<format>: '%s': improper format selector\n",
+                    optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+    case 'o':
+        sel = ats_by_name(optarg, anyPduType, output_encodings);
+        if(sel) {
+            osyntax = sel->syntax;
+        } else {
+            fprintf(stderr, "-o<format>: '%s': improper format selector\n",
+                    optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+    case '1':
+        opt_onepdu = 1;
+        break;
+    case 'b':
+        suggested_bufsize = atoi(optarg);
+        if(suggested_bufsize < 1
+            || suggested_bufsize > 16 * 1024 * 1024) {
+            fprintf(stderr,
+                "-b %s: Improper buffer size (1..16M)\n",
+                optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+    case 'c':
+        opt_check = 1;
+        break;
+    case 'd':
+        opt_debug++;    /* Double -dd means ASN.1 debug */
+        break;
+    case 'n':
+        number_of_iterations = atoi(optarg);
+        if(number_of_iterations < 1) {
+            fprintf(stderr,
+                "-n %s: Improper iterations count\n", optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+    case 'p':
+        if(strcmp(optarg, "er-nopad") == 0) {
+            opt_nopad = 1;
+            break;
+        }
+#ifdef    ASN_PDU_COLLECTION
+        if(strcmp(optarg, "list") == 0) {
+            asn_TYPE_descriptor_t **pdu = asn_pdu_collection;
+            fprintf(stderr, "Available PDU types:\n");
+            for(; *pdu; pdu++) printf("%s\n", (*pdu)->name);
+            exit(0);
+        } else if(optarg[0] >= 'A' && optarg[0] <= 'Z') {
+            asn_TYPE_descriptor_t **pdu = asn_pdu_collection;
+            while(*pdu && strcmp((*pdu)->name, optarg)) pdu++;
+            if(*pdu) { pduType = *pdu; break; }
+            fprintf(stderr, "-p %s: Unrecognized PDU. Try '-p list'.\n",
+                    optarg);
+            exit(EX_USAGE);
+        }
+#else   /* Without -pdu=auto there's just a single type */
+        if(strcmp(optarg, "list") == 0) {
+            fprintf(stderr, "Available PDU types:\n");
+            if(pduType) {
+                printf("%s\n", pduType->name);
+            }
+            exit(0);
+        } else if(optarg[0] >= 'A' && optarg[0] <= 'Z') {
+            if(pduType && strcmp(optarg, pduType->name) == 0) {
+                break;
+            }
+            fprintf(stderr, "-p %s: Unrecognized PDU. Try '-p list'.\n",
+                    optarg);
+            exit(EX_USAGE);
+        }
+#endif    /* ASN_PDU_COLLECTION */
+        fprintf(stderr, "-p %s: Unrecognized option\n", optarg);
+        exit(EX_UNAVAILABLE);
+    case 's':
+        opt_stack = atoi(optarg);
+        if(opt_stack < 0) {
+            fprintf(stderr,
+                "-s %s: Non-negative value expected\n",
+                optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+#ifdef    JUNKTEST
+    case 'J':
+        opt_jprob = strtod(optarg, 0);
+        if(opt_jprob <= 0.0 || opt_jprob > 1.0) {
+            fprintf(stderr,
+                "-J %s: Probability range 0..1 expected \n",
+                optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        break;
+    case 'R':
+        isyntax = ATS_RANDOM;
+        random_max_size = atoi(optarg);
+        if(random_max_size < 0) {
+            fprintf(stderr,
+                "-R %s: Non-negative value expected\n",
+                optarg);
+            exit(EX_UNAVAILABLE);
+        }
+        srandomdev();
+        break;
+#endif    /* JUNKTEST */
+    case 'h':
+    default:
+#ifdef    ASN_CONVERTER_TITLE
+#define    _AXS(x)    #x
+#define    _ASX(x)    _AXS(x)
+        fprintf(stderr, "%s\n", _ASX(ASN_CONVERTER_TITLE));
+#endif
+        fprintf(stderr, "Usage: %s [options] <datafile> ...\n", av[0]);
+        fprintf(stderr, "Where options are:\n");
+        for(sel = input_encodings; sel->name; sel++) {
+            if(ats_by_name(sel->name, anyPduType, sel)) {
+                fprintf(stderr, "  -i%s        %s%s\n", sel->name,
+                        sel->full_name,
+                        (sel->syntax == isyntax) ? " (DEFAULT)" : "");
+            }
+        }
+        for(sel = output_encodings; sel->name; sel++) {
+            if(ats_by_name(sel->name, anyPduType, sel)) {
+                fprintf(stderr, "  -o%s%s       %s%s\n", sel->name,
+                        strlen(sel->name) > 3 ? "" : " ",
+                        sel->full_name,
+                        (sel->syntax == osyntax) ? " (DEFAULT)" : "");
+            }
+        }
+        if(anyPduType->op->uper_decoder) {
+            fprintf(stderr,
+                    "  -per-nopad   Assume PER PDUs are not padded (-iper)\n");
+        }
+#ifdef    ASN_PDU_COLLECTION
+        fprintf(stderr,
+        "  -p <PDU>     Specify PDU type to decode\n"
+        "  -p list      List available PDUs\n");
+#endif    /* ASN_PDU_COLLECTION */
+        fprintf(stderr,
+        "  -1           Decode only the first PDU in file\n"
+        "  -b <size>    Set the i/o buffer size (default is %ld)\n"
+        "  -c           Check ASN.1 constraints after decoding\n"
+        "  -d           Enable debugging (-dd is even better)\n"
+        "  -n <num>     Process files <num> times\n"
+        "  -s <size>    Set the stack usage limit (default is %d)\n"
+#ifdef    JUNKTEST
+        "  -J <prob>    Set random junk test bit garbaging probability\n"
+        "  -R <size>    Generate a random value of roughly the given size,\n"
+        "               instead of parsing the value from file.\n"
+#endif
+        , (long)suggested_bufsize, ASN__DEFAULT_STACK_MAX);
+        exit(EX_USAGE);
+    }
+
+    ac -= optind;
+    av += optind;
+
+    if(!pduType) {
+#ifdef  NO_ASN_PDU
+        fprintf(stderr, "No -DPDU defined during compilation.\n");
+        exit(0);
+#else
+        fprintf(stderr, "Use '-p <Type>' or '-p list' to select ASN.1 type.\n");
+        exit(EX_USAGE);
+#endif  /* NO_ASN_PDU */
+    }
+
+    if(ac < 1 && isyntax != ATS_RANDOM) {
+        fprintf(stderr, "%s: No input files specified. "
+                "Try '-h' for more information\n",
+                av[-optind]);
+        exit(EX_USAGE);
+    }
+
+    if(isatty(1)) {
+        const int is_text_output = osyntax == ATS_NONSTANDARD_PLAINTEXT
+                                   || osyntax == ATS_BASIC_XER
+                                   || osyntax == ATS_CANONICAL_XER;
+        if(is_text_output) {
+            binary_out = stdout;
+        } else {
+            fprintf(stderr, "(Suppressing binary output to a terminal.)\n");
+            binary_out = fopen("/dev/null", "wb");
+            if(!binary_out) {
+                fprintf(stderr, "Can't open /dev/null: %s\n", strerror(errno));
+                exit(EX_OSERR);
+            }
+        }
+    } else {
+        binary_out = stdout;
+    }
+    setvbuf(stdout, 0, _IOLBF, 0);
+
+    for(num = 0; num < number_of_iterations; num++) {
+      int ac_i;
+      /*
+       * Process all files in turn.
+       */
+      for(ac_i = (isyntax == ATS_RANDOM) ? -1 : 0; ac_i < ac; ac_i++) {
+        asn_enc_rval_t erv = {0,0,0};
+        void *structure;    /* Decoded structure */
+        FILE *file;
+        char *name;
+        int first_pdu;
+
+        if(ac_i == -1) {
+            file = NULL;
+            name = "<random value generator>";
+            opt_onepdu = 1;
+        } else {
+            file = argument_to_file(av, ac_i);
+            name = argument_to_name(av, ac_i);
+        }
+
+        for(first_pdu = 1; (first_pdu || !opt_onepdu); first_pdu = 0) {
+            /*
+             * Decode the encoded structure from file.
+             */
+#ifdef  JUNKTEST
+            if(isyntax == ATS_RANDOM) {
+                structure = NULL;
+                if(asn_random_fill(pduType, &structure, random_max_size) != 0) {
+                    fprintf(stderr, "Cannot generate a random value.\n");
+                    assert(structure == NULL);
+                    errno = EINVAL;
+                }
+            } else {
+#endif
+                structure = data_decode_from_file(isyntax, pduType, file, name,
+                                                  suggested_bufsize, first_pdu);
+#ifdef  JUNKTEST
+            }
+#endif
+            if(!structure) {
+                if(errno) {
+                    /* Error message is already printed */
+                    exit(EX_DATAERR);
+                } else {
+                    /* EOF */
+                    break;
+                }
+            }
+
+            /* Check ASN.1 constraints */
+            if(opt_check) {
+                char errbuf[128];
+                size_t errlen = sizeof(errbuf);
+                if(asn_check_constraints(pduType, structure, errbuf, &errlen)) {
+                    fprintf(stderr,
+                            "%s: ASN.1 constraint "
+                            "check failed: %s\n",
+                            name, errbuf);
+                    exit(EX_DATAERR);
+                }
+            }
+
+            if(osyntax == ATS_INVALID) {
+#ifdef JUNKTEST
+                if(opt_jprob == 0.0) {
+                    fprintf(stderr, "%s: decoded successfully\n", name);
+                }
+#else
+                fprintf(stderr, "%s: decoded successfully\n", name);
+#endif
+            } else {
+                erv = asn_encode(NULL, osyntax, pduType, structure, write_out,
+                                 binary_out);
+
+                if(erv.encoded == -1) {
+                    fprintf(stderr, "%s: Cannot convert %s into %s\n", name,
+                            pduType->name, ats_simple_name(osyntax));
+                    DEBUG("Conversion failed for %s:\n", pduType->name);
+                    asn_fprint(stderr, pduType, structure);
+                    exit(EX_UNAVAILABLE);
+                }
+                DEBUG("Encoded in %" ASN_PRI_SSIZE " bytes of %s", erv.encoded,
+                      ats_simple_name(osyntax));
+            }
+
+            ASN_STRUCT_FREE(*pduType, structure);
+        }
+
+        if(file && file != stdin) {
+            fclose(file);
+        }
+      }
+    }
+
+#ifdef    JUNKTEST
+    if(opt_jprob > 0.0) {
+        fprintf(stderr, "Junked %f OK (%d/%d)\n",
+            opt_jprob, junk_failures, number_of_iterations);
+    }
+#endif    /* JUNKTEST */
+
+    return 0;
+}
+
+static struct dynamic_buffer {
+    uint8_t *data;        /* Pointer to the data bytes */
+    size_t offset;        /* Offset from the start */
+    size_t length;        /* Length of meaningful contents */
+    size_t unbits;        /* Unused bits in the last byte */
+    size_t allocated;    /* Allocated memory for data */
+    int    nreallocs;    /* Number of data reallocations */
+    off_t  bytes_shifted;    /* Number of bytes ever shifted */
+} DynamicBuffer;
+
+static void
+buffer_dump() {
+    uint8_t *p = DynamicBuffer.data + DynamicBuffer.offset;
+    uint8_t *e = p + DynamicBuffer.length - (DynamicBuffer.unbits ? 1 : 0);
+    if(!opt_debug) return;
+    DEBUG("Buffer: { d=%p, o=%" ASN_PRI_SIZE ", l=%" ASN_PRI_SIZE
+          ", u=%" ASN_PRI_SIZE ", a=%" ASN_PRI_SIZE ", s=%" ASN_PRI_SIZE " }",
+        (const void *)DynamicBuffer.data,
+        DynamicBuffer.offset,
+        DynamicBuffer.length,
+        DynamicBuffer.unbits,
+        DynamicBuffer.allocated,
+        (size_t)DynamicBuffer.bytes_shifted);
+    for(; p < e; p++) {
+        fprintf(stderr, " %c%c%c%c%c%c%c%c",
+            ((*p >> 7) & 1) ? '1' : '0',
+            ((*p >> 6) & 1) ? '1' : '0',
+            ((*p >> 5) & 1) ? '1' : '0',
+            ((*p >> 4) & 1) ? '1' : '0',
+            ((*p >> 3) & 1) ? '1' : '0',
+            ((*p >> 2) & 1) ? '1' : '0',
+            ((*p >> 1) & 1) ? '1' : '0',
+            ((*p >> 0) & 1) ? '1' : '0');
+    }
+    if(DynamicBuffer.unbits) {
+        unsigned int shift;
+        fprintf(stderr, " ");
+        for(shift = 7; shift >= DynamicBuffer.unbits; shift--)
+            fprintf(stderr, "%c", ((*p >> shift) & 1) ? '1' : '0');
+        fprintf(stderr, " %" ASN_PRI_SSIZE ":%" ASN_PRI_SSIZE "\n",
+                (ssize_t)DynamicBuffer.length - 1,
+                (ssize_t)8 - DynamicBuffer.unbits);
+    } else {
+        fprintf(stderr, " %ld\n", (long)DynamicBuffer.length);
+    }
+}
+
+/*
+ * Move the buffer content left N bits, possibly joining it with
+ * preceeding content.
+ */
+static void
+buffer_shift_left(size_t offset, int bits) {
+    uint8_t *ptr = DynamicBuffer.data + DynamicBuffer.offset + offset;
+    uint8_t *end = DynamicBuffer.data + DynamicBuffer.offset
+            + DynamicBuffer.length - 1;
+    
+    if(!bits) return;
+
+    DEBUG("Shifting left %d bits off %ld (o=%ld, u=%ld, l=%ld)",
+        bits, (long)offset,
+        (long)DynamicBuffer.offset,
+        (long)DynamicBuffer.unbits,
+        (long)DynamicBuffer.length);
+
+    if(offset) {
+        int right;
+        right = ptr[0] >> (8 - bits);
+
+        DEBUG("oleft: %c%c%c%c%c%c%c%c",
+            ((ptr[-1] >> 7) & 1) ? '1' : '0',
+            ((ptr[-1] >> 6) & 1) ? '1' : '0',
+            ((ptr[-1] >> 5) & 1) ? '1' : '0',
+            ((ptr[-1] >> 4) & 1) ? '1' : '0',
+            ((ptr[-1] >> 3) & 1) ? '1' : '0',
+            ((ptr[-1] >> 2) & 1) ? '1' : '0',
+            ((ptr[-1] >> 1) & 1) ? '1' : '0',
+            ((ptr[-1] >> 0) & 1) ? '1' : '0');
+
+        DEBUG("oriht: %c%c%c%c%c%c%c%c",
+            ((ptr[0] >> 7) & 1) ? '1' : '0',
+            ((ptr[0] >> 6) & 1) ? '1' : '0',
+            ((ptr[0] >> 5) & 1) ? '1' : '0',
+            ((ptr[0] >> 4) & 1) ? '1' : '0',
+            ((ptr[0] >> 3) & 1) ? '1' : '0',
+            ((ptr[0] >> 2) & 1) ? '1' : '0',
+            ((ptr[0] >> 1) & 1) ? '1' : '0',
+            ((ptr[0] >> 0) & 1) ? '1' : '0');
+
+        DEBUG("mriht: %c%c%c%c%c%c%c%c",
+            ((right >> 7) & 1) ? '1' : '0',
+            ((right >> 6) & 1) ? '1' : '0',
+            ((right >> 5) & 1) ? '1' : '0',
+            ((right >> 4) & 1) ? '1' : '0',
+            ((right >> 3) & 1) ? '1' : '0',
+            ((right >> 2) & 1) ? '1' : '0',
+            ((right >> 1) & 1) ? '1' : '0',
+            ((right >> 0) & 1) ? '1' : '0');
+
+        ptr[-1] = (ptr[-1] & (0xff << bits)) | right;
+
+        DEBUG("after: %c%c%c%c%c%c%c%c",
+            ((ptr[-1] >> 7) & 1) ? '1' : '0',
+            ((ptr[-1] >> 6) & 1) ? '1' : '0',
+            ((ptr[-1] >> 5) & 1) ? '1' : '0',
+            ((ptr[-1] >> 4) & 1) ? '1' : '0',
+            ((ptr[-1] >> 3) & 1) ? '1' : '0',
+            ((ptr[-1] >> 2) & 1) ? '1' : '0',
+            ((ptr[-1] >> 1) & 1) ? '1' : '0',
+            ((ptr[-1] >> 0) & 1) ? '1' : '0');
+    }
+
+    buffer_dump();
+
+    for(; ptr < end; ptr++) {
+        int right = ptr[1] >> (8 - bits);
+        *ptr = (*ptr << bits) | right;
+    }
+    *ptr <<= bits;
+
+    DEBUG("Unbits [%" ASN_PRI_SIZE "=>", DynamicBuffer.unbits);
+    if(DynamicBuffer.unbits == 0) {
+        DynamicBuffer.unbits += bits;
+    } else {
+        DynamicBuffer.unbits += bits;
+        if(DynamicBuffer.unbits > 7) {
+            DynamicBuffer.unbits -= 8;
+            DynamicBuffer.length--;
+            DynamicBuffer.bytes_shifted++;
+        }
+    }
+    DEBUG("Unbits =>%" ASN_PRI_SIZE "]", DynamicBuffer.unbits);
+
+    buffer_dump();
+
+    DEBUG("Shifted. Now (o=%" ASN_PRI_SIZE ", u=%" ASN_PRI_SIZE
+          " l=%" ASN_PRI_SIZE ")",
+        DynamicBuffer.offset,
+        DynamicBuffer.unbits,
+        DynamicBuffer.length);
+}
+
+/*
+ * Ensure that the buffer contains at least this amount of free space.
+ */
+static void add_bytes_to_buffer(const void *data2add, size_t bytes) {
+
+    if(bytes == 0) return;
+
+    DEBUG("=> add_bytes(%" ASN_PRI_SIZE ") { o=%" ASN_PRI_SIZE
+          " l=%" ASN_PRI_SIZE " u=%" ASN_PRI_SIZE ", s=%" ASN_PRI_SIZE " }",
+        bytes,
+        DynamicBuffer.offset,
+        DynamicBuffer.length,
+        DynamicBuffer.unbits,
+        DynamicBuffer.allocated);
+
+    if(DynamicBuffer.allocated
+       >= (DynamicBuffer.offset + DynamicBuffer.length + bytes)) {
+        DEBUG("\tNo buffer reallocation is necessary");
+    } else if(bytes <= DynamicBuffer.offset) {
+        DEBUG("\tContents shifted by %ld", DynamicBuffer.offset);
+
+        /* Shift the buffer contents */
+        memmove(DynamicBuffer.data,
+                DynamicBuffer.data + DynamicBuffer.offset,
+            DynamicBuffer.length);
+        DynamicBuffer.bytes_shifted += DynamicBuffer.offset;
+        DynamicBuffer.offset = 0;
+    } else {
+        size_t newsize = (DynamicBuffer.allocated << 2) + bytes;
+        void *p = MALLOC(newsize);
+        if(!p) {
+            perror("malloc()");
+            exit(EX_OSERR);
+        }
+               if (DynamicBuffer.length) {
+                       memcpy(p,
+                                       DynamicBuffer.data + DynamicBuffer.offset,
+                                       DynamicBuffer.length);
+               }
+        FREEMEM(DynamicBuffer.data);
+        DynamicBuffer.data = (uint8_t *)p;
+        DynamicBuffer.offset = 0;
+        DynamicBuffer.allocated = newsize;
+        DynamicBuffer.nreallocs++;
+        DEBUG("\tBuffer reallocated to %ld (%d time)",
+            newsize, DynamicBuffer.nreallocs);
+    }
+
+    memcpy(DynamicBuffer.data
+        + DynamicBuffer.offset + DynamicBuffer.length,
+        data2add, bytes);
+    DynamicBuffer.length += bytes;
+    if(DynamicBuffer.unbits) {
+        int bits = DynamicBuffer.unbits;
+        DynamicBuffer.unbits = 0;
+        buffer_shift_left(DynamicBuffer.length - bytes, bits);
+    }
+
+    DEBUG("<= add_bytes(%" ASN_PRI_SIZE ") { o=%" ASN_PRI_SIZE
+          " l=%" ASN_PRI_SIZE " u=%" ASN_PRI_SIZE ", s=%" ASN_PRI_SIZE " }",
+        bytes,
+        DynamicBuffer.offset,
+        DynamicBuffer.length,
+        DynamicBuffer.unbits,
+        DynamicBuffer.allocated);
+}
+
+static int
+is_syntax_PER(enum asn_transfer_syntax syntax) {
+    return (syntax == ATS_UNALIGNED_BASIC_PER
+            || syntax == ATS_UNALIGNED_CANONICAL_PER
+            || syntax == ATS_ALIGNED_BASIC_PER
+            || syntax == ATS_ALIGNED_CANONICAL_PER);
+}
+
+static int
+restartability_supported(enum asn_transfer_syntax syntax) {
+    return !is_syntax_PER(syntax);
+}
+
+static void *
+data_decode_from_file(enum asn_transfer_syntax isyntax, asn_TYPE_descriptor_t *pduType, FILE *file, const char *name, ssize_t suggested_bufsize, int on_first_pdu) {
+    static uint8_t *fbuf;
+    static ssize_t fbuf_size;
+    static asn_codec_ctx_t s_codec_ctx;
+    asn_codec_ctx_t *opt_codec_ctx = 0;
+    void *structure = 0;
+    asn_dec_rval_t rval;
+    size_t old_offset;    
+    size_t new_offset;
+    int tolerate_eof;
+    size_t rd;
+
+    if(!file) {
+        fprintf(stderr, "%s: %s\n", name, strerror(errno));
+        errno = EINVAL;
+        return 0;
+    }
+
+    if(opt_stack) {
+        s_codec_ctx.max_stack_size = opt_stack;
+        opt_codec_ctx = &s_codec_ctx;
+    }
+
+    DEBUG("Processing %s", name);
+
+    /* prepare the file buffer */
+    if(fbuf_size != suggested_bufsize) {
+        fbuf = (uint8_t *)REALLOC(fbuf, suggested_bufsize);
+        if(!fbuf) {
+            perror("realloc()");
+            exit(EX_OSERR);
+        }
+        fbuf_size = suggested_bufsize;
+    }
+
+    if(on_first_pdu) {
+        DynamicBuffer.offset = 0;
+        DynamicBuffer.length = 0;
+        DynamicBuffer.unbits = 0;
+        DynamicBuffer.allocated = 0;
+        DynamicBuffer.bytes_shifted = 0;
+        DynamicBuffer.nreallocs = 0;
+    }
+
+    old_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset;
+
+    /* Pretend immediate EOF */
+    rval.code = RC_WMORE;
+    rval.consumed = 0;
+
+    for(tolerate_eof = 1;    /* Allow EOF first time buffer is non-empty */
+        (rd = fread(fbuf, 1, fbuf_size, file))
+        || feof(file) == 0
+        || (tolerate_eof && DynamicBuffer.length)
+        ;) {
+        int      ecbits = 0;    /* Extra consumed bits in case of PER */
+        uint8_t *i_bptr;
+        size_t   i_size;
+
+        /*
+         * Copy the data over, or use the original buffer.
+         */
+        if(DynamicBuffer.allocated) {
+            /* Append new data into the existing dynamic buffer */
+            add_bytes_to_buffer(fbuf, rd);
+            i_bptr = DynamicBuffer.data + DynamicBuffer.offset;
+            i_size = DynamicBuffer.length;
+        } else {
+            i_bptr = fbuf;
+            i_size = rd;
+        }
+
+        DEBUG("Decoding %" ASN_PRI_SIZE " bytes", i_size);
+
+#ifdef    JUNKTEST
+        junk_bytes_with_probability(i_bptr, i_size, opt_jprob);
+#endif
+
+        if(is_syntax_PER(isyntax) && opt_nopad) {
+#ifdef  ASN_DISABLE_PER_SUPPORT
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+#else
+            if(isyntax == ATS_UNALIGNED_BASIC_PER)
+                rval = uper_decode(opt_codec_ctx, pduType, (void **)&structure,
+                                   i_bptr, i_size, 0, DynamicBuffer.unbits);
+            else
+                rval = aper_decode(opt_codec_ctx, pduType, (void **)&structure,
+                                   i_bptr, i_size, 0, DynamicBuffer.unbits);
+            /* uper_decode() returns bits! */
+            ecbits = rval.consumed % 8; /* Bits consumed from the last byte */
+            rval.consumed >>= 3;    /* Convert bits into bytes. */
+#endif
+            /* Non-padded PER decoder */
+        } else {
+            rval = asn_decode(opt_codec_ctx, isyntax, pduType,
+                              (void **)&structure, i_bptr, i_size);
+        }
+        if(rval.code == RC_WMORE && !restartability_supported(isyntax)) {
+            /* PER does not support restartability */
+            ASN_STRUCT_FREE(*pduType, structure);
+            structure = 0;
+            rval.consumed = 0;
+            /* Continue accumulating data */
+        }
+
+        DEBUG("decode(%" ASN_PRI_SIZE ") consumed %" ASN_PRI_SIZE
+              "+%db (%" ASN_PRI_SIZE "), code %d",
+              DynamicBuffer.length, rval.consumed, ecbits, i_size, rval.code);
+
+        if(DynamicBuffer.allocated == 0) {
+            /*
+             * Flush remainder into the intermediate buffer.
+             */
+            if(rval.code != RC_FAIL && rval.consumed < rd) {
+                add_bytes_to_buffer(fbuf + rval.consumed,
+                    rd - rval.consumed);
+                buffer_shift_left(0, ecbits);
+                DynamicBuffer.bytes_shifted = rval.consumed;
+                rval.consumed = 0;
+                ecbits = 0;
+            }
+        }
+
+        /*
+         * Adjust position inside the source buffer.
+         */
+        if(DynamicBuffer.allocated) {
+            DynamicBuffer.offset += rval.consumed;
+            DynamicBuffer.length -= rval.consumed;
+        } else {
+            DynamicBuffer.bytes_shifted += rval.consumed;
+        }
+
+        switch(rval.code) {
+        case RC_OK:
+            if(ecbits) buffer_shift_left(0, ecbits);
+            DEBUG("RC_OK, finishing up with %ld+%d",
+                (long)rval.consumed, ecbits);
+            return structure;
+        case RC_WMORE:
+            DEBUG("RC_WMORE, continuing read=%ld, cons=%ld "
+                " with %ld..%ld-%ld..%ld",
+                (long)rd,
+                (long)rval.consumed,
+                (long)DynamicBuffer.offset,
+                (long)DynamicBuffer.length,
+                (long)DynamicBuffer.unbits,
+                (long)DynamicBuffer.allocated);
+            if(!rd) tolerate_eof--;
+            continue;
+        case RC_FAIL:
+            break;
+        }
+        break;
+    }
+
+    DEBUG("Clean up partially decoded %s", pduType->name);
+    ASN_STRUCT_FREE(*pduType, structure);
+
+    new_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset;
+
+    /*
+     * Print a message and return failure only if not EOF,
+     * unless this is our first PDU (empty file).
+     */
+    if(on_first_pdu
+    || DynamicBuffer.length
+    || new_offset - old_offset > ((isyntax == ATS_BASIC_XER)?sizeof("\r\n")-1:0)
+    ) {
+
+#ifdef    JUNKTEST
+        /*
+         * Nothing's wrong with being unable to decode junk.
+         * Simulate EOF.
+         */
+        if(opt_jprob != 0.0) {
+            junk_failures++;
+            errno = 0;
+            return 0;
+        }
+#endif
+
+        DEBUG("ofp %d, no=%ld, oo=%ld, dbl=%ld",
+            on_first_pdu, (long)new_offset, (long)old_offset,
+            (long)DynamicBuffer.length);
+        fprintf(stderr, "%s: "
+            "Decode failed past byte %ld: %s\n",
+            name, (long)new_offset,
+            (rval.code == RC_WMORE)
+                ? "Unexpected end of input"
+                : "Input processing error");
+#ifndef    ENOMSG
+#define    ENOMSG EINVAL
+#endif
+#ifndef    EBADMSG
+#define    EBADMSG EINVAL
+#endif
+        errno = (rval.code == RC_WMORE) ? ENOMSG : EBADMSG;
+    } else {
+        /* Got EOF after a few successful PDUs */
+        errno = 0;
+    }
+
+    return 0;
+}
+
+/* Dump the buffer out to the specified FILE */
+static int write_out(const void *buffer, size_t size, void *key) {
+    FILE *fp = (FILE *)key;
+    return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1;
+}
+
+static int argument_is_stdin(char *av[], int idx) {
+    if(strcmp(av[idx], "-")) {
+        return 0; /* Certainly not <stdin> */
+    } else {
+        /* This might be <stdin>, unless `./program -- -` */
+        if(strcmp(av[-1], "--"))
+            return 1;
+        else
+            return 0;
+    }
+}
+
+static FILE *argument_to_file(char *av[], int idx) {
+    return argument_is_stdin(av, idx) ? stdin : fopen(av[idx], "rb");
+}
+
+static char *argument_to_name(char *av[], int idx) {
+    return argument_is_stdin(av, idx) ? "standard input" : av[idx];
+}
+
+#ifdef    JUNKTEST
+/*
+ * Fill bytes with some garbage with specified probability (more or less).
+ */
+static void
+junk_bytes_with_probability(uint8_t *buf, size_t size, double prob) {
+    static int junkmode;
+    uint8_t *ptr;
+    uint8_t *end;
+    if(opt_jprob <= 0.0) return;
+    for(ptr = buf, end = ptr + size; ptr < end; ptr++) {
+        int byte = *ptr;
+        if(junkmode++ & 1) {
+            if((((double)random() / RAND_MAX) < prob))
+                byte = random() & 0xff;
+        } else {
+#define    BPROB(b)    ((((double)random() / RAND_MAX) < prob) ? b : 0)
+            byte ^= BPROB(0x80);
+            byte ^= BPROB(0x40);
+            byte ^= BPROB(0x20);
+            byte ^= BPROB(0x10);
+            byte ^= BPROB(0x08);
+            byte ^= BPROB(0x04);
+            byte ^= BPROB(0x02);
+            byte ^= BPROB(0x01);
+        }
+        if(byte != *ptr) {
+            *ptr = byte;
+        }
+    }
+}
+#endif    /* JUNKTEST */
+
diff --git a/skeletons/der_encoder.c b/skeletons/der_encoder.c
new file mode 100644 (file)
index 0000000..2c6a6f7
--- /dev/null
@@ -0,0 +1,194 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <errno.h>
+
+static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len,
+       asn_app_consume_bytes_f *cb, void *app_key, int constructed);
+
+/*
+ * The DER encoder of any type.
+ */
+asn_enc_rval_t
+der_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr,
+           asn_app_consume_bytes_f *consume_bytes, void *app_key) {
+    ASN_DEBUG("DER encoder invoked for %s",
+               type_descriptor->name);
+
+       /*
+        * Invoke type-specific encoder.
+        */
+    return type_descriptor->op->der_encoder(
+        type_descriptor, struct_ptr, /* Pointer to the destination structure */
+        0, 0, consume_bytes, app_key);
+}
+
+/*
+ * Argument type and callback necessary for der_encode_to_buffer().
+ */
+typedef struct enc_to_buf_arg {
+       void *buffer;
+       size_t left;
+} enc_to_buf_arg;
+static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) {
+       enc_to_buf_arg *arg = (enc_to_buf_arg *)key;
+
+       if(arg->left < size)
+               return -1;      /* Data exceeds the available buffer size */
+
+       memcpy(arg->buffer, buffer, size);
+       arg->buffer = ((char *)arg->buffer) + size;
+       arg->left -= size;
+
+       return 0;
+}
+
+/*
+ * A variant of the der_encode() which encodes the data into the provided buffer
+ */
+asn_enc_rval_t
+der_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor,
+                     const void *struct_ptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg arg;
+       asn_enc_rval_t ec;
+
+       arg.buffer = buffer;
+       arg.left = buffer_size;
+
+       ec = type_descriptor->op->der_encoder(type_descriptor,
+               struct_ptr,     /* Pointer to the destination structure */
+               0, 0, encode_to_buffer_cb, &arg);
+       if(ec.encoded != -1) {
+               assert(ec.encoded == (ssize_t)(buffer_size - arg.left));
+               /* Return the encoded contents size */
+       }
+       return ec;
+}
+
+
+/*
+ * Write out leading TL[v] sequence according to the type definition.
+ */
+ssize_t
+der_write_tags(const asn_TYPE_descriptor_t *sd, size_t struct_length,
+               int tag_mode, int last_tag_form,
+               ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */
+               asn_app_consume_bytes_f *cb, void *app_key) {
+#define ASN1_DER_MAX_TAGS_COUNT 4
+    ber_tlv_tag_t
+        tags_buf_scratch[ASN1_DER_MAX_TAGS_COUNT * sizeof(ber_tlv_tag_t)];
+    ssize_t lens[ASN1_DER_MAX_TAGS_COUNT * sizeof(ssize_t)];
+    const ber_tlv_tag_t *tags; /* Copy of tags stream */
+    int tags_count;            /* Number of tags */
+    size_t overall_length;
+    int i;
+
+    ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)",
+               sd->name, tag_mode, sd->tags_count,
+               ber_tlv_tag_string(tag),
+               tag_mode
+                       ?(sd->tags_count+1
+                               -((tag_mode == -1) && sd->tags_count))
+                       :sd->tags_count
+       );
+
+    if(sd->tags_count + 1 > ASN1_DER_MAX_TAGS_COUNT) {
+        ASN_DEBUG("System limit %d on tags count", ASN1_DER_MAX_TAGS_COUNT);
+        return -1;
+    }
+
+       if(tag_mode) {
+               /*
+                * Instead of doing shaman dance like we do in ber_check_tags(),
+                * allocate a small array on the stack
+                * and initialize it appropriately.
+                */
+               int stag_offset;
+               ber_tlv_tag_t *tags_buf = tags_buf_scratch;
+               tags_count = sd->tags_count
+                       + 1     /* EXPLICIT or IMPLICIT tag is given */
+                       - ((tag_mode == -1) && sd->tags_count);
+               /* Copy tags over */
+               tags_buf[0] = tag;
+               stag_offset = -1 + ((tag_mode == -1) && sd->tags_count);
+               for(i = 1; i < tags_count; i++)
+                       tags_buf[i] = sd->tags[i + stag_offset];
+               tags = tags_buf;
+       } else {
+               tags = sd->tags;
+               tags_count = sd->tags_count;
+       }
+
+       /* No tags to write */
+       if(tags_count == 0)
+               return 0;
+
+       /*
+        * Array of tags is initialized.
+        * Now, compute the size of the TLV pairs, from right to left.
+        */
+       overall_length = struct_length;
+       for(i = tags_count - 1; i >= 0; --i) {
+               lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0);
+               if(lens[i] == -1) return -1;
+               overall_length += lens[i];
+               lens[i] = overall_length - lens[i];
+       }
+
+       if(!cb) return overall_length - struct_length;
+
+       ASN_DEBUG("Encoding %s TL sequence (%d elements)", sd->name,
+                  tags_count);
+
+       /*
+        * Encode the TL sequence for real.
+        */
+       for(i = 0; i < tags_count; i++) {
+               ssize_t len;
+               int _constr;
+
+               /* Check if this tag happens to be constructed */
+               _constr = (last_tag_form || i < (tags_count - 1));
+
+               len = der_write_TL(tags[i], lens[i], cb, app_key, _constr);
+               if(len == -1) return -1;
+       }
+
+       return overall_length - struct_length;
+}
+
+static ssize_t
+der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len,
+               asn_app_consume_bytes_f *cb, void *app_key,
+               int constructed) {
+       uint8_t buf[32];
+       size_t size = 0;
+       int buf_size = cb?sizeof(buf):0;
+       ssize_t tmp;
+
+       /* Serialize tag (T from TLV) into possibly zero-length buffer */
+       tmp = ber_tlv_tag_serialize(tag, buf, buf_size);
+       if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1;
+       size += tmp;
+
+       /* Serialize length (L from TLV) into possibly zero-length buffer */
+       tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0);
+       if(tmp == -1) return -1;
+       size += tmp;
+
+       if(size > sizeof(buf))
+               return -1;
+
+       /*
+        * If callback is specified, invoke it, and check its return value.
+        */
+       if(cb) {
+               if(constructed) *buf |= 0x20;
+               if(cb(buf, size, app_key) < 0)
+                       return -1;
+       }
+
+       return size;
+}
diff --git a/skeletons/der_encoder.h b/skeletons/der_encoder.h
new file mode 100644 (file)
index 0000000..e93944e
--- /dev/null
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _DER_ENCODER_H_
+#define        _DER_ENCODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * The DER encoder of any type. May be invoked by the application.
+ * Produces DER- and BER-compliant encoding. (DER is a subset of BER).
+ *
+ * NOTE: Use the ber_decode() function (ber_decoder.h) to decode data
+ * produced by der_encode().
+ */
+asn_enc_rval_t der_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/* A variant of der_encode() which encodes data into the pre-allocated buffer */
+asn_enc_rval_t der_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    void *buffer,           /* Pre-allocated buffer */
+    size_t buffer_size      /* Initial buffer size (maximum) */
+);
+
+/*
+ * Type of the generic DER encoder.
+ */
+typedef asn_enc_rval_t(der_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    int tag_mode,           /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+    ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key /* Arbitrary callback argument */
+);
+
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Write out leading TL[v] sequence according to the type definition.
+ */
+ssize_t der_write_tags(const struct asn_TYPE_descriptor_s *type_descriptor,
+                       size_t struct_length,
+                       int tag_mode,      /* {-1,0,1}: IMPLICIT, no, EXPLICIT */
+                       int last_tag_form, /* {0,!0}: prim, constructed */
+                       ber_tlv_tag_t tag,
+                       asn_app_consume_bytes_f *consume_bytes_cb,
+                       void *app_key);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DER_ENCODER_H_ */
diff --git a/skeletons/file-dependencies b/skeletons/file-dependencies
new file mode 100644 (file)
index 0000000..59e2ce6
--- /dev/null
@@ -0,0 +1,89 @@
+# This file contains dependency information for the asn1c compiler's skeletons.
+# Feel free to edit this file.
+# The format is like this:
+#      <filename>                      # Include this file unconditionally
+#      <filename> <dependent-file> ... # Include dependencies of <filename>.
+#
+
+ANY.h ANY.c OCTET_STRING.h
+OPEN_TYPE.h OPEN_TYPE.c constr_CHOICE.h
+BMPString.h BMPString.c UTF8String.h OCTET_STRING.h
+BOOLEAN.h BOOLEAN.c
+ENUMERATED.h ENUMERATED.c INTEGER.h NativeEnumerated.h
+GeneralString.h GeneralString.c OCTET_STRING.h
+GeneralizedTime.h GeneralizedTime.c OCTET_STRING.h
+GraphicString.h GraphicString.c OCTET_STRING.h
+IA5String.h IA5String.c OCTET_STRING.h
+INTEGER.h INTEGER.c
+ISO646String.h ISO646String.c OCTET_STRING.h
+NULL.h NULL.c BOOLEAN.h
+NativeEnumerated.h NativeEnumerated.c NativeInteger.h
+NativeInteger.h NativeInteger.c INTEGER.h
+NativeReal.h NativeReal.c REAL.h
+NumericString.h NumericString.c OCTET_STRING.h
+OBJECT_IDENTIFIER.h OBJECT_IDENTIFIER.c INTEGER.h OCTET_STRING.h
+ObjectDescriptor.h ObjectDescriptor.c GraphicString.h
+PrintableString.h PrintableString.c OCTET_STRING.h
+REAL.h REAL.c INTEGER.h OCTET_STRING.h
+RELATIVE-OID.h RELATIVE-OID.c OBJECT_IDENTIFIER.h OCTET_STRING.h
+T61String.h T61String.c OCTET_STRING.h
+TeletexString.h TeletexString.c         OCTET_STRING.h
+UTCTime.h UTCTime.c GeneralizedTime.h OCTET_STRING.h
+UTF8String.h UTF8String.c OCTET_STRING.h
+UniversalString.h UniversalString.c UTF8String.h OCTET_STRING.h
+VideotexString.h VideotexString.c OCTET_STRING.h
+VisibleString.h VisibleString.c OCTET_STRING.h
+asn_SEQUENCE_OF.h asn_SEQUENCE_OF.c asn_SET_OF.h
+asn_SET_OF.h asn_SET_OF.c
+constr_CHOICE.h constr_CHOICE.c
+constr_SEQUENCE.h constr_SEQUENCE.c OPEN_TYPE.h
+constr_SEQUENCE_OF.h constr_SEQUENCE_OF.c asn_SEQUENCE_OF.h constr_SET_OF.h
+constr_SET.h constr_SET.c
+constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h
+
+COMMON-FILES:                  # THIS IS A SPECIAL SECTION
+asn_application.h asn_application.c            # Applications should include this file
+asn_ioc.h                      # Information Object Classes, runtime support
+asn_system.h                   # Platform-dependent types
+asn_codecs.h                   # Return types of encoders and decoders
+asn_internal.h asn_internal.c                  # Internal stuff
+asn_random_fill.h asn_random_fill.c            # Initialize with a random value
+asn_bit_data.h asn_bit_data.c         # Bit streaming support
+OCTET_STRING.h OCTET_STRING.c
+BIT_STRING.h BIT_STRING.c OCTET_STRING.h
+asn_codecs_prim.c asn_codecs_prim.h    # enc/decoders for primitive types
+ber_tlv_length.h ber_tlv_length.c      # BER TLV L (length)
+ber_tlv_tag.h ber_tlv_tag.c    # BER TLV T (tag)
+ber_decoder.h ber_decoder.c    # BER decoder support code
+der_encoder.h der_encoder.c    # DER encoder support code
+constr_TYPE.h constr_TYPE.c    # Description of a type
+constraints.h constraints.c    # Subtype constraints support
+xer_support.h xer_support.c    # XML parsing
+xer_decoder.h xer_decoder.c    # XER decoding support
+xer_encoder.h xer_encoder.c    # XER encoding support
+per_support.h per_support.c    # PER parsing
+per_decoder.h per_decoder.c    # PER decoding support
+per_encoder.h per_encoder.c    # PER encoding support
+per_opentype.h per_opentype.c  # PER "open type" handling
+
+CONVERTER:                     # THIS IS A SPECIAL SECTION
+converter-example.c            # A default name for the example transcoder
+
+CODEC-OER:                     # THIS IS A SPECIAL SECTION
+oer_decoder.h
+oer_encoder.h
+oer_support.h
+oer_decoder.h oer_decoder.c OPEN_TYPE.h
+oer_encoder.h oer_encoder.c
+oer_support.h oer_support.c
+OPEN_TYPE.h OPEN_TYPE_oer.c constr_CHOICE.h
+INTEGER.h INTEGER_oer.c
+BIT_STRING.h BIT_STRING_oer.c OCTET_STRING.h
+OCTET_STRING.h OCTET_STRING_oer.c
+NativeInteger.h NativeInteger_oer.c
+NativeEnumerated.h NativeEnumerated_oer.c
+constr_CHOICE.h constr_CHOICE_oer.c
+constr_SEQUENCE.h constr_SEQUENCE_oer.c
+constr_SET_OF.h constr_SET_OF_oer.c
+
+CODEC-PER:                     # THIS IS A SPECIAL SECTION
diff --git a/skeletons/oer_decoder.c b/skeletons/oer_decoder.c
new file mode 100644 (file)
index 0000000..0701738
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+
+/*
+ * The OER decoder of any type.
+ */
+asn_dec_rval_t
+oer_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           const asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr,
+           const void *ptr, size_t size) {
+    asn_codec_ctx_t s_codec_ctx;
+
+       /*
+        * Stack checker requires that the codec context
+        * must be allocated on the stack.
+        */
+       if(opt_codec_ctx) {
+               if(opt_codec_ctx->max_stack_size) {
+                       s_codec_ctx = *opt_codec_ctx;
+                       opt_codec_ctx = &s_codec_ctx;
+               }
+       } else {
+               /* If context is not given, be security-conscious anyway */
+               memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+               s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+               opt_codec_ctx = &s_codec_ctx;
+       }
+
+       /*
+        * Invoke type-specific decoder.
+        */
+       return type_descriptor->op->oer_decoder(opt_codec_ctx, type_descriptor, 0,
+               struct_ptr,     /* Pointer to the destination structure */
+               ptr, size       /* Buffer and its size */
+               );
+}
+
+/*
+ * Open Type is encoded as a length (#8.6) followed by that number of bytes.
+ * Since we're just skipping, reading the length would be enough.
+ */
+ssize_t
+oer_open_type_skip(const void *bufptr, size_t size) {
+    size_t len = 0;
+    return oer_fetch_length(bufptr, size, &len);
+}
+
+/*
+ * Read the Open Type (X.696 (08/2015), #30).
+ * RETURN VALUES:
+ *       0:     More data expected than bufptr contains.
+ *      -1:     Fatal error deciphering length.
+ *      >0:     Number of bytes used from bufptr.
+ */
+ssize_t
+oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                  const struct asn_TYPE_descriptor_s *td,
+                  const asn_oer_constraints_t *constraints, void **struct_ptr,
+                  const void *bufptr, size_t size) {
+    asn_dec_rval_t dr;
+    size_t container_len = 0;
+    ssize_t len_len;
+    enum asn_struct_free_method dispose_method =
+        (*struct_ptr) ? ASFM_FREE_UNDERLYING_AND_RESET : ASFM_FREE_EVERYTHING;
+
+    /* Get the size of a length determinant */
+    len_len = oer_fetch_length(bufptr, size, &container_len);
+    if(len_len <= 0) {
+        return len_len; /* Error or more data expected */
+    }
+
+    /*
+     * len_len can't be bigger than size, but size without len_len
+     * should be bigger or equal to container length
+     */
+    if(size - len_len < container_len) {
+        /* More data is expected */
+        return 0;
+    }
+
+    dr = td->op->oer_decoder(opt_codec_ctx, td, constraints, struct_ptr,
+                         (const uint8_t *)bufptr + len_len, container_len);
+    if(dr.code == RC_OK) {
+        return len_len + container_len;
+    } else {
+        /* Even if RC_WMORE, we can't get more data into a closed container. */
+        td->op->free_struct(td, *struct_ptr, dispose_method);
+        *struct_ptr = NULL;
+        return -1;
+    }
+}
+
+
+asn_dec_rval_t
+oer_decode_primitive(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td,
+                     const asn_oer_constraints_t *constraints, void **sptr,
+                     const void *ptr, size_t size) {
+    ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr;
+    asn_dec_rval_t rval = {RC_OK, 0};
+    size_t expected_length = 0;
+    ssize_t len_len;
+
+    (void)td;
+    (void)opt_codec_ctx;
+    (void)constraints;
+
+    if(!st) {
+        st = (ASN__PRIMITIVE_TYPE_t *)(*sptr = CALLOC(
+                                           1, sizeof(ASN__PRIMITIVE_TYPE_t)));
+        if(!st) ASN__DECODE_FAILED;
+    }
+
+
+    /*
+     * X.696 (08/2015) #27.2
+     * Encode length determinant as _number of octets_, but only
+     * if upper bound is not equal to lower bound.
+     */
+    len_len = oer_fetch_length(ptr, size, &expected_length);
+    if(len_len > 0) {
+        rval.consumed = len_len;
+        ptr = (const char *)ptr + len_len;
+        size -= len_len;
+    } else if(len_len == 0) {
+        ASN__DECODE_STARVED;
+    } else if(len_len < 0) {
+        ASN__DECODE_FAILED;
+    }
+
+    if(size < expected_length) {
+        ASN__DECODE_STARVED;
+    } else {
+        uint8_t *buf = MALLOC(expected_length + 1);
+        if(buf == NULL) {
+            ASN__DECODE_FAILED;
+        } else {
+            memcpy(buf, ptr, expected_length);
+            buf[expected_length] = '\0';
+        }
+        FREEMEM(st->buf);
+        st->buf = buf;
+        st->size = expected_length;
+
+        rval.consumed += expected_length;
+        return rval;
+    }
+}
diff --git a/skeletons/oer_decoder.h b/skeletons/oer_decoder.h
new file mode 100644 (file)
index 0000000..40992e9
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        OER_DECODER_H
+#define        OER_DECODER_H
+
+#include <asn_application.h>
+#include <oer_support.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+struct asn_codec_ctx_s;                /* Forward declaration */
+
+/*
+ * The Octet Encoding Rules (OER, X.696 08/2015) decoder for any given type.
+ * This function may be invoked directly by the application.
+ * Parses CANONICAL-OER and BASIC-OER.
+ */
+asn_dec_rval_t oer_decode(const struct asn_codec_ctx_s *opt_codec_ctx,
+       const struct asn_TYPE_descriptor_s *type_descriptor,
+       void **struct_ptr,      /* Pointer to a target structure's pointer */
+       const void *buffer,     /* Data to be decoded */
+       size_t size             /* Size of that buffer */
+       );
+
+/*
+ * Type of generic function which decodes the byte stream into the structure.
+ */
+typedef asn_dec_rval_t(oer_type_decoder_f)(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_oer_constraints_t *constraints,
+    void **struct_ptr,
+    const void *buf_ptr,
+    size_t size);
+
+/*
+ * Swallow the Open Type (X.696 (08/2015), #30) into /dev/null.
+ * RETURN VALUES:
+ *      -1:     Fatal error deciphering length.
+ *       0:     More data expected than bufptr contains.
+ *      >0:     Number of bytes used from bufptr.
+ */
+ssize_t oer_open_type_skip(const void *bufptr, size_t size);
+
+/*
+ * Read the Open Type (X.696 (08/2015), #30).
+ * RETURN VALUES:
+ *       0:     More data expected than bufptr contains.
+ *      -1:     Fatal error deciphering length.
+ *      >0:     Number of bytes used from bufptr.
+ */
+ssize_t oer_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                          const struct asn_TYPE_descriptor_s *td,
+                          const asn_oer_constraints_t *constraints,
+                          void **struct_ptr, const void *bufptr, size_t size);
+
+/*
+ * Length-prefixed buffer decoding for primitive types.
+ */
+oer_type_decoder_f oer_decode_primitive;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* OER_DECODER_H */
diff --git a/skeletons/oer_encoder.c b/skeletons/oer_encoder.c
new file mode 100644 (file)
index 0000000..a284cc2
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <asn_codecs_prim.h>
+
+/*
+ * The OER encoder of any type.
+ */
+asn_enc_rval_t
+oer_encode(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr,
+           asn_app_consume_bytes_f *consume_bytes, void *app_key) {
+    ASN_DEBUG("OER encoder invoked for %s", type_descriptor->name);
+
+    /*
+     * Invoke type-specific encoder.
+     */
+    return type_descriptor->op->oer_encoder(
+        type_descriptor, 0,
+        struct_ptr, /* Pointer to the destination structure */
+        consume_bytes, app_key);
+}
+
+/*
+ * Argument type and callback necessary for oer_encode_to_buffer().
+ */
+typedef struct enc_to_buf_arg {
+        void *buffer;
+        size_t left;
+} enc_to_buf_arg;
+static int
+encode_to_buffer_cb(const void *buffer, size_t size, void *key) {
+    enc_to_buf_arg *arg = (enc_to_buf_arg *)key;
+
+    if(arg->left < size) return -1; /* Data exceeds the available buffer size */
+
+    memcpy(arg->buffer, buffer, size);
+    arg->buffer = ((char *)arg->buffer) + size;
+    arg->left -= size;
+
+    return 0;
+}
+
+/*
+ * A variant of the oer_encode() which encodes the data into the provided buffer
+ */
+asn_enc_rval_t
+oer_encode_to_buffer(const asn_TYPE_descriptor_t *type_descriptor,
+                     const asn_oer_constraints_t *constraints,
+                     const void *struct_ptr, /* Structure to be encoded */
+                     void *buffer,           /* Pre-allocated buffer */
+                     size_t buffer_size      /* Initial buffer size (maximum) */
+) {
+    enc_to_buf_arg arg;
+    asn_enc_rval_t ec;
+
+    arg.buffer = buffer;
+    arg.left = buffer_size;
+
+    if(type_descriptor->op->oer_encoder == NULL) {
+        ec.encoded = -1;
+        ec.failed_type = type_descriptor;
+        ec.structure_ptr = struct_ptr;
+        ASN_DEBUG("OER encoder is not defined for %s",
+                type_descriptor->name);
+    } else {
+        ec = type_descriptor->op->oer_encoder(
+            type_descriptor, constraints,
+            struct_ptr, /* Pointer to the destination structure */
+            encode_to_buffer_cb, &arg);
+        if(ec.encoded != -1) {
+            assert(ec.encoded == (ssize_t)(buffer_size - arg.left));
+            /* Return the encoded contents size */
+        }
+    }
+    return ec;
+}
+
+asn_enc_rval_t
+oer_encode_primitive(const asn_TYPE_descriptor_t *td,
+                     const asn_oer_constraints_t *constraints, const void *sptr,
+                     asn_app_consume_bytes_f *cb, void *app_key) {
+    const ASN__PRIMITIVE_TYPE_t *st = (const ASN__PRIMITIVE_TYPE_t *)sptr;
+    asn_enc_rval_t er = {0, 0, 0};
+    ssize_t ret;
+
+    (void)constraints;
+
+    if(!st) ASN__ENCODE_FAILED;
+
+    ASN_DEBUG("Encoding %s (%" ASN_PRI_SIZE " bytes)", td ? td->name : "", st->size);
+
+    /*
+     * X.696 (08/2015) #27.2
+     */
+    ret = oer_serialize_length(st->size, cb, app_key);
+    if(ret < 0) {
+        ASN__ENCODE_FAILED;
+    }
+    er.encoded += ret;
+
+    er.encoded += st->size;
+    if(cb(st->buf, st->size, app_key) < 0) {
+        ASN__ENCODE_FAILED;
+    } else {
+        ASN__ENCODED_OK(er);
+    }
+}
+
+static int
+oer__count_bytes(const void *buffer, size_t size, void *bytes_ptr) {
+    size_t *bytes = bytes_ptr;
+    (void)buffer;
+    *bytes += size;
+    return 0;
+}
+
+ssize_t
+oer_open_type_put(const asn_TYPE_descriptor_t *td,
+                  const asn_oer_constraints_t *constraints, const void *sptr,
+                  asn_app_consume_bytes_f *cb, void *app_key) {
+    size_t serialized_byte_count = 0;
+    asn_enc_rval_t er = {0,0,0};
+    ssize_t len_len;
+
+    er = td->op->oer_encoder(td, constraints, sptr, oer__count_bytes,
+                             &serialized_byte_count);
+    if(er.encoded < 0) return -1;
+    assert(serialized_byte_count == (size_t)er.encoded);
+
+    len_len = oer_serialize_length(serialized_byte_count, cb, app_key);
+    if(len_len == -1) return -1;
+
+    er = td->op->oer_encoder(td, constraints, sptr, cb, app_key);
+    if(er.encoded < 0) return -1;
+    assert(serialized_byte_count == (size_t)er.encoded);
+
+    return len_len + er.encoded;
+}
+
diff --git a/skeletons/oer_encoder.h b/skeletons/oer_encoder.h
new file mode 100644 (file)
index 0000000..6a7b681
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        OER_ENCODER_H
+#define        OER_ENCODER_H
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * The Octet Encoding Rules (OER, X.696 08/2015) encoder for any type.
+ * This function may be invoked directly by the application.
+ * Produces CANONICAL-OER output compatible with CANONICAL-OER
+ * and BASIC-OER decoders.
+ */
+asn_enc_rval_t oer_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/* A variant of oer_encode() which encodes data into the pre-allocated buffer */
+asn_enc_rval_t oer_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_oer_constraints_t *constraints,
+    const void *struct_ptr, /* Structure to be encoded */
+    void *buffer,           /* Pre-allocated buffer */
+    size_t buffer_size      /* Initial buffer size (maximum) */
+);
+
+/*
+ * Type of the generic OER encoder.
+ */
+typedef asn_enc_rval_t(oer_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_oer_constraints_t *constraints,
+    const void *struct_ptr,                    /* Structure to be encoded */
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+/*
+ * Write out the Open Type (X.696 (08/2015), #30).
+ * RETURN VALUES:
+ *  -1: Fatal error encoding the type.
+ *  >0: Number of bytes serialized.
+ */
+ssize_t oer_open_type_put(const struct asn_TYPE_descriptor_s *td,
+                          const asn_oer_constraints_t *constraints,
+                          const void *struct_ptr,
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key);
+
+
+/*
+ * Length-prefixed buffer encoding for primitive types.
+ */
+oer_type_encoder_f oer_encode_primitive;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* OER_ENCODER_H */
diff --git a/skeletons/oer_support.c b/skeletons/oer_support.c
new file mode 100644 (file)
index 0000000..b15a3bc
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <asn_internal.h>
+
+#include <oer_support.h>
+
+/*
+ * Fetch the length determinant (X.696 08/2015, #8.6) into *len_r.
+ * RETURN VALUES:
+ *       0:     More data expected than bufptr contains.
+ *      -1:     Fatal error deciphering length.
+ *      >0:     Number of bytes used from bufptr.
+ */
+ssize_t
+oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) {
+    uint8_t first_byte;
+    size_t len_len;    /* Length of the length determinant */
+    const uint8_t *b;
+    const uint8_t *bend;
+    size_t len;
+
+    if(size == 0) {
+        *len_r = 0;
+        return 0;
+    }
+
+    first_byte = *(const uint8_t *)bufptr;
+    if((first_byte & 0x80) == 0) {   /* Short form */
+        *len_r = first_byte; /* 0..127 */
+        return 1;
+    }
+
+    len_len = (first_byte & 0x7f);
+    if((1 + len_len) > size) {
+        *len_r = 0;
+        return 0;
+    }
+
+    b = (const uint8_t *)bufptr + 1;
+    bend = b + len_len;
+
+    for(; b < bend && *b == 0; b++) {
+        /* Skip the leading 0-bytes */
+    }
+
+    if((bend - b) > (ssize_t)sizeof(size_t)) {
+        /* Length is not representable by the native size_t type */
+        *len_r = 0;
+        return -1;
+    }
+
+    for(len = 0; b < bend; b++) {
+        len = (len << 8) + *b;
+    }
+
+    if(len > RSIZE_MAX) { /* A bit of C11 validation */
+        *len_r = 0;
+        return -1;
+    }
+
+    *len_r = len;
+    assert(len_len + 1 == (size_t)(bend - (const uint8_t *)bufptr));
+    return len_len + 1;
+}
+
+
+/*
+ * Serialize OER length. Returns the number of bytes serialized
+ * or -1 if a given callback returned with negative result.
+ */
+ssize_t
+oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb,
+                     void *app_key) {
+    uint8_t scratch[1 + sizeof(length)];
+    uint8_t *sp = scratch;
+    int littleEndian = 1;   /* Run-time detection */
+    const uint8_t *pstart;
+    const uint8_t *pend;
+    const uint8_t *p;
+    int add;
+
+    if(length <= 127) {
+        uint8_t b = length;
+        if(cb(&b, 1, app_key) < 0) {
+            return -1;
+        }
+        return 1;
+    }
+
+    if(*(char *)&littleEndian) {
+        pstart = (const uint8_t *)&length + sizeof(length) - 1;
+        pend = (const uint8_t *)&length;
+        add = -1;
+    } else {
+        pstart = (const uint8_t *)&length;
+        pend = pstart + sizeof(length);
+        add = 1;
+    }
+
+    for(p = pstart; p != pend; p += add) {
+        /* Skip leading zeros. */
+        if(*p) break;
+    }
+
+    for(sp = scratch + 1; ; p += add) {
+        *sp++ = *p;
+        if(p == pend) break;
+    }
+    assert((sp - scratch) - 1 <= 0x7f);
+    scratch[0] = 0x80 + ((sp - scratch) - 1);
+
+    if(cb(scratch, sp - scratch, app_key) < 0) {
+        return -1;
+    }
+
+    return sp - scratch;
+}
+
diff --git a/skeletons/oer_support.h b/skeletons/oer_support.h
new file mode 100644 (file)
index 0000000..dbc9b5f
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        OER_SUPPORT_H
+#define        OER_SUPPORT_H
+
+#include <asn_system.h>                /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Pre-computed OER constraints.
+ */
+typedef struct asn_oer_constraint_number_s {
+    unsigned width;    /* ±8,4,2,1 fixed bytes */
+    unsigned positive; /* 1 for unsigned number, 0 for signed */
+} asn_oer_constraint_number_t;
+typedef struct asn_oer_constraints_s {
+    asn_oer_constraint_number_t value;
+    ssize_t size;    /* -1 (no constraint) or >= 0 */
+} asn_oer_constraints_t;
+
+
+/*
+ * Fetch the length determinant (X.696 (08/2015), #8.6) into *len_r.
+ * RETURN VALUES:
+ *       0:     More data expected than bufptr contains.
+ *      -1:     Fatal error deciphering length.
+ *      >0:     Number of bytes used from bufptr.
+ */
+ssize_t oer_fetch_length(const void *bufptr, size_t size, size_t *len_r);
+
+/*
+ * Serialize OER length. Returns the number of bytes serialized
+ * or -1 if a given callback returned with negative result.
+ */
+ssize_t oer_serialize_length(size_t length, asn_app_consume_bytes_f *cb, void *app_key);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* OER_SUPPORT_H */
diff --git a/skeletons/per_decoder.c b/skeletons/per_decoder.c
new file mode 100644 (file)
index 0000000..8a3e39d
--- /dev/null
@@ -0,0 +1,185 @@
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <per_decoder.h>
+
+/*
+ * Decode a "Production of a complete encoding", X.691#10.1.
+ * The complete encoding contains at least one byte, and is an integral
+ * multiple of 8 bytes.
+ */
+asn_dec_rval_t
+uper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buffer, size_t size) {
+    asn_dec_rval_t rval;
+
+       rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0);
+       if(rval.consumed) {
+               /*
+                * We've always given 8-aligned data,
+                * so convert bits to integral bytes.
+                */
+               rval.consumed += 7;
+               rval.consumed >>= 3;
+       } else if(rval.code == RC_OK) {
+               if(size) {
+                       if(((const uint8_t *)buffer)[0] == 0) {
+                               rval.consumed = 1;      /* 1 byte */
+                       } else {
+                               ASN_DEBUG("Expecting single zeroed byte");
+                               rval.code = RC_FAIL;
+                       }
+               } else {
+                       /* Must contain at least 8 bits. */
+                       rval.code = RC_WMORE;
+               }
+       }
+
+       return rval;
+}
+
+asn_dec_rval_t
+uper_decode(const asn_codec_ctx_t *opt_codec_ctx,
+            const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer,
+            size_t size, int skip_bits, int unused_bits) {
+    asn_codec_ctx_t s_codec_ctx;
+       asn_dec_rval_t rval;
+       asn_per_data_t pd;
+
+       if(skip_bits < 0 || skip_bits > 7
+       || unused_bits < 0 || unused_bits > 7
+       || (unused_bits > 0 && !size))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Stack checker requires that the codec context
+        * must be allocated on the stack.
+        */
+       if(opt_codec_ctx) {
+               if(opt_codec_ctx->max_stack_size) {
+                       s_codec_ctx = *opt_codec_ctx;
+                       opt_codec_ctx = &s_codec_ctx;
+               }
+       } else {
+               /* If context is not given, be security-conscious anyway */
+               memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+               s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+               opt_codec_ctx = &s_codec_ctx;
+       }
+
+       /* Fill in the position indicator */
+       memset(&pd, 0, sizeof(pd));
+       pd.buffer = (const uint8_t *)buffer;
+       pd.nboff = skip_bits;
+       pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from <limits.h> */
+       if(pd.nboff > pd.nbits)
+               ASN__DECODE_FAILED;
+
+       /*
+        * Invoke type-specific decoder.
+        */
+       if(!td->op->uper_decoder)
+               ASN__DECODE_FAILED;     /* PER is not compiled in */
+       rval = td->op->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
+       if(rval.code == RC_OK) {
+               /* Return the number of consumed bits */
+               rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)
+                                       + pd.nboff - skip_bits;
+               ASN_DEBUG("PER decoding consumed %ld, counted %ld",
+                       (long)rval.consumed, (long)pd.moved);
+               assert(rval.consumed == pd.moved);
+       } else {
+               /* PER codec is not a restartable */
+               rval.consumed = 0;
+       }
+       return rval;
+}
+
+asn_dec_rval_t
+aper_decode_complete(const asn_codec_ctx_t *opt_codec_ctx,
+                     const asn_TYPE_descriptor_t *td, void **sptr,
+                     const void *buffer, size_t size) {
+       asn_dec_rval_t rval;
+
+       rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0);
+       if(rval.consumed) {
+               /*
+                * We've always given 8-aligned data,
+                * so convert bits to integral bytes.
+                */
+               rval.consumed += 7;
+               rval.consumed >>= 3;
+       } else if(rval.code == RC_OK) {
+               if(size) {
+                       if(((const uint8_t *)buffer)[0] == 0) {
+                               rval.consumed = 1;      /* 1 byte */
+                       } else {
+                               ASN_DEBUG("Expecting single zeroed byte");
+                               rval.code = RC_FAIL;
+                       }
+               } else {
+                       /* Must contain at least 8 bits. */
+                       rval.code = RC_WMORE;
+               }
+       }
+
+       return rval;
+}
+
+asn_dec_rval_t
+aper_decode(const asn_codec_ctx_t *opt_codec_ctx,
+            const asn_TYPE_descriptor_t *td, void **sptr, const void *buffer,
+            size_t size, int skip_bits, int unused_bits) {
+       asn_codec_ctx_t s_codec_ctx;
+       asn_dec_rval_t rval;
+       asn_per_data_t pd;
+
+       if(skip_bits < 0 || skip_bits > 7
+               || unused_bits < 0 || unused_bits > 7
+               || (unused_bits > 0 && !size))
+               ASN__DECODE_FAILED;
+
+       /*
+        * Stack checker requires that the codec context
+        * must be allocated on the stack.
+        */
+       if(opt_codec_ctx) {
+               if(opt_codec_ctx->max_stack_size) {
+                       s_codec_ctx = *opt_codec_ctx;
+                       opt_codec_ctx = &s_codec_ctx;
+               }
+       } else {
+               /* If context is not given, be security-conscious anyway */
+               memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+               s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+               opt_codec_ctx = &s_codec_ctx;
+       }
+
+       /* Fill in the position indicator */
+       memset(&pd, 0, sizeof(pd));
+       pd.buffer = (const uint8_t *)buffer;
+       pd.nboff = skip_bits;
+       pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from <limits.h> */
+       if(pd.nboff > pd.nbits)
+               ASN__DECODE_FAILED;
+
+       /*
+        * Invoke type-specific decoder.
+        */
+       if(!td->op->aper_decoder)
+               ASN__DECODE_FAILED;     /* PER is not compiled in */
+               rval = td->op->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd);
+       if(rval.code == RC_OK) {
+               /* Return the number of consumed bits */
+               rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3)
+               + pd.nboff - skip_bits;
+               ASN_DEBUG("PER decoding consumed %zu, counted %zu",
+                                 rval.consumed, pd.moved);
+               assert(rval.consumed == pd.moved);
+       } else {
+               /* PER codec is not a restartable */
+               rval.consumed = 0;
+       }
+       return rval;
+}
+
diff --git a/skeletons/per_decoder.h b/skeletons/per_decoder.h
new file mode 100644 (file)
index 0000000..eea474a
--- /dev/null
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _PER_DECODER_H_
+#define        _PER_DECODER_H_
+
+#include <asn_application.h>
+#include <per_support.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * Unaligned PER decoder of a "complete encoding" as per X.691 (08/2015) #11.1.
+ * On success, this call always returns (.consumed >= 1), as per #11.1.3.
+ */
+asn_dec_rval_t uper_decode_complete(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of data buffer */
+);
+
+/*
+ * Unaligned PER decoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This call returns the number of BITS read from the stream. Beware.
+ */
+asn_dec_rval_t uper_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size,        /* Size of the input data buffer, in bytes */
+    int skip_bits,      /* Number of unused leading bits, 0..7 */
+    int unused_bits     /* Number of unused tailing bits, 0..7 */
+);
+
+/*
+ * Aligned PER decoder of a "complete encoding" as per X.691#10.1.
+ * On success, this call always returns (.consumed >= 1), in BITS, as per X.691#10.1.3.
+ */
+asn_dec_rval_t aper_decode_complete(
+       const struct asn_codec_ctx_s *opt_codec_ctx,
+       const struct asn_TYPE_descriptor_s *type_descriptor,    /* Type to decode */
+       void **struct_ptr,      /* Pointer to a target structure's pointer */
+       const void *buffer,     /* Data to be decoded */
+       size_t size             /* Size of data buffer */
+                                                                       );
+
+/*
+ * Aligned PER decoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This call returns the number of BITS read from the stream. Beware.
+ */
+asn_dec_rval_t aper_decode(
+      const struct asn_codec_ctx_s *opt_codec_ctx,
+      const struct asn_TYPE_descriptor_s *type_descriptor,     /* Type to decode */
+      void **struct_ptr,       /* Pointer to a target structure's pointer */
+      const void *buffer,      /* Data to be decoded */
+      size_t size,             /* Size of data buffer */
+      int skip_bits,           /* Number of unused leading bits, 0..7 */
+      int unused_bits          /* Number of unused tailing bits, 0..7 */
+      );
+
+/*
+ * Type of the type-specific PER decoder function.
+ */
+typedef asn_dec_rval_t(per_type_decoder_f)(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints, void **struct_ptr,
+    asn_per_data_t *per_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PER_DECODER_H_ */
diff --git a/skeletons/per_encoder.c b/skeletons/per_encoder.c
new file mode 100644 (file)
index 0000000..a35e1f0
--- /dev/null
@@ -0,0 +1,265 @@
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <per_encoder.h>
+
+static int _uper_encode_flush_outp(asn_per_outp_t *po);
+
+static int
+ignore_output(const void *data, size_t size, void *app_key) {
+    (void)data;
+    (void)size;
+    (void)app_key;
+    return 0;
+}
+
+asn_enc_rval_t
+uper_encode(const asn_TYPE_descriptor_t *td,
+            const asn_per_constraints_t *constraints, const void *sptr,
+            asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_per_outp_t po;
+    asn_enc_rval_t er = {0,0,0};
+
+    /*
+     * Invoke type-specific encoder.
+     */
+    if(!td || !td->op->uper_encoder)
+        ASN__ENCODE_FAILED;    /* PER is not compiled in */
+
+    po.buffer = po.tmpspace;
+    po.nboff = 0;
+    po.nbits = 8 * sizeof(po.tmpspace);
+    po.output = cb ? cb : ignore_output;
+    po.op_key = app_key;
+    po.flushed_bytes = 0;
+
+    er = td->op->uper_encoder(td, constraints, sptr, &po);
+    if(er.encoded != -1) {
+        size_t bits_to_flush;
+
+        bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff;
+
+        /* Set number of bits encoded to a firm value */
+        er.encoded = (po.flushed_bytes << 3) + bits_to_flush;
+
+        if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED;
+    }
+
+    return er;
+}
+
+/*
+ * Argument type and callback necessary for uper_encode_to_buffer().
+ */
+typedef struct enc_to_buf_arg {
+       void *buffer;
+       size_t left;
+} enc_to_buf_arg;
+static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) {
+       enc_to_buf_arg *arg = (enc_to_buf_arg *)key;
+
+       if(arg->left < size)
+               return -1;      /* Data exceeds the available buffer size */
+
+       memcpy(arg->buffer, buffer, size);
+       arg->buffer = ((char *)arg->buffer) + size;
+       arg->left -= size;
+
+       return 0;
+}
+
+asn_enc_rval_t
+uper_encode_to_buffer(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg key;
+
+    key.buffer = buffer;
+    key.left = buffer_size;
+
+    if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name);
+
+    return uper_encode(td, constraints, sptr, encode_to_buffer_cb, &key);
+}
+
+typedef struct enc_dyn_arg {
+       void *buffer;
+       size_t length;
+       size_t allocated;
+} enc_dyn_arg;
+static int
+encode_dyn_cb(const void *buffer, size_t size, void *key) {
+    enc_dyn_arg *arg = key;
+    if(arg->length + size >= arg->allocated) {
+        size_t new_size = arg->allocated ? arg->allocated : 8;
+        void *p;
+
+        do {
+            new_size <<= 2;
+        } while(arg->length + size >= new_size);
+
+        p = REALLOC(arg->buffer, new_size);
+        if(!p) {
+            FREEMEM(arg->buffer);
+            memset(arg, 0, sizeof(*arg));
+            return -1;
+        }
+        arg->buffer = p;
+        arg->allocated = new_size;
+    }
+    memcpy(((char *)arg->buffer) + arg->length, buffer, size);
+    arg->length += size;
+    return 0;
+}
+ssize_t
+uper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, void **buffer_r) {
+    asn_enc_rval_t er = {0,0,0};
+       enc_dyn_arg key;
+
+       memset(&key, 0, sizeof(key));
+
+       er = uper_encode(td, constraints, sptr, encode_dyn_cb, &key);
+       switch(er.encoded) {
+       case -1:
+               FREEMEM(key.buffer);
+               return -1;
+       case 0:
+               FREEMEM(key.buffer);
+               key.buffer = MALLOC(1);
+               if(key.buffer) {
+                       *(char *)key.buffer = '\0';
+                       *buffer_r = key.buffer;
+                       return 1;
+               } else {
+                       return -1;
+               }
+       default:
+               *buffer_r = key.buffer;
+               ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+               return ((er.encoded + 7) >> 3);
+       }
+}
+
+/*
+ * Internally useful functions.
+ */
+
+/* Flush partially filled buffer */
+static int
+_uper_encode_flush_outp(asn_per_outp_t *po) {
+       uint8_t *buf;
+
+       if(po->nboff == 0 && po->buffer == po->tmpspace)
+               return 0;
+
+       buf = po->buffer + (po->nboff >> 3);
+       /* Make sure we account for the last, partially filled */
+       if(po->nboff & 0x07) {
+               buf[0] &= 0xff << (8 - (po->nboff & 0x07));
+               buf++;
+       }
+
+       return po->output(po->tmpspace, buf - po->tmpspace, po->op_key);
+}
+
+asn_enc_rval_t
+aper_encode_to_buffer(const asn_TYPE_descriptor_t *td,
+                      const asn_per_constraints_t *constraints,
+                      const void *sptr, void *buffer, size_t buffer_size) {
+    enc_to_buf_arg key;
+
+    key.buffer = buffer;
+    key.left = buffer_size;
+
+    if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name);
+
+    return aper_encode(td, constraints, sptr, encode_to_buffer_cb, &key);
+}
+
+ssize_t
+aper_encode_to_new_buffer(const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints,
+                          const void *sptr, void **buffer_r) {
+    asn_enc_rval_t er = {0,0,0};
+       enc_dyn_arg key;
+
+       memset(&key, 0, sizeof(key));
+
+       er = aper_encode(td, constraints, sptr, encode_dyn_cb, &key);
+       switch(er.encoded) {
+       case -1:
+               FREEMEM(key.buffer);
+               return -1;
+       case 0:
+               FREEMEM(key.buffer);
+               key.buffer = MALLOC(1);
+               if(key.buffer) {
+                       *(char *)key.buffer = '\0';
+                       *buffer_r = key.buffer;
+                       return 1;
+               } else {
+                       return -1;
+               }
+       default:
+               *buffer_r = key.buffer;
+               ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded);
+               return ((er.encoded + 7) >> 3);
+       }
+}
+
+static int
+_aper_encode_flush_outp(asn_per_outp_t *po) {
+       uint8_t *buf;
+
+       if(po->nboff == 0 && po->buffer == po->tmpspace)
+               return 0;
+
+       buf = po->buffer + (po->nboff >> 3);
+       /* Make sure we account for the last, partially filled */
+       if(po->nboff & 0x07) {
+               buf[0] &= 0xff << (8 - (po->nboff & 0x07));
+               buf++;
+       }
+
+       if (po->output) {
+               return po->output(po->tmpspace, buf - po->tmpspace, po->op_key);
+       }
+       return 0;
+}
+
+asn_enc_rval_t
+aper_encode(const asn_TYPE_descriptor_t *td,
+        const asn_per_constraints_t *constraints,
+        const void *sptr, asn_app_consume_bytes_f *cb, void *app_key) {
+       asn_per_outp_t po;
+       asn_enc_rval_t er = {0,0,0};
+
+       /*
+        * Invoke type-specific encoder.
+        */
+       if(!td || !td->op->aper_encoder)
+               ASN__ENCODE_FAILED;      /* PER is not compiled in */
+
+       po.buffer = po.tmpspace;
+       po.nboff = 0;
+       po.nbits = 8 * sizeof(po.tmpspace);
+       po.output = cb;
+       po.op_key = app_key;
+       po.flushed_bytes = 0;
+
+       er = td->op->aper_encoder(td, constraints, sptr, &po);
+       if(er.encoded != -1) {
+               size_t bits_to_flush;
+
+               bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff;
+
+               /* Set number of bits encoded to a firm value */
+               er.encoded = (po.flushed_bytes << 3) + bits_to_flush;
+
+               if(_aper_encode_flush_outp(&po))
+                       ASN__ENCODE_FAILED;
+       }
+
+       return er;
+}
diff --git a/skeletons/per_encoder.h b/skeletons/per_encoder.h
new file mode 100644 (file)
index 0000000..b615ef0
--- /dev/null
@@ -0,0 +1,93 @@
+/*-
+ * Copyright (c) 2006-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _PER_ENCODER_H_
+#define        _PER_ENCODER_H_
+
+#include <asn_application.h>
+#include <per_support.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * Unaligned PER encoder of any ASN.1 type. May be invoked by the application.
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value. Use the following formula to convert to bytes:
+ *     bytes = ((.encoded + 7) / 8)
+ */
+asn_enc_rval_t uper_encode(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,                    /* Structure to be encoded */
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+asn_enc_rval_t aper_encode(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,                     /* Structure to be encoded */
+    asn_app_consume_bytes_f *consume_bytes_cb,  /* Data collector */
+    void *app_key                               /* Arbitrary callback argument */
+);
+
+/*
+ * A variant of uper_encode() which encodes data into the existing buffer
+ * WARNING: This function returns the number of encoded bits in the .encoded
+ * field of the return value.
+ */
+asn_enc_rval_t uper_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr, /* Structure to be encoded */
+    void *buffer,           /* Pre-allocated buffer */
+    size_t buffer_size      /* Initial buffer size (max) */
+);
+
+asn_enc_rval_t aper_encode_to_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr,  /* Structure to be encoded */
+    void *buffer,            /* Pre-allocated buffer */
+    size_t buffer_size       /* Initial buffer size (max) */
+);
+/*
+ * A variant of uper_encode_to_buffer() which allocates buffer itself.
+ * Returns the number of bytes in the buffer or -1 in case of failure.
+ * WARNING: This function produces a "Production of the complete encoding",
+ * with length of at least one octet. Contrast this to precise bit-packing
+ * encoding of uper_encode() and uper_encode_to_buffer().
+ */
+ssize_t uper_encode_to_new_buffer(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints,
+    const void *struct_ptr, /* Structure to be encoded */
+    void **buffer_r         /* Buffer allocated and returned */
+);
+
+ssize_t
+aper_encode_to_new_buffer(
+    const struct asn_TYPE_descriptor_s *td,
+    const asn_per_constraints_t *constraints,
+    const void *sptr,
+    void **buffer_r
+);
+
+/*
+ * Type of the generic PER encoder function.
+ */
+typedef asn_enc_rval_t(per_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const asn_per_constraints_t *constraints, const void *struct_ptr,
+    asn_per_outp_t *per_output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PER_ENCODER_H_ */
diff --git a/skeletons/per_opentype.c b/skeletons/per_opentype.c
new file mode 100644 (file)
index 0000000..28f3cb6
--- /dev/null
@@ -0,0 +1,533 @@
+/*
+ * Copyright (c) 2007 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <per_support.h>
+#include <constr_TYPE.h>
+#include <per_opentype.h>
+
+typedef struct uper_ugot_key {
+       asn_per_data_t oldpd;   /* Old per data source */
+       size_t unclaimed;
+       size_t ot_moved;        /* Number of bits moved by OT processing */
+       int repeat;
+} uper_ugot_key;
+
+static int uper_ugot_refill(asn_per_data_t *pd);
+static int per_skip_bits(asn_per_data_t *pd, int skip_nbits);
+static asn_dec_rval_t uper_sot_suck(const asn_codec_ctx_t *,
+                                    const asn_TYPE_descriptor_t *td,
+                                    const asn_per_constraints_t *constraints,
+                                    void **sptr, asn_per_data_t *pd);
+
+/*
+ * Encode an "open type field".
+ * #10.1, #10.2
+ */
+int
+uper_open_type_put(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, const void *sptr,
+                   asn_per_outp_t *po) {
+    void *buf;
+    void *bptr;
+    ssize_t size;
+
+    ASN_DEBUG("Open type put %s ...", td->name);
+
+    size = uper_encode_to_new_buffer(td, constraints, sptr, &buf);
+    if(size <= 0) return -1;
+
+    ASN_DEBUG("Open type put %s of length %" ASN_PRI_SSIZE " + overhead (1byte?)", td->name,
+              size);
+
+    bptr = buf;
+    do {
+        int need_eom = 0;
+        ssize_t may_save = uper_put_length(po, size, &need_eom);
+        ASN_DEBUG("Prepending length %" ASN_PRI_SSIZE
+                  " to %s and allowing to save %" ASN_PRI_SSIZE,
+                  size, td->name, may_save);
+        if(may_save < 0) break;
+        if(per_put_many_bits(po, bptr, may_save * 8)) break;
+        bptr = (char *)bptr + may_save;
+        size -= may_save;
+        if(need_eom && uper_put_length(po, 0, 0)) {
+            FREEMEM(buf);
+            return -1;
+        }
+    } while(size);
+
+    FREEMEM(buf);
+    if(size) return -1;
+
+    return 0;
+}
+
+static asn_dec_rval_t
+uper_open_type_get_simple(const asn_codec_ctx_t *ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr,
+                          asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+       ssize_t chunk_bytes;
+       int repeat;
+       uint8_t *buf = 0;
+       size_t bufLen = 0;
+       size_t bufSize = 0;
+       asn_per_data_t spd;
+       size_t padding;
+
+       ASN__STACK_OVERFLOW_CHECK(ctx);
+
+       ASN_DEBUG("Getting open type %s...", td->name);
+
+       do {
+               chunk_bytes = uper_get_length(pd, -1, 0, &repeat);
+               if(chunk_bytes < 0) {
+                       FREEMEM(buf);
+                       ASN__DECODE_STARVED;
+               }
+               if(bufLen + chunk_bytes > bufSize) {
+                       void *ptr;
+                       bufSize = chunk_bytes + (bufSize << 2);
+                       ptr = REALLOC(buf, bufSize);
+                       if(!ptr) {
+                               FREEMEM(buf);
+                               ASN__DECODE_FAILED;
+                       }
+                       buf = ptr;
+               }
+               if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) {
+                       FREEMEM(buf);
+                       ASN__DECODE_STARVED;
+               }
+               bufLen += chunk_bytes;
+       } while(repeat);
+
+       ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name,
+               (long)bufLen);
+
+       memset(&spd, 0, sizeof(spd));
+       spd.buffer = buf;
+       spd.nbits = bufLen << 3;
+
+       ASN_DEBUG_INDENT_ADD(+4);
+       rv = td->op->uper_decoder(ctx, td, constraints, sptr, &spd);
+       ASN_DEBUG_INDENT_ADD(-4);
+
+       if(rv.code == RC_OK) {
+               /* Check padding validity */
+               padding = spd.nbits - spd.nboff;
+                if (((padding > 0 && padding < 8) ||
+               /* X.691#10.1.3 */
+               (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) &&
+                    per_get_few_bits(&spd, padding) == 0) {
+                       /* Everything is cool */
+                       FREEMEM(buf);
+                       return rv;
+               }
+               FREEMEM(buf);
+               if(padding >= 8) {
+                       ASN_DEBUG("Too large padding %d in open type", (int)padding);
+                       ASN__DECODE_FAILED;
+               } else {
+                       ASN_DEBUG("No padding");
+               }
+       } else {
+               FREEMEM(buf);
+               /* rv.code could be RC_WMORE, nonsense in this context */
+               rv.code = RC_FAIL; /* Noone would give us more */
+       }
+
+       return rv;
+}
+
+static asn_dec_rval_t CC_NOTUSED
+uper_open_type_get_complex(const asn_codec_ctx_t *ctx,
+                           const asn_TYPE_descriptor_t *td,
+                           asn_per_constraints_t *constraints, void **sptr,
+                           asn_per_data_t *pd) {
+    uper_ugot_key arg;
+       asn_dec_rval_t rv;
+       ssize_t padding;
+
+       ASN__STACK_OVERFLOW_CHECK(ctx);
+
+       ASN_DEBUG("Getting open type %s from %s", td->name,
+               asn_bit_data_string(pd));
+       arg.oldpd = *pd;
+       arg.unclaimed = 0;
+       arg.ot_moved = 0;
+       arg.repeat = 1;
+       pd->refill = uper_ugot_refill;
+       pd->refill_key = &arg;
+       pd->nbits = pd->nboff;  /* 0 good bits at this point, will refill */
+       pd->moved = 0;  /* This now counts the open type size in bits */
+
+       ASN_DEBUG_INDENT_ADD(+4);
+       rv = td->op->uper_decoder(ctx, td, constraints, sptr, pd);
+       ASN_DEBUG_INDENT_ADD(-4);
+
+#define        UPDRESTOREPD    do {                                            \
+       /* buffer and nboff are valid, preserve them. */                \
+       pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved);       \
+       pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved);       \
+       pd->refill = arg.oldpd.refill;                                  \
+       pd->refill_key = arg.oldpd.refill_key;                          \
+  } while(0)
+
+       if(rv.code != RC_OK) {
+               UPDRESTOREPD;
+               return rv;
+       }
+
+       ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name,
+               asn_bit_data_string(pd),
+               asn_bit_data_string(&arg.oldpd),
+               (int)arg.unclaimed, (int)arg.repeat);
+
+       padding = pd->moved % 8;
+       if(padding) {
+               int32_t pvalue;
+               if(padding > 7) {
+                       ASN_DEBUG("Too large padding %d in open type",
+                               (int)padding);
+                       rv.code = RC_FAIL;
+                       UPDRESTOREPD;
+                       return rv;
+               }
+               padding = 8 - padding;
+               ASN_DEBUG("Getting padding of %d bits", (int)padding);
+               pvalue = per_get_few_bits(pd, padding);
+               switch(pvalue) {
+               case -1:
+                       ASN_DEBUG("Padding skip failed");
+                       UPDRESTOREPD;
+                       ASN__DECODE_STARVED;
+               case 0: break;
+               default:
+                       ASN_DEBUG("Non-blank padding (%d bits 0x%02x)",
+                               (int)padding, (int)pvalue);
+                       UPDRESTOREPD;
+                       ASN__DECODE_FAILED;
+               }
+       }
+       if(pd->nboff != pd->nbits) {
+               ASN_DEBUG("Open type %s overhead pd%s old%s", td->name,
+                       asn_bit_data_string(pd), asn_bit_data_string(&arg.oldpd));
+               if(1) {
+                       UPDRESTOREPD;
+                       ASN__DECODE_FAILED;
+               } else {
+                       arg.unclaimed += pd->nbits - pd->nboff;
+               }
+       }
+
+       /* Adjust pd back so it points to original data */
+       UPDRESTOREPD;
+
+       /* Skip data not consumed by the decoder */
+       if(arg.unclaimed) {
+               ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed);
+               switch(per_skip_bits(pd, arg.unclaimed)) {
+               case -1:
+                       ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed);
+                       ASN__DECODE_STARVED;
+               case 0:
+                       ASN_DEBUG("Got claim of %d", (int)arg.unclaimed);
+                       break;
+               default:
+                       /* Padding must be blank */
+                       ASN_DEBUG("Non-blank unconsumed padding");
+                       ASN__DECODE_FAILED;
+               }
+               arg.unclaimed = 0;
+       }
+
+       if(arg.repeat) {
+               ASN_DEBUG("Not consumed the whole thing");
+               rv.code = RC_FAIL;
+               return rv;
+       }
+
+       return rv;
+}
+
+
+asn_dec_rval_t
+uper_open_type_get(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    return uper_open_type_get_simple(ctx, td, constraints, sptr, pd);
+}
+
+int
+uper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) {
+       asn_TYPE_descriptor_t s_td;
+    asn_TYPE_operation_t s_op;
+       asn_dec_rval_t rv;
+
+       s_td.name = "<unknown extension>";
+       s_td.op = &s_op;
+    s_op.uper_decoder = uper_sot_suck;
+
+       rv = uper_open_type_get(ctx, &s_td, 0, 0, pd);
+       if(rv.code != RC_OK)
+               return -1;
+       else
+               return 0;
+}
+
+/*
+ * Internal functions.
+ */
+
+static asn_dec_rval_t
+uper_sot_suck(const asn_codec_ctx_t *ctx, const asn_TYPE_descriptor_t *td,
+              const asn_per_constraints_t *constraints, void **sptr,
+              asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
+
+       (void)ctx;
+       (void)td;
+       (void)constraints;
+       (void)sptr;
+
+       while(per_get_few_bits(pd, 1) >= 0);
+
+       rv.code = RC_OK;
+       rv.consumed = pd->moved;
+
+       return rv;
+}
+
+static int
+uper_ugot_refill(asn_per_data_t *pd) {
+       uper_ugot_key *arg = pd->refill_key;
+       ssize_t next_chunk_bytes, next_chunk_bits;
+       ssize_t avail;
+
+       asn_per_data_t *oldpd = &arg->oldpd;
+
+       ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld",
+               (long)pd->moved, (long)oldpd->moved);
+
+       /* Advance our position to where pd is */
+       oldpd->buffer = pd->buffer;
+       oldpd->nboff  = pd->nboff;
+       oldpd->nbits -= pd->moved - arg->ot_moved;
+       oldpd->moved += pd->moved - arg->ot_moved;
+       arg->ot_moved = pd->moved;
+
+       if(arg->unclaimed) {
+               /* Refill the container */
+               if(per_get_few_bits(oldpd, 1))
+                       return -1;
+               if(oldpd->nboff == 0) {
+                       assert(0);
+                       return -1;
+               }
+               pd->buffer = oldpd->buffer;
+               pd->nboff = oldpd->nboff - 1;
+               pd->nbits = oldpd->nbits;
+               ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)",
+                       (long)pd->moved);
+               return 0;
+       }
+
+       if(!arg->repeat) {
+               ASN_DEBUG("Want more but refill doesn't have it");
+               return -1;
+       }
+
+       next_chunk_bytes = uper_get_length(oldpd, -1, 0, &arg->repeat);
+       ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld",
+               (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat);
+       if(next_chunk_bytes < 0) return -1;
+       if(next_chunk_bytes == 0) {
+               pd->refill = 0; /* No more refills, naturally */
+               assert(!arg->repeat);   /* Implementation guarantee */
+       }
+       next_chunk_bits = next_chunk_bytes << 3;
+       avail = oldpd->nbits - oldpd->nboff;
+       if(avail >= next_chunk_bits) {
+               pd->nbits = oldpd->nboff + next_chunk_bits;
+               arg->unclaimed = 0;
+               ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)",
+                       (long)next_chunk_bits, (long)oldpd->moved,
+                       (long)oldpd->nboff, (long)oldpd->nbits,
+                       (long)(oldpd->nbits - oldpd->nboff));
+       } else {
+               pd->nbits = oldpd->nbits;
+               arg->unclaimed = next_chunk_bits - avail;
+               ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld",
+                       (long)avail, (long)next_chunk_bits,
+                       (long)arg->unclaimed);
+       }
+       pd->buffer = oldpd->buffer;
+       pd->nboff = oldpd->nboff;
+       ASN_DEBUG("Refilled pd%s old%s",
+               asn_bit_data_string(pd), asn_bit_data_string(oldpd));
+       return 0;
+}
+
+static int
+per_skip_bits(asn_per_data_t *pd, int skip_nbits) {
+       int hasNonZeroBits = 0;
+       while(skip_nbits > 0) {
+               int skip;
+
+               /* per_get_few_bits() is more efficient when nbits <= 24 */
+               if(skip_nbits < 24)
+                       skip = skip_nbits;
+               else
+                       skip = 24;
+               skip_nbits -= skip;
+
+               switch(per_get_few_bits(pd, skip)) {
+               case -1: return -1;     /* Starving */
+               case 0: continue;       /* Skipped empty space */
+               default: hasNonZeroBits = 1; continue;
+               }
+       }
+       return hasNonZeroBits;
+}
+
+static asn_dec_rval_t
+aper_open_type_get_simple(const asn_codec_ctx_t *ctx,
+                          const asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+       asn_dec_rval_t rv;
+       ssize_t chunk_bytes;
+       int repeat;
+       uint8_t *buf = 0;
+       size_t bufLen = 0;
+       size_t bufSize = 0;
+       asn_per_data_t spd;
+       size_t padding;
+
+       ASN__STACK_OVERFLOW_CHECK(ctx);
+
+       ASN_DEBUG("Getting open type %s...", td->name);
+
+       do {
+               chunk_bytes = aper_get_length(pd, -1, -1, &repeat);
+               if(chunk_bytes < 0) {
+                       FREEMEM(buf);
+                       ASN__DECODE_STARVED;
+               }
+               if(bufLen + chunk_bytes > bufSize) {
+                       void *ptr;
+                       bufSize = chunk_bytes + (bufSize << 2);
+                       ptr = REALLOC(buf, bufSize);
+                       if(!ptr) {
+                               FREEMEM(buf);
+                               ASN__DECODE_FAILED;
+                       }
+                       buf = ptr;
+               }
+               if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) {
+                       FREEMEM(buf);
+                       ASN__DECODE_STARVED;
+               }
+               bufLen += chunk_bytes;
+       } while(repeat);
+
+       ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name,
+               (long)bufLen);
+
+       memset(&spd, 0, sizeof(spd));
+       spd.buffer = buf;
+       spd.nbits = bufLen << 3;
+
+       ASN_DEBUG_INDENT_ADD(+4);
+       rv = td->op->aper_decoder(ctx, td, constraints, sptr, &spd);
+       ASN_DEBUG_INDENT_ADD(-4);
+
+       if(rv.code == RC_OK) {
+               /* Check padding validity */
+               padding = spd.nbits - spd.nboff;
+                if (((padding > 0 && padding < 8) ||
+               /* X.691#10.1.3 */
+               (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) &&
+                    per_get_few_bits(&spd, padding) == 0) {
+                       /* Everything is cool */
+                       FREEMEM(buf);
+                       return rv;
+               }
+               FREEMEM(buf);
+               if(padding >= 8) {
+                       ASN_DEBUG("Too large padding %d in open type", (int)padding);
+                       ASN__DECODE_FAILED;
+               } else {
+                       ASN_DEBUG("No padding");
+               }
+       } else {
+               FREEMEM(buf);
+               /* rv.code could be RC_WMORE, nonsense in this context */
+               rv.code = RC_FAIL; /* Noone would give us more */
+       }
+
+       return rv;
+}
+
+int
+aper_open_type_put(const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   const void *sptr, asn_per_outp_t *po) {
+       void *buf;
+       void *bptr;
+       ssize_t size;
+       size_t toGo;
+
+       ASN_DEBUG("Open type put %s ...", td->name);
+
+       size = aper_encode_to_new_buffer(td, constraints, sptr, &buf);
+       if(size <= 0) return -1;
+
+       for(bptr = buf, toGo = size; toGo;) {
+               ssize_t maySave = aper_put_length(po, -1, toGo);
+               if(maySave < 0) break;
+               if(per_put_many_bits(po, bptr, maySave * 8)) break;
+               bptr = (char *)bptr + maySave;
+               toGo -= maySave;
+       }
+
+       FREEMEM(buf);
+       if(toGo) return -1;
+
+       ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)",
+                         td->name, size);
+
+       return 0;
+}
+
+asn_dec_rval_t
+aper_open_type_get(const asn_codec_ctx_t *ctx,
+                   const asn_TYPE_descriptor_t *td,
+                   const asn_per_constraints_t *constraints,
+                   void **sptr, asn_per_data_t *pd) {
+
+       return aper_open_type_get_simple(ctx, td, constraints, sptr, pd);
+}
+
+int
+aper_open_type_skip(const asn_codec_ctx_t *ctx, asn_per_data_t *pd) {
+       asn_TYPE_descriptor_t s_td;
+       asn_dec_rval_t rv;
+       asn_TYPE_operation_t op_t;
+
+       memset(&op_t, 0, sizeof(op_t));
+       s_td.name = "<unknown extension>";
+       s_td.op = &op_t;
+       s_td.op->aper_decoder = uper_sot_suck;
+
+       rv = aper_open_type_get(ctx, &s_td, 0, 0, pd);
+       if(rv.code != RC_OK)
+               return -1;
+       else
+               return 0;
+}
+
+
diff --git a/skeletons/per_opentype.h b/skeletons/per_opentype.h
new file mode 100644 (file)
index 0000000..1493b2d
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2007-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _PER_OPENTYPE_H_
+#define        _PER_OPENTYPE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+asn_dec_rval_t uper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *td,
+                                  const asn_per_constraints_t *constraints,
+                                  void **sptr, asn_per_data_t *pd);
+
+int uper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx,
+                        asn_per_data_t *pd);
+
+/*
+ * X.691 (2015/08), #11.2
+ * Returns -1 if error is encountered. 0 if all OK.
+ */
+int uper_open_type_put(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po);
+
+asn_dec_rval_t aper_open_type_get(const asn_codec_ctx_t *opt_codec_ctx,
+                                  const asn_TYPE_descriptor_t *td,
+                                  const asn_per_constraints_t *constraints,
+                                  void **sptr, asn_per_data_t *pd);
+
+
+int aper_open_type_skip(const asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd);
+
+int aper_open_type_put(const asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints,
+                       const void *sptr, asn_per_outp_t *po);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PER_OPENTYPE_H_ */
diff --git a/skeletons/per_support.c b/skeletons/per_support.c
new file mode 100644 (file)
index 0000000..2285677
--- /dev/null
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <asn_internal.h>
+#include <per_support.h>
+
+/*
+ * X.691-201508 #10.9 General rules for encoding a length determinant.
+ * Get the optionally constrained length "n" from the stream.
+ */
+ssize_t
+uper_get_length(asn_per_data_t *pd, int ebits, size_t lower_bound,
+                int *repeat) {
+    ssize_t value;
+
+    *repeat = 0;
+
+    /* #11.9.4.1 Encoding if constrained (according to effective bits) */
+    if(ebits >= 0 && ebits <= 16) {
+        value = per_get_few_bits(pd, ebits);
+        if(value >= 0) value += lower_bound;
+        return value;
+    }
+
+       value = per_get_few_bits(pd, 8);
+    if((value & 0x80) == 0) { /* #11.9.3.6 */
+        return (value & 0x7F);
+    } else if((value & 0x40) == 0) { /* #11.9.3.7 */
+        /* bit 8 ... set to 1 and bit 7 ... set to zero */
+        value = ((value & 0x3f) << 8) | per_get_few_bits(pd, 8);
+        return value; /* potential -1 from per_get_few_bits passes through. */
+    } else if(value < 0) {
+        ASN_DEBUG("END of stream reached for PER");
+        return -1;
+    }
+    value &= 0x3f; /* this is "m" from X.691, #11.9.3.8 */
+    if(value < 1 || value > 4) {
+        return -1; /* Prohibited by #11.9.3.8 */
+    }
+    *repeat = 1;
+    return (16384 * value);
+}
+
+/*
+ * Get the normally small length "n".
+ * This procedure used to decode length of extensions bit-maps
+ * for SET and SEQUENCE types.
+ */
+ssize_t
+uper_get_nslength(asn_per_data_t *pd) {
+       ssize_t length;
+
+       ASN_DEBUG("Getting normally small length");
+
+       if(per_get_few_bits(pd, 1) == 0) {
+               length = per_get_few_bits(pd, 6) + 1;
+               if(length <= 0) return -1;
+               ASN_DEBUG("l=%d", (int)length);
+               return length;
+       } else {
+               int repeat;
+               length = uper_get_length(pd, -1, 0, &repeat);
+               if(length >= 0 && !repeat) return length;
+               return -1; /* Error, or do not support >16K extensions */
+       }
+}
+
+/*
+ * Get the normally small non-negative whole number.
+ * X.691, #10.6
+ */
+ssize_t
+uper_get_nsnnwn(asn_per_data_t *pd) {
+       ssize_t value;
+
+       value = per_get_few_bits(pd, 7);
+       if(value & 64) {        /* implicit (value < 0) */
+               value &= 63;
+               value <<= 2;
+               value |= per_get_few_bits(pd, 2);
+               if(value & 128) /* implicit (value < 0) */
+                       return -1;
+               if(value == 0)
+                       return 0;
+               if(value >= 3)
+                       return -1;
+               value = per_get_few_bits(pd, 8 * value);
+               return value;
+       }
+
+       return value;
+}
+
+/*
+ * X.691-11/2008, #11.6
+ * Encoding of a normally small non-negative whole number
+ */
+int
+uper_put_nsnnwn(asn_per_outp_t *po, int n) {
+       int bytes;
+
+       if(n <= 63) {
+               if(n < 0) return -1;
+               return per_put_few_bits(po, n, 7);
+       }
+       if(n < 256)
+               bytes = 1;
+       else if(n < 65536)
+               bytes = 2;
+       else if(n < 256 * 65536)
+               bytes = 3;
+       else
+               return -1;      /* This is not a "normally small" value */
+       if(per_put_few_bits(po, bytes, 8))
+               return -1;
+
+       return per_put_few_bits(po, n, 8 * bytes);
+}
+
+
+/* X.691-2008/11, #11.5.6 -> #11.3 */
+int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) {
+       unsigned long lhalf;    /* Lower half of the number*/
+       long half;
+
+       if(nbits <= 31) {
+               half = per_get_few_bits(pd, nbits);
+               if(half < 0) return -1;
+               *out_value = half;
+               return 0;
+       }
+
+       if((size_t)nbits > 8 * sizeof(*out_value))
+               return -1;  /* RANGE */
+
+       half = per_get_few_bits(pd, 31);
+       if(half < 0) return -1;
+
+       if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31))
+               return -1;
+
+       *out_value = ((unsigned long)half << (nbits - 31)) | lhalf;
+       return 0;
+}
+
+
+/* X.691-2008/11, #11.5.6 -> #11.3 */
+int
+uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v,
+                                    int nbits) {
+    if(nbits <= 31) {
+        return per_put_few_bits(po, v, nbits);
+    } else {
+        /* Put higher portion first, followed by lower 31-bit */
+        if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31))
+            return -1;
+        return per_put_few_bits(po, v, 31);
+    }
+}
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Put the length "n" (or part of it) into the stream.
+ */
+ssize_t
+uper_put_length(asn_per_outp_t *po, size_t length, int *need_eom) {
+    int dummy = 0;
+    if(!need_eom) need_eom = &dummy;
+
+    if(length <= 127) {        /* #11.9.3.6 */
+        *need_eom = 0;
+        return per_put_few_bits(po, length, 8)
+            ? -1 : (ssize_t)length;
+    } else if(length < 16384) { /* #10.9.3.7 */
+        *need_eom = 0;
+        return per_put_few_bits(po, length|0x8000, 16)
+            ? -1 : (ssize_t)length;
+    }
+
+    *need_eom = 0 == (length & 16383);
+    length >>= 14;
+    if(length > 4) {
+        *need_eom = 0;
+        length = 4;
+    }
+
+    return per_put_few_bits(po, 0xC0 | length, 8)
+            ? -1 : (ssize_t)(length << 14);
+
+}
+
+
+/*
+ * Put the normally small length "n" into the stream.
+ * This procedure used to encode length of extensions bit-maps
+ * for SET and SEQUENCE types.
+ */
+int
+uper_put_nslength(asn_per_outp_t *po, size_t length) {
+    if(length <= 64) {
+        /* #11.9.3.4 */
+        if(length == 0) return -1;
+        return per_put_few_bits(po, length - 1, 7) ? -1 : 0;
+    } else {
+        int need_eom = 0;
+        if(uper_put_length(po, length, &need_eom) != (ssize_t)length
+           || need_eom) {
+            /* This might happen in case of >16K extensions */
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+static int
+per__long_range(long lb, long ub, unsigned long *range_r) {
+    unsigned long bounds_range;
+    if((ub < 0) == (lb < 0)) {
+        bounds_range = ub - lb;
+    } else if(lb < 0) {
+        assert(ub >= 0);
+        bounds_range = 1 + ((unsigned long)ub + (unsigned long)-(lb + 1));
+    } else {
+        assert(!"Unreachable");
+        return -1;
+    }
+    *range_r = bounds_range;
+    return 0;
+}
+
+int
+per_long_range_rebase(long v, long lb, long ub, unsigned long *output) {
+    unsigned long range;
+
+    assert(lb <= ub);
+
+    if(v < lb || v > ub || per__long_range(lb, ub, &range) < 0) {
+        /* Range error. */
+        return -1;
+    }
+
+    /*
+     * Fundamentally what we're doing is returning (v-lb).
+     * However, this triggers undefined behavior when the word width
+     * of signed (v) is the same as the size of unsigned (*output).
+     * In practice, it triggers the UndefinedSanitizer. Therefore we shall
+     * compute the ranges accurately to avoid C's undefined behavior.
+     */
+    if((v < 0) == (lb < 0)) {
+        *output = v-lb;
+        return 0;
+    } else if(v < 0) {
+        unsigned long rebased = 1 + (unsigned long)-(v+1) + (unsigned long)lb;
+        assert(rebased <= range);   /* By construction */
+        *output = rebased;
+        return 0;
+    } else if(lb < 0) {
+        unsigned long rebased = 1 + (unsigned long)-(lb+1) + (unsigned long)v;
+        assert(rebased <= range);   /* By construction */
+        *output = rebased;
+        return 0;
+    } else {
+        assert(!"Unreachable");
+        return -1;
+    }
+}
+
+int
+per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp) {
+    unsigned long range;
+
+    if(per__long_range(lb, ub, &range) != 0) {
+        return -1;
+    }
+
+    if(inp > range) {
+        /*
+         * We can encode something in the given number of bits that technically
+         * exceeds the range. This is an avenue for security errors,
+         * so we don't allow that.
+         */
+        return -1;
+    }
+
+    if(inp <= LONG_MAX) {
+        *outp = (long)inp + lb;
+    } else {
+        *outp = (lb + LONG_MAX + 1) + (long)((inp - LONG_MAX) - 1);
+    }
+
+    return 0;
+}
+
+int32_t
+aper_get_align(asn_per_data_t *pd) {
+
+       if(pd->nboff & 0x7) {
+               ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)pd->nboff & 0x7));
+               return per_get_few_bits(pd, 8 - (pd->nboff & 0x7));
+       }
+       return 0;
+}
+
+ssize_t
+aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) {
+       ssize_t value;
+
+       *repeat = 0;
+
+       if (range <= 65536 && range >= 0)
+               return aper_get_nsnnwn(pd, range);
+
+       if (aper_get_align(pd) < 0)
+               return -1;
+
+       if(ebits >= 0) return per_get_few_bits(pd, ebits);
+
+       value = per_get_few_bits(pd, 8);
+       if(value < 0) return -1;
+       if((value & 128) == 0)  /* #10.9.3.6 */
+               return (value & 0x7F);
+       if((value & 64) == 0) { /* #10.9.3.7 */
+               value = ((value & 63) << 8) | per_get_few_bits(pd, 8);
+               if(value < 0) return -1;
+               return value;
+       }
+       value &= 63;    /* this is "m" from X.691, #10.9.3.8 */
+       if(value < 1 || value > 4)
+               return -1;
+       *repeat = 1;
+       return (16384 * value);
+}
+
+ssize_t
+aper_get_nslength(asn_per_data_t *pd) {
+       ssize_t length;
+
+       ASN_DEBUG("Getting normally small length");
+
+       if(per_get_few_bits(pd, 1) == 0) {
+               length = per_get_few_bits(pd, 6) + 1;
+               if(length <= 0) return -1;
+               ASN_DEBUG("l=%ld", length);
+               return length;
+       } else {
+               int repeat;
+               length = aper_get_length(pd, -1, -1, &repeat);
+               if(length >= 0 && !repeat) return length;
+               return -1; /* Error, or do not support >16K extensions */
+       }
+}
+
+ssize_t
+aper_get_nsnnwn(asn_per_data_t *pd, int range) {
+       ssize_t value;
+       int bytes = 0;
+
+       ASN_DEBUG("getting nsnnwn with range %d", range);
+
+       if(range <= 255) {
+               int i;
+
+               if (range < 0) return -1;
+               /* 1 -> 8 bits */
+               for (i = 1; i <= 8; i++) {
+                       int upper = 1 << i;
+                       if (upper >= range)
+                               break;
+               }
+               value = per_get_few_bits(pd, i);
+               return value;
+       } else if (range == 256){
+               /* 1 byte */
+               bytes = 1;
+       } else if (range <= 65536) {
+               /* 2 bytes */
+               bytes = 2;
+       } else {
+               return -1;
+       }
+       if (aper_get_align(pd) < 0)
+               return -1;
+       value = per_get_few_bits(pd, 8 * bytes);
+       return value;
+}
+
+int aper_put_align(asn_per_outp_t *po) {
+
+       if(po->nboff & 0x7) {
+               ASN_DEBUG("Aligning %ld bits", 8 - ((unsigned long)po->nboff & 0x7));
+               if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7))))
+                       return -1;
+       }
+       return 0;
+}
+
+ssize_t
+aper_put_length(asn_per_outp_t *po, int range, size_t length) {
+
+       ASN_DEBUG("APER put length %zu with range %d", length, range);
+
+       /* 10.9 X.691 Note 2 */
+       if (range <= 65536 && range >= 0)
+               return aper_put_nsnnwn(po, range, length);
+
+       if (aper_put_align(po) < 0)
+               return -1;
+
+       if(length <= 127)          /* #10.9.3.6 */{
+               return per_put_few_bits(po, length, 8)
+               ? -1 : (ssize_t)length;
+       }
+       else if(length < 16384) /* #10.9.3.7 */
+               return per_put_few_bits(po, length|0x8000, 16)
+               ? -1 : (ssize_t)length;
+
+       length >>= 14;
+       if(length > 4) length = 4;
+
+       return per_put_few_bits(po, 0xC0 | length, 8)
+       ? -1 : (ssize_t)(length << 14);
+}
+
+
+int
+aper_put_nslength(asn_per_outp_t *po, size_t length) {
+
+       if(length <= 64) {
+               /* #10.9.3.4 */
+               if(length == 0) return -1;
+               return per_put_few_bits(po, length-1, 7) ? -1 : 0;
+       } else {
+               if(aper_put_length(po, -1, length) != (ssize_t)length) {
+                       /* This might happen in case of >16K extensions */
+                       return -1;
+               }
+       }
+
+       return 0;
+}
+
+int
+aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) {
+       int bytes;
+
+    ASN_DEBUG("aper put nsnnwn %d with range %d", number, range);
+       /* 10.5.7.1 X.691 */
+       if(range < 0) {
+               int i;
+               for (i = 1; ; i++) {
+                       int bits = 1 << (8 * i);
+                       if (number <= bits)
+                               break;
+               }
+               bytes = i;
+               assert(i <= 4);
+       }
+       if(range <= 255) {
+               int i;
+               for (i = 1; i <= 8; i++) {
+                       int bits = 1 << i;
+                       if (range <= bits)
+                               break;
+               }
+               return per_put_few_bits(po, number, i);
+       } else if(range == 256) {
+               bytes = 1;
+       } else if(range <= 65536) {
+               bytes = 2;
+       } else { /* Ranges > 64K */
+               int i;
+               for (i = 1; ; i++) {
+                       int bits = 1 << (8 * i);
+                       if (range <= bits)
+                               break;
+               }
+               assert(i <= 4);
+               bytes = i;
+       }
+       if(aper_put_align(po) < 0) /* Aligning on octet */
+               return -1;
+/*     if(per_put_few_bits(po, bytes, 8))
+               return -1;
+*/
+    return per_put_few_bits(po, number, 8 * bytes);
+}
diff --git a/skeletons/per_support.h b/skeletons/per_support.h
new file mode 100644 (file)
index 0000000..23079c9
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _PER_SUPPORT_H_
+#define        _PER_SUPPORT_H_
+
+#include <asn_system.h>                /* Platform-specific types */
+#include <asn_bit_data.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Pre-computed PER constraints.
+ */
+typedef struct asn_per_constraint_s {
+       enum asn_per_constraint_flags {
+               APC_UNCONSTRAINED       = 0x0,  /* No PER visible constraints */
+               APC_SEMI_CONSTRAINED    = 0x1,  /* Constrained at "lb" */
+               APC_CONSTRAINED         = 0x2,  /* Fully constrained */
+               APC_EXTENSIBLE          = 0x4   /* May have extension */
+       } flags;
+       int  range_bits;                /* Full number of bits in the range */
+       int  effective_bits;            /* Effective bits */
+       long lower_bound;               /* "lb" value */
+       long upper_bound;               /* "ub" value */
+} asn_per_constraint_t;
+typedef struct asn_per_constraints_s {
+       asn_per_constraint_t value;
+       asn_per_constraint_t size;
+       int (*value2code)(unsigned int value);
+       int (*code2value)(unsigned int code);
+} asn_per_constraints_t;
+
+/* Temporary compatibility layer. Will get removed. */
+typedef struct asn_bit_data_s asn_per_data_t;
+#define per_get_few_bits(data, bits)   asn_get_few_bits(data, bits)
+#define per_get_undo(data, bits)   asn_get_undo(data, bits)
+#define per_get_many_bits(data, dst, align, bits) \
+    asn_get_many_bits(data, dst, align, bits)
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Get the length "n" from the Unaligned PER stream.
+ */
+ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits,
+                        size_t lower_bound, int *repeat);
+
+ssize_t aper_get_length(asn_per_data_t *pd, int range,
+                        int effective_bound_bits, int *repeat);
+
+/*
+ * Get the normally small length "n".
+ */
+ssize_t uper_get_nslength(asn_per_data_t *pd);
+ssize_t aper_get_nslength(asn_per_data_t *pd);
+
+/*
+ * Get the normally small non-negative whole number.
+ */
+ssize_t uper_get_nsnnwn(asn_per_data_t *pd);
+ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range);
+
+/* X.691-2008/11, #11.5.6 */
+int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits);
+
+
+/* Temporary compatibility layer. Will get removed. */
+typedef struct asn_bit_outp_s asn_per_outp_t;
+#define per_put_few_bits(out, bits, obits) asn_put_few_bits(out, bits, obits)
+#define per_put_many_bits(out, src, nbits) asn_put_many_bits(out, src, nbits)
+#define per_put_aligned_flush(out) asn_put_aligned_flush(out)
+
+
+/*
+ * Rebase the given value as an offset into the range specified by the
+ * lower bound (lb) and upper bound (ub).
+ * RETURN VALUES:
+ *  -1: Conversion failed due to range problems.
+ *   0: Conversion was successful.
+ */
+int per_long_range_rebase(long v, long lb, long ub, unsigned long *output);
+/* The inverse operation: restores the value by the offset and its bounds. */
+int per_long_range_unrebase(unsigned long inp, long lb, long ub, long *outp);
+
+/* X.691-2008/11, #11.5 */
+int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits);
+
+/*
+ * X.691 (08/2015) #11.9 "General rules for encoding a length determinant"
+ * Put the length "whole_length" to the Unaligned PER stream.
+ * If (opt_need_eom) is given, it will be set to 1 if final 0-length is needed.
+ * In that case, invoke uper_put_length(po, 0, 0) after encoding the last block.
+ * This function returns the number of units which may be flushed
+ * in the next units saving iteration.
+ */
+ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length,
+                        int *opt_need_eom);
+
+ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length);
+
+/* Align the current bit position to octet bundary */
+int aper_put_align(asn_per_outp_t *po);
+int32_t aper_get_align(asn_per_data_t *pd);
+
+/*
+ * Put the normally small length "n" to the Unaligned PER stream.
+ * Returns 0 or -1.
+ */
+int uper_put_nslength(asn_per_outp_t *po, size_t length);
+
+int aper_put_nslength(asn_per_outp_t *po, size_t length);
+
+/*
+ * Put the normally small non-negative whole number.
+ */
+int uper_put_nsnnwn(asn_per_outp_t *po, int n);
+
+int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PER_SUPPORT_H_ */
diff --git a/skeletons/standard-modules/ASN1-Object-Identifier-Module.asn1 b/skeletons/standard-modules/ASN1-Object-Identifier-Module.asn1
new file mode 100644 (file)
index 0000000..b81e37c
--- /dev/null
@@ -0,0 +1,43 @@
+ASN1-Object-Identifier-Module { joint-iso-itu-t asn1(1) specification(0) modules(0) object-identifiers(1) }  
+DEFINITIONS ::= BEGIN 
+
+ -- NumericString ASN.1 type (see 37.3) -- 
+ numericString OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) specification(0) characterStrings(1) numericString(0) } 
+
+ -- PrintableString ASN.1 type (see 37.5) -- 
+ printableString OBJECT IDENTIFIER ::= { joint-iso-itu-t asn1(1) specification(0) characterStrings(1) printableString(1) } 
+
+ -- ASN.1 Character Module (see 38.1) -- 
+ asn1CharacterModule OBJECT IDENTIFIER ::= { joint-iso-itu-t asn1(1) specification(0) modules(0) iso10646(0) } 
+
+ -- ASN.1 Object Identifier Module (this module) -- 
+ asn1ObjectIdentifierModule OBJECT IDENTIFIER ::= { joint-iso-itu-t asn1(1) specification(0) modules(0) object-identifiers(1) } 
+
+ -- BER encoding of a single ASN.1 type -- 
+ ber OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) basic-encoding(1) } 
+
+ -- CER encoding of a single ASN.1 type -- 
+ cer OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) ber-derived(2) canonical-encoding(0) } 
+
+ -- DER encoding of a single ASN.1 type -- 
+ der OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) ber-derived(2) distinguished-encoding(1) } 
+
+ -- PER encoding of a single ASN.1 type (basic aligned) -- 
+ perBasicAligned OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) packed-encoding(3) basic(0) aligned(0) } 
+
+ -- PER encoding of a single ASN.1 type (basic unaligned) -- 
+ perBasicUnaligned OBJECT IDENTIFIER ::=  { joint-iso-itu-t asn1(1) packed-encoding(3) basic(0) unaligned(1) } 
+
+ -- PER encoding of a single ASN.1 type (canonical aligned) -- 
+ perCanonicalAligned OBJECT IDENTIFIER ::= { joint-iso-itu-t asn1(1) packed-encoding(3) canonical(1) aligned(0) } 
+
+ -- PER encoding of a single ASN.1 type (canonical unaligned) -- 
+ perCanonicalUnaligned OBJECT IDENTIFIER ::= { joint-iso-itu-t asn1(1) packed-encoding(3) canonical(1) unaligned(1) } 
+
+ -- XER encoding of a single ASN.1 type (basic) -- 
+ xerBasic OBJECT IDENTIFIER ::=  {joint-iso-itu-t asn1(1) xml-encoding(5) basic(0) } 
+
+ -- XER encoding of a single ASN.1 type (canonical) -- 
+ xerCanonical OBJECT IDENTIFIER ::=  {joint-iso-itu-t asn1(1) xml-encoding(5) canonical(1) } 
+
+END -- ASN1-Object-Identifier-Module --
diff --git a/skeletons/standard-modules/ASN1C-UsefulInformationObjectClasses.asn1 b/skeletons/standard-modules/ASN1C-UsefulInformationObjectClasses.asn1
new file mode 100644 (file)
index 0000000..7ba2da4
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * This specification contains pervasive ASN.1 information object classes.
+ * These classes are defined as "useful", and are available in any module
+ * without the necessity for explicit import.
+ */
+ASN1C-UsefulInformationObjectClasses
+       { iso(1) org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5)
+               standard-modules(3) auto-imported(0) 1 }
+DEFINITIONS ::= BEGIN
+
+       /*
+        * X.681-0207, Annex A
+        * The TYPE-IDENTIFIER information object class
+        */
+       TYPE-IDENTIFIER ::= CLASS {
+           &id         OBJECT IDENTIFIER UNIQUE,
+           &Type
+       } WITH SYNTAX { &Type IDENTIFIED BY &id }
+
+       /*
+        * X.681-0207, Annex B
+        * The ABSTRACT-SYNTAX information object class
+        */
+       ABSTRACT-SYNTAX ::= CLASS {
+           &id         OBJECT IDENTIFIER UNIQUE,
+           &Type,
+           &property   BIT STRING { handles-invalid-encodings(0) } DEFAULT {}
+       } WITH SYNTAX { &Type IDENTIFIED BY &id [HAS PROPERTY &property] }
+
+END
diff --git a/skeletons/standard-modules/README b/skeletons/standard-modules/README
new file mode 100644 (file)
index 0000000..014a698
--- /dev/null
@@ -0,0 +1,2 @@
+All *.asn1 files in this directory will be automatically
+picked up by the asn1c during compilation of any user specified module.
diff --git a/skeletons/xer_decoder.c b/skeletons/xer_decoder.c
new file mode 100644 (file)
index 0000000..5b87703
--- /dev/null
@@ -0,0 +1,369 @@
+/*
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_application.h>
+#include <asn_internal.h>
+#include <xer_support.h>               /* XER/XML parsing support */
+
+
+/*
+ * Decode the XER encoding of a given type.
+ */
+asn_dec_rval_t
+xer_decode(const asn_codec_ctx_t *opt_codec_ctx,
+           const asn_TYPE_descriptor_t *td, void **struct_ptr,
+           const void *buffer, size_t size) {
+    asn_codec_ctx_t s_codec_ctx;
+
+       /*
+        * Stack checker requires that the codec context
+        * must be allocated on the stack.
+        */
+       if(opt_codec_ctx) {
+               if(opt_codec_ctx->max_stack_size) {
+                       s_codec_ctx = *opt_codec_ctx;
+                       opt_codec_ctx = &s_codec_ctx;
+               }
+       } else {
+               /* If context is not given, be security-conscious anyway */
+               memset(&s_codec_ctx, 0, sizeof(s_codec_ctx));
+               s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX;
+               opt_codec_ctx = &s_codec_ctx;
+       }
+
+       /*
+        * Invoke type-specific decoder.
+        */
+       return td->op->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size);
+}
+
+
+
+struct xer__cb_arg {
+       pxml_chunk_type_e       chunk_type;
+       size_t                  chunk_size;
+       const void              *chunk_buf;
+       int callback_not_invoked;
+};
+
+static int
+xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) {
+       struct xer__cb_arg *arg = (struct xer__cb_arg *)key;
+       arg->chunk_type = type;
+       arg->chunk_size = _chunk_size;
+       arg->chunk_buf = _chunk_data;
+       arg->callback_not_invoked = 0;
+       return -1;      /* Terminate the XML parsing */
+}
+
+/*
+ * Fetch the next token from the XER/XML stream.
+ */
+ssize_t
+xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) {
+       struct xer__cb_arg arg;
+       int new_stateContext = *stateContext;
+       ssize_t ret;
+
+       arg.callback_not_invoked = 1;
+       ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg);
+       if(ret < 0) return -1;
+       if(arg.callback_not_invoked) {
+               assert(ret == 0);       /* No data was consumed */
+        *ch_type = PXER_WMORE;
+               return 0;               /* Try again with more data */
+       } else {
+               assert(arg.chunk_size);
+               assert(arg.chunk_buf == buffer);
+       }
+
+       /*
+        * Translate the XML chunk types into more convenient ones.
+        */
+       switch(arg.chunk_type) {
+       case PXML_TEXT:
+               *ch_type = PXER_TEXT;
+               break;
+       case PXML_TAG:
+               *ch_type = PXER_WMORE;
+               return 0;       /* Want more */
+       case PXML_TAG_END:
+               *ch_type = PXER_TAG;
+               break;
+       case PXML_COMMENT:
+       case PXML_COMMENT_END:
+               *ch_type = PXER_COMMENT;
+               break;
+       }
+
+       *stateContext = new_stateContext;
+       return arg.chunk_size;
+}
+
+#define        CSLASH  0x2f    /* '/' */
+#define        LANGLE  0x3c    /* '<' */
+#define        RANGLE  0x3e    /* '>' */
+
+xer_check_tag_e
+xer_check_tag(const void *buf_ptr, int size, const char *need_tag) {
+       const char *buf = (const char *)buf_ptr;
+       const char *end;
+       xer_check_tag_e ct = XCT_OPENING;
+
+       if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) {
+               if(size >= 2)
+                       ASN_DEBUG("Broken XML tag: \"%c...%c\"",
+                       buf[0], buf[size - 1]);
+               return XCT_BROKEN;
+       }
+
+       /*
+        * Determine the tag class.
+        */
+       if(buf[1] == CSLASH) {
+               buf += 2;       /* advance past "</" */
+               size -= 3;      /* strip "</" and ">" */
+               ct = XCT_CLOSING;
+               if(size > 0 && buf[size-1] == CSLASH)
+                       return XCT_BROKEN;      /* </abc/> */
+       } else {
+               buf++;          /* advance past "<" */
+               size -= 2;      /* strip "<" and ">" */
+               if(size > 0 && buf[size-1] == CSLASH) {
+                       ct = XCT_BOTH;
+                       size--; /* One more, for "/" */
+               }
+       }
+
+       /* Sometimes we don't care about the tag */
+       if(!need_tag || !*need_tag)
+               return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+
+       /*
+        * Determine the tag name.
+        */
+       for(end = buf + size; buf < end; buf++, need_tag++) {
+               int b = *buf, n = *need_tag;
+               if(b != n) {
+                       if(n == 0) {
+                               switch(b) {
+                               case 0x09: case 0x0a: case 0x0c: case 0x0d:
+                               case 0x20:
+                                       /* "<abc def/>": whitespace is normal */
+                                       return ct;
+                               }
+                       }
+                       return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+               }
+               if(b == 0)
+                       return XCT_BROKEN;      /* Embedded 0 in buf?! */
+       }
+       if(*need_tag)
+               return (xer_check_tag_e)(XCT__UNK__MASK | ct);
+
+       return ct;
+}
+
+
+#undef ADVANCE
+#define        ADVANCE(num_bytes)      do {                            \
+               size_t num = (num_bytes);                       \
+               buf_ptr = ((const char *)buf_ptr) + num;        \
+               size -= num;                                    \
+               consumed_myself += num;                         \
+       } while(0)
+
+#undef RETURN
+#define        RETURN(_code)   do {                                    \
+               rval.code = _code;                              \
+               rval.consumed = consumed_myself;                \
+               if(rval.code != RC_OK)                          \
+                       ASN_DEBUG("Failed with %d", rval.code); \
+               return rval;                                    \
+       } while(0)
+
+#define        XER_GOT_BODY(chunk_buf, chunk_size, size)       do {    \
+               ssize_t converted_size = body_receiver          \
+                       (struct_key, chunk_buf, chunk_size,     \
+                               (size_t)chunk_size < size);     \
+               if(converted_size == -1) RETURN(RC_FAIL);       \
+               if(converted_size == 0                          \
+                       && size == (size_t)chunk_size)          \
+                       RETURN(RC_WMORE);                       \
+               chunk_size = converted_size;                    \
+       } while(0)
+#define        XER_GOT_EMPTY() do {                                    \
+       if(body_receiver(struct_key, 0, 0, size > 0) == -1)     \
+                       RETURN(RC_FAIL);                        \
+       } while(0)
+
+/*
+ * Generalized function for decoding the primitive values.
+ */
+asn_dec_rval_t
+xer_decode_general(const asn_codec_ctx_t *opt_codec_ctx,
+       asn_struct_ctx_t *ctx,  /* Type decoder context */
+       void *struct_key,
+       const char *xml_tag,    /* Expected XML tag */
+       const void *buf_ptr, size_t size,
+       int (*opt_unexpected_tag_decoder)
+               (void *struct_key, const void *chunk_buf, size_t chunk_size),
+       ssize_t (*body_receiver)
+               (void *struct_key, const void *chunk_buf, size_t chunk_size,
+                       int have_more)
+       ) {
+
+       asn_dec_rval_t rval;
+       ssize_t consumed_myself = 0;
+
+       (void)opt_codec_ctx;
+
+       /*
+        * Phases of XER/XML processing:
+        * Phase 0: Check that the opening tag matches our expectations.
+        * Phase 1: Processing body and reacting on closing tag.
+        */
+       if(ctx->phase > 1) RETURN(RC_FAIL);
+       for(;;) {
+               pxer_chunk_type_e ch_type;      /* XER chunk type */
+               ssize_t ch_size;                /* Chunk size */
+               xer_check_tag_e tcv;            /* Tag check value */
+
+               /*
+                * Get the next part of the XML stream.
+                */
+               ch_size = xer_next_token(&ctx->context, buf_ptr, size,
+                       &ch_type);
+               if(ch_size == -1) {
+            RETURN(RC_FAIL);
+        } else {
+                       switch(ch_type) {
+                       case PXER_WMORE:
+                RETURN(RC_WMORE);
+                       case PXER_COMMENT:              /* Got XML comment */
+                               ADVANCE(ch_size);       /* Skip silently */
+                               continue;
+                       case PXER_TEXT:
+                               if(ctx->phase == 0) {
+                                       /*
+                                        * We have to ignore whitespace here,
+                                        * but in order to be forward compatible
+                                        * with EXTENDED-XER (EMBED-VALUES, #25)
+                                        * any text is just ignored here.
+                                        */
+                               } else {
+                                       XER_GOT_BODY(buf_ptr, ch_size, size);
+                               }
+                               ADVANCE(ch_size);
+                               continue;
+                       case PXER_TAG:
+                               break;  /* Check the rest down there */
+                       }
+               }
+
+               assert(ch_type == PXER_TAG && size);
+
+               tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+               /*
+                * Phase 0:
+                *      Expecting the opening tag
+                *      for the type being processed.
+                * Phase 1:
+                *      Waiting for the closing XML tag.
+                */
+               switch(tcv) {
+               case XCT_BOTH:
+                       if(ctx->phase) break;
+                       /* Finished decoding of an empty element */
+                       XER_GOT_EMPTY();
+                       ADVANCE(ch_size);
+                       ctx->phase = 2; /* Phase out */
+                       RETURN(RC_OK);
+               case XCT_OPENING:
+                       if(ctx->phase) break;
+                       ADVANCE(ch_size);
+                       ctx->phase = 1; /* Processing body phase */
+                       continue;
+               case XCT_CLOSING:
+                       if(!ctx->phase) break;
+                       ADVANCE(ch_size);
+                       ctx->phase = 2; /* Phase out */
+                       RETURN(RC_OK);
+               case XCT_UNKNOWN_BO:
+                       /*
+                        * Certain tags in the body may be expected.
+                        */
+                       if(opt_unexpected_tag_decoder
+                       && opt_unexpected_tag_decoder(struct_key,
+                                       buf_ptr, ch_size) >= 0) {
+                               /* Tag's processed fine */
+                               ADVANCE(ch_size);
+                               if(!ctx->phase) {
+                                       /* We are not expecting
+                                        * the closing tag anymore. */
+                                       ctx->phase = 2; /* Phase out */
+                                       RETURN(RC_OK);
+                               }
+                               continue;
+                       }
+                       /* Fall through */
+               default:
+                       break;          /* Unexpected tag */
+               }
+
+               ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag);
+               break;  /* Dark and mysterious things have just happened */
+       }
+
+       RETURN(RC_FAIL);
+}
+
+
+size_t
+xer_whitespace_span(const void *chunk_buf, size_t chunk_size) {
+       const char *p = (const char *)chunk_buf;
+       const char *pend = p + chunk_size;
+
+       for(; p < pend; p++) {
+               switch(*p) {
+               /* X.693, #8.1.4
+                * HORISONTAL TAB (9)
+                * LINE FEED (10) 
+                * CARRIAGE RETURN (13) 
+                * SPACE (32)
+                */
+               case 0x09: case 0x0a: case 0x0d: case 0x20:
+                       continue;
+               default:
+                       break;
+               }
+               break;
+       }
+       return (p - (const char *)chunk_buf);
+}
+
+/*
+ * This is a vastly simplified, non-validating XML tree skipper.
+ */
+int
+xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) {
+       assert(*depth > 0);
+       switch(tcv) {
+       case XCT_BOTH:
+       case XCT_UNKNOWN_BO:
+               /* These negate each other. */
+               return 0;
+       case XCT_OPENING:
+       case XCT_UNKNOWN_OP:
+               ++(*depth);
+               return 0;
+       case XCT_CLOSING:
+       case XCT_UNKNOWN_CL:
+               if(--(*depth) == 0)
+                       return (tcv == XCT_CLOSING) ? 2 : 1;
+               return 0;
+       default:
+               return -1;
+       }
+}
diff --git a/skeletons/xer_decoder.h b/skeletons/xer_decoder.h
new file mode 100644 (file)
index 0000000..b951c41
--- /dev/null
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _XER_DECODER_H_
+#define        _XER_DECODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/*
+ * The XER decoder of any ASN.1 type. May be invoked by the application.
+ * Decodes CANONICAL-XER and BASIC-XER.
+ */
+asn_dec_rval_t xer_decode(
+    const struct asn_codec_ctx_s *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    void **struct_ptr,  /* Pointer to a target structure's pointer */
+    const void *buffer, /* Data to be decoded */
+    size_t size         /* Size of data buffer */
+);
+
+/*
+ * Type of the type-specific XER decoder function.
+ */
+typedef asn_dec_rval_t(xer_type_decoder_f)(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    const struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr,
+    const char *opt_mname, /* Member name */
+    const void *buf_ptr, size_t size);
+
+/*******************************
+ * INTERNALLY USEFUL FUNCTIONS *
+ *******************************/
+
+/*
+ * Generalized function for decoding the primitive values.
+ * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8
+ * and others. This function should not be used by applications, as its API
+ * is subject to changes.
+ */
+asn_dec_rval_t xer_decode_general(
+    const asn_codec_ctx_t *opt_codec_ctx,
+    asn_struct_ctx_t *ctx, /* Type decoder context */
+    void *struct_key,      /* Treated as opaque pointer */
+    const char *xml_tag,   /* Expected XML tag name */
+    const void *buf_ptr, size_t size,
+    int (*opt_unexpected_tag_decoder)(void *struct_key, const void *chunk_buf,
+                                      size_t chunk_size),
+    ssize_t (*body_receiver)(void *struct_key, const void *chunk_buf,
+                             size_t chunk_size, int have_more));
+
+
+/*
+ * Fetch the next XER (XML) token from the stream.
+ * The function returns the number of bytes occupied by the chunk type,
+ * returned in the _ch_type. The _ch_type is only set (and valid) when
+ * the return value is >= 0.
+ */
+  typedef enum pxer_chunk_type {
+       PXER_WMORE,     /* Chunk type is not clear, more data expected. */
+       PXER_TAG,           /* Complete XER tag */
+       PXER_TEXT,          /* Plain text between XER tags */
+       PXER_COMMENT    /* A comment, may be part of */
+  } pxer_chunk_type_e;
+ssize_t xer_next_token(int *stateContext,
+       const void *buffer, size_t size, pxer_chunk_type_e *_ch_type);
+
+/*
+ * This function checks the buffer against the tag name is expected to occur.
+ */
+  typedef enum xer_check_tag {
+       XCT_BROKEN      = 0,    /* The tag is broken */
+       XCT_OPENING     = 1,    /* This is the <opening> tag */
+       XCT_CLOSING     = 2,    /* This is the </closing> tag */
+       XCT_BOTH        = 3,    /* This is the <modified/> tag */
+       XCT__UNK__MASK  = 4,    /* Mask of everything unexpected */
+       XCT_UNKNOWN_OP  = 5,    /* Unexpected <opening> tag */
+       XCT_UNKNOWN_CL  = 6,    /* Unexpected </closing> tag */
+       XCT_UNKNOWN_BO  = 7     /* Unexpected <modified/> tag */
+  } xer_check_tag_e;
+xer_check_tag_e xer_check_tag(const void *buf_ptr, int size,
+               const char *need_tag);
+
+/*
+ * Get the number of bytes consisting entirely of XER whitespace characters.
+ * RETURN VALUES:
+ * >=0:        Number of whitespace characters in the string.
+ */
+size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size);
+
+/*
+ * Skip the series of anticipated extensions.
+ */
+int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _XER_DECODER_H_ */
diff --git a/skeletons/xer_encoder.c b/skeletons/xer_encoder.c
new file mode 100644 (file)
index 0000000..4177ede
--- /dev/null
@@ -0,0 +1,237 @@
+/*-
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_internal.h>
+#include <stdio.h>
+#include <errno.h>
+
+/*
+ * The XER encoder of any type. May be invoked by the application.
+ */
+asn_enc_rval_t
+xer_encode(const asn_TYPE_descriptor_t *td, const void *sptr,
+           enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb,
+           void *app_key) {
+    asn_enc_rval_t er = {0, 0, 0};
+       asn_enc_rval_t tmper;
+       const char *mname;
+       size_t mlen;
+       int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2;
+
+       if(!td || !sptr) goto cb_failed;
+
+       mname = td->xml_tag;
+       mlen = strlen(mname);
+
+       ASN__CALLBACK3("<", 1, mname, mlen, ">", 1);
+
+       tmper = td->op->xer_encoder(td, sptr, 1, xer_flags, cb, app_key);
+       if(tmper.encoded == -1) return tmper;
+       er.encoded += tmper.encoded;
+
+       ASN__CALLBACK3("</", 2, mname, mlen, ">\n", xcan);
+
+       ASN__ENCODED_OK(er);
+cb_failed:
+       ASN__ENCODE_FAILED;
+}
+
+/*
+ * This is a helper function for xer_fprint, which directs all incoming data
+ * into the provided file descriptor.
+ */
+static int
+xer__print2fp(const void *buffer, size_t size, void *app_key) {
+       FILE *stream = (FILE *)app_key;
+
+       if(fwrite(buffer, 1, size, stream) != size)
+               return -1;
+
+       return 0;
+}
+
+int
+xer_fprint(FILE *stream, const asn_TYPE_descriptor_t *td, const void *sptr) {
+       asn_enc_rval_t er = {0,0,0};
+
+       if(!stream) stream = stdout;
+       if(!td || !sptr)
+               return -1;
+
+       er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream);
+       if(er.encoded == -1)
+               return -1;
+
+       return fflush(stream);
+}
+
+struct xer_buffer {
+    char *buffer;
+    size_t buffer_size;
+    size_t allocated_size;
+};
+
+static int
+xer__buffer_append(const void *buffer, size_t size, void *app_key) {
+    struct xer_buffer *xb = app_key;
+
+    while(xb->buffer_size + size + 1 > xb->allocated_size) {
+        size_t new_size = 2 * (xb->allocated_size ? xb->allocated_size : 64);
+        char *new_buf = MALLOC(new_size);
+        if(!new_buf) return -1;
+        if (xb->buffer) {
+            memcpy(new_buf, xb->buffer, xb->buffer_size);
+        }
+        FREEMEM(xb->buffer);
+        xb->buffer = new_buf;
+        xb->allocated_size = new_size;
+    }
+
+    memcpy(xb->buffer + xb->buffer_size, buffer, size);
+    xb->buffer_size += size;
+    xb->buffer[xb->buffer_size] = '\0';
+    return 0;
+}
+
+enum xer_equivalence_e
+xer_equivalent(const struct asn_TYPE_descriptor_s *td, const void *struct1,
+               const void *struct2, FILE *opt_debug_stream) {
+    struct xer_buffer xb1 = {0, 0, 0};
+    struct xer_buffer xb2 = {0, 0, 0};
+    asn_enc_rval_t e1, e2;
+    asn_dec_rval_t rval;
+    void *sptr = NULL;
+
+    if(!td || !struct1 || !struct2) {
+        if(opt_debug_stream) {
+            if(!td) fprintf(opt_debug_stream, "Type descriptor missing\n");
+            if(!struct1) fprintf(opt_debug_stream, "Structure 1 missing\n");
+            if(!struct2) fprintf(opt_debug_stream, "Structure 2 missing\n");
+        }
+        return XEQ_FAILURE;
+    }
+
+    e1 = xer_encode(td, struct1, XER_F_BASIC, xer__buffer_append, &xb1);
+    if(e1.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of %s failed\n", td->name);
+        }
+        FREEMEM(xb1.buffer);
+        return XEQ_ENCODE1_FAILED;
+    }
+
+    e2 = xer_encode(td, struct2, XER_F_BASIC, xer__buffer_append, &xb2);
+    if(e2.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of %s failed\n", td->name);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ENCODE1_FAILED;
+    }
+
+    if(xb1.buffer_size != xb2.buffer_size
+       || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structures XER-encoded into different byte streams:\n=== "
+                    "Structure 1 ===\n%s\n=== Structure 2 ===\n%s\n",
+                    xb1.buffer, xb2.buffer);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_DIFFERENT;
+    } else {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Both structures encoded into the same XER byte stream "
+                    "of size %" ASN_PRI_SIZE ":\n%s",
+                    xb1.buffer_size, xb1.buffer);
+        }
+    }
+
+    rval = xer_decode(NULL, td, (void **)&sptr, xb1.buffer,
+               xb1.buffer_size);
+    switch(rval.code) {
+    case RC_OK:
+        break;
+    case RC_WMORE:
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structure %s XER decode unexpectedly requires "
+                    "more data:\n%s\n",
+                    td->name, xb1.buffer);
+        }
+        /* Fall through */
+    case RC_FAIL:
+    default:
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Structure %s XER decoding resulted in failure.\n",
+                    td->name);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_DECODE_FAILED;
+    }
+
+    if(rval.consumed != xb1.buffer_size
+       && ((rval.consumed > xb1.buffer_size)
+           || xer_whitespace_span(xb1.buffer + rval.consumed,
+                                  xb1.buffer_size - rval.consumed)
+                  != (xb1.buffer_size - rval.consumed))) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "Round-trip decode of %s required less bytes (%" ASN_PRI_SIZE ") than "
+                    "encoded (%" ASN_PRI_SIZE ")\n",
+                    td->name, rval.consumed, xb1.buffer_size);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+    /*
+     * Reuse xb2 to encode newly decoded structure.
+     */
+    FREEMEM(xb2.buffer);
+    memset(&xb2, 0, sizeof(xb2));
+
+    e2 = xer_encode(td, sptr, XER_F_BASIC, xer__buffer_append, &xb2);
+    if(e2.encoded == -1) {
+        if(opt_debug_stream) {
+            fprintf(stderr, "XER Encoding of round-trip decode of %s failed\n",
+                    td->name);
+        }
+        ASN_STRUCT_FREE(*td, sptr);
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+    ASN_STRUCT_FREE(*td, sptr);
+    sptr = 0;
+
+    if(xb1.buffer_size != xb2.buffer_size
+       || memcmp(xb1.buffer, xb2.buffer, xb1.buffer_size) != 0) {
+        if(opt_debug_stream) {
+            fprintf(opt_debug_stream,
+                    "XER Encoding of round-trip decode of %s resulted in "
+                    "different byte stream:\n"
+                    "=== Original ===\n%s\n"
+                    "=== Round-tripped ===\n%s\n",
+                    xb1.buffer, xb2.buffer, td->name);
+        }
+        FREEMEM(xb1.buffer);
+        FREEMEM(xb2.buffer);
+        return XEQ_ROUND_TRIP_FAILED;
+    }
+
+       FREEMEM(xb1.buffer);
+       FREEMEM(xb2.buffer);
+       return XEQ_SUCCESS;
+}
+
diff --git a/skeletons/xer_encoder.h b/skeletons/xer_encoder.h
new file mode 100644 (file)
index 0000000..9d75922
--- /dev/null
@@ -0,0 +1,83 @@
+/*-
+ * Copyright (c) 2004-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _XER_ENCODER_H_
+#define        _XER_ENCODER_H_
+
+#include <asn_application.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct asn_TYPE_descriptor_s;  /* Forward declaration */
+
+/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */
+enum xer_encoder_flags_e {
+       /* Mode of encoding */
+       XER_F_BASIC     = 0x01, /* BASIC-XER (pretty-printing) */
+       XER_F_CANONICAL = 0x02  /* Canonical XER (strict rules) */
+};
+
+/*
+ * The XER encoder of any type. May be invoked by the application.
+ * Produces CANONICAL-XER and BASIC-XER depending on the (xer_flags).
+ */
+asn_enc_rval_t xer_encode(const struct asn_TYPE_descriptor_s *type_descriptor,
+                          const void *struct_ptr, /* Structure to be encoded */
+                          enum xer_encoder_flags_e xer_flags,
+                          asn_app_consume_bytes_f *consume_bytes_cb,
+                          void *app_key /* Arbitrary callback argument */
+);
+
+/*
+ * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC)
+ * output into the chosen file pointer.
+ * RETURN VALUES:
+ *      0: The structure is printed.
+ *     -1: Problem printing the structure.
+ * WARNING: No sensible errno value is returned.
+ */
+int xer_fprint(FILE *stream, const struct asn_TYPE_descriptor_s *td,
+               const void *struct_ptr);
+
+/*
+ * A helper function that uses XER encoding/decoding to verify that:
+ * - Both structures encode into the same BASIC XER.
+ * - Both resulting XER byte streams can be decoded back.
+ * - Both decoded structures encode into the same BASIC XER (round-trip).
+ * All of this verifies equivalence between structures and a round-trip.
+ * ARGUMENTS:
+ *  (opt_debug_stream)  - If specified, prints ongoing details.
+ */
+enum xer_equivalence_e {
+    XEQ_SUCCESS,          /* The only completely positive return value */
+    XEQ_FAILURE,          /* General failure */
+    XEQ_ENCODE1_FAILED,   /* First sructure XER encoding failed */
+    XEQ_ENCODE2_FAILED,   /* Second structure XER encoding failed */
+    XEQ_DIFFERENT,        /* Structures encoded into different XER */
+    XEQ_DECODE_FAILED,    /* Decode of the XER data failed */
+    XEQ_ROUND_TRIP_FAILED /* Bad round-trip */
+};
+enum xer_equivalence_e xer_equivalent(
+    const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct1,
+    const void *struct2, FILE *opt_debug_stream);
+
+/*
+ * Type of the generic XER encoder.
+ */
+typedef asn_enc_rval_t(xer_type_encoder_f)(
+    const struct asn_TYPE_descriptor_s *type_descriptor,
+    const void *struct_ptr, /* Structure to be encoded */
+    int ilevel,             /* Level of indentation */
+    enum xer_encoder_flags_e xer_flags,
+    asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
+    void *app_key                              /* Arbitrary callback argument */
+);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _XER_ENCODER_H_ */
diff --git a/skeletons/xer_support.c b/skeletons/xer_support.c
new file mode 100644 (file)
index 0000000..36b4bfb
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+ * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com.
+ * Copyright (c) 2003, 2004, 2005 Lev Walkin <vlm@lionet.info>.
+ *     All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#include <asn_system.h>
+#include <xer_support.h>
+
+/* Parser states */
+typedef enum {
+       ST_TEXT,
+       ST_TAG_START,
+       ST_TAG_BODY,
+       ST_TAG_QUOTE_WAIT,
+       ST_TAG_QUOTED_STRING,
+       ST_TAG_UNQUOTED_STRING,
+       ST_COMMENT_WAIT_DASH1,  /* "<!--"[1] */
+       ST_COMMENT_WAIT_DASH2,  /* "<!--"[2] */
+       ST_COMMENT,
+       ST_COMMENT_CLO_DASH2,   /* "-->"[0] */
+       ST_COMMENT_CLO_RT       /* "-->"[1] */
+} pstate_e;
+
+static const int
+_charclass[256] = {
+       0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0,
+       0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+       1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
+       2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0,       /* 01234567 89       */
+       0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,       /*  ABCDEFG HIJKLMNO */
+       3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0,       /* PQRSTUVW XYZ      */
+       0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,       /*  abcdefg hijklmno */
+       3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0        /* pqrstuvw xyz      */
+};
+#define WHITESPACE(c)  (_charclass[(unsigned char)(c)] == 1)
+#define ALNUM(c)       (_charclass[(unsigned char)(c)] >= 2)
+#define ALPHA(c)       (_charclass[(unsigned char)(c)] == 3)
+
+/* Aliases for characters, ASCII/UTF-8 */
+#define        EXCLAM  0x21    /* '!' */
+#define        CQUOTE  0x22    /* '"' */
+#define        CDASH   0x2d    /* '-' */
+#define        CSLASH  0x2f    /* '/' */
+#define        LANGLE  0x3c    /* '<' */
+#define        CEQUAL  0x3d    /* '=' */
+#define        RANGLE  0x3e    /* '>' */
+#define        CQUEST  0x3f    /* '?' */
+
+/* Invoke token callback */
+#define        TOKEN_CB_CALL(type, _ns, _current_too, _final) do {     \
+               int _ret;                                       \
+               pstate_e ns  = _ns;                             \
+               ssize_t _sz = (p - chunk_start) + _current_too; \
+               if (!_sz) {                                     \
+                       /* Shortcut */                          \
+                       state = _ns;                            \
+                       break;                                  \
+               }                                               \
+               _ret = cb(type, chunk_start, _sz, key);         \
+               if(_ret < _sz) {                                \
+                       if(_current_too && _ret == -1)          \
+                               state = ns;                     \
+                       goto finish;                            \
+               }                                               \
+               chunk_start = p + _current_too;                 \
+               state = ns;                                     \
+       } while(0)
+
+#define TOKEN_CB(_type, _ns, _current_too)                     \
+       TOKEN_CB_CALL(_type, _ns, _current_too, 0)
+
+#define PXML_TAG_FINAL_CHUNK_TYPE      PXML_TAG_END
+#define PXML_COMMENT_FINAL_CHUNK_TYPE  PXML_COMMENT_END
+
+#define TOKEN_CB_FINAL(_type, _ns, _current_too)               \
+       TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1)
+
+/*
+ * Parser itself
+ */
+ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) {
+       pstate_e state = (pstate_e)*stateContext;
+       const char *chunk_start = (const char *)xmlbuf;
+       const char *p = chunk_start;
+       const char *end = p + size;
+
+       for(; p < end; p++) {
+         int C = *(const unsigned char *)p;
+         switch(state) {
+         case ST_TEXT:
+               /*
+                * Initial state: we're in the middle of some text,
+                * or just have started.
+                */
+               if (C == LANGLE) 
+                       /* We're now in the tag, probably */
+                       TOKEN_CB(PXML_TEXT, ST_TAG_START, 0);
+               break;
+         case ST_TAG_START:
+               if (ALPHA(C) || (C == CSLASH))
+                       state = ST_TAG_BODY;
+               else if (C == EXCLAM)
+                       state = ST_COMMENT_WAIT_DASH1;
+               else 
+                       /*
+                        * Not characters and not whitespace.
+                        * Must be something like "3 < 4".
+                        */
+                       TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */
+               break;
+         case ST_TAG_BODY:
+               switch(C) {
+               case RANGLE:
+                       /* End of the tag */
+                       TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+                       break;
+               case LANGLE:
+                       /*
+                        * The previous tag wasn't completed, but still
+                        * recognized as valid. (Mozilla-compatible)
+                        */
+                       TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0);      
+                       break;
+               case CEQUAL:
+                       state = ST_TAG_QUOTE_WAIT;
+                       break;
+               }
+               break;
+         case ST_TAG_QUOTE_WAIT:
+               /*
+                * State after the equal sign ("=") in the tag.
+                */
+               switch(C) {
+               case CQUOTE:
+                       state = ST_TAG_QUOTED_STRING;
+                       break;
+               case RANGLE:
+                       /* End of the tag */
+                       TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+                       break;
+               default:
+                       if(!WHITESPACE(C))
+                               /* Unquoted string value */
+                               state = ST_TAG_UNQUOTED_STRING;
+               }
+               break;
+         case ST_TAG_QUOTED_STRING:
+               /*
+                * Tag attribute's string value in quotes.
+                */
+               if(C == CQUOTE) {
+                       /* Return back to the tag state */
+                       state = ST_TAG_BODY;
+               }
+               break;
+         case ST_TAG_UNQUOTED_STRING:
+               if(C == RANGLE) {
+                       /* End of the tag */
+                       TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1);
+               } else if(WHITESPACE(C)) {
+                       /* Return back to the tag state */
+                       state = ST_TAG_BODY;
+               }
+               break;
+         case ST_COMMENT_WAIT_DASH1:
+               if(C == CDASH) {
+                       state = ST_COMMENT_WAIT_DASH2;
+               } else {
+                       /* Some ordinary tag. */
+                       state = ST_TAG_BODY;
+               }
+               break;
+         case ST_COMMENT_WAIT_DASH2:
+               if(C == CDASH) {
+                       /* Seen "<--" */
+                       state = ST_COMMENT;
+               } else {
+                       /* Some ordinary tag */
+                       state = ST_TAG_BODY;
+               }
+               break;
+         case ST_COMMENT:
+               if(C == CDASH) {
+                       state = ST_COMMENT_CLO_DASH2;
+               }
+               break;
+         case ST_COMMENT_CLO_DASH2:
+               if(C == CDASH) {
+                       state = ST_COMMENT_CLO_RT;
+               } else {
+                       /* This is not an end of a comment */
+                       state = ST_COMMENT;
+               }
+               break;
+         case ST_COMMENT_CLO_RT:
+               if(C == RANGLE) {
+                       TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1);
+               } else if(C == CDASH) {
+                       /* Maintain current state, still waiting for '>' */
+               } else {
+                       state = ST_COMMENT;
+               }
+               break;
+         } /* switch(*ptr) */
+       } /* for() */
+
+       /*
+        * Flush the partially processed chunk, state permitting.
+        */
+       if(p - chunk_start) {
+               switch (state) {
+               case ST_COMMENT:
+                       TOKEN_CB(PXML_COMMENT, state, 0);
+                       break;
+               case ST_TEXT:
+                       TOKEN_CB(PXML_TEXT, state, 0);
+                       break;
+               default: break; /* a no-op */
+               }
+       }
+
+finish:
+       *stateContext = (int)state;
+       return chunk_start - (const char *)xmlbuf;
+}
+
diff --git a/skeletons/xer_support.h b/skeletons/xer_support.h
new file mode 100644 (file)
index 0000000..c3a36e7
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com.
+ * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Redistribution and modifications are permitted subject to BSD license.
+ */
+#ifndef        _XER_SUPPORT_H_
+#define        _XER_SUPPORT_H_
+
+#include <asn_system.h>                /* Platform-specific types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Types of data transferred to the application.
+ */
+typedef enum {
+       PXML_TEXT,      /* Plain text between XML tags. */
+       PXML_TAG,       /* A tag, starting with '<'. */
+       PXML_COMMENT,   /* An XML comment, including "<!--" and "-->". */
+       /* 
+        * The following chunk types are reported if the chunk
+        * terminates the specified XML element.
+        */
+       PXML_TAG_END,           /* Tag ended */
+       PXML_COMMENT_END        /* Comment ended */
+} pxml_chunk_type_e;
+
+/*
+ * Callback function that is called by the parser when parsed data is
+ * available. The _opaque is the pointer to a field containing opaque user 
+ * data specified in pxml_create() call. The chunk type is _type and the text 
+ * data is the piece of buffer identified by _bufid (as supplied to
+ * pxml_feed() call) starting at offset _offset and of _size bytes size. 
+ * The chunk is NOT '\0'-terminated.
+ */
+typedef int (pxml_callback_f)(pxml_chunk_type_e _type,
+       const void *_chunk_data, size_t _chunk_size, void *_key);
+
+/*
+ * Parse the given buffer as it were a chunk of XML data.
+ * Invoke the specified callback each time the meaninful data is found.
+ * This function returns number of bytes consumed from the bufer.
+ * It will always be lesser than or equal to the specified _size.
+ * The next invocation of this function must account the difference.
+ */
+ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size,
+       pxml_callback_f *cb, void *_key);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _XER_SUPPORT_H_ */
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644 (file)
index 0000000..36fb90f
--- /dev/null
@@ -0,0 +1,655 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+
+# Tests are ordered in the rough order of the time it takes to go through them.
+SUBDIRS = \
+    tests-asn1c-compiler    \
+    tests-skeletons         \
+    tests-asn1c-smoke       \
+    tests-c-compiler        \
+    tests-randomized
+
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..d134272
--- /dev/null
@@ -0,0 +1,11 @@
+
+# Tests are ordered in the rough order of the time it takes to go through them.
+SUBDIRS = \
+    tests-asn1c-compiler    \
+    tests-skeletons         \
+    tests-asn1c-smoke       \
+    tests-c-compiler        \
+    tests-randomized
+
+EXTRA_DIST = README
+
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644 (file)
index 0000000..e4b4988
--- /dev/null
@@ -0,0 +1,655 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+
+# Tests are ordered in the rough order of the time it takes to go through them.
+SUBDIRS = \
+    tests-asn1c-compiler    \
+    tests-skeletons         \
+    tests-asn1c-smoke       \
+    tests-c-compiler        \
+    tests-randomized
+
+EXTRA_DIST = README
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/README b/tests/README
new file mode 100644 (file)
index 0000000..7e9b97c
--- /dev/null
@@ -0,0 +1,6 @@
+tests-asn1c-compiler - asn1c produces expected textual output
+tests-asn1c-smoke    - asn1c compiler produces compilable code for simple types
+tests-c-compiler     - C code compiles and runs, and produces expected result
+tests-skeletons      - "skeletons" code primitives are correct
+tests-randomized     - fuzz-testing of DER/OER/PER/XER codecs
+
diff --git a/tests/tests-asn1c-compiler/00-empty-OK.asn1 b/tests/tests-asn1c-compiler/00-empty-OK.asn1
new file mode 100644 (file)
index 0000000..532d4fb
--- /dev/null
@@ -0,0 +1 @@
+ModuleTestEmpty DEFINITIONS ::= BEGIN END
diff --git a/tests/tests-asn1c-compiler/01-empty-OK.asn1 b/tests/tests-asn1c-compiler/01-empty-OK.asn1
new file mode 100644 (file)
index 0000000..04d9ba7
--- /dev/null
@@ -0,0 +1,14 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .1
+
+ModuleTestEmpty
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 1 }
+       DEFINITIONS ::=
+BEGIN
+
+END
diff --git a/tests/tests-asn1c-compiler/02-garbage-NP.asn1 b/tests/tests-asn1c-compiler/02-garbage-NP.asn1
new file mode 100644 (file)
index 0000000..410c7bc
--- /dev/null
@@ -0,0 +1,17 @@
+
+-- NP: Non-parseable.
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .2
+
+ModuleTestGarbage
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 2 }
+       DEFINITIONS ::=
+BEGIN
+
+       -- must fail on the next line --
+       some garbage
+
+END
diff --git a/tests/tests-asn1c-compiler/03-enum-OK.asn1 b/tests/tests-asn1c-compiler/03-enum-OK.asn1
new file mode 100644 (file)
index 0000000..a8570a9
--- /dev/null
@@ -0,0 +1,37 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .3
+
+ModuleTestEnum1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 3 }
+       DEFINITIONS ::=
+BEGIN
+
+       Enum1 ::= ENUMERATED
+               { red,  -- will be 0 --
+               green,  -- will be 1 --
+               blue(4),
+               alpha,
+               ... -- extensible --
+               }
+
+       Enum2 ::= ENUMERATED
+               { red,  -- will be 0 --
+               green,  -- will be 1 --
+               blue(45),
+               orange(23),     -- Does not have to be ordered --
+               alpha,
+               ..., -- extensible --
+               beta(12),       -- May be less than the max value in the root --
+               gamma(103)      -- Must be ordered --
+               }
+
+       Enum3 ::= ENUMERATED { a, b(3), ..., c(1) }
+       Enum4 ::= ENUMERATED { a, b, ..., c(3), d }
+       Enum5 ::= ENUMERATED { a, z(25), ..., d }
+
+END
diff --git a/tests/tests-asn1c-compiler/03-enum-OK.asn1.-EF b/tests/tests-asn1c-compiler/03-enum-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..761736f
--- /dev/null
@@ -0,0 +1,47 @@
+ModuleTestEnum1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 3 }
+DEFINITIONS ::=
+BEGIN
+
+Enum1 ::= ENUMERATED {
+    red(0),
+    green(1),
+    blue(4),
+    alpha(5),
+    ...
+}
+
+Enum2 ::= ENUMERATED {
+    red(0),
+    green(1),
+    blue(45),
+    orange(23),
+    alpha(46),
+    ...,
+    beta(12),
+    gamma(103)
+}
+
+Enum3 ::= ENUMERATED {
+    a(0),
+    b(3),
+    ...,
+    c(1)
+}
+
+Enum4 ::= ENUMERATED {
+    a(0),
+    b(1),
+    ...,
+    c(3),
+    d(4)
+}
+
+Enum5 ::= ENUMERATED {
+    a(0),
+    z(25),
+    ...,
+    d(26)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..3074c72
--- /dev/null
@@ -0,0 +1,413 @@
+
+/*** <<< INCLUDES [Enum1] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum1] >>> ***/
+
+typedef enum Enum1 {
+       Enum1_red       = 0,
+       Enum1_green     = 1,
+       Enum1_blue      = 4,
+       Enum1_alpha     = 5
+       /*
+        * Enumeration is extensible
+        */
+} e_Enum1;
+
+/*** <<< TYPE-DECLS [Enum1] >>> ***/
+
+typedef ENUMERATED_t    Enum1_t;
+
+/*** <<< FUNC-DECLS [Enum1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum1;
+asn_struct_free_f Enum1_free;
+asn_struct_print_f Enum1_print;
+asn_constr_check_f Enum1_constraint;
+ber_type_decoder_f Enum1_decode_ber;
+der_type_encoder_f Enum1_encode_der;
+xer_type_decoder_f Enum1_decode_xer;
+xer_type_encoder_f Enum1_encode_xer;
+
+/*** <<< CODE [Enum1] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum1] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum1_value2enum_1[] = {
+       { 0,    3,      "red" },
+       { 1,    5,      "green" },
+       { 4,    4,      "blue" },
+       { 5,    5,      "alpha" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_Enum1_enum2value_1[] = {
+       3,      /* alpha(5) */
+       2,      /* blue(4) */
+       1,      /* green(1) */
+       0       /* red(0) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum1_specs_1 = {
+       asn_MAP_Enum1_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum1_enum2value_1,     /* N => "tag"; sorted by N */
+       4,      /* Number of elements in the maps */
+       5,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum1 = {
+       "Enum1",
+       "Enum1",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum1_tags_1,
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       asn_DEF_Enum1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum1_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum2] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum2] >>> ***/
+
+typedef enum Enum2 {
+       Enum2_red       = 0,
+       Enum2_green     = 1,
+       Enum2_blue      = 45,
+       Enum2_orange    = 23,
+       Enum2_alpha     = 46,
+       /*
+        * Enumeration is extensible
+        */
+       Enum2_beta      = 12,
+       Enum2_gamma     = 103
+} e_Enum2;
+
+/*** <<< TYPE-DECLS [Enum2] >>> ***/
+
+typedef ENUMERATED_t    Enum2_t;
+
+/*** <<< FUNC-DECLS [Enum2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum2;
+asn_struct_free_f Enum2_free;
+asn_struct_print_f Enum2_print;
+asn_constr_check_f Enum2_constraint;
+ber_type_decoder_f Enum2_decode_ber;
+der_type_encoder_f Enum2_encode_der;
+xer_type_decoder_f Enum2_decode_xer;
+xer_type_encoder_f Enum2_encode_xer;
+
+/*** <<< CODE [Enum2] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum2] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum2_value2enum_1[] = {
+       { 0,    3,      "red" },
+       { 1,    5,      "green" },
+       { 12,   4,      "beta" },
+       { 23,   6,      "orange" },
+       { 45,   4,      "blue" },
+       { 46,   5,      "alpha" },
+       { 103,  5,      "gamma" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_Enum2_enum2value_1[] = {
+       5,      /* alpha(46) */
+       2,      /* beta(12) */
+       4,      /* blue(45) */
+       6,      /* gamma(103) */
+       1,      /* green(1) */
+       3,      /* orange(23) */
+       0       /* red(0) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum2_specs_1 = {
+       asn_MAP_Enum2_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum2_enum2value_1,     /* N => "tag"; sorted by N */
+       7,      /* Number of elements in the maps */
+       6,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum2 = {
+       "Enum2",
+       "Enum2",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum2_tags_1,
+       sizeof(asn_DEF_Enum2_tags_1)
+               /sizeof(asn_DEF_Enum2_tags_1[0]), /* 1 */
+       asn_DEF_Enum2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum2_tags_1)
+               /sizeof(asn_DEF_Enum2_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum2_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum3] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum3] >>> ***/
+
+typedef enum Enum3 {
+       Enum3_a = 0,
+       Enum3_b = 3,
+       /*
+        * Enumeration is extensible
+        */
+       Enum3_c = 1
+} e_Enum3;
+
+/*** <<< TYPE-DECLS [Enum3] >>> ***/
+
+typedef ENUMERATED_t    Enum3_t;
+
+/*** <<< FUNC-DECLS [Enum3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum3;
+asn_struct_free_f Enum3_free;
+asn_struct_print_f Enum3_print;
+asn_constr_check_f Enum3_constraint;
+ber_type_decoder_f Enum3_decode_ber;
+der_type_encoder_f Enum3_encode_der;
+xer_type_decoder_f Enum3_decode_xer;
+xer_type_encoder_f Enum3_encode_xer;
+
+/*** <<< CODE [Enum3] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum3] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum3_value2enum_1[] = {
+       { 0,    1,      "a" },
+       { 1,    1,      "c" },
+       { 3,    1,      "b" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_Enum3_enum2value_1[] = {
+       0,      /* a(0) */
+       2,      /* b(3) */
+       1       /* c(1) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum3_specs_1 = {
+       asn_MAP_Enum3_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum3_enum2value_1,     /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       3,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum3 = {
+       "Enum3",
+       "Enum3",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum3_tags_1,
+       sizeof(asn_DEF_Enum3_tags_1)
+               /sizeof(asn_DEF_Enum3_tags_1[0]), /* 1 */
+       asn_DEF_Enum3_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum3_tags_1)
+               /sizeof(asn_DEF_Enum3_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum3_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum4] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum4] >>> ***/
+
+typedef enum Enum4 {
+       Enum4_a = 0,
+       Enum4_b = 1,
+       /*
+        * Enumeration is extensible
+        */
+       Enum4_c = 3,
+       Enum4_d = 4
+} e_Enum4;
+
+/*** <<< TYPE-DECLS [Enum4] >>> ***/
+
+typedef ENUMERATED_t    Enum4_t;
+
+/*** <<< FUNC-DECLS [Enum4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum4;
+asn_struct_free_f Enum4_free;
+asn_struct_print_f Enum4_print;
+asn_constr_check_f Enum4_constraint;
+ber_type_decoder_f Enum4_decode_ber;
+der_type_encoder_f Enum4_encode_der;
+xer_type_decoder_f Enum4_decode_xer;
+xer_type_encoder_f Enum4_encode_xer;
+
+/*** <<< CODE [Enum4] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum4] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum4_value2enum_1[] = {
+       { 0,    1,      "a" },
+       { 1,    1,      "b" },
+       { 3,    1,      "c" },
+       { 4,    1,      "d" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_Enum4_enum2value_1[] = {
+       0,      /* a(0) */
+       1,      /* b(1) */
+       2,      /* c(3) */
+       3       /* d(4) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum4_specs_1 = {
+       asn_MAP_Enum4_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum4_enum2value_1,     /* N => "tag"; sorted by N */
+       4,      /* Number of elements in the maps */
+       3,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum4 = {
+       "Enum4",
+       "Enum4",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum4_tags_1,
+       sizeof(asn_DEF_Enum4_tags_1)
+               /sizeof(asn_DEF_Enum4_tags_1[0]), /* 1 */
+       asn_DEF_Enum4_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum4_tags_1)
+               /sizeof(asn_DEF_Enum4_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum4_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum5] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum5] >>> ***/
+
+typedef enum Enum5 {
+       Enum5_a = 0,
+       Enum5_z = 25,
+       /*
+        * Enumeration is extensible
+        */
+       Enum5_d = 26
+} e_Enum5;
+
+/*** <<< TYPE-DECLS [Enum5] >>> ***/
+
+typedef ENUMERATED_t    Enum5_t;
+
+/*** <<< FUNC-DECLS [Enum5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum5;
+asn_struct_free_f Enum5_free;
+asn_struct_print_f Enum5_print;
+asn_constr_check_f Enum5_constraint;
+ber_type_decoder_f Enum5_decode_ber;
+der_type_encoder_f Enum5_encode_der;
+xer_type_decoder_f Enum5_decode_xer;
+xer_type_encoder_f Enum5_encode_xer;
+
+/*** <<< CODE [Enum5] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum5] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum5_value2enum_1[] = {
+       { 0,    1,      "a" },
+       { 25,   1,      "z" },
+       { 26,   1,      "d" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_Enum5_enum2value_1[] = {
+       0,      /* a(0) */
+       2,      /* d(26) */
+       1       /* z(25) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum5_specs_1 = {
+       asn_MAP_Enum5_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum5_enum2value_1,     /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       3,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum5 = {
+       "Enum5",
+       "Enum5",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum5_tags_1,
+       sizeof(asn_DEF_Enum5_tags_1)
+               /sizeof(asn_DEF_Enum5_tags_1[0]), /* 1 */
+       asn_DEF_Enum5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum5_tags_1)
+               /sizeof(asn_DEF_Enum5_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum5_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/04-enum-SE.asn1 b/tests/tests-asn1c-compiler/04-enum-SE.asn1
new file mode 100644 (file)
index 0000000..e9a37c4
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .4
+
+ModuleTestEnum2
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 4 }
+       DEFINITIONS ::=
+BEGIN
+
+       enum1 Enum1 ::= blue
+
+       Enum1 ::= ENUMERATED { red, green, ...,
+               blue(1) -- collides with green -- }
+
+END
diff --git a/tests/tests-asn1c-compiler/04-enum-SE.asn1.-E b/tests/tests-asn1c-compiler/04-enum-SE.asn1.-E
new file mode 100644 (file)
index 0000000..2036bd5
--- /dev/null
@@ -0,0 +1,15 @@
+ModuleTestEnum2 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 4 }
+DEFINITIONS ::=
+BEGIN
+
+enum1 Enum1 ::= blue
+
+Enum1 ::= ENUMERATED {
+    red,
+    green,
+    ...,
+    blue(1)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/05-enum-SE.asn1 b/tests/tests-asn1c-compiler/05-enum-SE.asn1
new file mode 100644 (file)
index 0000000..083724d
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .5
+
+ModuleTestEnum3
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 5 }
+       DEFINITIONS ::=
+BEGIN
+
+       enum1 Enum1 ::= red
+
+       Enum1 ::= ENUMERATED { red(5), green(4), ..., blue(6),
+               -- second extension marker is not allowed --
+               ...,
+               white(7) }
+
+END
diff --git a/tests/tests-asn1c-compiler/06-enum-SE.asn1 b/tests/tests-asn1c-compiler/06-enum-SE.asn1
new file mode 100644 (file)
index 0000000..ad304af
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .6
+
+ModuleTestEnum4
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 6 }
+       DEFINITIONS ::=
+BEGIN
+
+       enum1 Enum1 ::= red
+
+       Enum1 ::= ENUMERATED { red(5), ...,
+               green(7), blue(6)       -- order is not maintained after ...
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/07-int-OK.asn1 b/tests/tests-asn1c-compiler/07-int-OK.asn1
new file mode 100644 (file)
index 0000000..bf59627
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .7
+
+ModuleTestInt1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 7 }
+       DEFINITIONS ::=
+BEGIN
+
+       int123456 INTEGER ::= 123456
+
+       Interval ::= INTEGER (1..int123456)
+
+       SameInterval INTEGER ::= { 1 | 2 | 3 | 4 | 5 | 6 }
+
+       Reason ::= INTEGER {
+                       no-reason(0),
+                       negative-reason(-10),
+                       some-large-value(1324324)
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/07-int-OK.asn1.-EF b/tests/tests-asn1c-compiler/07-int-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..3baa862
--- /dev/null
@@ -0,0 +1,18 @@
+ModuleTestInt1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 7 }
+DEFINITIONS ::=
+BEGIN
+
+int123456 INTEGER ::= 123456
+
+Interval ::= INTEGER (1..123456)
+
+SameInterval INTEGER ::= {1 | 2 | 3 | 4 | 5 | 6}
+
+Reason ::= INTEGER {
+    no-reason(0),
+    negative-reason(-10),
+    some-large-value(1324324)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/08-int-SE.asn1 b/tests/tests-asn1c-compiler/08-int-SE.asn1
new file mode 100644 (file)
index 0000000..64c1dc0
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .8
+
+ModuleTestInt2
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 8 }
+       DEFINITIONS ::=
+BEGIN
+
+       Reason ::= INTEGER {
+                       value1(0),
+                       value1(2)       -- identifiers must be distinct --
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/09-int-SE.asn1 b/tests/tests-asn1c-compiler/09-int-SE.asn1
new file mode 100644 (file)
index 0000000..1eda767
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .9
+
+ModuleTestInt3
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 9 }
+       DEFINITIONS ::=
+BEGIN
+
+       Reason ::= INTEGER {
+                       value1(1),
+                       value5(5),
+                       value2-1(1)     -- integers must be distinct --
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/10-int-OK.asn1 b/tests/tests-asn1c-compiler/10-int-OK.asn1
new file mode 100644 (file)
index 0000000..c17265f
--- /dev/null
@@ -0,0 +1,29 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .10
+
+ModuleTestInt4
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 10 }
+       DEFINITIONS ::=
+BEGIN
+
+       alpha INTEGER ::= 1
+       Type1 ::= INTEGER { alpha(2) }
+       Type2 ::= INTEGER { alpha(3), beta(alpha) }
+       gamma Type2 ::= beta    -- equals 1 --
+       delta Type2 ::= alpha   -- equals 3 --
+
+       /*
+        *  The following are for post-fix checking by the check_fixer.
+        * It will be able to pick-up these values if the file is parseable,
+        * even if it contains some semantic errors.
+        */
+
+       check-gamma INTEGER ::= 1       -- check "gamma"'s value
+       check-delta INTEGER ::= 3       -- check "delta"'s value
+
+END
diff --git a/tests/tests-asn1c-compiler/100-class-ref-OK.asn1 b/tests/tests-asn1c-compiler/100-class-ref-OK.asn1
new file mode 100644 (file)
index 0000000..e8c1f72
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .100
+
+ModuleClassSample
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 100 }
+       DEFINITIONS ::=
+BEGIN
+
+       REF-ID ::= TYPE-IDENTIFIER
+
+       RefID ::= SEQUENCE {
+               field   REF-ID.&id,
+               params  REF-ID.&Type
+       }
+
+       SupportedReferences REF-ID ::= { ... }
+
+END
diff --git a/tests/tests-asn1c-compiler/100-class-ref-OK.asn1.-EF b/tests/tests-asn1c-compiler/100-class-ref-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..7449f2b
--- /dev/null
@@ -0,0 +1,15 @@
+ModuleClassSample { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 100 }
+DEFINITIONS ::=
+BEGIN
+
+REF-ID ::= TYPE-IDENTIFIER
+
+RefID ::= SEQUENCE {
+    field       REF-ID.&id,
+    params      REF-ID.&Type
+}
+
+SupportedReferences REF-ID ::= {...}
+
+END
diff --git a/tests/tests-asn1c-compiler/101-class-ref-SE.asn1 b/tests/tests-asn1c-compiler/101-class-ref-SE.asn1
new file mode 100644 (file)
index 0000000..373df7f
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .101
+
+ModuleClassMisUse
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 101 }
+       DEFINITIONS ::=
+BEGIN
+
+       NOTCLASS ::= SEQUENCE { ... }
+
+       REF-ID ::= NOTCLASS
+
+       RefID ::= SEQUENCE {
+               field   REF-ID.&id,
+               params  REF-ID.&Type
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/102-class-ref-SE.asn1 b/tests/tests-asn1c-compiler/102-class-ref-SE.asn1
new file mode 100644 (file)
index 0000000..4f42240
--- /dev/null
@@ -0,0 +1,22 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .102
+
+ModuleClassMisUse
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 102 }
+       DEFINITIONS ::=
+BEGIN
+
+       REF-ID ::= REF-ID2
+       REF-ID2 ::= REF-ID
+
+       RefID ::= SEQUENCE {
+               field   REF-ID.&id,
+               params  REF-ID.&Type
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/102-class-ref-SE.asn1.-EF b/tests/tests-asn1c-compiler/102-class-ref-SE.asn1.-EF
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/tests-asn1c-compiler/103-reference-SE.asn1 b/tests/tests-asn1c-compiler/103-reference-SE.asn1
new file mode 100644 (file)
index 0000000..8b01ef8
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .103
+
+ModuleReference
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 103 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS Type FROM ModuleReference;
+
+       T ::= SEQUENCE OF Type
+END
diff --git a/tests/tests-asn1c-compiler/104-param-1-OK.asn1 b/tests/tests-asn1c-compiler/104-param-1-OK.asn1
new file mode 100644 (file)
index 0000000..9c1527a
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .104
+
+ModuleParameterization1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 104 }
+       DEFINITIONS ::=
+BEGIN
+
+       Collection {T} ::= SET OF T
+
+       Bunch ::= SEQUENCE {
+               field-REAL      Collection {REAL},
+               field-IA5String Collection {IA5String}
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..754ba54
--- /dev/null
@@ -0,0 +1,17 @@
+ModuleParameterization1 { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 104 }
+DEFINITIONS ::=
+BEGIN
+
+Collection{T} ::= SET OF T
+-- Specializations list has 2 entries:
+--  REAL
+--  IA5String
+
+
+Bunch ::= SEQUENCE {
+    field-REAL  Collection{ REAL},
+    field-IA5String     Collection{ IA5String}
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..c5b7465
--- /dev/null
@@ -0,0 +1,177 @@
+
+/*** <<< INCLUDES [Collection] >>> ***/
+
+#include <REAL.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [Collection] >>> ***/
+
+typedef struct Collection_16P0 {
+       A_SET_OF(REAL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Collection_16P0_t;
+typedef struct Collection_16P1 {
+       A_SET_OF(IA5String_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Collection_16P1_t;
+
+/*** <<< FUNC-DECLS [Collection] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Collection_16P0;
+extern asn_SET_OF_specifics_t asn_SPC_Collection_16P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_Collection_16P0_1[1];
+extern asn_TYPE_descriptor_t asn_DEF_Collection_16P1;
+extern asn_SET_OF_specifics_t asn_SPC_Collection_16P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_Collection_16P1_3[1];
+
+/*** <<< STAT-DEFS [Collection] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Collection_16P0_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_REAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Collection_16P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Collection_16P0_specs_1 = {
+       sizeof(struct Collection_16P0),
+       offsetof(struct Collection_16P0, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Collection_16P0 = {
+       "Collection",
+       "Collection",
+       &asn_OP_SET_OF,
+       asn_DEF_Collection_16P0_tags_1,
+       sizeof(asn_DEF_Collection_16P0_tags_1)
+               /sizeof(asn_DEF_Collection_16P0_tags_1[0]), /* 1 */
+       asn_DEF_Collection_16P0_tags_1, /* Same as above */
+       sizeof(asn_DEF_Collection_16P0_tags_1)
+               /sizeof(asn_DEF_Collection_16P0_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Collection_16P0_1,
+       1,      /* Single element */
+       &asn_SPC_Collection_16P0_specs_1        /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Collection_16P1_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Collection_16P1_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Collection_16P1_specs_3 = {
+       sizeof(struct Collection_16P1),
+       offsetof(struct Collection_16P1, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Collection_16P1 = {
+       "Collection",
+       "Collection",
+       &asn_OP_SET_OF,
+       asn_DEF_Collection_16P1_tags_3,
+       sizeof(asn_DEF_Collection_16P1_tags_3)
+               /sizeof(asn_DEF_Collection_16P1_tags_3[0]), /* 1 */
+       asn_DEF_Collection_16P1_tags_3, /* Same as above */
+       sizeof(asn_DEF_Collection_16P1_tags_3)
+               /sizeof(asn_DEF_Collection_16P1_tags_3[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Collection_16P1_3,
+       1,      /* Single element */
+       &asn_SPC_Collection_16P1_specs_3        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Bunch] >>> ***/
+
+#include "Collection.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Bunch] >>> ***/
+
+typedef struct Bunch {
+       Collection_16P0_t        field_REAL;
+       Collection_16P1_t        field_IA5String;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Bunch_t;
+
+/*** <<< FUNC-DECLS [Bunch] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Bunch;
+
+/*** <<< STAT-DEFS [Bunch] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Bunch_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Bunch, field_REAL),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Collection_16P0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "field-REAL"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Bunch, field_IA5String),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Collection_16P1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "field-IA5String"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Bunch_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Bunch_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 1 }, /* field-REAL */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, -1, 0 } /* field-IA5String */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Bunch_specs_1 = {
+       sizeof(struct Bunch),
+       offsetof(struct Bunch, _asn_ctx),
+       .tag2el = asn_MAP_Bunch_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Bunch = {
+       "Bunch",
+       "Bunch",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Bunch_tags_1,
+       sizeof(asn_DEF_Bunch_tags_1)
+               /sizeof(asn_DEF_Bunch_tags_1[0]), /* 1 */
+       asn_DEF_Bunch_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Bunch_tags_1)
+               /sizeof(asn_DEF_Bunch_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Bunch_1,
+       2,      /* Elements count */
+       &asn_SPC_Bunch_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/105-param-2-OK.asn1 b/tests/tests-asn1c-compiler/105-param-2-OK.asn1
new file mode 100644 (file)
index 0000000..e3ac589
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .105
+
+ModuleParameterization2
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 105 }
+       DEFINITIONS ::=
+BEGIN
+
+       SIGNED {Type} ::= SEQUENCE {
+               signed  Type
+       }
+
+       SignedREAL ::= SIGNED {REAL}
+       SignedSET ::= SIGNED { SET { a INTEGER } }
+
+END
diff --git a/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..0535c89
--- /dev/null
@@ -0,0 +1,280 @@
+
+/*** <<< INCLUDES [SIGNED] >>> ***/
+
+#include <REAL.h>
+#include <constr_SEQUENCE.h>
+#include <INTEGER.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [SIGNED] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum signed_PR {
+       signed_PR_a,    /* Member a is present */
+} signed_PR;
+
+/*** <<< TYPE-DECLS [SIGNED] >>> ***/
+
+typedef struct SIGNED_16P0 {
+       REAL_t   Signed;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SIGNED_16P0_t;
+typedef struct SIGNED_16P1 {
+       struct Signed {
+               INTEGER_t        a;
+               
+               /* Presence bitmask: ASN_SET_ISPRESENT(psigned, signed_PR_x) */
+               unsigned int _presence_map
+                       [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } Signed;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SIGNED_16P1_t;
+
+/*** <<< FUNC-DECLS [SIGNED] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIGNED_16P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_SIGNED_16P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_SIGNED_16P0_1[1];
+extern asn_TYPE_descriptor_t asn_DEF_SIGNED_16P1;
+extern asn_SEQUENCE_specifics_t asn_SPC_SIGNED_16P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_SIGNED_16P1_3[1];
+
+/*** <<< STAT-DEFS [SIGNED] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SIGNED_16P0_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SIGNED_16P0, Signed),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_REAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "signed"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SIGNED_16P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SIGNED_16P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 0, 0, 0 } /* signed */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SIGNED_16P0_specs_1 = {
+       sizeof(struct SIGNED_16P0),
+       offsetof(struct SIGNED_16P0, _asn_ctx),
+       .tag2el = asn_MAP_SIGNED_16P0_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SIGNED_16P0 = {
+       "SIGNED",
+       "SIGNED",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SIGNED_16P0_tags_1,
+       sizeof(asn_DEF_SIGNED_16P0_tags_1)
+               /sizeof(asn_DEF_SIGNED_16P0_tags_1[0]), /* 1 */
+       asn_DEF_SIGNED_16P0_tags_1,     /* Same as above */
+       sizeof(asn_DEF_SIGNED_16P0_tags_1)
+               /sizeof(asn_DEF_SIGNED_16P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_16P0_1,
+       1,      /* Elements count */
+       &asn_SPC_SIGNED_16P0_specs_1    /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_signed_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Signed, a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_signed_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_signed_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* a */
+};
+static const uint8_t asn_MAP_signed_mmap_4[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+static 
+asn_SET_specifics_t asn_SPC_signed_specs_4 = {
+       sizeof(struct Signed),
+       offsetof(struct Signed, _asn_ctx),
+       offsetof(struct Signed, _presence_map),
+       .tag2el = asn_MAP_signed_tag2el_4,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_signed_tag2el_4,        /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_signed_mmap_4     /* Mandatory elements map */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_signed_4 = {
+       "signed",
+       "signed",
+       &asn_OP_SET,
+       asn_DEF_signed_tags_4,
+       sizeof(asn_DEF_signed_tags_4)
+               /sizeof(asn_DEF_signed_tags_4[0]), /* 1 */
+       asn_DEF_signed_tags_4,  /* Same as above */
+       sizeof(asn_DEF_signed_tags_4)
+               /sizeof(asn_DEF_signed_tags_4[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_signed_4,
+       1,      /* Elements count */
+       &asn_SPC_signed_specs_4 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_SIGNED_16P1_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SIGNED_16P1, Signed),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_signed_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "signed"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SIGNED_16P1_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SIGNED_16P1_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 } /* signed */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SIGNED_16P1_specs_3 = {
+       sizeof(struct SIGNED_16P1),
+       offsetof(struct SIGNED_16P1, _asn_ctx),
+       .tag2el = asn_MAP_SIGNED_16P1_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SIGNED_16P1 = {
+       "SIGNED",
+       "SIGNED",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SIGNED_16P1_tags_3,
+       sizeof(asn_DEF_SIGNED_16P1_tags_3)
+               /sizeof(asn_DEF_SIGNED_16P1_tags_3[0]), /* 1 */
+       asn_DEF_SIGNED_16P1_tags_3,     /* Same as above */
+       sizeof(asn_DEF_SIGNED_16P1_tags_3)
+               /sizeof(asn_DEF_SIGNED_16P1_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_16P1_3,
+       1,      /* Elements count */
+       &asn_SPC_SIGNED_16P1_specs_3    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SignedREAL] >>> ***/
+
+#include "SIGNED.h"
+
+/*** <<< TYPE-DECLS [SignedREAL] >>> ***/
+
+typedef SIGNED_16P0_t   SignedREAL_t;
+
+/*** <<< FUNC-DECLS [SignedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SignedREAL;
+asn_struct_free_f SignedREAL_free;
+asn_struct_print_f SignedREAL_print;
+asn_constr_check_f SignedREAL_constraint;
+ber_type_decoder_f SignedREAL_decode_ber;
+der_type_encoder_f SignedREAL_encode_der;
+xer_type_decoder_f SignedREAL_decode_xer;
+xer_type_encoder_f SignedREAL_encode_xer;
+
+/*** <<< CODE [SignedREAL] >>> ***/
+
+/*
+ * This type is implemented using SIGNED_16P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SignedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SignedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SignedREAL = {
+       "SignedREAL",
+       "SignedREAL",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SignedREAL_tags_1,
+       sizeof(asn_DEF_SignedREAL_tags_1)
+               /sizeof(asn_DEF_SignedREAL_tags_1[0]), /* 1 */
+       asn_DEF_SignedREAL_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SignedREAL_tags_1)
+               /sizeof(asn_DEF_SignedREAL_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_16P0_1,
+       1,      /* Elements count */
+       &asn_SPC_SIGNED_16P0_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SignedSET] >>> ***/
+
+#include "SIGNED.h"
+
+/*** <<< TYPE-DECLS [SignedSET] >>> ***/
+
+typedef SIGNED_16P1_t   SignedSET_t;
+
+/*** <<< FUNC-DECLS [SignedSET] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SignedSET;
+asn_struct_free_f SignedSET_free;
+asn_struct_print_f SignedSET_print;
+asn_constr_check_f SignedSET_constraint;
+ber_type_decoder_f SignedSET_decode_ber;
+der_type_encoder_f SignedSET_encode_der;
+xer_type_decoder_f SignedSET_decode_xer;
+xer_type_encoder_f SignedSET_encode_xer;
+
+/*** <<< CODE [SignedSET] >>> ***/
+
+/*
+ * This type is implemented using SIGNED_16P1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SignedSET] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SignedSET_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SignedSET = {
+       "SignedSET",
+       "SignedSET",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SignedSET_tags_1,
+       sizeof(asn_DEF_SignedSET_tags_1)
+               /sizeof(asn_DEF_SignedSET_tags_1[0]), /* 1 */
+       asn_DEF_SignedSET_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SignedSET_tags_1)
+               /sizeof(asn_DEF_SignedSET_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_16P1_3,
+       1,      /* Elements count */
+       &asn_SPC_SIGNED_16P1_specs_3    /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/106-param-constr-OK.asn1 b/tests/tests-asn1c-compiler/106-param-constr-OK.asn1
new file mode 100644 (file)
index 0000000..ea63c3d
--- /dev/null
@@ -0,0 +1,22 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .106
+
+ModuleParameterizationWithConstraints
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 106 }
+       DEFINITIONS ::=
+BEGIN
+
+       Narrow {Type, INTEGER:value} ::= SEQUENCE {
+               narrow1 Type (1..5)     DEFAULT value,
+               narrow2 [0] Type (2..5),
+               narrow3 [1] Type (3..5) OPTIONAL
+       }
+
+       NarrowInteger ::= Narrow {INTEGER (0..10), 3}
+
+END
diff --git a/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P b/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P
new file mode 100644 (file)
index 0000000..fe41bed
--- /dev/null
@@ -0,0 +1,235 @@
+
+/*** <<< INCLUDES [Narrow] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Narrow] >>> ***/
+
+typedef struct Narrow_15P0 {
+       long    *narrow1;       /* DEFAULT 3 */
+       long     narrow2;
+       long    *narrow3;       /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Narrow_15P0_t;
+
+/*** <<< FUNC-DECLS [Narrow] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Narrow_15P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_Narrow_15P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_Narrow_15P0_1[3];
+
+/*** <<< CODE [Narrow] >>> ***/
+
+static int
+memb_narrow1_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_narrow2_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 2 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_narrow3_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 3 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Narrow] >>> ***/
+
+static int asn_DFL_2_cmp_3(const void *sptr) {
+       const long *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 3 */
+       return (*st != 3);
+}
+static int asn_DFL_2_set_3(void **sptr) {
+       long *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 3 */
+       *st = 3;
+       return 0;
+}
+asn_TYPE_member_t asn_MBR_Narrow_15P0_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_narrow1_constraint_1 },
+               .default_value_cmp = &asn_DFL_2_cmp_3,  /* Compare DEFAULT 3 */
+               .default_value_set = &asn_DFL_2_set_3,  /* Set DEFAULT 3 */
+               .name = "narrow1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Narrow_15P0, narrow2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_narrow2_constraint_1 },
+               0, 0, /* No default value */
+               .name = "narrow2"
+               },
+       { ATF_POINTER, 1, offsetof(struct Narrow_15P0, narrow3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_narrow3_constraint_1 },
+               0, 0, /* No default value */
+               .name = "narrow3"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Narrow_15P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Narrow_15P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* narrow1 */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 }, /* narrow2 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 } /* narrow3 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Narrow_15P0_specs_1 = {
+       sizeof(struct Narrow_15P0),
+       offsetof(struct Narrow_15P0, _asn_ctx),
+       .tag2el = asn_MAP_Narrow_15P0_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Narrow_15P0 = {
+       "Narrow",
+       "Narrow",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Narrow_15P0_tags_1,
+       sizeof(asn_DEF_Narrow_15P0_tags_1)
+               /sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
+       asn_DEF_Narrow_15P0_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Narrow_15P0_tags_1)
+               /sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Narrow_15P0_1,
+       3,      /* Elements count */
+       &asn_SPC_Narrow_15P0_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NarrowInteger] >>> ***/
+
+#include "Narrow.h"
+
+/*** <<< TYPE-DECLS [NarrowInteger] >>> ***/
+
+typedef Narrow_15P0_t   NarrowInteger_t;
+
+/*** <<< FUNC-DECLS [NarrowInteger] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NarrowInteger;
+asn_struct_free_f NarrowInteger_free;
+asn_struct_print_f NarrowInteger_print;
+asn_constr_check_f NarrowInteger_constraint;
+ber_type_decoder_f NarrowInteger_decode_ber;
+der_type_encoder_f NarrowInteger_encode_der;
+xer_type_decoder_f NarrowInteger_decode_xer;
+xer_type_encoder_f NarrowInteger_encode_xer;
+
+/*** <<< CODE [NarrowInteger] >>> ***/
+
+/*
+ * This type is implemented using Narrow_15P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NarrowInteger] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NarrowInteger_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NarrowInteger = {
+       "NarrowInteger",
+       "NarrowInteger",
+       &asn_OP_SEQUENCE,
+       asn_DEF_NarrowInteger_tags_1,
+       sizeof(asn_DEF_NarrowInteger_tags_1)
+               /sizeof(asn_DEF_NarrowInteger_tags_1[0]), /* 1 */
+       asn_DEF_NarrowInteger_tags_1,   /* Same as above */
+       sizeof(asn_DEF_NarrowInteger_tags_1)
+               /sizeof(asn_DEF_NarrowInteger_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Narrow_15P0_1,
+       3,      /* Elements count */
+       &asn_SPC_Narrow_15P0_specs_1    /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/107-param-constr-2-OK.asn1 b/tests/tests-asn1c-compiler/107-param-constr-2-OK.asn1
new file mode 100644 (file)
index 0000000..23d23ec
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .107
+
+ModuleParameterizationWithConstraints2
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 107 }
+       DEFINITIONS ::=
+BEGIN
+
+       Narrow {Type} ::= Type (2..5)
+
+       NarrowInteger ::= Narrow {INTEGER}
+
+END
diff --git a/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1 b/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1
new file mode 100644 (file)
index 0000000..2b52486
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .108
+
+ModuleParameterizationWithConstraints3
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 108 }
+       DEFINITIONS ::=
+BEGIN
+
+       MinMax {Type, INTEGER:low-bound} ::= Type (low-bound..MAX)
+
+       ThreePlus ::= MinMax {INTEGER, 3}
+
+END
diff --git a/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..3859933
--- /dev/null
@@ -0,0 +1,156 @@
+
+/*** <<< INCLUDES [MinMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [MinMax] >>> ***/
+
+typedef INTEGER_t       MinMax_16P0_t;
+
+/*** <<< FUNC-DECLS [MinMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_MinMax_16P0;
+asn_struct_free_f MinMax_16P0_free;
+asn_struct_print_f MinMax_16P0_print;
+asn_constr_check_f MinMax_16P0_constraint;
+ber_type_decoder_f MinMax_16P0_decode_ber;
+der_type_encoder_f MinMax_16P0_encode_der;
+xer_type_decoder_f MinMax_16P0_decode_xer;
+xer_type_encoder_f MinMax_16P0_encode_xer;
+
+/*** <<< CODE [MinMax] >>> ***/
+
+int
+MinMax_16P0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [MinMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_MinMax_16P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_MinMax_16P0 = {
+       "MinMax",
+       "MinMax",
+       &asn_OP_INTEGER,
+       asn_DEF_MinMax_16P0_tags_1,
+       sizeof(asn_DEF_MinMax_16P0_tags_1)
+               /sizeof(asn_DEF_MinMax_16P0_tags_1[0]), /* 1 */
+       asn_DEF_MinMax_16P0_tags_1,     /* Same as above */
+       sizeof(asn_DEF_MinMax_16P0_tags_1)
+               /sizeof(asn_DEF_MinMax_16P0_tags_1[0]), /* 1 */
+       { 0, 0, MinMax_16P0_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [ThreePlus] >>> ***/
+
+#include "MinMax.h"
+
+/*** <<< TYPE-DECLS [ThreePlus] >>> ***/
+
+typedef MinMax_16P0_t   ThreePlus_t;
+
+/*** <<< FUNC-DECLS [ThreePlus] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ThreePlus;
+asn_struct_free_f ThreePlus_free;
+asn_struct_print_f ThreePlus_print;
+asn_constr_check_f ThreePlus_constraint;
+ber_type_decoder_f ThreePlus_decode_ber;
+der_type_encoder_f ThreePlus_encode_der;
+xer_type_decoder_f ThreePlus_decode_xer;
+xer_type_encoder_f ThreePlus_encode_xer;
+
+/*** <<< CODE [ThreePlus] >>> ***/
+
+int
+ThreePlus_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const MinMax_16P0_t *st = (const MinMax_16P0_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using MinMax_16P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [ThreePlus] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ThreePlus_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ThreePlus = {
+       "ThreePlus",
+       "ThreePlus",
+       &asn_OP_INTEGER,
+       asn_DEF_ThreePlus_tags_1,
+       sizeof(asn_DEF_ThreePlus_tags_1)
+               /sizeof(asn_DEF_ThreePlus_tags_1[0]), /* 1 */
+       asn_DEF_ThreePlus_tags_1,       /* Same as above */
+       sizeof(asn_DEF_ThreePlus_tags_1)
+               /sizeof(asn_DEF_ThreePlus_tags_1[0]), /* 1 */
+       { 0, 0, ThreePlus_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/109-bit-string-NP.asn1 b/tests/tests-asn1c-compiler/109-bit-string-NP.asn1
new file mode 100644 (file)
index 0000000..f6cef8e
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- NP: Non-parseable
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .109
+
+ModuleBitStringExtensibility
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 109 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { one(1), ... }
+
+END
diff --git a/tests/tests-asn1c-compiler/11-int-SE.asn1 b/tests/tests-asn1c-compiler/11-int-SE.asn1
new file mode 100644 (file)
index 0000000..e140701
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .11
+
+ModuleTestInt5
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 11 }
+       DEFINITIONS ::=
+BEGIN
+
+       -- recursive definition loop
+       alpha INTEGER ::= beta
+       beta INTEGER ::= alpha
+
+END
diff --git a/tests/tests-asn1c-compiler/110-param-3-OK.asn1 b/tests/tests-asn1c-compiler/110-param-3-OK.asn1
new file mode 100644 (file)
index 0000000..383f16c
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .110
+
+ModuleParameterization3
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 110 }
+       DEFINITIONS ::=
+BEGIN
+
+       Flag{Color} ::= SEQUENCE {
+               field   Color DEFAULT blue
+       }
+
+       IntegerColorFlag ::= Flag{INTEGER{ red(0), green(1), blue(5) }}
+       EnumeratedColorFlag ::= Flag{ENUMERATED{ red(3), green, blue }}
+
+END
diff --git a/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfcompound-names
new file mode 100644 (file)
index 0000000..d3d1deb
--- /dev/null
@@ -0,0 +1,316 @@
+
+/*** <<< INCLUDES [Flag] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Flag] >>> ***/
+
+typedef enum Flag_15P0__field {
+       Flag_15P0__field_red    = 0,
+       Flag_15P0__field_green  = 1,
+       Flag_15P0__field_blue   = 5
+} e_Flag_15P0__field;
+typedef enum Flag_15P1__field {
+       Flag_15P1__field_red    = 3,
+       Flag_15P1__field_green  = 4,
+       Flag_15P1__field_blue   = 5
+} e_Flag_15P1__field;
+
+/*** <<< TYPE-DECLS [Flag] >>> ***/
+
+typedef struct Flag_15P0 {
+       long    *field; /* DEFAULT 5 */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Flag_15P0_t;
+typedef struct Flag_15P1 {
+       long    *field; /* DEFAULT 5 */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Flag_15P1_t;
+
+/*** <<< FUNC-DECLS [Flag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Flag_15P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_Flag_15P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_Flag_15P0_1[1];
+/* extern asn_TYPE_descriptor_t asn_DEF_field_7;       // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Flag_15P1;
+extern asn_SEQUENCE_specifics_t asn_SPC_Flag_15P1_specs_6;
+extern asn_TYPE_member_t asn_MBR_Flag_15P1_6[1];
+
+/*** <<< CODE [Flag] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Flag] >>> ***/
+
+static int asn_DFL_2_cmp_5(const void *sptr) {
+       const long *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 5 */
+       return (*st != 5);
+}
+static int asn_DFL_2_set_5(void **sptr) {
+       long *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 5 */
+       *st = 5;
+       return 0;
+}
+asn_TYPE_member_t asn_MBR_Flag_15P0_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Flag_15P0, field),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_2_cmp_5,  /* Compare DEFAULT 5 */
+               .default_value_set = &asn_DFL_2_set_5,  /* Set DEFAULT 5 */
+               .name = "field"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Flag_15P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Flag_15P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* field */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Flag_15P0_specs_1 = {
+       sizeof(struct Flag_15P0),
+       offsetof(struct Flag_15P0, _asn_ctx),
+       .tag2el = asn_MAP_Flag_15P0_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Flag_15P0 = {
+       "Flag",
+       "Flag",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Flag_15P0_tags_1,
+       sizeof(asn_DEF_Flag_15P0_tags_1)
+               /sizeof(asn_DEF_Flag_15P0_tags_1[0]), /* 1 */
+       asn_DEF_Flag_15P0_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Flag_15P0_tags_1)
+               /sizeof(asn_DEF_Flag_15P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Flag_15P0_1,
+       1,      /* Elements count */
+       &asn_SPC_Flag_15P0_specs_1      /* Additional specs */
+};
+
+static int asn_DFL_7_cmp_5(const void *sptr) {
+       const long *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 5 */
+       return (*st != 5);
+}
+static int asn_DFL_7_set_5(void **sptr) {
+       long *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 5 */
+       *st = 5;
+       return 0;
+}
+static const asn_INTEGER_enum_map_t asn_MAP_field_value2enum_7[] = {
+       { 3,    3,      "red" },
+       { 4,    5,      "green" },
+       { 5,    4,      "blue" }
+};
+static const unsigned int asn_MAP_field_enum2value_7[] = {
+       2,      /* blue(5) */
+       1,      /* green(4) */
+       0       /* red(3) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_field_specs_7 = {
+       asn_MAP_field_value2enum_7,     /* "tag" => N; sorted by tag */
+       asn_MAP_field_enum2value_7,     /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_field_tags_7[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_field_7 = {
+       "field",
+       "field",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_field_tags_7,
+       sizeof(asn_DEF_field_tags_7)
+               /sizeof(asn_DEF_field_tags_7[0]), /* 1 */
+       asn_DEF_field_tags_7,   /* Same as above */
+       sizeof(asn_DEF_field_tags_7)
+               /sizeof(asn_DEF_field_tags_7[0]), /* 1 */
+       { 0, 0, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_field_specs_7  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Flag_15P1_6[] = {
+       { ATF_POINTER, 1, offsetof(struct Flag_15P1, field),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_field_7,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_7_cmp_5,  /* Compare DEFAULT 5 */
+               .default_value_set = &asn_DFL_7_set_5,  /* Set DEFAULT 5 */
+               .name = "field"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Flag_15P1_tags_6[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Flag_15P1_tag2el_6[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 } /* field */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Flag_15P1_specs_6 = {
+       sizeof(struct Flag_15P1),
+       offsetof(struct Flag_15P1, _asn_ctx),
+       .tag2el = asn_MAP_Flag_15P1_tag2el_6,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Flag_15P1 = {
+       "Flag",
+       "Flag",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Flag_15P1_tags_6,
+       sizeof(asn_DEF_Flag_15P1_tags_6)
+               /sizeof(asn_DEF_Flag_15P1_tags_6[0]), /* 1 */
+       asn_DEF_Flag_15P1_tags_6,       /* Same as above */
+       sizeof(asn_DEF_Flag_15P1_tags_6)
+               /sizeof(asn_DEF_Flag_15P1_tags_6[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Flag_15P1_6,
+       1,      /* Elements count */
+       &asn_SPC_Flag_15P1_specs_6      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IntegerColorFlag] >>> ***/
+
+#include "Flag.h"
+
+/*** <<< TYPE-DECLS [IntegerColorFlag] >>> ***/
+
+typedef Flag_15P0_t     IntegerColorFlag_t;
+
+/*** <<< FUNC-DECLS [IntegerColorFlag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag;
+asn_struct_free_f IntegerColorFlag_free;
+asn_struct_print_f IntegerColorFlag_print;
+asn_constr_check_f IntegerColorFlag_constraint;
+ber_type_decoder_f IntegerColorFlag_decode_ber;
+der_type_encoder_f IntegerColorFlag_encode_der;
+xer_type_decoder_f IntegerColorFlag_decode_xer;
+xer_type_encoder_f IntegerColorFlag_encode_xer;
+
+/*** <<< CODE [IntegerColorFlag] >>> ***/
+
+/*
+ * This type is implemented using Flag_15P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IntegerColorFlag] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IntegerColorFlag_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag = {
+       "IntegerColorFlag",
+       "IntegerColorFlag",
+       &asn_OP_SEQUENCE,
+       asn_DEF_IntegerColorFlag_tags_1,
+       sizeof(asn_DEF_IntegerColorFlag_tags_1)
+               /sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
+       asn_DEF_IntegerColorFlag_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IntegerColorFlag_tags_1)
+               /sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Flag_15P0_1,
+       1,      /* Elements count */
+       &asn_SPC_Flag_15P0_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [EnumeratedColorFlag] >>> ***/
+
+#include "Flag.h"
+
+/*** <<< TYPE-DECLS [EnumeratedColorFlag] >>> ***/
+
+typedef Flag_15P1_t     EnumeratedColorFlag_t;
+
+/*** <<< FUNC-DECLS [EnumeratedColorFlag] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag;
+asn_struct_free_f EnumeratedColorFlag_free;
+asn_struct_print_f EnumeratedColorFlag_print;
+asn_constr_check_f EnumeratedColorFlag_constraint;
+ber_type_decoder_f EnumeratedColorFlag_decode_ber;
+der_type_encoder_f EnumeratedColorFlag_encode_der;
+xer_type_decoder_f EnumeratedColorFlag_decode_xer;
+xer_type_encoder_f EnumeratedColorFlag_encode_xer;
+
+/*** <<< CODE [EnumeratedColorFlag] >>> ***/
+
+/*
+ * This type is implemented using Flag_15P1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [EnumeratedColorFlag] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_EnumeratedColorFlag_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag = {
+       "EnumeratedColorFlag",
+       "EnumeratedColorFlag",
+       &asn_OP_SEQUENCE,
+       asn_DEF_EnumeratedColorFlag_tags_1,
+       sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
+               /sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
+       asn_DEF_EnumeratedColorFlag_tags_1,     /* Same as above */
+       sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
+               /sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Flag_15P1_6,
+       1,      /* Elements count */
+       &asn_SPC_Flag_15P1_specs_6      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/111-param-4-SE.asn1 b/tests/tests-asn1c-compiler/111-param-4-SE.asn1
new file mode 100644 (file)
index 0000000..4c542b8
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .111
+
+ModuleParameterization4
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 111 }
+       DEFINITIONS ::=
+BEGIN
+
+       Flag{Color} ::= SEQUENCE {
+               field   Color DEFAULT cyan
+       }
+
+       IntegerColorFlag ::= Flag{INTEGER{ red(0), green(1), blue(5) }}
+       EnumeratedColorFlag ::= Flag{ENUMERATED{ red(3), green, blue }}
+
+END
diff --git a/tests/tests-asn1c-compiler/112-param-class-OK.asn1 b/tests/tests-asn1c-compiler/112-param-class-OK.asn1
new file mode 100644 (file)
index 0000000..b19bc5e
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .112
+
+ModuleParameterizationClass
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 112 }
+       DEFINITIONS ::=
+BEGIN
+
+       PCLASS {Type, INTEGER:value, INTEGER:ValueSet} ::= CLASS {
+               &valueField1    Type,
+               &valueField2    INTEGER DEFAULT value,
+               &valueField3    INTEGER ({ValueSet}),
+               &ValueSetField  INTEGER DEFAULT {ValueSet}
+       } WITH SYNTAX {
+               &valueField1, &valueField2, &valueField3, &ValueSetField }
+
+       SCLASS ::= PCLASS {REAL, 111, {1 | 2 | 3}}
+
+END
diff --git a/tests/tests-asn1c-compiler/112-param-class-OK.asn1.-EF b/tests/tests-asn1c-compiler/112-param-class-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..be11ac0
--- /dev/null
@@ -0,0 +1,17 @@
+ModuleParameterizationClass { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 112 }
+DEFINITIONS ::=
+BEGIN
+
+PCLASS{Type, INTEGER:value, INTEGER:ValueSet} ::= CLASS {
+    &valueField1        Type,
+    &valueField2        INTEGER DEFAULT value,
+    &valueField3        INTEGER ({ValueSet}),
+    &ValueSetField      INTEGER DEFAULT {ValueSet}
+} WITH SYNTAX {
+               &valueField1, &valueField2, &valueField3, &ValueSetField }
+
+
+SCLASS ::= PCLASS{ REAL, 111,  {1 | 2 | 3}}
+
+END
diff --git a/tests/tests-asn1c-compiler/113-bit-string-SE.asn1 b/tests/tests-asn1c-compiler/113-bit-string-SE.asn1
new file mode 100644 (file)
index 0000000..79d4565
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .113
+
+ModuleBitStringIdentifierUniqueness
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 113 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { one(1), one(2) }
+
+END
diff --git a/tests/tests-asn1c-compiler/114-bit-string-NP.asn1 b/tests/tests-asn1c-compiler/114-bit-string-NP.asn1
new file mode 100644 (file)
index 0000000..b07abec
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- NP: Non-parseable
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .114
+
+ModuleBitStringNegativeInteger
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 114 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { one(-2) }
+
+END
diff --git a/tests/tests-asn1c-compiler/115-bit-string-OK.asn1 b/tests/tests-asn1c-compiler/115-bit-string-OK.asn1
new file mode 100644 (file)
index 0000000..5433470
--- /dev/null
@@ -0,0 +1,17 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .115
+
+ModuleBitStringReferencedValue
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 115 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { one(a) }
+       a INTEGER ::= 123
+
+END
diff --git a/tests/tests-asn1c-compiler/116-bit-string-SE.asn1 b/tests/tests-asn1c-compiler/116-bit-string-SE.asn1
new file mode 100644 (file)
index 0000000..f5967c0
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .116
+
+ModuleBitStringSameValues
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 116 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { one(1), another(1) }
+
+END
diff --git a/tests/tests-asn1c-compiler/117-real-constraint-OK.asn1 b/tests/tests-asn1c-compiler/117-real-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..7e0e5cd
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .117
+
+ModuleRealConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 117 }
+       DEFINITIONS ::=
+BEGIN
+
+       R ::= REAL (0..3.14159265)
+
+END
diff --git a/tests/tests-asn1c-compiler/117-real-constraint-OK.asn1.-EF b/tests/tests-asn1c-compiler/117-real-constraint-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..2745e14
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleRealConstraint { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 117 }
+DEFINITIONS ::=
+BEGIN
+
+R ::= REAL (0..3.141593)
+
+END
diff --git a/tests/tests-asn1c-compiler/118-per-constraint-OK.asn1 b/tests/tests-asn1c-compiler/118-per-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..98c9a35
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .118
+
+ModuleConstraintPrecedence
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 118 }
+       DEFINITIONS ::=
+BEGIN
+
+       E1 ::= IA5String (SIZE(1..5, ...) ^ FROM("A".."Z")) 
+       E2 ::= IA5String (SIZE(1..5,...,5)) (FROM("A".."Z")) 
+       E3 ::= IA5String (SIZE(1..5) ^ FROM("A".."Z"),...)
+       E4 ::= IA5String (FROM("A".."Z"),...) (SIZE(1..5)) 
+
+       C ::= IA5String (SIZE(10) ^ FROM("A".."D")
+                       | SIZE(20) ^ FROM("D".."F"))
+
+       P ::= IA5String (FROM("AB") ^ SIZE(1..2)
+                        | FROM("DE") ^ SIZE(3)
+                        | FROM("AXE") ^ SIZE(1..5))
+
+END
diff --git a/tests/tests-asn1c-compiler/118-per-constraint-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/118-per-constraint-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..82764e6
Binary files /dev/null and b/tests/tests-asn1c-compiler/118-per-constraint-OK.asn1.-EFprint-constraints differ
diff --git a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1 b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1
new file mode 100644 (file)
index 0000000..ae1ec46
--- /dev/null
@@ -0,0 +1,48 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .119
+
+ModulePERStrings
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 119 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       PDU ::= SEQUENCE {
+               many    SEQUENCE OF PDU                 OPTIONAL,
+               ia5     IA5String                       OPTIONAL,
+               ia5-c   IA5String (FROM("A".."Z"))      OPTIONAL,
+               ia5-ce  IA5String (FROM("A".."Z",...))  OPTIONAL,
+               ia5-ir  IA5String (FROM("A".."B"|"X".."Z")) OPTIONAL,
+               vs      VisibleString                   OPTIONAL,
+               vs-c    VisibleString (FROM("A".."Z"))  OPTIONAL,
+               vs-ce   VisibleString (FROM("A".."Z",...)) OPTIONAL,
+               vs-ir   VisibleString (FROM("A".."B"|"X".."Z")) OPTIONAL,
+               pr      PrintableString                 OPTIONAL,
+               pr-c    PrintableString (FROM("A".."Z")) OPTIONAL,
+               pr-ir   PrintableString (FROM("A".."B"|"X".."Z")) OPTIONAL,
+               ns      NumericString                   OPTIONAL,
+               ns-c    NumericString (FROM("5".."9"))  OPTIONAL,
+               ns-ce   NumericString (FROM("5".."9",...)) OPTIONAL,
+               ns-ir   NumericString (FROM("1"|"9")) OPTIONAL,
+               ut-c    UTF8String (SIZE(6))            OPTIONAL,
+               ut-ce   UTF8String (SIZE(6,...))        OPTIONAL,
+               ut-ir   UTF8String (FROM("A"|"Z"))      OPTIONAL,
+               bm      BMPString                       OPTIONAL,
+               bm-c    BMPString (FROM("A".."Z"))      OPTIONAL,
+               bm-cs   BMPString (SIZE(6))     OPTIONAL,
+               bm-ce   BMPString (FROM("A".."Z",...))  OPTIONAL,
+               bm-ir   BMPString (FROM("A".."B"|"X".."Z"))     OPTIONAL,
+               us      UniversalString                 OPTIONAL,
+               us-c    UniversalString (FROM("A".."Z"))        OPTIONAL,
+               us-cs   UniversalString (SIZE(6))       OPTIONAL,
+               us-ce   UniversalString (FROM("A".."Z",...))    OPTIONAL,
+               us-ir   UniversalString (FROM("A".."B"|"X".."Z")) OPTIONAL,
+               real    REAL                            OPTIONAL,
+               oid     OBJECT IDENTIFIER               OPTIONAL
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-EF b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..7819c03
--- /dev/null
@@ -0,0 +1,40 @@
+ModulePERStrings { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 119 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+PDU ::= SEQUENCE {
+    many        [0] IMPLICIT SEQUENCE OF PDU OPTIONAL,
+    ia5         [1] IMPLICIT IA5String OPTIONAL,
+    ia5-c       [2] IMPLICIT IA5String (FROM("A".."Z")) OPTIONAL,
+    ia5-ce      [3] IMPLICIT IA5String (FROM("A".."Z",...)) OPTIONAL,
+    ia5-ir      [4] IMPLICIT IA5String (FROM("A".."B" | "X".."Z")) OPTIONAL,
+    vs  [5] IMPLICIT VisibleString OPTIONAL,
+    vs-c        [6] IMPLICIT VisibleString (FROM("A".."Z")) OPTIONAL,
+    vs-ce       [7] IMPLICIT VisibleString (FROM("A".."Z",...)) OPTIONAL,
+    vs-ir       [8] IMPLICIT VisibleString (FROM("A".."B" | "X".."Z")) OPTIONAL,
+    pr  [9] IMPLICIT PrintableString OPTIONAL,
+    pr-c        [10] IMPLICIT PrintableString (FROM("A".."Z")) OPTIONAL,
+    pr-ir       [11] IMPLICIT PrintableString (FROM("A".."B" | "X".."Z")) OPTIONAL,
+    ns  [12] IMPLICIT NumericString OPTIONAL,
+    ns-c        [13] IMPLICIT NumericString (FROM("5".."9")) OPTIONAL,
+    ns-ce       [14] IMPLICIT NumericString (FROM("5".."9",...)) OPTIONAL,
+    ns-ir       [15] IMPLICIT NumericString (FROM("1" | "9")) OPTIONAL,
+    ut-c        [16] IMPLICIT UTF8String (SIZE(6)) OPTIONAL,
+    ut-ce       [17] IMPLICIT UTF8String (SIZE(6,...)) OPTIONAL,
+    ut-ir       [18] IMPLICIT UTF8String (FROM("A" | "Z")) OPTIONAL,
+    bm  [19] IMPLICIT BMPString OPTIONAL,
+    bm-c        [20] IMPLICIT BMPString (FROM("A".."Z")) OPTIONAL,
+    bm-cs       [21] IMPLICIT BMPString (SIZE(6)) OPTIONAL,
+    bm-ce       [22] IMPLICIT BMPString (FROM("A".."Z",...)) OPTIONAL,
+    bm-ir       [23] IMPLICIT BMPString (FROM("A".."B" | "X".."Z")) OPTIONAL,
+    us  [24] IMPLICIT UniversalString OPTIONAL,
+    us-c        [25] IMPLICIT UniversalString (FROM("A".."Z")) OPTIONAL,
+    us-cs       [26] IMPLICIT UniversalString (SIZE(6)) OPTIONAL,
+    us-ce       [27] IMPLICIT UniversalString (FROM("A".."Z",...)) OPTIONAL,
+    us-ir       [28] IMPLICIT UniversalString (FROM("A".."B" | "X".."Z")) OPTIONAL,
+    real        [29] IMPLICIT REAL OPTIONAL,
+    oid         [30] IMPLICIT OBJECT IDENTIFIER OPTIONAL
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..cf75f42
--- /dev/null
@@ -0,0 +1,1565 @@
+
+/*** <<< INCLUDES [PDU] >>> ***/
+
+#include <IA5String.h>
+#include <VisibleString.h>
+#include <PrintableString.h>
+#include <NumericString.h>
+#include <UTF8String.h>
+#include <BMPString.h>
+#include <UniversalString.h>
+#include <NativeReal.h>
+#include <OBJECT_IDENTIFIER.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [PDU] >>> ***/
+
+struct PDU;
+
+/*** <<< TYPE-DECLS [PDU] >>> ***/
+
+typedef struct PDU {
+       struct many {
+               A_SEQUENCE_OF(struct PDU) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *many;
+       IA5String_t     *ia5;   /* OPTIONAL */
+       IA5String_t     *ia5_c; /* OPTIONAL */
+       IA5String_t     *ia5_ce;        /* OPTIONAL */
+       IA5String_t     *ia5_ir;        /* OPTIONAL */
+       VisibleString_t *vs;    /* OPTIONAL */
+       VisibleString_t *vs_c;  /* OPTIONAL */
+       VisibleString_t *vs_ce; /* OPTIONAL */
+       VisibleString_t *vs_ir; /* OPTIONAL */
+       PrintableString_t       *pr;    /* OPTIONAL */
+       PrintableString_t       *pr_c;  /* OPTIONAL */
+       PrintableString_t       *pr_ir; /* OPTIONAL */
+       NumericString_t *ns;    /* OPTIONAL */
+       NumericString_t *ns_c;  /* OPTIONAL */
+       NumericString_t *ns_ce; /* OPTIONAL */
+       NumericString_t *ns_ir; /* OPTIONAL */
+       UTF8String_t    *ut_c;  /* OPTIONAL */
+       UTF8String_t    *ut_ce; /* OPTIONAL */
+       UTF8String_t    *ut_ir; /* OPTIONAL */
+       BMPString_t     *bm;    /* OPTIONAL */
+       BMPString_t     *bm_c;  /* OPTIONAL */
+       BMPString_t     *bm_cs; /* OPTIONAL */
+       BMPString_t     *bm_ce; /* OPTIONAL */
+       BMPString_t     *bm_ir; /* OPTIONAL */
+       UniversalString_t       *us;    /* OPTIONAL */
+       UniversalString_t       *us_c;  /* OPTIONAL */
+       UniversalString_t       *us_cs; /* OPTIONAL */
+       UniversalString_t       *us_ce; /* OPTIONAL */
+       UniversalString_t       *us_ir; /* OPTIONAL */
+       double  *real;  /* OPTIONAL */
+       OBJECT_IDENTIFIER_t     *oid;   /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PDU_t;
+
+/*** <<< FUNC-DECLS [PDU] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PDU;
+extern asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1;
+extern asn_TYPE_member_t asn_MBR_PDU_1[31];
+
+/*** <<< POST-INCLUDE [PDU] >>> ***/
+
+#include "PDU.h"
+
+/*** <<< CTABLES [PDU] >>> ***/
+
+static int check_permitted_alphabet_5(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_6(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_7[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  AB              */
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0,       /*         XYZ      */
+};
+static const int permitted_alphabet_code2value_7[5] = {
+65,66,88,89,90,};
+
+
+static int check_permitted_alphabet_7(const void *sptr) {
+       const int *table = permitted_alphabet_table_7;
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_9(const void *sptr) {
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_10(const void *sptr) {
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_11[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  AB              */
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0,       /*         XYZ      */
+};
+static const int permitted_alphabet_code2value_11[5] = {
+65,66,88,89,90,};
+
+
+static int check_permitted_alphabet_11(const void *sptr) {
+       const int *table = permitted_alphabet_table_11;
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_13(const void *sptr) {
+       /* The underlying type is PrintableString */
+       const PrintableString_t *st = (const PrintableString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_14[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  AB              */
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0,       /*         XYZ      */
+};
+static const int permitted_alphabet_code2value_14[5] = {
+65,66,88,89,90,};
+
+
+static int check_permitted_alphabet_14(const void *sptr) {
+       const int *table = permitted_alphabet_table_14;
+       /* The underlying type is PrintableString */
+       const PrintableString_t *st = (const PrintableString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_16(const void *sptr) {
+       /* The underlying type is NumericString */
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 53 && cv <= 57)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_17(const void *sptr) {
+       /* The underlying type is NumericString */
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 53 && cv <= 57)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_18[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,       /*  1       9       */
+};
+static const int permitted_alphabet_code2value_18[2] = {
+49,57,};
+
+
+static int check_permitted_alphabet_18(const void *sptr) {
+       const int *table = permitted_alphabet_table_18;
+       /* The underlying type is NumericString */
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_21[128] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  A               */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,       /*           Z      */
+};
+
+static int check_permitted_alphabet_21(const void *sptr) {
+       const int *table = permitted_alphabet_table_21;
+       /* The underlying type is UTF8String */
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(cv >= 0x80) return -1;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_23(const void *sptr) {
+       /* The underlying type is BMPString */
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 2) return -1; /* (size%2)! */
+       for(; ch < end; ch += 2) {
+               uint16_t cv = (ch[0] << 8)
+                               | ch[1];
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_24(const void *sptr) {
+       /* The underlying type is BMPString */
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 2) return -1; /* (size%2)! */
+       for(; ch < end; ch += 2) {
+               uint16_t cv = (ch[0] << 8)
+                               | ch[1];
+               if(!(cv <= 65533)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_25(const void *sptr) {
+       /* The underlying type is BMPString */
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 2) return -1; /* (size%2)! */
+       for(; ch < end; ch += 2) {
+               uint16_t cv = (ch[0] << 8)
+                               | ch[1];
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_26[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  AB              */
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0,       /*         XYZ      */
+};
+static const int permitted_alphabet_code2value_26[5] = {
+65,66,88,89,90,};
+
+
+static int check_permitted_alphabet_26(const void *sptr) {
+       const int *table = permitted_alphabet_table_26;
+       /* The underlying type is BMPString */
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 2) return -1; /* (size%2)! */
+       for(; ch < end; ch += 2) {
+               uint16_t cv = (ch[0] << 8)
+                               | ch[1];
+               if(cv > 255) return -1;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_28(const void *sptr) {
+       /* The underlying type is UniversalString */
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 4) return -1; /* (size%4)! */
+       for(; ch < end; ch += 4) {
+               uint32_t cv = (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_29(const void *sptr) {
+       /* The underlying type is UniversalString */
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 4) return -1; /* (size%4)! */
+       for(; ch < end; ch += 4) {
+               uint32_t cv = (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];
+               (void)cv; /* Unused variable */
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_30(const void *sptr) {
+       /* The underlying type is UniversalString */
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 4) return -1; /* (size%4)! */
+       for(; ch < end; ch += 4) {
+               uint32_t cv = (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static const int permitted_alphabet_table_31[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  AB              */
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 0, 0,       /*         XYZ      */
+};
+static const int permitted_alphabet_code2value_31[5] = {
+65,66,88,89,90,};
+
+
+static int check_permitted_alphabet_31(const void *sptr) {
+       const int *table = permitted_alphabet_table_31;
+       /* The underlying type is UniversalString */
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 4) return -1; /* (size%4)! */
+       for(; ch < end; ch += 4) {
+               uint32_t cv = (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];
+               if(cv > 255) return -1;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [PDU] >>> ***/
+
+static int
+memb_ia5_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_5(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ia5_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_6(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ia5_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_7(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_ia5_ir_7_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_7)/sizeof(permitted_alphabet_table_7[0]))
+               return -1;
+       return permitted_alphabet_table_7[value] - 1;
+}
+static int asn_PER_MAP_ia5_ir_7_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_7)/sizeof(permitted_alphabet_code2value_7[0]))
+               return -1;
+       return permitted_alphabet_code2value_7[code];
+}
+static int
+memb_vs_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_9(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_vs_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_10(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_vs_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_11(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_vs_ir_11_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_11)/sizeof(permitted_alphabet_table_11[0]))
+               return -1;
+       return permitted_alphabet_table_11[value] - 1;
+}
+static int asn_PER_MAP_vs_ir_11_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_11)/sizeof(permitted_alphabet_code2value_11[0]))
+               return -1;
+       return permitted_alphabet_code2value_11[code];
+}
+static int
+memb_pr_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PrintableString_t *st = (const PrintableString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_13(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_pr_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PrintableString_t *st = (const PrintableString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_14(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_pr_ir_14_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_14)/sizeof(permitted_alphabet_table_14[0]))
+               return -1;
+       return permitted_alphabet_table_14[value] - 1;
+}
+static int asn_PER_MAP_pr_ir_14_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_14)/sizeof(permitted_alphabet_code2value_14[0]))
+               return -1;
+       return permitted_alphabet_code2value_14[code];
+}
+static int
+memb_ns_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_16(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ns_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_17(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ns_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const NumericString_t *st = (const NumericString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_18(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_ns_ir_18_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_18)/sizeof(permitted_alphabet_table_18[0]))
+               return -1;
+       return permitted_alphabet_table_18[value] - 1;
+}
+static int asn_PER_MAP_ns_ir_18_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_18)/sizeof(permitted_alphabet_code2value_18[0]))
+               return -1;
+       return permitted_alphabet_code2value_18[code];
+}
+static int
+memb_ut_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size == 6)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ut_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size == 6)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_ut_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_21(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_bm_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_23(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_bm_cs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size >> 1;   /* 2 byte per character */
+       
+       if((size == 6)
+                && !check_permitted_alphabet_24(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_bm_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_25(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_bm_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BMPString_t *st = (const BMPString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_26(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_bm_ir_26_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_26)/sizeof(permitted_alphabet_table_26[0]))
+               return -1;
+       return permitted_alphabet_table_26[value] - 1;
+}
+static int asn_PER_MAP_bm_ir_26_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_26)/sizeof(permitted_alphabet_code2value_26[0]))
+               return -1;
+       return permitted_alphabet_code2value_26[code];
+}
+static int
+memb_us_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_28(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_us_cs_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size >> 2;   /* 4 byte per character */
+       
+       if((size == 6)
+                && !check_permitted_alphabet_29(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_us_ce_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_30(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_us_ir_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_31(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_us_ir_31_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_31)/sizeof(permitted_alphabet_table_31[0]))
+               return -1;
+       return permitted_alphabet_table_31[value] - 1;
+}
+static int asn_PER_MAP_us_ir_31_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_31)/sizeof(permitted_alphabet_code2value_31[0]))
+               return -1;
+       return permitted_alphabet_code2value_31[code];
+}
+
+/*** <<< CTDEFS [PDU] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_ia5_c_constr_5 CC_NOTUSED = {
+       { APC_CONSTRAINED,       5,  5,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_ia5_ce_constr_6 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_ia5_ir_constr_7 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_ia5_ir_7_v2c,       /* Value to PER code map */
+       asn_PER_MAP_ia5_ir_7_c2v        /* PER code to value map */
+};
+static asn_per_constraints_t asn_PER_memb_vs_c_constr_9 CC_NOTUSED = {
+       { APC_CONSTRAINED,       5,  5,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_vs_ce_constr_10 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_vs_ir_constr_11 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_vs_ir_11_v2c,       /* Value to PER code map */
+       asn_PER_MAP_vs_ir_11_c2v        /* PER code to value map */
+};
+static asn_per_constraints_t asn_PER_memb_pr_c_constr_13 CC_NOTUSED = {
+       { APC_CONSTRAINED,       5,  5,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_pr_ir_constr_14 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_pr_ir_14_v2c,       /* Value to PER code map */
+       asn_PER_MAP_pr_ir_14_c2v        /* PER code to value map */
+};
+static asn_per_constraints_t asn_PER_memb_ns_c_constr_16 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  53,  57 }      /* (53..57) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_ns_ce_constr_17 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_ns_ir_constr_18 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  49,  57 }      /* (49..57) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_ns_ir_18_v2c,       /* Value to PER code map */
+       asn_PER_MAP_ns_ir_18_c2v        /* PER code to value map */
+};
+static asn_per_constraints_t asn_PER_memb_ut_c_constr_19 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_ut_ce_constr_20 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_ut_ir_constr_21 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_bm_c_constr_23 CC_NOTUSED = {
+       { APC_CONSTRAINED,       5,  5,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_bm_cs_constr_24 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65533 }  /* (0..65533) */,
+       { APC_CONSTRAINED,       0,  0,  6,  6 }        /* (SIZE(6..6)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_bm_ce_constr_25 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_bm_ir_constr_26 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_bm_ir_26_v2c,       /* Value to PER code map */
+       asn_PER_MAP_bm_ir_26_c2v        /* PER code to value map */
+};
+static asn_per_constraints_t asn_PER_memb_us_c_constr_28 CC_NOTUSED = {
+       { APC_CONSTRAINED,       5,  5,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_us_cs_constr_29 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32,  32,  0,  2147483647 }     /* (0..4294967295) */,
+       { APC_CONSTRAINED,       0,  0,  6,  6 }        /* (SIZE(6..6)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_us_ce_constr_30 CC_NOTUSED = {
+       { APC_CONSTRAINED,      32, 32, 0, 2147483647 } /* special case 1 */
+       ,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+static asn_per_constraints_t asn_PER_memb_us_ir_constr_31 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  90 }      /* (65..90) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       asn_PER_MAP_us_ir_31_v2c,       /* Value to PER code map */
+       asn_PER_MAP_us_ir_31_c2v        /* PER code to value map */
+};
+
+/*** <<< STAT-DEFS [PDU] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_many_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_PDU,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_many_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_many_specs_2 = {
+       sizeof(struct many),
+       offsetof(struct many, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_many_2 = {
+       "many",
+       "many",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_many_tags_2,
+       sizeof(asn_DEF_many_tags_2)
+               /sizeof(asn_DEF_many_tags_2[0]) - 1, /* 1 */
+       asn_DEF_many_tags_2,    /* Same as above */
+       sizeof(asn_DEF_many_tags_2)
+               /sizeof(asn_DEF_many_tags_2[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_many_2,
+       1,      /* Single element */
+       &asn_SPC_many_specs_2   /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_PDU_1[] = {
+       { ATF_POINTER, 31, offsetof(struct PDU, many),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_many_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "many"
+               },
+       { ATF_POINTER, 30, offsetof(struct PDU, ia5),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ia5"
+               },
+       { ATF_POINTER, 29, offsetof(struct PDU, ia5_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ia5_c_constr_5, .general_constraints =  memb_ia5_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ia5-c"
+               },
+       { ATF_POINTER, 28, offsetof(struct PDU, ia5_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ia5_ce_constr_6, .general_constraints =  memb_ia5_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ia5-ce"
+               },
+       { ATF_POINTER, 27, offsetof(struct PDU, ia5_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ia5_ir_constr_7, .general_constraints =  memb_ia5_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ia5-ir"
+               },
+       { ATF_POINTER, 26, offsetof(struct PDU, vs),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "vs"
+               },
+       { ATF_POINTER, 25, offsetof(struct PDU, vs_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_vs_c_constr_9, .general_constraints =  memb_vs_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "vs-c"
+               },
+       { ATF_POINTER, 24, offsetof(struct PDU, vs_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_vs_ce_constr_10, .general_constraints =  memb_vs_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "vs-ce"
+               },
+       { ATF_POINTER, 23, offsetof(struct PDU, vs_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_vs_ir_constr_11, .general_constraints =  memb_vs_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "vs-ir"
+               },
+       { ATF_POINTER, 22, offsetof(struct PDU, pr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_PrintableString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "pr"
+               },
+       { ATF_POINTER, 21, offsetof(struct PDU, pr_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_PrintableString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_pr_c_constr_13, .general_constraints =  memb_pr_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "pr-c"
+               },
+       { ATF_POINTER, 20, offsetof(struct PDU, pr_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (11 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_PrintableString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_pr_ir_constr_14, .general_constraints =  memb_pr_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "pr-ir"
+               },
+       { ATF_POINTER, 19, offsetof(struct PDU, ns),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (12 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NumericString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ns"
+               },
+       { ATF_POINTER, 18, offsetof(struct PDU, ns_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (13 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NumericString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ns_c_constr_16, .general_constraints =  memb_ns_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ns-c"
+               },
+       { ATF_POINTER, 17, offsetof(struct PDU, ns_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (14 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NumericString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ns_ce_constr_17, .general_constraints =  memb_ns_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ns-ce"
+               },
+       { ATF_POINTER, 16, offsetof(struct PDU, ns_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (15 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NumericString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ns_ir_constr_18, .general_constraints =  memb_ns_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ns-ir"
+               },
+       { ATF_POINTER, 15, offsetof(struct PDU, ut_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (16 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ut_c_constr_19, .general_constraints =  memb_ut_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ut-c"
+               },
+       { ATF_POINTER, 14, offsetof(struct PDU, ut_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (17 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ut_ce_constr_20, .general_constraints =  memb_ut_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ut-ce"
+               },
+       { ATF_POINTER, 13, offsetof(struct PDU, ut_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (18 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_ut_ir_constr_21, .general_constraints =  memb_ut_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ut-ir"
+               },
+       { ATF_POINTER, 12, offsetof(struct PDU, bm),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (19 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BMPString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bm"
+               },
+       { ATF_POINTER, 11, offsetof(struct PDU, bm_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (20 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BMPString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_bm_c_constr_23, .general_constraints =  memb_bm_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "bm-c"
+               },
+       { ATF_POINTER, 10, offsetof(struct PDU, bm_cs),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (21 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BMPString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_bm_cs_constr_24, .general_constraints =  memb_bm_cs_constraint_1 },
+               0, 0, /* No default value */
+               .name = "bm-cs"
+               },
+       { ATF_POINTER, 9, offsetof(struct PDU, bm_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (22 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BMPString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_bm_ce_constr_25, .general_constraints =  memb_bm_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "bm-ce"
+               },
+       { ATF_POINTER, 8, offsetof(struct PDU, bm_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (23 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BMPString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_bm_ir_constr_26, .general_constraints =  memb_bm_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "bm-ir"
+               },
+       { ATF_POINTER, 7, offsetof(struct PDU, us),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (24 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "us"
+               },
+       { ATF_POINTER, 6, offsetof(struct PDU, us_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (25 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_us_c_constr_28, .general_constraints =  memb_us_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "us-c"
+               },
+       { ATF_POINTER, 5, offsetof(struct PDU, us_cs),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (26 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_us_cs_constr_29, .general_constraints =  memb_us_cs_constraint_1 },
+               0, 0, /* No default value */
+               .name = "us-cs"
+               },
+       { ATF_POINTER, 4, offsetof(struct PDU, us_ce),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (27 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_us_ce_constr_30, .general_constraints =  memb_us_ce_constraint_1 },
+               0, 0, /* No default value */
+               .name = "us-ce"
+               },
+       { ATF_POINTER, 3, offsetof(struct PDU, us_ir),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (28 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_us_ir_constr_31, .general_constraints =  memb_us_ir_constraint_1 },
+               0, 0, /* No default value */
+               .name = "us-ir"
+               },
+       { ATF_POINTER, 2, offsetof(struct PDU, real),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (29 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeReal,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "real"
+               },
+       { ATF_POINTER, 1, offsetof(struct PDU, oid),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (30 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OBJECT_IDENTIFIER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "oid"
+               },
+};
+static const int asn_MAP_PDU_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 };
+static const ber_tlv_tag_t asn_DEF_PDU_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* many */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ia5 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ia5-c */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ia5-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ia5-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* vs */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* vs-c */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* vs-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* vs-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* pr */
+    { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* pr-c */
+    { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* pr-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* ns */
+    { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* ns-c */
+    { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* ns-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 }, /* ns-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (16 << 2)), 16, 0, 0 }, /* ut-c */
+    { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), 17, 0, 0 }, /* ut-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (18 << 2)), 18, 0, 0 }, /* ut-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (19 << 2)), 19, 0, 0 }, /* bm */
+    { (ASN_TAG_CLASS_CONTEXT | (20 << 2)), 20, 0, 0 }, /* bm-c */
+    { (ASN_TAG_CLASS_CONTEXT | (21 << 2)), 21, 0, 0 }, /* bm-cs */
+    { (ASN_TAG_CLASS_CONTEXT | (22 << 2)), 22, 0, 0 }, /* bm-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (23 << 2)), 23, 0, 0 }, /* bm-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (24 << 2)), 24, 0, 0 }, /* us */
+    { (ASN_TAG_CLASS_CONTEXT | (25 << 2)), 25, 0, 0 }, /* us-c */
+    { (ASN_TAG_CLASS_CONTEXT | (26 << 2)), 26, 0, 0 }, /* us-cs */
+    { (ASN_TAG_CLASS_CONTEXT | (27 << 2)), 27, 0, 0 }, /* us-ce */
+    { (ASN_TAG_CLASS_CONTEXT | (28 << 2)), 28, 0, 0 }, /* us-ir */
+    { (ASN_TAG_CLASS_CONTEXT | (29 << 2)), 29, 0, 0 }, /* real */
+    { (ASN_TAG_CLASS_CONTEXT | (30 << 2)), 30, 0, 0 } /* oid */
+};
+asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1 = {
+       sizeof(struct PDU),
+       offsetof(struct PDU, _asn_ctx),
+       .tag2el = asn_MAP_PDU_tag2el_1,
+       .tag2el_count = 31,     /* Count of tags in the map */
+       asn_MAP_PDU_oms_1,      /* Optional members */
+       31, 0,  /* Root/Additions */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PDU = {
+       "PDU",
+       "PDU",
+       &asn_OP_SEQUENCE,
+       asn_DEF_PDU_tags_1,
+       sizeof(asn_DEF_PDU_tags_1)
+               /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
+       asn_DEF_PDU_tags_1,     /* Same as above */
+       sizeof(asn_DEF_PDU_tags_1)
+               /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_PDU_1,
+       31,     /* Elements count */
+       &asn_SPC_PDU_specs_1    /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/12-int-SE.asn1 b/tests/tests-asn1c-compiler/12-int-SE.asn1
new file mode 100644 (file)
index 0000000..92ab358
--- /dev/null
@@ -0,0 +1,17 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .12
+
+ModuleTestInt6
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 12 }
+       DEFINITIONS ::=
+BEGIN
+
+       -- unresolved reference
+       alpha INTEGER ::= beta
+
+END
diff --git a/tests/tests-asn1c-compiler/121-empty-imports-OK.asn1 b/tests/tests-asn1c-compiler/121-empty-imports-OK.asn1
new file mode 100644 (file)
index 0000000..bbf1d1e
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .121
+
+ModuleEmptyIMPORTS
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 121 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       IMPORTS -- nothing --;
+
+       Type ::= INTEGER
+
+END
diff --git a/tests/tests-asn1c-compiler/121-empty-imports-OK.asn1.-EF b/tests/tests-asn1c-compiler/121-empty-imports-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..a5ad681
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleEmptyIMPORTS { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 121 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+Type ::= INTEGER
+
+END
diff --git a/tests/tests-asn1c-compiler/122-pattern-OK.asn1 b/tests/tests-asn1c-compiler/122-pattern-OK.asn1
new file mode 100644 (file)
index 0000000..16c823f
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .122
+
+ModulePatternConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 122 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Language ::= VisibleString (FROM ("a".."z" | "A".."Z" | "-" | "0".."9"))
+               (PATTERN "[a-zA-Z]#(1,8)(-[a-zA-Z0-9]#(1,8))*")
+
+       PatternByRef1 ::= VisibleString (PATTERN refPattern1)
+       PatternByRef2 ::= VisibleString (PATTERN refPattern2)
+
+       refPattern1 UniversalString ::= "[a-zA-Z]#(1,8)(-[a-zA-Z0-9]#(1,8))*"
+       refPattern2 UTF8String ::= "[a-zA-Z]#(1,8)(-[a-zA-Z0-9]#(1,8))*"
+
+END
diff --git a/tests/tests-asn1c-compiler/123-valueassignment-OK.asn1 b/tests/tests-asn1c-compiler/123-valueassignment-OK.asn1
new file mode 100644 (file)
index 0000000..bb54fc5
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .123
+
+ModuleValueAssignmentConstrained
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 123 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       zzz OCTET STRING (SIZE(1)) ::= '1'H
+
+END
diff --git a/tests/tests-asn1c-compiler/123-valueassignment-OK.asn1.-EF b/tests/tests-asn1c-compiler/123-valueassignment-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..8fe6f2c
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleValueAssignmentConstrained { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 123 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+zzz OCTET STRING (SIZE(1)) ::= '0001'B
+
+END
diff --git a/tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1 b/tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1
new file mode 100644 (file)
index 0000000..577a142
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .124
+
+ModuleMultiConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 124 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= VisibleString (PATTERN "^[a-z]+$") (CONSTRAINED BY { ... })
+
+END
diff --git a/tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1.-EF b/tests/tests-asn1c-compiler/124-multiconstraint-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..e97f1a3
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleMultiConstraint { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 124 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+T ::= VisibleString (PATTERN "^[a-z]+$") (CONSTRAINED BY { ... })
+
+END
diff --git a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1 b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..d175ce7
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .125
+
+ModuleBitStringConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 125 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= BIT STRING { flag1(0), flag2(1), flag3(2) }
+               ('000'B | '001'B | '010'B | '011'B)
+
+
+END
diff --git a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-EF b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..0887560
--- /dev/null
@@ -0,0 +1,12 @@
+ModuleBitStringConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 125 }
+DEFINITIONS ::=
+BEGIN
+
+T ::= BIT STRING {
+    flag1(0),
+    flag2(1),
+    flag3(2)
+} ('000'B | '001'B | '010'B | '011'B)
+
+END
diff --git a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P
new file mode 100644 (file)
index 0000000..627c271
--- /dev/null
@@ -0,0 +1,76 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <BIT_STRING.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T {
+       T_flag1 = 0,
+       T_flag2 = 1,
+       T_flag3 = 2
+} e_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef BIT_STRING_t    T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+asn_struct_free_f T_free;
+asn_struct_print_f T_print;
+asn_constr_check_f T_constraint;
+ber_type_decoder_f T_decode_ber;
+der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
+xer_type_encoder_f T_encode_xer;
+
+/*** <<< CODE [T] >>> ***/
+
+int
+T_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               (void)st; /* Unused variable */
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using BIT_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (3 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_BIT_STRING,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, T_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_BIT_STRING_specs       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-X b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-X
new file mode 100644 (file)
index 0000000..a5a7291
--- /dev/null
@@ -0,0 +1,8 @@
+<!-- XML DTD generated by asn1c-0.9.29 -->
+
+<!-- ASN.1 module
+ModuleBitStringConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 125 }
+found in ../../tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1 -->
+
+<!ELEMENT T (flag1?, flag2?, flag3?)>
diff --git a/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1 b/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1
new file mode 100644 (file)
index 0000000..7d12173
--- /dev/null
@@ -0,0 +1,33 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .126
+
+ModulePERExtensions
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 126 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       PDU ::= SEQUENCE {
+               ...,
+               str-o   IA5String       OPTIONAL,
+               str-m   IA5String,
+               singl   Singleton,
+               pdu-2   PDU-2   OPTIONAL
+       }
+
+       Singleton ::= SEQUENCE {
+               opt-z   IA5String DEFAULT "z"
+       }
+
+       PDU-2 ::= CHOICE {
+               main [3] INTEGER,
+               ...,
+               ext1 [1] INTEGER,
+               ext0 [0] INTEGER
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..d480145
--- /dev/null
@@ -0,0 +1,322 @@
+
+/*** <<< INCLUDES [PDU] >>> ***/
+
+#include <IA5String.h>
+#include "Singleton.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [PDU] >>> ***/
+
+struct PDU_2;
+struct Singleton;
+
+/*** <<< TYPE-DECLS [PDU] >>> ***/
+
+typedef struct PDU {
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       IA5String_t     *str_o; /* OPTIONAL */
+       IA5String_t     *str_m;
+       struct Singleton        *singl;
+       struct PDU_2    *pdu_2; /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PDU_t;
+
+/*** <<< FUNC-DECLS [PDU] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PDU;
+
+/*** <<< POST-INCLUDE [PDU] >>> ***/
+
+#include "PDU-2.h"
+
+/*** <<< STAT-DEFS [PDU] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_PDU_1[] = {
+       { ATF_POINTER, 4, offsetof(struct PDU, str_o),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "str-o"
+               },
+       { ATF_POINTER, 3, offsetof(struct PDU, str_m),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "str-m"
+               },
+       { ATF_POINTER, 2, offsetof(struct PDU, singl),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Singleton,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "singl"
+               },
+       { ATF_POINTER, 1, offsetof(struct PDU, pdu_2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_PDU_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "pdu-2"
+               },
+};
+static const int asn_MAP_PDU_oms_1[] = { 0, 1, 2, 3 };
+static const ber_tlv_tag_t asn_DEF_PDU_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* str-o */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* str-m */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* singl */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pdu-2 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1 = {
+       sizeof(struct PDU),
+       offsetof(struct PDU, _asn_ctx),
+       .tag2el = asn_MAP_PDU_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       asn_MAP_PDU_oms_1,      /* Optional members */
+       0, 4,   /* Root/Additions */
+       0,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PDU = {
+       "PDU",
+       "PDU",
+       &asn_OP_SEQUENCE,
+       asn_DEF_PDU_tags_1,
+       sizeof(asn_DEF_PDU_tags_1)
+               /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
+       asn_DEF_PDU_tags_1,     /* Same as above */
+       sizeof(asn_DEF_PDU_tags_1)
+               /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_PDU_1,
+       4,      /* Elements count */
+       &asn_SPC_PDU_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Singleton] >>> ***/
+
+#include <IA5String.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Singleton] >>> ***/
+
+typedef struct Singleton {
+       IA5String_t     *opt_z; /* DEFAULT z */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Singleton_t;
+
+/*** <<< FUNC-DECLS [Singleton] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Singleton;
+extern asn_SEQUENCE_specifics_t asn_SPC_Singleton_specs_1;
+extern asn_TYPE_member_t asn_MBR_Singleton_1[1];
+
+/*** <<< STAT-DEFS [Singleton] >>> ***/
+
+static int asn_DFL_2_cmp(const void *sptr) {
+       static const uint8_t defv[] = "z";
+       const IA5String_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       if(st->size == (sizeof(defv) - 1)
+       && memcmp(st->buf, &defv, sizeof(defv) - 1) == 0)
+               return 0;
+       return 1;
+}
+static int asn_DFL_2_set(void **sptr) {
+       static const uint8_t defv[] = "z";
+       IA5String_t *st = *sptr;
+       uint8_t *nstr = MALLOC(sizeof(defv));
+       
+       if(!nstr) return -1;
+       memcpy(nstr, defv, sizeof(defv));
+       
+       if(st) {
+               FREEMEM(st->buf);
+       } else {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) { FREEMEM(nstr); return -1; }
+       }
+       st->buf = nstr;
+       st->size = sizeof(defv) - 1;
+       
+       return 0;
+}
+asn_TYPE_member_t asn_MBR_Singleton_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Singleton, opt_z),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_2_cmp,    /* Compare DEFAULT "z" */
+               .default_value_set = &asn_DFL_2_set,    /* Set DEFAULT "z" */
+               .name = "opt-z"
+               },
+};
+static const int asn_MAP_Singleton_oms_1[] = { 0 };
+static const ber_tlv_tag_t asn_DEF_Singleton_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Singleton_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* opt-z */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Singleton_specs_1 = {
+       sizeof(struct Singleton),
+       offsetof(struct Singleton, _asn_ctx),
+       .tag2el = asn_MAP_Singleton_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_Singleton_oms_1,        /* Optional members */
+       1, 0,   /* Root/Additions */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Singleton = {
+       "Singleton",
+       "Singleton",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Singleton_tags_1,
+       sizeof(asn_DEF_Singleton_tags_1)
+               /sizeof(asn_DEF_Singleton_tags_1[0]), /* 1 */
+       asn_DEF_Singleton_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Singleton_tags_1)
+               /sizeof(asn_DEF_Singleton_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Singleton_1,
+       1,      /* Elements count */
+       &asn_SPC_Singleton_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [PDU-2] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [PDU-2] >>> ***/
+
+typedef enum PDU_2_PR {
+       PDU_2_PR_NOTHING,       /* No components present */
+       PDU_2_PR_main,
+       /* Extensions may appear below */
+       PDU_2_PR_ext1,
+       PDU_2_PR_ext0
+} PDU_2_PR;
+
+/*** <<< TYPE-DECLS [PDU-2] >>> ***/
+
+typedef struct PDU_2 {
+       PDU_2_PR present;
+       union PDU_2_u {
+               long     main;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               long     ext1;
+               long     ext0;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PDU_2_t;
+
+/*** <<< FUNC-DECLS [PDU-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PDU_2;
+extern asn_CHOICE_specifics_t asn_SPC_PDU_2_specs_1;
+extern asn_TYPE_member_t asn_MBR_PDU_2_1[3];
+extern asn_per_constraints_t asn_PER_type_PDU_2_constr_1;
+
+/*** <<< CTDEFS [PDU-2] >>> ***/
+
+asn_per_constraints_t asn_PER_type_PDU_2_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  0,  0,  0,  0 }    /* (0..0,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [PDU-2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_PDU_2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.main),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "main"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.ext1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ext1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU_2, choice.ext0),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ext0"
+               },
+};
+static const unsigned asn_MAP_PDU_2_to_canonical_1[] = { 0, 2, 1 };
+static const unsigned asn_MAP_PDU_2_from_canonical_1[] = { 0, 2, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_PDU_2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* ext0 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ext1 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 } /* main */
+};
+asn_CHOICE_specifics_t asn_SPC_PDU_2_specs_1 = {
+       sizeof(struct PDU_2),
+       offsetof(struct PDU_2, _asn_ctx),
+       offsetof(struct PDU_2, present),
+       sizeof(((struct PDU_2 *)0)->present),
+       .tag2el = asn_MAP_PDU_2_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_PDU_2_to_canonical_1,
+       .from_canonical_order = asn_MAP_PDU_2_from_canonical_1,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_PDU_2 = {
+       "PDU-2",
+       "PDU-2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, &asn_PER_type_PDU_2_constr_1, CHOICE_constraint },
+       asn_MBR_PDU_2_1,
+       3,      /* Elements count */
+       &asn_SPC_PDU_2_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/127-per-long-OK.asn1 b/tests/tests-asn1c-compiler/127-per-long-OK.asn1
new file mode 100644 (file)
index 0000000..0a7b6fe
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+-- Also see .134 for wider integer types.
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .127
+
+ModulePERLong
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 127 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               -- Should be supported on all 32-bit platforms and above.
+               small32range    INTEGER (-2000000000..2000000000),
+               full32range     INTEGER (-2147483648..2147483647),
+               unsigned32      INTEGER (0..4294967295),
+               unsplit32       INTEGER (5..500|600..4294967290)
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..5700eeb
--- /dev/null
@@ -0,0 +1,323 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       long     small32range;
+       long     full32range;
+       unsigned long    unsigned32;
+       unsigned long    unsplit32;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_unsigned32_4;  // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_unsplit32_5;   // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+unsigned32_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       /* Constraint check succeeded */
+       return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+unsplit32_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if(((value >= 5 && value <= 500) || (value >= 600 && value <= 4294967290))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_small32range_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -2000000000 && value <= 2000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_full32range_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= (-2147483647L - 1) && value <= 2147483647)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned32_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       /* Constraint check succeeded */
+       return 0;
+}
+
+static int
+memb_unsplit32_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if(((value >= 5 && value <= 500) || (value >= 600 && value <= 4294967290))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [T] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_unsigned32_constr_4 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  0,  4294967295 }      /* (0..4294967295) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_unsplit32_constr_5 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  5,  4294967290 }      /* (5..4294967290) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_small32range_constr_2 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1, -2000000000,  2000000000 }     /* (-2000000000..2000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_full32range_constr_3 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1, (-2147483647L - 1),  2147483647 }      /* (-2147483648..2147483647) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_unsigned32_constr_4 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  0,  4294967295 }      /* (0..4294967295) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_unsplit32_constr_5 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  5,  4294967290 }      /* (5..4294967290) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_unsigned32_specs_4 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_unsigned32_tags_4[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_unsigned32_4 = {
+       "unsigned32",
+       "unsigned32",
+       &asn_OP_NativeInteger,
+       asn_DEF_unsigned32_tags_4,
+       sizeof(asn_DEF_unsigned32_tags_4)
+               /sizeof(asn_DEF_unsigned32_tags_4[0]) - 1, /* 1 */
+       asn_DEF_unsigned32_tags_4,      /* Same as above */
+       sizeof(asn_DEF_unsigned32_tags_4)
+               /sizeof(asn_DEF_unsigned32_tags_4[0]), /* 2 */
+       { 0, &asn_PER_type_unsigned32_constr_4, unsigned32_4_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_unsigned32_specs_4     /* Additional specs */
+};
+
+static const asn_INTEGER_specifics_t asn_SPC_unsplit32_specs_5 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_unsplit32_tags_5[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_unsplit32_5 = {
+       "unsplit32",
+       "unsplit32",
+       &asn_OP_NativeInteger,
+       asn_DEF_unsplit32_tags_5,
+       sizeof(asn_DEF_unsplit32_tags_5)
+               /sizeof(asn_DEF_unsplit32_tags_5[0]) - 1, /* 1 */
+       asn_DEF_unsplit32_tags_5,       /* Same as above */
+       sizeof(asn_DEF_unsplit32_tags_5)
+               /sizeof(asn_DEF_unsplit32_tags_5[0]), /* 2 */
+       { 0, &asn_PER_type_unsplit32_constr_5, unsplit32_5_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_unsplit32_specs_5      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, small32range),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_small32range_constr_2, .general_constraints =  memb_small32range_constraint_1 },
+               0, 0, /* No default value */
+               .name = "small32range"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, full32range),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_full32range_constr_3, .general_constraints =  memb_full32range_constraint_1 },
+               0, 0, /* No default value */
+               .name = "full32range"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned32),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_unsigned32_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_unsigned32_constr_4, .general_constraints =  memb_unsigned32_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned32"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsplit32),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_unsplit32_5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_unsplit32_constr_5, .general_constraints =  memb_unsplit32_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsplit32"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* small32range */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* full32range */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* unsigned32 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* unsplit32 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       4,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/128-enum-SE.asn1 b/tests/tests-asn1c-compiler/128-enum-SE.asn1
new file mode 100644 (file)
index 0000000..40b8caf
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .128
+
+ModuleTestEnum1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 128 }
+       DEFINITIONS ::=
+BEGIN
+
+       A ::= ENUMERATED {a, b, ..., c, d(2)}
+
+END
diff --git a/tests/tests-asn1c-compiler/129-enum-OK.asn1 b/tests/tests-asn1c-compiler/129-enum-OK.asn1
new file mode 100644 (file)
index 0000000..06f5eed
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .129
+
+ModuleTestEnum1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 129 }
+       DEFINITIONS ::=
+BEGIN
+
+       A ::= ENUMERATED {a(-5), b(-4), c}
+
+END
diff --git a/tests/tests-asn1c-compiler/129-enum-OK.asn1.-EF b/tests/tests-asn1c-compiler/129-enum-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..ebc3d30
--- /dev/null
@@ -0,0 +1,12 @@
+ModuleTestEnum1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 129 }
+DEFINITIONS ::=
+BEGIN
+
+A ::= ENUMERATED {
+    a(-5),
+    b(-4),
+    c(0)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/129-enum-SE.asn1 b/tests/tests-asn1c-compiler/129-enum-SE.asn1
new file mode 100644 (file)
index 0000000..cb85dc9
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .129
+
+ModuleTestEnum1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 129 }
+       DEFINITIONS ::=
+BEGIN
+
+       A ::= ENUMERATED {a, b, ..., c, d(2)}
+
+END
diff --git a/tests/tests-asn1c-compiler/13-resolver-OK.asn1 b/tests/tests-asn1c-compiler/13-resolver-OK.asn1
new file mode 100644 (file)
index 0000000..5237b01
--- /dev/null
@@ -0,0 +1,47 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .13 1
+-- .13 2
+
+ModuleTestResolver1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 13 1 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS IntegerType, beta FROM
+               Renamed
+               { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+                       spelio(9363) software(1) asn1c(5) test(1) 13 2 };
+
+       -- external reference
+       alpha IntegerType ::= beta
+       alpha2 Renamed.IntegerType ::= beta
+
+       -- 
+       -- The following are for post-fix checking by the check_fixer.
+       -- It will be able to pick-up these values if the file is parseable,
+       -- even if it contains some semantic errors.
+       -- 
+
+       check-alpha INTEGER ::= 123
+       check-alpha2 INTEGER ::= 123
+
+END
+
+ModuleTestResolver2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 13 2 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS beta, IntegerType ;
+
+       beta HiddenType ::= 123
+
+       HiddenType ::= INTEGER
+
+       IntegerType ::= INTEGER
+
+END
diff --git a/tests/tests-asn1c-compiler/130-enum-OK.asn1 b/tests/tests-asn1c-compiler/130-enum-OK.asn1
new file mode 100644 (file)
index 0000000..d917e39
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .130
+
+ModuleTestEnum1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 130 }
+       DEFINITIONS ::=
+BEGIN
+
+       A ::= ENUMERATED {a(-5), b(-4),..., c}
+
+END
diff --git a/tests/tests-asn1c-compiler/130-enum-OK.asn1.-EF b/tests/tests-asn1c-compiler/130-enum-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..eaa5a51
--- /dev/null
@@ -0,0 +1,13 @@
+ModuleTestEnum1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 130 }
+DEFINITIONS ::=
+BEGIN
+
+A ::= ENUMERATED {
+    a(-5),
+    b(-4),
+    ...,
+    c(0)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/131-per-empty-OK.asn1 b/tests/tests-asn1c-compiler/131-per-empty-OK.asn1
new file mode 100644 (file)
index 0000000..fec5d2c
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .131
+
+ModulePERLong
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 131 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= SEQUENCE { }       -- Empty sequence
+
+END
diff --git a/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..829dc4d
--- /dev/null
@@ -0,0 +1,45 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/132-per-choice-OK.asn1 b/tests/tests-asn1c-compiler/132-per-choice-OK.asn1
new file mode 100644 (file)
index 0000000..8cbdb48
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .132
+
+ModulePERChoice
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 132 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= CHOICE {
+               first [1] CHOICE {
+                       nothing INTEGER (5..10)
+               },
+               second [0] INTEGER (-10..10)
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/133-per-constraints-OK.asn1 b/tests/tests-asn1c-compiler/133-per-constraints-OK.asn1
new file mode 100644 (file)
index 0000000..38721b6
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .133
+
+ModulePERConstraints
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 133 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= CHOICE {
+               first [2] CHOICE {
+                       nothing INTEGER (5..MAX)
+               },
+               second [0] INTEGER (MIN..10),
+               ...,
+               third [1] INTEGER (-10..MAX)
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/134-per-long-OK.asn1 b/tests/tests-asn1c-compiler/134-per-long-OK.asn1
new file mode 100644 (file)
index 0000000..b4334dd
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+-- Also see .127 for narrower integer types.
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .134
+
+ModulePERLong
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 134 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+    -- Supported only on 64-bit platforms.
+       T ::= SEQUENCE {
+               unsigned33  INTEGER (0..5000000000),    -- range 33 bits
+               unsigned42  INTEGER (0..3153600000000), -- range 42 bits
+               signed33    INTEGER (-4000000000..4000000000), -- 33 bits
+               signed33ext INTEGER (-4000000000..4000000000,...)
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..df46a74
--- /dev/null
@@ -0,0 +1,245 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       INTEGER_t        unsigned33;
+       INTEGER_t        unsigned42;
+       INTEGER_t        signed33;
+       INTEGER_t        signed33ext;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+memb_unsigned33_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 0 && value <= 5000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned42_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 0 && value <= 3153600000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed33_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -4000000000 && value <= 4000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed33ext_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -4000000000 && value <= 4000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [T] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_unsigned33_constr_2 CC_NOTUSED = {
+       { APC_CONSTRAINED,       33, -1,  0,  5000000000 }      /* (0..5000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_unsigned42_constr_3 CC_NOTUSED = {
+       { APC_CONSTRAINED,       42, -1,  0,  3153600000000 }   /* (0..3153600000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_signed33_constr_4 CC_NOTUSED = {
+       { APC_CONSTRAINED,       33, -1, -4000000000,  4000000000 }     /* (-4000000000..4000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_signed33ext_constr_5 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  33, -1, -4000000000,  4000000000 } /* (-4000000000..4000000000,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned33),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_unsigned33_constr_2, .general_constraints =  memb_unsigned33_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned33"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned42),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_unsigned42_constr_3, .general_constraints =  memb_unsigned42_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned42"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, signed33),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_signed33_constr_4, .general_constraints =  memb_signed33_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed33"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, signed33ext),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_signed33ext_constr_5, .general_constraints =  memb_signed33ext_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed33ext"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unsigned33 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* unsigned42 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* signed33 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* signed33ext */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       4,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/135-oer-short-OK.asn1 b/tests/tests-asn1c-compiler/135-oer-short-OK.asn1
new file mode 100644 (file)
index 0000000..fcd80fc
--- /dev/null
@@ -0,0 +1,30 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .135
+
+ModuleOERShort
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 135 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+    -- Supported only on 64-bit platforms.
+    T ::= SEQUENCE {
+        unsigned8         [0] INTEGER (0..255),       -- OER 1 byte
+        unsigned16       [1]  INTEGER (0..65535),     -- OER 2 bytes
+        unsigned16stack [2] INTEGER (0..32767)(0..255), --  OER 1 byte
+        unsigned16stack-ext [15] INTEGER (0..32767)(0..255,...), -- OER 2 bytes
+        ...,
+        signed8           [10] INTEGER (-128..127) DEFAULT 3, -- OER 1 byte
+        signed16          [11] INTEGER (-32768..32767),    -- OER 2 bytes
+        signed16stack     [12] INTEGER (-32768..32767)(-128..127), -- OER 1 byte
+        signed16stack-ext [5] INTEGER (-32768..32767)(-128..127,...), -- OER 2 b
+        signed32          [7] INTEGER (-2000000000..2000000000), -- OER 4 bytes
+        ...,
+        minmax            [6] INTEGER (MIN..MAX) OPTIONAL
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/136-oer-long-OK.asn1 b/tests/tests-asn1c-compiler/136-oer-long-OK.asn1
new file mode 100644 (file)
index 0000000..706a6ea
--- /dev/null
@@ -0,0 +1,32 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .136
+
+ModuleOERLong
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 136 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+    -- Supported only on 64-bit platforms.
+    T ::= SEQUENCE {
+        unsigned8         [0] INTEGER (0..255),       -- OER 1 byte
+        unsigned16       [1]  INTEGER (0..65535),     -- OER 2 bytes
+        unsigned16stack [2] INTEGER (0..32767)(0..255), --  OER 1 byte
+        unsigned16stack-ext [15] INTEGER (0..32767)(0..255,...), -- OER 2 bytes
+        unsigned33        [3] INTEGER (0..5000000000),    -- OER 8 bytes
+        ...,
+        signed8           [10] INTEGER (-128..127) DEFAULT 3, -- OER 1 byte
+        signed16          [11] INTEGER (-32768..32767),    -- OER 2 bytes
+        signed16stack     [12] INTEGER (-32768..32767)(-128..127), -- OER 1 byte
+        signed16stack-ext [5] INTEGER (-32768..32767)(-128..127,...), -- OER 2 b
+        signed32          [7] INTEGER (-2000000000..2000000000), -- OER 4 bytes
+        signed33ext       [8] INTEGER (-4000000000..4000000000,...),-- OER vrble
+        ...,
+        minmax            [6] INTEGER (MIN..MAX) OPTIONAL
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER
new file mode 100644 (file)
index 0000000..4c242fa
--- /dev/null
@@ -0,0 +1,561 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <NativeInteger.h>
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       long     unsigned8;
+       long     unsigned16;
+       long     unsigned16stack;
+       long     unsigned16stack_ext;
+       INTEGER_t        unsigned33;
+       long    *minmax;        /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       long    *signed8;       /* DEFAULT 3 */
+       long    *signed16;
+       long    *signed16stack;
+       long    *signed16stack_ext;
+       long    *signed32;
+       INTEGER_t       *signed33ext;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+memb_unsigned8_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 255)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned16_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned16stack_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 255)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned16stack_ext_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 255)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_unsigned33_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 0 && value <= 5000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_minmax_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static int
+memb_signed8_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -128 && value <= 127)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed16_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -32768 && value <= 32767)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed16stack_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -128 && value <= 127)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed16stack_ext_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -128 && value <= 127)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed32_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -2000000000 && value <= 2000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_signed33ext_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -4000000000 && value <= 4000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [T] >>> ***/
+
+static asn_oer_constraints_t asn_OER_memb_unsigned8_constr_2 CC_NOTUSED = {
+       { 1, 1 }        /* (0..255) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_unsigned16_constr_3 CC_NOTUSED = {
+       { 2, 1 }        /* (0..65535) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_unsigned16stack_constr_4 CC_NOTUSED = {
+       { 1, 1 }        /* (0..255) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_unsigned16stack_ext_constr_5 CC_NOTUSED = {
+       { 2, 1 }        /* (0..32767) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_unsigned33_constr_6 CC_NOTUSED = {
+       { 8, 1 }        /* (0..5000000000) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_minmax_constr_7 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed8_constr_9 CC_NOTUSED = {
+       { 1, 0 }        /* (-128..127) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed16_constr_10 CC_NOTUSED = {
+       { 2, 0 }        /* (-32768..32767) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed16stack_constr_11 CC_NOTUSED = {
+       { 1, 0 }        /* (-128..127) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed16stack_ext_constr_12 CC_NOTUSED = {
+       { 2, 0 }        /* (-32768..32767) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed32_constr_13 CC_NOTUSED = {
+       { 4, 0 }        /* (-2000000000..2000000000) */,
+       -1};
+static asn_oer_constraints_t asn_OER_memb_signed33ext_constr_14 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static int asn_DFL_9_cmp_3(const void *sptr) {
+       const long *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 3 */
+       return (*st != 3);
+}
+static int asn_DFL_9_set_3(void **sptr) {
+       long *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 3 */
+       *st = 3;
+       return 0;
+}
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned8),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_unsigned8_constr_2, .per_constraints = 0, .general_constraints =  memb_unsigned8_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned8"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned16),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_unsigned16_constr_3, .per_constraints = 0, .general_constraints =  memb_unsigned16_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned16"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned16stack),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_unsigned16stack_constr_4, .per_constraints = 0, .general_constraints =  memb_unsigned16stack_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned16stack"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned16stack_ext),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (15 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_unsigned16stack_ext_constr_5, .per_constraints = 0, .general_constraints =  memb_unsigned16stack_ext_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned16stack-ext"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, unsigned33),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_unsigned33_constr_6, .per_constraints = 0, .general_constraints =  memb_unsigned33_constraint_1 },
+               0, 0, /* No default value */
+               .name = "unsigned33"
+               },
+       { ATF_POINTER, 7, offsetof(struct T, minmax),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_minmax_constr_7, .per_constraints = 0, .general_constraints =  memb_minmax_constraint_1 },
+               0, 0, /* No default value */
+               .name = "minmax"
+               },
+       { ATF_POINTER, 6, offsetof(struct T, signed8),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed8_constr_9, .per_constraints = 0, .general_constraints =  memb_signed8_constraint_1 },
+               .default_value_cmp = &asn_DFL_9_cmp_3,  /* Compare DEFAULT 3 */
+               .default_value_set = &asn_DFL_9_set_3,  /* Set DEFAULT 3 */
+               .name = "signed8"
+               },
+       { ATF_POINTER, 5, offsetof(struct T, signed16),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (11 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed16_constr_10, .per_constraints = 0, .general_constraints =  memb_signed16_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed16"
+               },
+       { ATF_POINTER, 4, offsetof(struct T, signed16stack),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (12 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed16stack_constr_11, .per_constraints = 0, .general_constraints =  memb_signed16stack_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed16stack"
+               },
+       { ATF_POINTER, 3, offsetof(struct T, signed16stack_ext),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed16stack_ext_constr_12, .per_constraints = 0, .general_constraints =  memb_signed16stack_ext_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed16stack-ext"
+               },
+       { ATF_POINTER, 2, offsetof(struct T, signed32),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed32_constr_13, .per_constraints = 0, .general_constraints =  memb_signed32_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed32"
+               },
+       { ATF_POINTER, 1, offsetof(struct T, signed33ext),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_signed33ext_constr_14, .per_constraints = 0, .general_constraints =  memb_signed33ext_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signed33ext"
+               },
+};
+static const int asn_MAP_T_oms_1[] = { 5, 6, 7, 8, 9, 10, 11 };
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* unsigned8 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* unsigned16 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* unsigned16stack */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 4, 0, 0 }, /* unsigned33 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 9, 0, 0 }, /* signed16stack-ext */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 5, 0, 0 }, /* minmax */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 10, 0, 0 }, /* signed32 */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 11, 0, 0 }, /* signed33ext */
+    { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 6, 0, 0 }, /* signed8 */
+    { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 7, 0, 0 }, /* signed16 */
+    { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 8, 0, 0 }, /* signed16stack */
+    { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 3, 0, 0 } /* unsigned16stack-ext */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 12,     /* Count of tags in the map */
+       asn_MAP_T_oms_1,        /* Optional members */
+       1, 6,   /* Root/Additions */
+       6,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       12,     /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1 b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1
new file mode 100644 (file)
index 0000000..86707e6
--- /dev/null
@@ -0,0 +1,27 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .137
+
+ModuleOERString
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 137 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+    T ::= SEQUENCE {
+        unconstrained SEQUENCE {
+            unc-ia5         IA5String,
+            unc-utf8        UTF8String,
+            unc-universal   UniversalString
+        },
+        constrained SEQUENCE {
+            con-ia5         IA5String (SIZE(2..2)),
+            con-utf8        UTF8String (SIZE(2)),
+            con-universal   UniversalString (SIZE(2 | 2))
+        }
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
new file mode 100644 (file)
index 0000000..6277490
--- /dev/null
@@ -0,0 +1,347 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <IA5String.h>
+#include <UTF8String.h>
+#include <UniversalString.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       struct unconstrained {
+               IA5String_t      unc_ia5;
+               UTF8String_t     unc_utf8;
+               UniversalString_t        unc_universal;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } unconstrained;
+       struct constrained {
+               IA5String_t      con_ia5;
+               UTF8String_t     con_utf8;
+               UniversalString_t        con_universal;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } constrained;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CTABLES [T] >>> ***/
+
+static int check_permitted_alphabet_7(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv <= 127)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_9(const void *sptr) {
+       /* The underlying type is UniversalString */
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       if(st->size % 4) return -1; /* (size%4)! */
+       for(; ch < end; ch += 4) {
+               uint32_t cv = (ch[0] << 24)
+                               | (ch[1] << 16)
+                               | (ch[2] << 8)
+                               |  ch[3];
+               (void)cv; /* Unused variable */
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+memb_con_ia5_constraint_6(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 2)
+                && !check_permitted_alphabet_7(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_con_utf8_constraint_6(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size == 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_con_universal_constraint_6(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UniversalString_t *st = (const UniversalString_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size >> 2;   /* 4 byte per character */
+       
+       if((size == 2)
+                && !check_permitted_alphabet_9(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [T] >>> ***/
+
+static asn_oer_constraints_t asn_OER_memb_con_ia5_constr_7 CC_NOTUSED = {
+       { 0, 0 },
+       2       /* (SIZE(2..2)) */};
+static asn_oer_constraints_t asn_OER_memb_con_utf8_constr_8 CC_NOTUSED = {
+       { 0, 0 },
+       -1      /* (SIZE(0..MAX)) */};
+static asn_oer_constraints_t asn_OER_memb_con_universal_constr_9 CC_NOTUSED = {
+       { 0, 0 },
+       2       /* (SIZE(2..2)) */};
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_unconstrained_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct unconstrained, unc_ia5),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "unc-ia5"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct unconstrained, unc_utf8),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "unc-utf8"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct unconstrained, unc_universal),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "unc-universal"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_unconstrained_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_unconstrained_tag2el_2[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 1, 0, 0 }, /* unc-utf8 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 0, 0, 0 }, /* unc-ia5 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)), 2, 0, 0 } /* unc-universal */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_unconstrained_specs_2 = {
+       sizeof(struct unconstrained),
+       offsetof(struct unconstrained, _asn_ctx),
+       .tag2el = asn_MAP_unconstrained_tag2el_2,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_unconstrained_2 = {
+       "unconstrained",
+       "unconstrained",
+       &asn_OP_SEQUENCE,
+       asn_DEF_unconstrained_tags_2,
+       sizeof(asn_DEF_unconstrained_tags_2)
+               /sizeof(asn_DEF_unconstrained_tags_2[0]), /* 1 */
+       asn_DEF_unconstrained_tags_2,   /* Same as above */
+       sizeof(asn_DEF_unconstrained_tags_2)
+               /sizeof(asn_DEF_unconstrained_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_unconstrained_2,
+       3,      /* Elements count */
+       &asn_SPC_unconstrained_specs_2  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_constrained_6[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct constrained, con_ia5),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_con_ia5_constr_7, .per_constraints = 0, .general_constraints =  memb_con_ia5_constraint_6 },
+               0, 0, /* No default value */
+               .name = "con-ia5"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct constrained, con_utf8),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_con_utf8_constr_8, .per_constraints = 0, .general_constraints =  memb_con_utf8_constraint_6 },
+               0, 0, /* No default value */
+               .name = "con-utf8"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct constrained, con_universal),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UniversalString,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_con_universal_constr_9, .per_constraints = 0, .general_constraints =  memb_con_universal_constraint_6 },
+               0, 0, /* No default value */
+               .name = "con-universal"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_constrained_tags_6[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_constrained_tag2el_6[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 1, 0, 0 }, /* con-utf8 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 0, 0, 0 }, /* con-ia5 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (28 << 2)), 2, 0, 0 } /* con-universal */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_constrained_specs_6 = {
+       sizeof(struct constrained),
+       offsetof(struct constrained, _asn_ctx),
+       .tag2el = asn_MAP_constrained_tag2el_6,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_constrained_6 = {
+       "constrained",
+       "constrained",
+       &asn_OP_SEQUENCE,
+       asn_DEF_constrained_tags_6,
+       sizeof(asn_DEF_constrained_tags_6)
+               /sizeof(asn_DEF_constrained_tags_6[0]), /* 1 */
+       asn_DEF_constrained_tags_6,     /* Same as above */
+       sizeof(asn_DEF_constrained_tags_6)
+               /sizeof(asn_DEF_constrained_tags_6[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_constrained_6,
+       3,      /* Elements count */
+       &asn_SPC_constrained_specs_6    /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, unconstrained),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_unconstrained_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "unconstrained"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, constrained),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_constrained_6,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "constrained"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* unconstrained */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* constrained */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       2,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1 b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1
new file mode 100644 (file)
index 0000000..486cbc0
--- /dev/null
@@ -0,0 +1,35 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .138
+
+ModuleOERConstraints
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 138 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+    A-noc ::= INTEGER                           -- No constraints
+    B-0-0 ::= INTEGER (0)                       -- Value constraint
+    C-1-2 ::= INTEGER (1..2)                    -- Value range constraint
+    D-inv ::= INTEGER (0..10,...)               -- Extensible, not OER-visible
+    E-2-5 ::= INTEGER (0..10,...)(2..5)         -- OER-visible constraint 2..5
+    F-inv ::= INTEGER (0..10,...)(2..5,...)     -- Not OER-visible
+    G-3-3 ::= INTEGER (0..10,...)(2..5,...)(3)  -- OER-visible constraint 3
+    -- X.696 #8.2.4 Not OER-visible parts of INTERSECTION are ignored
+    H-4-5 ::= INTEGER ((0..5) ^ (4..9))         -- OER-visible constraint 4..5
+    I-1-5 ::= INTEGER ((0..5) ^ (EConstr))      -- OER-visible constraint 1..5
+    J-4-5 ::= INTEGER ((EConstr) ^ (4..9))      -- OER-visible constraint 4..5
+    K-1-4 ::= INTEGER ((FConstr) ^ (EConstr))   -- OER-visible constraint 1..4
+    -- X.696 #8.2.5 UNION with exeptions are ignored
+    L-0-5 ::= INTEGER ((0) | (5))               -- OER-visible constraint 0..5
+    M-inv ::= INTEGER ((0) | (EConstr),...)     -- Not OER-visible
+    N-0-5 ::= INTEGER ((FConstr) | (5))         -- OER-visible constraint 0..5
+    O-inv ::= INTEGER ((FConstr) | (5), ...)    -- Not OER-visible
+
+    EConstr ::= INTEGER (1..5,...)
+    FConstr ::= INTEGER (0..4)
+
+END
diff --git a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
new file mode 100644 (file)
index 0000000..5379108
--- /dev/null
@@ -0,0 +1,1329 @@
+
+/*** <<< INCLUDES [A-noc] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [A-noc] >>> ***/
+
+typedef long    A_noc_t;
+
+/*** <<< FUNC-DECLS [A-noc] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_A_noc;
+asn_struct_free_f A_noc_free;
+asn_struct_print_f A_noc_print;
+asn_constr_check_f A_noc_constraint;
+ber_type_decoder_f A_noc_decode_ber;
+der_type_encoder_f A_noc_encode_der;
+xer_type_decoder_f A_noc_decode_xer;
+xer_type_encoder_f A_noc_encode_xer;
+oer_type_decoder_f A_noc_decode_oer;
+oer_type_encoder_f A_noc_encode_oer;
+
+/*** <<< CODE [A-noc] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [A-noc] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_A_noc_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_A_noc = {
+       "A-noc",
+       "A-noc",
+       &asn_OP_NativeInteger,
+       asn_DEF_A_noc_tags_1,
+       sizeof(asn_DEF_A_noc_tags_1)
+               /sizeof(asn_DEF_A_noc_tags_1[0]), /* 1 */
+       asn_DEF_A_noc_tags_1,   /* Same as above */
+       sizeof(asn_DEF_A_noc_tags_1)
+               /sizeof(asn_DEF_A_noc_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [B-0-0] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [B-0-0] >>> ***/
+
+typedef long    B_0_0_t;
+
+/*** <<< FUNC-DECLS [B-0-0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_B_0_0;
+asn_struct_free_f B_0_0_free;
+asn_struct_print_f B_0_0_print;
+asn_constr_check_f B_0_0_constraint;
+ber_type_decoder_f B_0_0_decode_ber;
+der_type_encoder_f B_0_0_encode_der;
+xer_type_decoder_f B_0_0_decode_xer;
+xer_type_encoder_f B_0_0_encode_xer;
+oer_type_decoder_f B_0_0_decode_oer;
+oer_type_encoder_f B_0_0_encode_oer;
+
+/*** <<< CODE [B-0-0] >>> ***/
+
+int
+B_0_0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [B-0-0] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_B_0_0_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (0..0) */,
+       -1};
+
+/*** <<< STAT-DEFS [B-0-0] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_B_0_0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_B_0_0 = {
+       "B-0-0",
+       "B-0-0",
+       &asn_OP_NativeInteger,
+       asn_DEF_B_0_0_tags_1,
+       sizeof(asn_DEF_B_0_0_tags_1)
+               /sizeof(asn_DEF_B_0_0_tags_1[0]), /* 1 */
+       asn_DEF_B_0_0_tags_1,   /* Same as above */
+       sizeof(asn_DEF_B_0_0_tags_1)
+               /sizeof(asn_DEF_B_0_0_tags_1[0]), /* 1 */
+       { &asn_OER_type_B_0_0_constr_1, 0, B_0_0_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [C-1-2] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [C-1-2] >>> ***/
+
+typedef long    C_1_2_t;
+
+/*** <<< FUNC-DECLS [C-1-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_C_1_2;
+asn_struct_free_f C_1_2_free;
+asn_struct_print_f C_1_2_print;
+asn_constr_check_f C_1_2_constraint;
+ber_type_decoder_f C_1_2_decode_ber;
+der_type_encoder_f C_1_2_encode_der;
+xer_type_decoder_f C_1_2_decode_xer;
+xer_type_encoder_f C_1_2_encode_xer;
+oer_type_decoder_f C_1_2_decode_oer;
+oer_type_encoder_f C_1_2_encode_oer;
+
+/*** <<< CODE [C-1-2] >>> ***/
+
+int
+C_1_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [C-1-2] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_C_1_2_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (1..2) */,
+       -1};
+
+/*** <<< STAT-DEFS [C-1-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_C_1_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_C_1_2 = {
+       "C-1-2",
+       "C-1-2",
+       &asn_OP_NativeInteger,
+       asn_DEF_C_1_2_tags_1,
+       sizeof(asn_DEF_C_1_2_tags_1)
+               /sizeof(asn_DEF_C_1_2_tags_1[0]), /* 1 */
+       asn_DEF_C_1_2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_C_1_2_tags_1)
+               /sizeof(asn_DEF_C_1_2_tags_1[0]), /* 1 */
+       { &asn_OER_type_C_1_2_constr_1, 0, C_1_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [D-inv] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [D-inv] >>> ***/
+
+typedef long    D_inv_t;
+
+/*** <<< FUNC-DECLS [D-inv] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_D_inv;
+asn_struct_free_f D_inv_free;
+asn_struct_print_f D_inv_print;
+asn_constr_check_f D_inv_constraint;
+ber_type_decoder_f D_inv_decode_ber;
+der_type_encoder_f D_inv_encode_der;
+xer_type_decoder_f D_inv_decode_xer;
+xer_type_encoder_f D_inv_encode_xer;
+oer_type_decoder_f D_inv_decode_oer;
+oer_type_encoder_f D_inv_encode_oer;
+
+/*** <<< CODE [D-inv] >>> ***/
+
+int
+D_inv_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [D-inv] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_D_inv_constr_1 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [D-inv] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_D_inv_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_D_inv = {
+       "D-inv",
+       "D-inv",
+       &asn_OP_NativeInteger,
+       asn_DEF_D_inv_tags_1,
+       sizeof(asn_DEF_D_inv_tags_1)
+               /sizeof(asn_DEF_D_inv_tags_1[0]), /* 1 */
+       asn_DEF_D_inv_tags_1,   /* Same as above */
+       sizeof(asn_DEF_D_inv_tags_1)
+               /sizeof(asn_DEF_D_inv_tags_1[0]), /* 1 */
+       { &asn_OER_type_D_inv_constr_1, 0, D_inv_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [E-2-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [E-2-5] >>> ***/
+
+typedef long    E_2_5_t;
+
+/*** <<< FUNC-DECLS [E-2-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_E_2_5;
+asn_struct_free_f E_2_5_free;
+asn_struct_print_f E_2_5_print;
+asn_constr_check_f E_2_5_constraint;
+ber_type_decoder_f E_2_5_decode_ber;
+der_type_encoder_f E_2_5_encode_der;
+xer_type_decoder_f E_2_5_decode_xer;
+xer_type_encoder_f E_2_5_encode_xer;
+oer_type_decoder_f E_2_5_decode_oer;
+oer_type_encoder_f E_2_5_encode_oer;
+
+/*** <<< CODE [E-2-5] >>> ***/
+
+int
+E_2_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 2 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [E-2-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_E_2_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (2..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [E-2-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_E_2_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_E_2_5 = {
+       "E-2-5",
+       "E-2-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_E_2_5_tags_1,
+       sizeof(asn_DEF_E_2_5_tags_1)
+               /sizeof(asn_DEF_E_2_5_tags_1[0]), /* 1 */
+       asn_DEF_E_2_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_E_2_5_tags_1)
+               /sizeof(asn_DEF_E_2_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_E_2_5_constr_1, 0, E_2_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [F-inv] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [F-inv] >>> ***/
+
+typedef long    F_inv_t;
+
+/*** <<< FUNC-DECLS [F-inv] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_F_inv;
+asn_struct_free_f F_inv_free;
+asn_struct_print_f F_inv_print;
+asn_constr_check_f F_inv_constraint;
+ber_type_decoder_f F_inv_decode_ber;
+der_type_encoder_f F_inv_encode_der;
+xer_type_decoder_f F_inv_decode_xer;
+xer_type_encoder_f F_inv_encode_xer;
+oer_type_decoder_f F_inv_decode_oer;
+oer_type_encoder_f F_inv_encode_oer;
+
+/*** <<< CODE [F-inv] >>> ***/
+
+int
+F_inv_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 2 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [F-inv] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_F_inv_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (0..10) */,
+       -1};
+
+/*** <<< STAT-DEFS [F-inv] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_F_inv_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_F_inv = {
+       "F-inv",
+       "F-inv",
+       &asn_OP_NativeInteger,
+       asn_DEF_F_inv_tags_1,
+       sizeof(asn_DEF_F_inv_tags_1)
+               /sizeof(asn_DEF_F_inv_tags_1[0]), /* 1 */
+       asn_DEF_F_inv_tags_1,   /* Same as above */
+       sizeof(asn_DEF_F_inv_tags_1)
+               /sizeof(asn_DEF_F_inv_tags_1[0]), /* 1 */
+       { &asn_OER_type_F_inv_constr_1, 0, F_inv_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [G-3-3] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [G-3-3] >>> ***/
+
+typedef long    G_3_3_t;
+
+/*** <<< FUNC-DECLS [G-3-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_G_3_3;
+asn_struct_free_f G_3_3_free;
+asn_struct_print_f G_3_3_print;
+asn_constr_check_f G_3_3_constraint;
+ber_type_decoder_f G_3_3_decode_ber;
+der_type_encoder_f G_3_3_encode_der;
+xer_type_decoder_f G_3_3_decode_xer;
+xer_type_encoder_f G_3_3_encode_xer;
+oer_type_decoder_f G_3_3_decode_oer;
+oer_type_encoder_f G_3_3_encode_oer;
+
+/*** <<< CODE [G-3-3] >>> ***/
+
+int
+G_3_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [G-3-3] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_G_3_3_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (3..3) */,
+       -1};
+
+/*** <<< STAT-DEFS [G-3-3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_G_3_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_G_3_3 = {
+       "G-3-3",
+       "G-3-3",
+       &asn_OP_NativeInteger,
+       asn_DEF_G_3_3_tags_1,
+       sizeof(asn_DEF_G_3_3_tags_1)
+               /sizeof(asn_DEF_G_3_3_tags_1[0]), /* 1 */
+       asn_DEF_G_3_3_tags_1,   /* Same as above */
+       sizeof(asn_DEF_G_3_3_tags_1)
+               /sizeof(asn_DEF_G_3_3_tags_1[0]), /* 1 */
+       { &asn_OER_type_G_3_3_constr_1, 0, G_3_3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [H-4-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [H-4-5] >>> ***/
+
+typedef long    H_4_5_t;
+
+/*** <<< FUNC-DECLS [H-4-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_H_4_5;
+asn_struct_free_f H_4_5_free;
+asn_struct_print_f H_4_5_print;
+asn_constr_check_f H_4_5_constraint;
+ber_type_decoder_f H_4_5_decode_ber;
+der_type_encoder_f H_4_5_encode_der;
+xer_type_decoder_f H_4_5_decode_xer;
+xer_type_encoder_f H_4_5_encode_xer;
+oer_type_decoder_f H_4_5_decode_oer;
+oer_type_encoder_f H_4_5_encode_oer;
+
+/*** <<< CODE [H-4-5] >>> ***/
+
+int
+H_4_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 4 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [H-4-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_H_4_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (4..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [H-4-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_H_4_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_H_4_5 = {
+       "H-4-5",
+       "H-4-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_H_4_5_tags_1,
+       sizeof(asn_DEF_H_4_5_tags_1)
+               /sizeof(asn_DEF_H_4_5_tags_1[0]), /* 1 */
+       asn_DEF_H_4_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_H_4_5_tags_1)
+               /sizeof(asn_DEF_H_4_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_H_4_5_constr_1, 0, H_4_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [I-1-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [I-1-5] >>> ***/
+
+typedef long    I_1_5_t;
+
+/*** <<< FUNC-DECLS [I-1-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_I_1_5;
+asn_struct_free_f I_1_5_free;
+asn_struct_print_f I_1_5_print;
+asn_constr_check_f I_1_5_constraint;
+ber_type_decoder_f I_1_5_decode_ber;
+der_type_encoder_f I_1_5_encode_der;
+xer_type_decoder_f I_1_5_decode_xer;
+xer_type_encoder_f I_1_5_encode_xer;
+oer_type_decoder_f I_1_5_decode_oer;
+oer_type_encoder_f I_1_5_encode_oer;
+
+/*** <<< CODE [I-1-5] >>> ***/
+
+int
+I_1_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [I-1-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_I_1_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (1..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [I-1-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_I_1_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_I_1_5 = {
+       "I-1-5",
+       "I-1-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_I_1_5_tags_1,
+       sizeof(asn_DEF_I_1_5_tags_1)
+               /sizeof(asn_DEF_I_1_5_tags_1[0]), /* 1 */
+       asn_DEF_I_1_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_I_1_5_tags_1)
+               /sizeof(asn_DEF_I_1_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_I_1_5_constr_1, 0, I_1_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [J-4-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [J-4-5] >>> ***/
+
+typedef long    J_4_5_t;
+
+/*** <<< FUNC-DECLS [J-4-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_J_4_5;
+asn_struct_free_f J_4_5_free;
+asn_struct_print_f J_4_5_print;
+asn_constr_check_f J_4_5_constraint;
+ber_type_decoder_f J_4_5_decode_ber;
+der_type_encoder_f J_4_5_encode_der;
+xer_type_decoder_f J_4_5_decode_xer;
+xer_type_encoder_f J_4_5_encode_xer;
+oer_type_decoder_f J_4_5_decode_oer;
+oer_type_encoder_f J_4_5_encode_oer;
+
+/*** <<< CODE [J-4-5] >>> ***/
+
+int
+J_4_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 4 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [J-4-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_J_4_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (4..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [J-4-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_J_4_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_J_4_5 = {
+       "J-4-5",
+       "J-4-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_J_4_5_tags_1,
+       sizeof(asn_DEF_J_4_5_tags_1)
+               /sizeof(asn_DEF_J_4_5_tags_1[0]), /* 1 */
+       asn_DEF_J_4_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_J_4_5_tags_1)
+               /sizeof(asn_DEF_J_4_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_J_4_5_constr_1, 0, J_4_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [K-1-4] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [K-1-4] >>> ***/
+
+typedef long    K_1_4_t;
+
+/*** <<< FUNC-DECLS [K-1-4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_K_1_4;
+asn_struct_free_f K_1_4_free;
+asn_struct_print_f K_1_4_print;
+asn_constr_check_f K_1_4_constraint;
+ber_type_decoder_f K_1_4_decode_ber;
+der_type_encoder_f K_1_4_encode_der;
+xer_type_decoder_f K_1_4_decode_xer;
+xer_type_encoder_f K_1_4_encode_xer;
+oer_type_decoder_f K_1_4_decode_oer;
+oer_type_encoder_f K_1_4_encode_oer;
+
+/*** <<< CODE [K-1-4] >>> ***/
+
+int
+K_1_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 4)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [K-1-4] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_K_1_4_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (1..4) */,
+       -1};
+
+/*** <<< STAT-DEFS [K-1-4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_K_1_4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_K_1_4 = {
+       "K-1-4",
+       "K-1-4",
+       &asn_OP_NativeInteger,
+       asn_DEF_K_1_4_tags_1,
+       sizeof(asn_DEF_K_1_4_tags_1)
+               /sizeof(asn_DEF_K_1_4_tags_1[0]), /* 1 */
+       asn_DEF_K_1_4_tags_1,   /* Same as above */
+       sizeof(asn_DEF_K_1_4_tags_1)
+               /sizeof(asn_DEF_K_1_4_tags_1[0]), /* 1 */
+       { &asn_OER_type_K_1_4_constr_1, 0, K_1_4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [L-0-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [L-0-5] >>> ***/
+
+typedef long    L_0_5_t;
+
+/*** <<< FUNC-DECLS [L-0-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_L_0_5;
+asn_struct_free_f L_0_5_free;
+asn_struct_print_f L_0_5_print;
+asn_constr_check_f L_0_5_constraint;
+ber_type_decoder_f L_0_5_decode_ber;
+der_type_encoder_f L_0_5_encode_der;
+xer_type_decoder_f L_0_5_decode_xer;
+xer_type_encoder_f L_0_5_encode_xer;
+oer_type_decoder_f L_0_5_decode_oer;
+oer_type_encoder_f L_0_5_encode_oer;
+
+/*** <<< CODE [L-0-5] >>> ***/
+
+int
+L_0_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == 0) || (value == 5))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [L-0-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_L_0_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (0..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [L-0-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_L_0_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_L_0_5 = {
+       "L-0-5",
+       "L-0-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_L_0_5_tags_1,
+       sizeof(asn_DEF_L_0_5_tags_1)
+               /sizeof(asn_DEF_L_0_5_tags_1[0]), /* 1 */
+       asn_DEF_L_0_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_L_0_5_tags_1)
+               /sizeof(asn_DEF_L_0_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_L_0_5_constr_1, 0, L_0_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [M-inv] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [M-inv] >>> ***/
+
+typedef long    M_inv_t;
+
+/*** <<< FUNC-DECLS [M-inv] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_M_inv;
+asn_struct_free_f M_inv_free;
+asn_struct_print_f M_inv_print;
+asn_constr_check_f M_inv_constraint;
+ber_type_decoder_f M_inv_decode_ber;
+der_type_encoder_f M_inv_encode_der;
+xer_type_decoder_f M_inv_decode_xer;
+xer_type_encoder_f M_inv_encode_xer;
+oer_type_decoder_f M_inv_decode_oer;
+oer_type_encoder_f M_inv_encode_oer;
+
+/*** <<< CODE [M-inv] >>> ***/
+
+int
+M_inv_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [M-inv] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_M_inv_constr_1 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [M-inv] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_M_inv_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_M_inv = {
+       "M-inv",
+       "M-inv",
+       &asn_OP_NativeInteger,
+       asn_DEF_M_inv_tags_1,
+       sizeof(asn_DEF_M_inv_tags_1)
+               /sizeof(asn_DEF_M_inv_tags_1[0]), /* 1 */
+       asn_DEF_M_inv_tags_1,   /* Same as above */
+       sizeof(asn_DEF_M_inv_tags_1)
+               /sizeof(asn_DEF_M_inv_tags_1[0]), /* 1 */
+       { &asn_OER_type_M_inv_constr_1, 0, M_inv_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [N-0-5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [N-0-5] >>> ***/
+
+typedef long    N_0_5_t;
+
+/*** <<< FUNC-DECLS [N-0-5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_N_0_5;
+asn_struct_free_f N_0_5_free;
+asn_struct_print_f N_0_5_print;
+asn_constr_check_f N_0_5_constraint;
+ber_type_decoder_f N_0_5_decode_ber;
+der_type_encoder_f N_0_5_encode_der;
+xer_type_decoder_f N_0_5_decode_xer;
+xer_type_encoder_f N_0_5_encode_xer;
+oer_type_decoder_f N_0_5_decode_oer;
+oer_type_encoder_f N_0_5_encode_oer;
+
+/*** <<< CODE [N-0-5] >>> ***/
+
+int
+N_0_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [N-0-5] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_N_0_5_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (0..5) */,
+       -1};
+
+/*** <<< STAT-DEFS [N-0-5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_N_0_5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_N_0_5 = {
+       "N-0-5",
+       "N-0-5",
+       &asn_OP_NativeInteger,
+       asn_DEF_N_0_5_tags_1,
+       sizeof(asn_DEF_N_0_5_tags_1)
+               /sizeof(asn_DEF_N_0_5_tags_1[0]), /* 1 */
+       asn_DEF_N_0_5_tags_1,   /* Same as above */
+       sizeof(asn_DEF_N_0_5_tags_1)
+               /sizeof(asn_DEF_N_0_5_tags_1[0]), /* 1 */
+       { &asn_OER_type_N_0_5_constr_1, 0, N_0_5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [O-inv] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [O-inv] >>> ***/
+
+typedef long    O_inv_t;
+
+/*** <<< FUNC-DECLS [O-inv] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_O_inv;
+asn_struct_free_f O_inv_free;
+asn_struct_print_f O_inv_print;
+asn_constr_check_f O_inv_constraint;
+ber_type_decoder_f O_inv_decode_ber;
+der_type_encoder_f O_inv_encode_der;
+xer_type_decoder_f O_inv_decode_xer;
+xer_type_encoder_f O_inv_encode_xer;
+oer_type_decoder_f O_inv_decode_oer;
+oer_type_encoder_f O_inv_encode_oer;
+
+/*** <<< CODE [O-inv] >>> ***/
+
+int
+O_inv_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [O-inv] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_O_inv_constr_1 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [O-inv] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_O_inv_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_O_inv = {
+       "O-inv",
+       "O-inv",
+       &asn_OP_NativeInteger,
+       asn_DEF_O_inv_tags_1,
+       sizeof(asn_DEF_O_inv_tags_1)
+               /sizeof(asn_DEF_O_inv_tags_1[0]), /* 1 */
+       asn_DEF_O_inv_tags_1,   /* Same as above */
+       sizeof(asn_DEF_O_inv_tags_1)
+               /sizeof(asn_DEF_O_inv_tags_1[0]), /* 1 */
+       { &asn_OER_type_O_inv_constr_1, 0, O_inv_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [EConstr] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [EConstr] >>> ***/
+
+typedef long    EConstr_t;
+
+/*** <<< FUNC-DECLS [EConstr] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EConstr;
+asn_struct_free_f EConstr_free;
+asn_struct_print_f EConstr_print;
+asn_constr_check_f EConstr_constraint;
+ber_type_decoder_f EConstr_decode_ber;
+der_type_encoder_f EConstr_encode_der;
+xer_type_decoder_f EConstr_decode_xer;
+xer_type_encoder_f EConstr_encode_xer;
+oer_type_decoder_f EConstr_decode_oer;
+oer_type_encoder_f EConstr_encode_oer;
+
+/*** <<< CODE [EConstr] >>> ***/
+
+int
+EConstr_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [EConstr] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_EConstr_constr_1 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [EConstr] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_EConstr_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EConstr = {
+       "EConstr",
+       "EConstr",
+       &asn_OP_NativeInteger,
+       asn_DEF_EConstr_tags_1,
+       sizeof(asn_DEF_EConstr_tags_1)
+               /sizeof(asn_DEF_EConstr_tags_1[0]), /* 1 */
+       asn_DEF_EConstr_tags_1, /* Same as above */
+       sizeof(asn_DEF_EConstr_tags_1)
+               /sizeof(asn_DEF_EConstr_tags_1[0]), /* 1 */
+       { &asn_OER_type_EConstr_constr_1, 0, EConstr_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [FConstr] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [FConstr] >>> ***/
+
+typedef long    FConstr_t;
+
+/*** <<< FUNC-DECLS [FConstr] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_FConstr;
+asn_struct_free_f FConstr_free;
+asn_struct_print_f FConstr_print;
+asn_constr_check_f FConstr_constraint;
+ber_type_decoder_f FConstr_decode_ber;
+der_type_encoder_f FConstr_encode_der;
+xer_type_decoder_f FConstr_decode_xer;
+xer_type_encoder_f FConstr_encode_xer;
+oer_type_decoder_f FConstr_decode_oer;
+oer_type_encoder_f FConstr_encode_oer;
+
+/*** <<< CODE [FConstr] >>> ***/
+
+int
+FConstr_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 4)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [FConstr] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_FConstr_constr_1 CC_NOTUSED = {
+       { 1, 1 }        /* (0..4) */,
+       -1};
+
+/*** <<< STAT-DEFS [FConstr] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_FConstr_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_FConstr = {
+       "FConstr",
+       "FConstr",
+       &asn_OP_NativeInteger,
+       asn_DEF_FConstr_tags_1,
+       sizeof(asn_DEF_FConstr_tags_1)
+               /sizeof(asn_DEF_FConstr_tags_1[0]), /* 1 */
+       asn_DEF_FConstr_tags_1, /* Same as above */
+       sizeof(asn_DEF_FConstr_tags_1)
+               /sizeof(asn_DEF_FConstr_tags_1[0]), /* 1 */
+       { &asn_OER_type_FConstr_constr_1, 0, FConstr_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/139-component-relation-OK.asn1 b/tests/tests-asn1c-compiler/139-component-relation-OK.asn1
new file mode 100644 (file)
index 0000000..e71a35e
--- /dev/null
@@ -0,0 +1,36 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .139
+
+ModuleComponentRelationConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 139 }
+       DEFINITIONS ::=
+BEGIN
+
+    Frame ::= SEQUENCE {
+        ident   FRAME-STRUCTURE.&id({FrameTypes}),
+        value   FRAME-STRUCTURE.&Type({FrameTypes}{@.ident}),
+        ...
+    }
+
+    FRAME-STRUCTURE ::= CLASS {
+        &id    INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    FrameTypes FRAME-STRUCTURE ::= {
+        { PrimitiveMessage IDENTIFIED BY basicMessage } |
+        { ComplexMessage IDENTIFIED BY 2 },
+        ...
+    }
+
+    PrimitiveMessage ::= SEQUENCE {}
+    ComplexMessage ::= SEQUENCE {}
+
+    basicMessage INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..31bf458
--- /dev/null
@@ -0,0 +1,37 @@
+ModuleComponentRelationConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 139 }
+DEFINITIONS ::=
+BEGIN
+
+Frame ::= SEQUENCE {
+    ident       FRAME-STRUCTURE.&id ({FrameTypes}),
+    value       FRAME-STRUCTURE.&Type ({FrameTypes}{@.ident}),
+    ...
+}
+
+FRAME-STRUCTURE ::= CLASS {
+    &id         INTEGER UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]     basicMessage  PrimitiveMessage 
+-- [2]                2    ComplexMessage 
+
+
+FrameTypes FRAME-STRUCTURE ::= {{ PrimitiveMessage IDENTIFIED BY basicMessage } | { ComplexMessage IDENTIFIED BY 2 },...}
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]     basicMessage  PrimitiveMessage 
+-- [2]                2    ComplexMessage 
+-- [ ] ...
+
+
+PrimitiveMessage ::= SEQUENCE { }
+
+ComplexMessage ::= SEQUENCE { }
+
+basicMessage INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P
new file mode 100644 (file)
index 0000000..bdd439a
--- /dev/null
@@ -0,0 +1,344 @@
+
+/*** <<< INCLUDES [Frame] >>> ***/
+
+#include <NativeInteger.h>
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "PrimitiveMessage.h"
+#include "ComplexMessage.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Frame] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_PrimitiveMessage,
+       value_PR_ComplexMessage
+} value_PR;
+
+/*** <<< TYPE-DECLS [Frame] >>> ***/
+
+typedef struct Frame {
+       long     ident;
+       struct value {
+               value_PR present;
+               union Frame__value_u {
+                       PrimitiveMessage_t       PrimitiveMessage;
+                       ComplexMessage_t         ComplexMessage;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Frame_t;
+
+/*** <<< FUNC-DECLS [Frame] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Frame;
+
+/*** <<< IOC-TABLES [Frame] >>> ***/
+
+static const long asn_VAL_1_basicMessage = 1;
+static const long asn_VAL_2_2 = 2;
+static const asn_ioc_cell_t asn_IOS_FrameTypes_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_basicMessage },
+       { "&Type", aioc__type, &asn_DEF_PrimitiveMessage },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
+       { "&Type", aioc__type, &asn_DEF_ComplexMessage }
+};
+static const asn_ioc_set_t asn_IOS_FrameTypes_1[] = {
+       { 2, 2, asn_IOS_FrameTypes_1_rows }
+};
+
+/*** <<< CODE [Frame] >>> ***/
+
+static int
+memb_ident_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_Frame_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_FrameTypes_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct Frame, ident));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [Frame] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.PrimitiveMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_PrimitiveMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "PrimitiveMessage"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.ComplexMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_ComplexMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ComplexMessage"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* PrimitiveMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ComplexMessage */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       2,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Frame_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Frame, ident),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_ident_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ident"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Frame, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_3,
+               .type_selector = select_Frame_value_type,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Frame_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Frame_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ident */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Frame_specs_1 = {
+       sizeof(struct Frame),
+       offsetof(struct Frame, _asn_ctx),
+       .tag2el = asn_MAP_Frame_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Frame = {
+       "Frame",
+       "Frame",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Frame_tags_1,
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       asn_DEF_Frame_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Frame_1,
+       2,      /* Elements count */
+       &asn_SPC_Frame_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [PrimitiveMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [PrimitiveMessage] >>> ***/
+
+typedef struct PrimitiveMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PrimitiveMessage_t;
+
+/*** <<< FUNC-DECLS [PrimitiveMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1;
+
+/*** <<< STAT-DEFS [PrimitiveMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PrimitiveMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1 = {
+       sizeof(struct PrimitiveMessage),
+       offsetof(struct PrimitiveMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
+       "PrimitiveMessage",
+       "PrimitiveMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_PrimitiveMessage_tags_1,
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       asn_DEF_PrimitiveMessage_tags_1,        /* Same as above */
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_PrimitiveMessage_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ComplexMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ComplexMessage] >>> ***/
+
+typedef struct ComplexMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ComplexMessage_t;
+
+/*** <<< FUNC-DECLS [ComplexMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ComplexMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1;
+
+/*** <<< STAT-DEFS [ComplexMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ComplexMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1 = {
+       sizeof(struct ComplexMessage),
+       offsetof(struct ComplexMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
+       "ComplexMessage",
+       "ComplexMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ComplexMessage_tags_1,
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       asn_DEF_ComplexMessage_tags_1,  /* Same as above */
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ComplexMessage_specs_1 /* Additional specs */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define basicMessage (1)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/14-resolver-OK.asn1 b/tests/tests-asn1c-compiler/14-resolver-OK.asn1
new file mode 100644 (file)
index 0000000..4b0df81
--- /dev/null
@@ -0,0 +1,66 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .14 1
+-- .14 2
+-- .14 3
+
+ModuleTestResolver2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 14 1 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS Enumeration, beta, gamma FROM
+               OtherModuleRenamed
+               { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+                       spelio(9363) software(1) asn1c(5) test(1) 14 2 };
+
+       -- external references
+       alpha Enumeration ::= beta
+       other Enumeration ::= gamma
+       
+       Struct ::= SEQUENCE {
+               member1 [1]     ModuleTestResolver3.Enumeration OPTIONAL,
+               member2 [2]     OtherModuleRenamed.Enumeration DEFAULT b
+       }
+
+       -- 
+       -- The following are for post-fix checking by the check_fixer.
+       -- It will be able to pick-up these values if the file is parseable,
+       -- even if it contains some semantic errors.
+       -- 
+
+       check-alpha INTEGER ::= 2
+       check-other INTEGER ::= 1
+
+END
+
+ModuleTestResolver3
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 14 2 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS Enumeration, beta, gamma;
+       IMPORTS gamma, HiddenEnum FROM HiddenModule;
+
+       beta HiddenEnum ::= b
+
+       Enumeration ::= ENUMERATED { a(1), b(2) }       -- the same type --
+
+END
+
+HiddenModule
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 14 3 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS HiddenEnum, gamma;
+       IMPORTS Enumeration FROM ModuleTestResolver3;
+
+       HiddenEnum ::= ENUMERATED { a(1), b(2) }
+
+       gamma Enumeration ::= a
+
+END
diff --git a/tests/tests-asn1c-compiler/14-resolver-OK.asn1.-EF b/tests/tests-asn1c-compiler/14-resolver-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..8c3eb0f
--- /dev/null
@@ -0,0 +1,47 @@
+ModuleTestResolver2 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 14 1 }
+DEFINITIONS ::=
+BEGIN
+
+alpha Enumeration ::= 2
+
+other Enumeration ::= 1
+
+Struct ::= SEQUENCE {
+    member1     [1] EXPLICIT ModuleTestResolver3.Enumeration OPTIONAL,
+    member2     [2] EXPLICIT OtherModuleRenamed.Enumeration DEFAULT 2
+}
+
+check-alpha INTEGER ::= 2
+
+check-other INTEGER ::= 1
+
+END
+
+ModuleTestResolver3 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 14 2 }
+DEFINITIONS ::=
+BEGIN
+
+beta HiddenEnum ::= 2
+
+Enumeration ::= ENUMERATED {
+    a(1),
+    b(2)
+}
+
+END
+
+HiddenModule { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 14 3 }
+DEFINITIONS ::=
+BEGIN
+
+HiddenEnum ::= ENUMERATED {
+    a(1),
+    b(2)
+}
+
+gamma Enumeration ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/140-component-relation-OK.asn1 b/tests/tests-asn1c-compiler/140-component-relation-OK.asn1
new file mode 100644 (file)
index 0000000..39ec8f1
--- /dev/null
@@ -0,0 +1,35 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .140
+
+ModuleComponentRelationConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 140 }
+       DEFINITIONS ::=
+BEGIN
+
+    Frame ::= SEQUENCE {
+        ident   FRAME-STRUCTURE.&id({FrameTypes}),
+        value   FRAME-STRUCTURE.&Type({FrameTypes}{@ident}),
+        ...
+    }
+
+    FRAME-STRUCTURE ::= CLASS {
+        &id    INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    FrameTypes FRAME-STRUCTURE ::= { primType | complexType, ... }
+
+    primType FRAME-STRUCTURE ::= { PrimitiveMessage IDENTIFIED BY basicMessage }
+    complexType FRAME-STRUCTURE ::= { ComplexMessage IDENTIFIED BY 2 }
+
+    PrimitiveMessage ::= SEQUENCE {}
+    ComplexMessage ::= SEQUENCE {}
+
+    basicMessage INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..778d76b
--- /dev/null
@@ -0,0 +1,49 @@
+ModuleComponentRelationConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 140 }
+DEFINITIONS ::=
+BEGIN
+
+Frame ::= SEQUENCE {
+    ident       FRAME-STRUCTURE.&id ({FrameTypes}),
+    value       FRAME-STRUCTURE.&Type ({FrameTypes}{@ident}),
+    ...
+}
+
+FRAME-STRUCTURE ::= CLASS {
+    &id         INTEGER UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]     basicMessage  PrimitiveMessage 
+-- [2]                2    ComplexMessage 
+
+
+FrameTypes FRAME-STRUCTURE ::= {{ PrimitiveMessage IDENTIFIED BY basicMessage } | { ComplexMessage IDENTIFIED BY 2 },...}
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]     basicMessage  PrimitiveMessage 
+-- [2]                2    ComplexMessage 
+-- [ ] ...
+
+
+primType FRAME-STRUCTURE ::= { PrimitiveMessage IDENTIFIED BY basicMessage }
+-- Information Object Set has 1 entry:
+--    [             &id][           &Type]
+-- [1]     basicMessage  PrimitiveMessage 
+
+
+complexType FRAME-STRUCTURE ::= { ComplexMessage IDENTIFIED BY 2 }
+-- Information Object Set has 1 entry:
+--    [           &id][         &Type]
+-- [1]              2  ComplexMessage 
+
+
+PrimitiveMessage ::= SEQUENCE { }
+
+ComplexMessage ::= SEQUENCE { }
+
+basicMessage INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P
new file mode 100644 (file)
index 0000000..bdd439a
--- /dev/null
@@ -0,0 +1,344 @@
+
+/*** <<< INCLUDES [Frame] >>> ***/
+
+#include <NativeInteger.h>
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "PrimitiveMessage.h"
+#include "ComplexMessage.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Frame] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_PrimitiveMessage,
+       value_PR_ComplexMessage
+} value_PR;
+
+/*** <<< TYPE-DECLS [Frame] >>> ***/
+
+typedef struct Frame {
+       long     ident;
+       struct value {
+               value_PR present;
+               union Frame__value_u {
+                       PrimitiveMessage_t       PrimitiveMessage;
+                       ComplexMessage_t         ComplexMessage;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Frame_t;
+
+/*** <<< FUNC-DECLS [Frame] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Frame;
+
+/*** <<< IOC-TABLES [Frame] >>> ***/
+
+static const long asn_VAL_1_basicMessage = 1;
+static const long asn_VAL_2_2 = 2;
+static const asn_ioc_cell_t asn_IOS_FrameTypes_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_basicMessage },
+       { "&Type", aioc__type, &asn_DEF_PrimitiveMessage },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
+       { "&Type", aioc__type, &asn_DEF_ComplexMessage }
+};
+static const asn_ioc_set_t asn_IOS_FrameTypes_1[] = {
+       { 2, 2, asn_IOS_FrameTypes_1_rows }
+};
+
+/*** <<< CODE [Frame] >>> ***/
+
+static int
+memb_ident_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_Frame_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_FrameTypes_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct Frame, ident));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [Frame] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.PrimitiveMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_PrimitiveMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "PrimitiveMessage"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.ComplexMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_ComplexMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ComplexMessage"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* PrimitiveMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ComplexMessage */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       2,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Frame_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Frame, ident),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_ident_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ident"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Frame, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_3,
+               .type_selector = select_Frame_value_type,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Frame_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Frame_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* ident */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Frame_specs_1 = {
+       sizeof(struct Frame),
+       offsetof(struct Frame, _asn_ctx),
+       .tag2el = asn_MAP_Frame_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Frame = {
+       "Frame",
+       "Frame",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Frame_tags_1,
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       asn_DEF_Frame_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Frame_1,
+       2,      /* Elements count */
+       &asn_SPC_Frame_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [PrimitiveMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [PrimitiveMessage] >>> ***/
+
+typedef struct PrimitiveMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PrimitiveMessage_t;
+
+/*** <<< FUNC-DECLS [PrimitiveMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1;
+
+/*** <<< STAT-DEFS [PrimitiveMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PrimitiveMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1 = {
+       sizeof(struct PrimitiveMessage),
+       offsetof(struct PrimitiveMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
+       "PrimitiveMessage",
+       "PrimitiveMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_PrimitiveMessage_tags_1,
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       asn_DEF_PrimitiveMessage_tags_1,        /* Same as above */
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_PrimitiveMessage_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ComplexMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ComplexMessage] >>> ***/
+
+typedef struct ComplexMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ComplexMessage_t;
+
+/*** <<< FUNC-DECLS [ComplexMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ComplexMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1;
+
+/*** <<< STAT-DEFS [ComplexMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ComplexMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1 = {
+       sizeof(struct ComplexMessage),
+       offsetof(struct ComplexMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
+       "ComplexMessage",
+       "ComplexMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ComplexMessage_tags_1,
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       asn_DEF_ComplexMessage_tags_1,  /* Same as above */
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ComplexMessage_specs_1 /* Additional specs */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define basicMessage (1)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/141-component-relation-OK.asn1 b/tests/tests-asn1c-compiler/141-component-relation-OK.asn1
new file mode 100644 (file)
index 0000000..e1f1d0d
--- /dev/null
@@ -0,0 +1,38 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .141
+
+ModuleComponentRelationConstraint
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 141 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+    Frame ::= SEQUENCE {
+        ident   FRAME-STRUCTURE.&id({FrameTypes}),
+        value   FRAME-STRUCTURE.&Type({FrameTypes}{@.ident}),
+        ...
+    }
+
+    FRAME-STRUCTURE ::= CLASS {
+        &id    ConstrainedInteger UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    ConstrainedInteger ::= INTEGER (0..32767)
+
+    FrameTypes FRAME-STRUCTURE ::= {
+        { PrimitiveMessage IDENTIFIED BY primMessage } |
+        { ComplexMessage IDENTIFIED BY cplxMessage }
+        , ... }
+
+    PrimitiveMessage ::= SEQUENCE {}
+    ComplexMessage ::= SEQUENCE {}
+
+    primMessage INTEGER ::= 1
+    cplxMessage INTEGER ::= 2
+
+END
diff --git a/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..9820b30
--- /dev/null
@@ -0,0 +1,41 @@
+ModuleComponentRelationConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 141 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+Frame ::= SEQUENCE {
+    ident       [0] IMPLICIT FRAME-STRUCTURE.&id ({FrameTypes}),
+    value       [1] EXPLICIT FRAME-STRUCTURE.&Type ({FrameTypes}{@.ident}),
+    ...
+}
+
+FRAME-STRUCTURE ::= CLASS {
+    &id         ConstrainedInteger UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]      primMessage  PrimitiveMessage 
+-- [2]      cplxMessage    ComplexMessage 
+
+
+ConstrainedInteger ::= INTEGER (0..32767)
+
+FrameTypes FRAME-STRUCTURE ::= {{ PrimitiveMessage IDENTIFIED BY primMessage } | { ComplexMessage IDENTIFIED BY cplxMessage },...}
+-- Information Object Set has 2 entries:
+--    [             &id][           &Type]
+-- [1]      primMessage  PrimitiveMessage 
+-- [2]      cplxMessage    ComplexMessage 
+-- [ ] ...
+
+
+PrimitiveMessage ::= SEQUENCE { }
+
+ComplexMessage ::= SEQUENCE { }
+
+primMessage INTEGER ::= 1
+
+cplxMessage INTEGER ::= 2
+
+END
diff --git a/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P
new file mode 100644 (file)
index 0000000..db52a1a
--- /dev/null
@@ -0,0 +1,424 @@
+
+/*** <<< INCLUDES [Frame] >>> ***/
+
+#include "ConstrainedInteger.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include "PrimitiveMessage.h"
+#include "ComplexMessage.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Frame] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_PrimitiveMessage,
+       value_PR_ComplexMessage
+} value_PR;
+
+/*** <<< TYPE-DECLS [Frame] >>> ***/
+
+typedef struct Frame {
+       ConstrainedInteger_t     ident;
+       struct value {
+               value_PR present;
+               union Frame__value_u {
+                       PrimitiveMessage_t       PrimitiveMessage;
+                       ComplexMessage_t         ComplexMessage;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Frame_t;
+
+/*** <<< FUNC-DECLS [Frame] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Frame;
+
+/*** <<< IOC-TABLES [Frame] >>> ***/
+
+static const long asn_VAL_1_primMessage = 1;
+static const long asn_VAL_2_cplxMessage = 2;
+static const asn_ioc_cell_t asn_IOS_FrameTypes_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_ConstrainedInteger, &asn_VAL_1_primMessage },
+       { "&Type", aioc__type, &asn_DEF_PrimitiveMessage },
+       { "&id", aioc__value, &asn_DEF_ConstrainedInteger, &asn_VAL_2_cplxMessage },
+       { "&Type", aioc__type, &asn_DEF_ComplexMessage }
+};
+static const asn_ioc_set_t asn_IOS_FrameTypes_1[] = {
+       { 2, 2, asn_IOS_FrameTypes_1_rows }
+};
+
+/*** <<< CODE [Frame] >>> ***/
+
+static int
+memb_ident_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 32767)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static asn_type_selector_result_t
+select_Frame_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_FrameTypes_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct Frame, ident));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [Frame] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.PrimitiveMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_PrimitiveMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "PrimitiveMessage"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.ComplexMessage),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_ComplexMessage,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ComplexMessage"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* PrimitiveMessage */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* ComplexMessage */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       2,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Frame_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Frame, ident),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ConstrainedInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_ident_constraint_1 },
+               0, 0, /* No default value */
+               .name = "ident"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct Frame, value),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_value_3,
+               .type_selector = select_Frame_value_type,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Frame_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Frame_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ident */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* value */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Frame_specs_1 = {
+       sizeof(struct Frame),
+       offsetof(struct Frame, _asn_ctx),
+       .tag2el = asn_MAP_Frame_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Frame = {
+       "Frame",
+       "Frame",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Frame_tags_1,
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       asn_DEF_Frame_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Frame_tags_1)
+               /sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Frame_1,
+       2,      /* Elements count */
+       &asn_SPC_Frame_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ConstrainedInteger] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [ConstrainedInteger] >>> ***/
+
+typedef long    ConstrainedInteger_t;
+
+/*** <<< FUNC-DECLS [ConstrainedInteger] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ConstrainedInteger;
+asn_struct_free_f ConstrainedInteger_free;
+asn_struct_print_f ConstrainedInteger_print;
+asn_constr_check_f ConstrainedInteger_constraint;
+ber_type_decoder_f ConstrainedInteger_decode_ber;
+der_type_encoder_f ConstrainedInteger_encode_der;
+xer_type_decoder_f ConstrainedInteger_decode_xer;
+xer_type_encoder_f ConstrainedInteger_encode_xer;
+
+/*** <<< CODE [ConstrainedInteger] >>> ***/
+
+int
+ConstrainedInteger_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 32767)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [ConstrainedInteger] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ConstrainedInteger_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ConstrainedInteger = {
+       "ConstrainedInteger",
+       "ConstrainedInteger",
+       &asn_OP_NativeInteger,
+       asn_DEF_ConstrainedInteger_tags_1,
+       sizeof(asn_DEF_ConstrainedInteger_tags_1)
+               /sizeof(asn_DEF_ConstrainedInteger_tags_1[0]), /* 1 */
+       asn_DEF_ConstrainedInteger_tags_1,      /* Same as above */
+       sizeof(asn_DEF_ConstrainedInteger_tags_1)
+               /sizeof(asn_DEF_ConstrainedInteger_tags_1[0]), /* 1 */
+       { 0, 0, ConstrainedInteger_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [PrimitiveMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [PrimitiveMessage] >>> ***/
+
+typedef struct PrimitiveMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PrimitiveMessage_t;
+
+/*** <<< FUNC-DECLS [PrimitiveMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1;
+
+/*** <<< STAT-DEFS [PrimitiveMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PrimitiveMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_PrimitiveMessage_specs_1 = {
+       sizeof(struct PrimitiveMessage),
+       offsetof(struct PrimitiveMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
+       "PrimitiveMessage",
+       "PrimitiveMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_PrimitiveMessage_tags_1,
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       asn_DEF_PrimitiveMessage_tags_1,        /* Same as above */
+       sizeof(asn_DEF_PrimitiveMessage_tags_1)
+               /sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_PrimitiveMessage_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ComplexMessage] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ComplexMessage] >>> ***/
+
+typedef struct ComplexMessage {
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ComplexMessage_t;
+
+/*** <<< FUNC-DECLS [ComplexMessage] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ComplexMessage;
+extern asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1;
+
+/*** <<< STAT-DEFS [ComplexMessage] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ComplexMessage_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_ComplexMessage_specs_1 = {
+       sizeof(struct ComplexMessage),
+       offsetof(struct ComplexMessage, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
+       "ComplexMessage",
+       "ComplexMessage",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ComplexMessage_tags_1,
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       asn_DEF_ComplexMessage_tags_1,  /* Same as above */
+       sizeof(asn_DEF_ComplexMessage_tags_1)
+               /sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ComplexMessage_specs_1 /* Additional specs */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define primMessage (1)
+#define cplxMessage (2)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1 b/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1
new file mode 100644 (file)
index 0000000..5b89bd9
--- /dev/null
@@ -0,0 +1,31 @@
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .142
+
+ModuleTestAnonTypeDecoration
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 142 }
+DEFINITIONS AUTOMATIC TAGS ::= BEGIN 
+
+    CommonType ::= CHOICE  {
+        t1 Type1,
+        t2 Type2
+    }
+
+    Type1 ::= CHOICE  {
+        anonType SEQUENCE  {
+            x OCTET STRING (SIZE (32)),
+            y OCTET STRING (SIZE (32))
+        }
+    }
+
+    Type2 ::= CHOICE  {
+        anonType SEQUENCE  {
+            x OCTET STRING (SIZE (48)),
+            y OCTET STRING (SIZE (48))
+        }
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-Pfcompound-names
new file mode 100644 (file)
index 0000000..1d2ee81
--- /dev/null
@@ -0,0 +1,454 @@
+
+/*** <<< INCLUDES [CommonType] >>> ***/
+
+#include "Type1.h"
+#include "Type2.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [CommonType] >>> ***/
+
+typedef enum CommonType_PR {
+       CommonType_PR_NOTHING,  /* No components present */
+       CommonType_PR_t1,
+       CommonType_PR_t2
+} CommonType_PR;
+
+/*** <<< TYPE-DECLS [CommonType] >>> ***/
+
+typedef struct CommonType {
+       CommonType_PR present;
+       union CommonType_u {
+               Type1_t  t1;
+               Type2_t  t2;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} CommonType_t;
+
+/*** <<< FUNC-DECLS [CommonType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CommonType;
+
+/*** <<< STAT-DEFS [CommonType] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_CommonType_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct CommonType, choice.t1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Type1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct CommonType, choice.t2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Type2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t2"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_CommonType_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* t2 */
+};
+static asn_CHOICE_specifics_t asn_SPC_CommonType_specs_1 = {
+       sizeof(struct CommonType),
+       offsetof(struct CommonType, _asn_ctx),
+       offsetof(struct CommonType, present),
+       sizeof(((struct CommonType *)0)->present),
+       .tag2el = asn_MAP_CommonType_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_CommonType = {
+       "CommonType",
+       "CommonType",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_CommonType_1,
+       2,      /* Elements count */
+       &asn_SPC_CommonType_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Type1] >>> ***/
+
+#include <OCTET_STRING.h>
+#include <constr_SEQUENCE.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Type1] >>> ***/
+
+typedef enum Type1_PR {
+       Type1_PR_NOTHING,       /* No components present */
+       Type1_PR_anonType
+} Type1_PR;
+
+/*** <<< TYPE-DECLS [Type1] >>> ***/
+
+typedef struct Type1 {
+       Type1_PR present;
+       union Type1_u {
+               struct Type1__anonType {
+                       OCTET_STRING_t   x;
+                       OCTET_STRING_t   y;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } anonType;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type1_t;
+
+/*** <<< FUNC-DECLS [Type1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type1;
+extern asn_CHOICE_specifics_t asn_SPC_Type1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Type1_1[1];
+
+/*** <<< CODE [Type1] >>> ***/
+
+static int
+memb_x_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 32)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_y_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 32)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Type1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_anonType_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type1__anonType, x),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_x_constraint_2 },
+               0, 0, /* No default value */
+               .name = "x"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Type1__anonType, y),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_y_constraint_2 },
+               0, 0, /* No default value */
+               .name = "y"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_anonType_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_anonType_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* x */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* y */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_anonType_specs_2 = {
+       sizeof(struct Type1__anonType),
+       offsetof(struct Type1__anonType, _asn_ctx),
+       .tag2el = asn_MAP_anonType_tag2el_2,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_anonType_2 = {
+       "anonType",
+       "anonType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_anonType_tags_2,
+       sizeof(asn_DEF_anonType_tags_2)
+               /sizeof(asn_DEF_anonType_tags_2[0]) - 1, /* 1 */
+       asn_DEF_anonType_tags_2,        /* Same as above */
+       sizeof(asn_DEF_anonType_tags_2)
+               /sizeof(asn_DEF_anonType_tags_2[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_anonType_2,
+       2,      /* Elements count */
+       &asn_SPC_anonType_specs_2       /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Type1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type1, choice.anonType),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_anonType_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "anonType"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Type1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* anonType */
+};
+asn_CHOICE_specifics_t asn_SPC_Type1_specs_1 = {
+       sizeof(struct Type1),
+       offsetof(struct Type1, _asn_ctx),
+       offsetof(struct Type1, present),
+       sizeof(((struct Type1 *)0)->present),
+       .tag2el = asn_MAP_Type1_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Type1 = {
+       "Type1",
+       "Type1",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Type1_1,
+       1,      /* Elements count */
+       &asn_SPC_Type1_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Type2] >>> ***/
+
+#include <OCTET_STRING.h>
+#include <constr_SEQUENCE.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Type2] >>> ***/
+
+typedef enum Type2_PR {
+       Type2_PR_NOTHING,       /* No components present */
+       Type2_PR_anonType
+} Type2_PR;
+
+/*** <<< TYPE-DECLS [Type2] >>> ***/
+
+typedef struct Type2 {
+       Type2_PR present;
+       union Type2_u {
+               struct Type2__anonType {
+                       OCTET_STRING_t   x;
+                       OCTET_STRING_t   y;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } anonType;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type2_t;
+
+/*** <<< FUNC-DECLS [Type2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type2;
+extern asn_CHOICE_specifics_t asn_SPC_Type2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Type2_1[1];
+
+/*** <<< CODE [Type2] >>> ***/
+
+static int
+memb_x_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 48)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_y_constraint_2(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 48)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Type2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_anonType_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type2__anonType, x),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_x_constraint_2 },
+               0, 0, /* No default value */
+               .name = "x"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Type2__anonType, y),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_y_constraint_2 },
+               0, 0, /* No default value */
+               .name = "y"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_anonType_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_anonType_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* x */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* y */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_anonType_specs_2 = {
+       sizeof(struct Type2__anonType),
+       offsetof(struct Type2__anonType, _asn_ctx),
+       .tag2el = asn_MAP_anonType_tag2el_2,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_anonType_2 = {
+       "anonType",
+       "anonType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_anonType_tags_2,
+       sizeof(asn_DEF_anonType_tags_2)
+               /sizeof(asn_DEF_anonType_tags_2[0]) - 1, /* 1 */
+       asn_DEF_anonType_tags_2,        /* Same as above */
+       sizeof(asn_DEF_anonType_tags_2)
+               /sizeof(asn_DEF_anonType_tags_2[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_anonType_2,
+       2,      /* Elements count */
+       &asn_SPC_anonType_specs_2       /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Type2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type2, choice.anonType),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_anonType_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "anonType"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Type2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* anonType */
+};
+asn_CHOICE_specifics_t asn_SPC_Type2_specs_1 = {
+       sizeof(struct Type2),
+       offsetof(struct Type2, _asn_ctx),
+       offsetof(struct Type2, present),
+       sizeof(((struct Type2 *)0)->present),
+       .tag2el = asn_MAP_Type2_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Type2 = {
+       "Type2",
+       "Type2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Type2_1,
+       1,      /* Elements count */
+       &asn_SPC_Type2_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1 b/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1
new file mode 100644 (file)
index 0000000..9335401
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .143
+
+ModuleInnerParameterization
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 143 }
+       DEFINITIONS ::=
+BEGIN
+
+    Message ::= SEQUENCE {
+        content13 SpecializedContent {13},
+        content42 SpecializedContent {42}
+    }
+
+    SpecializedContent {INTEGER:constraint} ::= SEQUENCE {
+        id      INTEGER (constraint)
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P b/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P
new file mode 100644 (file)
index 0000000..0a50ab8
--- /dev/null
@@ -0,0 +1,240 @@
+
+/*** <<< INCLUDES [Message] >>> ***/
+
+#include "SpecializedContent.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Message] >>> ***/
+
+typedef struct Message {
+       SpecializedContent_21P0_t        content13;
+       SpecializedContent_21P1_t        content42;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Message_t;
+
+/*** <<< FUNC-DECLS [Message] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Message;
+
+/*** <<< STAT-DEFS [Message] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Message_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Message, content13),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_SpecializedContent_21P0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "content13"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Message, content42),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_SpecializedContent_21P1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "content42"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Message_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Message_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* content13 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* content42 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Message_specs_1 = {
+       sizeof(struct Message),
+       offsetof(struct Message, _asn_ctx),
+       .tag2el = asn_MAP_Message_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Message = {
+       "Message",
+       "Message",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Message_tags_1,
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       asn_DEF_Message_tags_1, /* Same as above */
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Message_1,
+       2,      /* Elements count */
+       &asn_SPC_Message_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SpecializedContent] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [SpecializedContent] >>> ***/
+
+typedef struct SpecializedContent_21P0 {
+       long     id;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SpecializedContent_21P0_t;
+typedef struct SpecializedContent_21P1 {
+       long     id;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SpecializedContent_21P1_t;
+
+/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_21P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_SpecializedContent_21P0_1[1];
+extern asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P1;
+extern asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_21P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_SpecializedContent_21P1_3[1];
+
+/*** <<< CODE [SpecializedContent] >>> ***/
+
+static int
+memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 13)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_id_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 42)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [SpecializedContent] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SpecializedContent_21P0_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SpecializedContent_21P0, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_id_constraint_1 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SpecializedContent_21P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SpecializedContent_21P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_21P0_specs_1 = {
+       sizeof(struct SpecializedContent_21P0),
+       offsetof(struct SpecializedContent_21P0, _asn_ctx),
+       .tag2el = asn_MAP_SpecializedContent_21P0_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P0 = {
+       "SpecializedContent",
+       "SpecializedContent",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SpecializedContent_21P0_tags_1,
+       sizeof(asn_DEF_SpecializedContent_21P0_tags_1)
+               /sizeof(asn_DEF_SpecializedContent_21P0_tags_1[0]), /* 1 */
+       asn_DEF_SpecializedContent_21P0_tags_1, /* Same as above */
+       sizeof(asn_DEF_SpecializedContent_21P0_tags_1)
+               /sizeof(asn_DEF_SpecializedContent_21P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SpecializedContent_21P0_1,
+       1,      /* Elements count */
+       &asn_SPC_SpecializedContent_21P0_specs_1        /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_SpecializedContent_21P1_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SpecializedContent_21P1, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_id_constraint_3 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SpecializedContent_21P1_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SpecializedContent_21P1_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SpecializedContent_21P1_specs_3 = {
+       sizeof(struct SpecializedContent_21P1),
+       offsetof(struct SpecializedContent_21P1, _asn_ctx),
+       .tag2el = asn_MAP_SpecializedContent_21P1_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P1 = {
+       "SpecializedContent",
+       "SpecializedContent",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SpecializedContent_21P1_tags_3,
+       sizeof(asn_DEF_SpecializedContent_21P1_tags_3)
+               /sizeof(asn_DEF_SpecializedContent_21P1_tags_3[0]), /* 1 */
+       asn_DEF_SpecializedContent_21P1_tags_3, /* Same as above */
+       sizeof(asn_DEF_SpecializedContent_21P1_tags_3)
+               /sizeof(asn_DEF_SpecializedContent_21P1_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SpecializedContent_21P1_3,
+       1,      /* Elements count */
+       &asn_SPC_SpecializedContent_21P1_specs_3        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1 b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1
new file mode 100644 (file)
index 0000000..1797473
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .144
+
+ModuleInformationObjectParameterization
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 144 }
+       DEFINITIONS ::=
+BEGIN
+
+    MYID ::= CLASS {
+        &id     INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    RegionalExtension MYID ::= {
+        {INTEGER IDENTIFIED BY 1} |
+        {BOOLEAN IDENTIFIED BY 2},
+        ...
+    }
+
+    Message ::= SEQUENCE {
+        content SpecializedContent {{RegionalExtension}}
+    }
+
+    SpecializedContent {MYID : Set} ::= SEQUENCE {
+        id      MYID.&id({Set}),
+        value   MYID.&Type({Set}{@id})
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P
new file mode 100644 (file)
index 0000000..539d9d8
--- /dev/null
@@ -0,0 +1,289 @@
+
+/*** <<< INCLUDES [Message] >>> ***/
+
+#include "SpecializedContent.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Message] >>> ***/
+
+typedef struct Message {
+       RegionalExtension_t      content;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Message_t;
+
+/*** <<< FUNC-DECLS [Message] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Message;
+
+/*** <<< STAT-DEFS [Message] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Message_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Message, content),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RegionalExtension,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "content"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Message_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Message_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* content */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Message_specs_1 = {
+       sizeof(struct Message),
+       offsetof(struct Message, _asn_ctx),
+       .tag2el = asn_MAP_Message_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Message = {
+       "Message",
+       "Message",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Message_tags_1,
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       asn_DEF_Message_tags_1, /* Same as above */
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Message_1,
+       1,      /* Elements count */
+       &asn_SPC_Message_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SpecializedContent] >>> ***/
+
+#include <NativeInteger.h>
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <BOOLEAN.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [SpecializedContent] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_INTEGER,
+       value_PR_BOOLEAN
+} value_PR;
+
+/*** <<< TYPE-DECLS [SpecializedContent] >>> ***/
+
+typedef struct RegionalExtension {
+       long     id;
+       struct value {
+               value_PR present;
+               union RegionalExtension__value_u {
+                       long     INTEGER;
+                       BOOLEAN_t        BOOLEAN;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} RegionalExtension_t;
+
+/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_RegionalExtension;
+extern asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1;
+extern asn_TYPE_member_t asn_MBR_RegionalExtension_1[2];
+
+/*** <<< IOC-TABLES [SpecializedContent] >>> ***/
+
+static const long asn_VAL_1_1 = 1;
+static const long asn_VAL_2_2 = 2;
+static const asn_ioc_cell_t asn_IOS_RegionalExtension_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_1 },
+       { "&Type", aioc__type, &asn_DEF_NativeInteger },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
+       { "&Type", aioc__type, &asn_DEF_BOOLEAN }
+};
+static const asn_ioc_set_t asn_IOS_RegionalExtension_1[] = {
+       { 2, 2, asn_IOS_RegionalExtension_1_rows }
+};
+
+/*** <<< CODE [SpecializedContent] >>> ***/
+
+static int
+memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RegionalExtension_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_RegionalExtension_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RegionalExtension, id));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [SpecializedContent] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.INTEGER),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "INTEGER"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.BOOLEAN),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "BOOLEAN"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 1, 0, 0 }, /* BOOLEAN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* INTEGER */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       2,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RegionalExtension_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_id_constraint_1 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_3,
+               .type_selector = select_RegionalExtension_value_type,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_RegionalExtension_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RegionalExtension_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1 = {
+       sizeof(struct RegionalExtension),
+       offsetof(struct RegionalExtension, _asn_ctx),
+       .tag2el = asn_MAP_RegionalExtension_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RegionalExtension = {
+       "RegionalExtension",
+       "RegionalExtension",
+       &asn_OP_SEQUENCE,
+       asn_DEF_RegionalExtension_tags_1,
+       sizeof(asn_DEF_RegionalExtension_tags_1)
+               /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */
+       asn_DEF_RegionalExtension_tags_1,       /* Same as above */
+       sizeof(asn_DEF_RegionalExtension_tags_1)
+               /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_RegionalExtension_1,
+       2,      /* Elements count */
+       &asn_SPC_RegionalExtension_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/145-empty-information-object-set-OK.asn1 b/tests/tests-asn1c-compiler/145-empty-information-object-set-OK.asn1
new file mode 100644 (file)
index 0000000..cd68676
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .145
+
+ModuleEmptyInformationObjectSet
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 145 }
+       DEFINITIONS ::=
+BEGIN
+
+    Frame ::= SEQUENCE {
+        ident   TYPE-IDENTIFIER.&id({FrameTypes}),
+        value   TYPE-IDENTIFIER.&Type({FrameTypes}{@ident})
+    }
+
+    FrameTypes TYPE-IDENTIFIER ::= { ... }
+
+END
diff --git a/tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1 b/tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1
new file mode 100644 (file)
index 0000000..1ae50f0
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .146
+
+ModuleInformationObjectParameterizationPER
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 146 }
+       DEFINITIONS ::=
+BEGIN
+
+    MYID ::= CLASS {
+        &id     INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    RegionalExtension MYID ::= {
+        {INTEGER IDENTIFIED BY 1} |
+        {BOOLEAN IDENTIFIED BY 2},
+        ...
+    }
+
+    Message ::= SEQUENCE {
+        content SpecializedContent {{RegionalExtension}}
+    }
+
+    SpecializedContent {MYID : Set} ::= SEQUENCE {
+        id      MYID.&id({Set}),
+        value   MYID.&Type({Set}{@id})
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/146-ios-parameterization-per-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..ef85ab2
--- /dev/null
@@ -0,0 +1,305 @@
+
+/*** <<< INCLUDES [Message] >>> ***/
+
+#include "SpecializedContent.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Message] >>> ***/
+
+typedef struct Message {
+       RegionalExtension_t      content;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Message_t;
+
+/*** <<< FUNC-DECLS [Message] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Message;
+
+/*** <<< STAT-DEFS [Message] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Message_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Message, content),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RegionalExtension,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "content"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Message_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Message_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* content */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Message_specs_1 = {
+       sizeof(struct Message),
+       offsetof(struct Message, _asn_ctx),
+       .tag2el = asn_MAP_Message_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Message = {
+       "Message",
+       "Message",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Message_tags_1,
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       asn_DEF_Message_tags_1, /* Same as above */
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Message_1,
+       1,      /* Elements count */
+       &asn_SPC_Message_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SpecializedContent] >>> ***/
+
+#include <NativeInteger.h>
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <BOOLEAN.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [SpecializedContent] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_INTEGER,
+       value_PR_BOOLEAN
+} value_PR;
+
+/*** <<< TYPE-DECLS [SpecializedContent] >>> ***/
+
+typedef struct RegionalExtension {
+       long     id;
+       struct value {
+               value_PR present;
+               union RegionalExtension__value_u {
+                       long     INTEGER;
+                       BOOLEAN_t        BOOLEAN;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} RegionalExtension_t;
+
+/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_RegionalExtension;
+extern asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1;
+extern asn_TYPE_member_t asn_MBR_RegionalExtension_1[2];
+
+/*** <<< IOC-TABLES [SpecializedContent] >>> ***/
+
+static const long asn_VAL_1_1 = 1;
+static const long asn_VAL_2_2 = 2;
+static const asn_ioc_cell_t asn_IOS_RegionalExtension_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_1 },
+       { "&Type", aioc__type, &asn_DEF_NativeInteger },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
+       { "&Type", aioc__type, &asn_DEF_BOOLEAN }
+};
+static const asn_ioc_set_t asn_IOS_RegionalExtension_1[] = {
+       { 2, 2, asn_IOS_RegionalExtension_1_rows }
+};
+
+/*** <<< CODE [SpecializedContent] >>> ***/
+
+static int
+memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_RegionalExtension_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_RegionalExtension_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct RegionalExtension, id));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< CTDEFS [SpecializedContent] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_value_constr_3 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [SpecializedContent] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.INTEGER),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "INTEGER"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.BOOLEAN),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "BOOLEAN"
+               },
+};
+static const unsigned asn_MAP_value_to_canonical_3[] = { 1, 0 };
+static const unsigned asn_MAP_value_from_canonical_3[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 1, 0, 0 }, /* BOOLEAN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* INTEGER */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_value_to_canonical_3,
+       .from_canonical_order = asn_MAP_value_from_canonical_3,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       2,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_RegionalExtension_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_id_constr_2, .general_constraints =  memb_id_constraint_1 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct RegionalExtension, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_3,
+               .type_selector = select_RegionalExtension_value_type,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_value_constr_3, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_RegionalExtension_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RegionalExtension_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
+};
+asn_SEQUENCE_specifics_t asn_SPC_RegionalExtension_specs_1 = {
+       sizeof(struct RegionalExtension),
+       offsetof(struct RegionalExtension, _asn_ctx),
+       .tag2el = asn_MAP_RegionalExtension_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_RegionalExtension = {
+       "RegionalExtension",
+       "RegionalExtension",
+       &asn_OP_SEQUENCE,
+       asn_DEF_RegionalExtension_tags_1,
+       sizeof(asn_DEF_RegionalExtension_tags_1)
+               /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */
+       asn_DEF_RegionalExtension_tags_1,       /* Same as above */
+       sizeof(asn_DEF_RegionalExtension_tags_1)
+               /sizeof(asn_DEF_RegionalExtension_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_RegionalExtension_1,
+       2,      /* Elements count */
+       &asn_SPC_RegionalExtension_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1 b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1
new file mode 100644 (file)
index 0000000..d92fbdb
--- /dev/null
@@ -0,0 +1,22 @@
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .147
+
+ModuleInheritPERConstraints
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 147 }
+       DEFINITIONS ::=
+BEGIN
+
+    Short ::= INTEGER (0..65535)
+    Alias ::= Short
+
+    Soo ::= SEQUENCE {
+        foo INTEGER (0..65535),
+        bar Short,
+        baz Alias
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-OER
new file mode 100644 (file)
index 0000000..ec984ce
--- /dev/null
@@ -0,0 +1,280 @@
+
+/*** <<< INCLUDES [Short] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [Short] >>> ***/
+
+typedef long    Short_t;
+
+/*** <<< FUNC-DECLS [Short] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Short;
+asn_struct_free_f Short_free;
+asn_struct_print_f Short_print;
+asn_constr_check_f Short_constraint;
+ber_type_decoder_f Short_decode_ber;
+der_type_encoder_f Short_encode_der;
+xer_type_decoder_f Short_decode_xer;
+xer_type_encoder_f Short_encode_xer;
+oer_type_decoder_f Short_decode_oer;
+oer_type_encoder_f Short_encode_oer;
+
+/*** <<< CODE [Short] >>> ***/
+
+int
+Short_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Short] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_Short_constr_1 CC_NOTUSED = {
+       { 2, 1 }        /* (0..65535) */,
+       -1};
+
+/*** <<< STAT-DEFS [Short] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Short_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Short = {
+       "Short",
+       "Short",
+       &asn_OP_NativeInteger,
+       asn_DEF_Short_tags_1,
+       sizeof(asn_DEF_Short_tags_1)
+               /sizeof(asn_DEF_Short_tags_1[0]), /* 1 */
+       asn_DEF_Short_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Short_tags_1)
+               /sizeof(asn_DEF_Short_tags_1[0]), /* 1 */
+       { &asn_OER_type_Short_constr_1, 0, Short_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Alias] >>> ***/
+
+#include "Short.h"
+
+/*** <<< TYPE-DECLS [Alias] >>> ***/
+
+typedef Short_t         Alias_t;
+
+/*** <<< FUNC-DECLS [Alias] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Alias;
+asn_struct_free_f Alias_free;
+asn_struct_print_f Alias_print;
+asn_constr_check_f Alias_constraint;
+ber_type_decoder_f Alias_decode_ber;
+der_type_encoder_f Alias_encode_der;
+xer_type_decoder_f Alias_decode_xer;
+xer_type_encoder_f Alias_encode_xer;
+oer_type_decoder_f Alias_decode_oer;
+oer_type_encoder_f Alias_encode_oer;
+
+/*** <<< CODE [Alias] >>> ***/
+
+int
+Alias_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Short,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Alias] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_Alias_constr_1 CC_NOTUSED = {
+       { 2, 1 }        /* (0..65535) */,
+       -1};
+
+/*** <<< STAT-DEFS [Alias] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Alias = {
+       "Alias",
+       "Alias",
+       &asn_OP_NativeInteger,
+       asn_DEF_Alias_tags_1,
+       sizeof(asn_DEF_Alias_tags_1)
+               /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
+       asn_DEF_Alias_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Alias_tags_1)
+               /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
+       { &asn_OER_type_Alias_constr_1, 0, Alias_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Soo] >>> ***/
+
+#include <NativeInteger.h>
+#include "Short.h"
+#include "Alias.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Soo] >>> ***/
+
+typedef struct Soo {
+       long     foo;
+       Short_t  bar;
+       Alias_t  baz;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Soo_t;
+
+/*** <<< FUNC-DECLS [Soo] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Soo;
+
+/*** <<< CODE [Soo] >>> ***/
+
+static int
+memb_foo_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [Soo] >>> ***/
+
+static asn_oer_constraints_t asn_OER_memb_foo_constr_2 CC_NOTUSED = {
+       { 2, 1 }        /* (0..65535) */,
+       -1};
+
+/*** <<< STAT-DEFS [Soo] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Soo_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, foo),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = &asn_OER_memb_foo_constr_2, .per_constraints = 0, .general_constraints =  memb_foo_constraint_1 },
+               0, 0, /* No default value */
+               .name = "foo"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, bar),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Short,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bar"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, baz),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Alias,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "baz"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Soo_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Soo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* foo */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* bar */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -2, 0 } /* baz */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Soo_specs_1 = {
+       sizeof(struct Soo),
+       offsetof(struct Soo, _asn_ctx),
+       .tag2el = asn_MAP_Soo_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Soo = {
+       "Soo",
+       "Soo",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Soo_tags_1,
+       sizeof(asn_DEF_Soo_tags_1)
+               /sizeof(asn_DEF_Soo_tags_1[0]), /* 1 */
+       asn_DEF_Soo_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Soo_tags_1)
+               /sizeof(asn_DEF_Soo_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Soo_1,
+       3,      /* Elements count */
+       &asn_SPC_Soo_specs_1    /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/147-inherit-per-constraints-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..fdd0767
--- /dev/null
@@ -0,0 +1,292 @@
+
+/*** <<< INCLUDES [Short] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [Short] >>> ***/
+
+typedef long    Short_t;
+
+/*** <<< FUNC-DECLS [Short] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Short_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Short;
+asn_struct_free_f Short_free;
+asn_struct_print_f Short_print;
+asn_constr_check_f Short_constraint;
+ber_type_decoder_f Short_decode_ber;
+der_type_encoder_f Short_encode_der;
+xer_type_decoder_f Short_decode_xer;
+xer_type_encoder_f Short_encode_xer;
+per_type_decoder_f Short_decode_uper;
+per_type_encoder_f Short_encode_uper;
+per_type_decoder_f Short_decode_aper;
+per_type_encoder_f Short_encode_aper;
+
+/*** <<< CODE [Short] >>> ***/
+
+int
+Short_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Short] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Short_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Short] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Short_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Short = {
+       "Short",
+       "Short",
+       &asn_OP_NativeInteger,
+       asn_DEF_Short_tags_1,
+       sizeof(asn_DEF_Short_tags_1)
+               /sizeof(asn_DEF_Short_tags_1[0]), /* 1 */
+       asn_DEF_Short_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Short_tags_1)
+               /sizeof(asn_DEF_Short_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Short_constr_1, Short_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Alias] >>> ***/
+
+#include "Short.h"
+
+/*** <<< TYPE-DECLS [Alias] >>> ***/
+
+typedef Short_t         Alias_t;
+
+/*** <<< FUNC-DECLS [Alias] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Alias_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Alias;
+asn_struct_free_f Alias_free;
+asn_struct_print_f Alias_print;
+asn_constr_check_f Alias_constraint;
+ber_type_decoder_f Alias_decode_ber;
+der_type_encoder_f Alias_encode_der;
+xer_type_decoder_f Alias_decode_xer;
+xer_type_encoder_f Alias_encode_xer;
+per_type_decoder_f Alias_decode_uper;
+per_type_encoder_f Alias_encode_uper;
+per_type_decoder_f Alias_decode_aper;
+per_type_encoder_f Alias_encode_aper;
+
+/*** <<< CODE [Alias] >>> ***/
+
+int
+Alias_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Short,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Alias] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Alias_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Alias] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Alias_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Alias = {
+       "Alias",
+       "Alias",
+       &asn_OP_NativeInteger,
+       asn_DEF_Alias_tags_1,
+       sizeof(asn_DEF_Alias_tags_1)
+               /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
+       asn_DEF_Alias_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Alias_tags_1)
+               /sizeof(asn_DEF_Alias_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Alias_constr_1, Alias_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Soo] >>> ***/
+
+#include <NativeInteger.h>
+#include "Short.h"
+#include "Alias.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Soo] >>> ***/
+
+typedef struct Soo {
+       long     foo;
+       Short_t  bar;
+       Alias_t  baz;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Soo_t;
+
+/*** <<< FUNC-DECLS [Soo] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Soo;
+
+/*** <<< CODE [Soo] >>> ***/
+
+static int
+memb_foo_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [Soo] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_foo_constr_2 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Soo] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Soo_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, foo),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_foo_constr_2, .general_constraints =  memb_foo_constraint_1 },
+               0, 0, /* No default value */
+               .name = "foo"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, bar),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Short,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bar"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Soo, baz),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Alias,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "baz"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Soo_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Soo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* foo */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 1 }, /* bar */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -2, 0 } /* baz */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Soo_specs_1 = {
+       sizeof(struct Soo),
+       offsetof(struct Soo, _asn_ctx),
+       .tag2el = asn_MAP_Soo_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Soo = {
+       "Soo",
+       "Soo",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Soo_tags_1,
+       sizeof(asn_DEF_Soo_tags_1)
+               /sizeof(asn_DEF_Soo_tags_1[0]), /* 1 */
+       asn_DEF_Soo_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Soo_tags_1)
+               /sizeof(asn_DEF_Soo_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Soo_1,
+       3,      /* Elements count */
+       &asn_SPC_Soo_specs_1    /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/148-der-default-set-sequence-values-OK.asn1 b/tests/tests-asn1c-compiler/148-der-default-set-sequence-values-OK.asn1
new file mode 100644 (file)
index 0000000..f4576c6
--- /dev/null
@@ -0,0 +1,22 @@
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .148
+
+ModuleTestDerSetSequenceValues
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 148 }
+DEFINITIONS AUTOMATIC TAGS ::= BEGIN
+
+    DefaultSequence ::= SEQUENCE {
+        aBool BOOLEAN DEFAULT FALSE,
+        anInteger INTEGER OPTIONAL
+    }
+
+    DefaultSet ::= SET {
+        aBool [0] IMPLICIT BOOLEAN DEFAULT FALSE,
+        anInteger [1] IMPLICIT INTEGER OPTIONAL
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/149-with-components-SE.asn1 b/tests/tests-asn1c-compiler/149-with-components-SE.asn1
new file mode 100644 (file)
index 0000000..15ec290
--- /dev/null
@@ -0,0 +1,42 @@
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .149
+
+ModuleComplexWithComponents
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 149 }
+DEFINITIONS ::= BEGIN
+
+Certificate ::= ExplicitCertificate (WITH COMPONENTS { ...,
+  issuer (WITH COMPONENTS {sha256AndDigest}),
+  toBeSigned (WITH COMPONENTS { ...,
+    id (WITH COMPONENTS {
+      name ("foo" | "bar") -- Some comment
+    }),
+    crlSeries(ScmsSpclComponentCrlSeries),
+    validityPeriod (WITH COMPONENTS { ...,
+      duration (CrlgCertExpiration)
+    }),
+    region (WITH COMPONENTS {
+      identifiedRegion (SequenceOfIdentifiedRegion (SIZE(3)) (CONSTRAINED BY {
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(Canada) }),
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(Mexico) }),
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(USA) })
+      }))
+    }),
+    canRequestRollover (NULL),
+    encryptionKey ABSENT,
+    verifyKeyIndicator (WITH COMPONENTS {
+      verificationKey (WITH COMPONENTS {
+        ecdsaNistP256 (WITH COMPONENTS {
+          compressed-y-0, compressed-y-1
+        })
+      })
+    })
+  })
+})
+
+
+END
diff --git a/tests/tests-asn1c-compiler/149-with-components-SE.asn1.-E b/tests/tests-asn1c-compiler/149-with-components-SE.asn1.-E
new file mode 100644 (file)
index 0000000..e20e6cd
--- /dev/null
@@ -0,0 +1,12 @@
+ModuleComplexWithComponents { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 149 }
+DEFINITIONS ::=
+BEGIN
+
+Certificate ::= ExplicitCertificate (WITH COMPONENTS { ..., issuer (WITH COMPONENTS { sha256AndDigest }), toBeSigned (WITH COMPONENTS { ..., id (WITH COMPONENTS { name ("foo" | "bar") }), crlSeries ( ScmsSpclComponentCrlSeries), validityPeriod (WITH COMPONENTS { ..., duration ( CrlgCertExpiration) }), region (WITH COMPONENTS { identifiedRegion ( SequenceOfIdentifiedRegion (SIZE(3)) (CONSTRAINED BY {
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(Canada) }),
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(Mexico) }),
+        IdentifiedRegion ( WITH COMPONENTS { countryOnly(USA) })
+      })) }), canRequestRollover (NULL), encryptionKey ABSENT, verifyKeyIndicator (WITH COMPONENTS { verificationKey (WITH COMPONENTS { ecdsaNistP256 (WITH COMPONENTS { compressed-y-0, compressed-y-1 }) }) }) }) })
+
+END
diff --git a/tests/tests-asn1c-compiler/15-resolver-SE.asn1 b/tests/tests-asn1c-compiler/15-resolver-SE.asn1
new file mode 100644 (file)
index 0000000..f4255c8
--- /dev/null
@@ -0,0 +1,35 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .15 1
+-- .15 2
+
+ModuleTestResolver4
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 15 1 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS Enumeration, beta FROM
+               OtherModuleRenamed
+               { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+                       spelio(9363) software(1) asn1c(5) test(1) 15 2 };
+
+       -- external reference
+       alpha Enumeration ::= beta
+
+END
+
+ModuleTestResolver5
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 15 2 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS;        -- Does not export anything!
+
+       beta Enumeration ::= b
+
+       Enumeration ::= ENUMERATED { a(1), b(2) }
+
+END
diff --git a/tests/tests-asn1c-compiler/150-with-components-OK.asn1 b/tests/tests-asn1c-compiler/150-with-components-OK.asn1
new file mode 100644 (file)
index 0000000..40ea000
--- /dev/null
@@ -0,0 +1,25 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .150
+
+ModuleValueWithComponents
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 150 }
+DEFINITIONS ::= BEGIN
+
+    EntityType ::= BIT STRING {app (0), enrol (1)} (SIZE (8))
+
+    GroupPermissions ::= SEQUENCE {
+        minChainDepth   INTEGER DEFAULT 1,
+        eeType          EntityType DEFAULT {app}
+    }
+
+    EnrolPermissions ::= GroupPermissions (WITH COMPONENTS {
+        minChainDepth (2),
+        eeType ({enrol})
+    })
+
+END
diff --git a/tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF b/tests/tests-asn1c-compiler/150-with-components-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..ddc8944
--- /dev/null
@@ -0,0 +1,18 @@
+ModuleValueWithComponents { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 150 }
+DEFINITIONS ::=
+BEGIN
+
+EntityType ::= BIT STRING {
+    app(0),
+    enrol(1)
+} (SIZE(8))
+
+GroupPermissions ::= SEQUENCE {
+    minChainDepth       INTEGER DEFAULT 1,
+    eeType      EntityType DEFAULT {app}
+}
+
+EnrolPermissions ::= GroupPermissions (WITH COMPONENTS { minChainDepth (2), eeType ({enrol}) })
+
+END
diff --git a/tests/tests-asn1c-compiler/151-per-b2110-OK.asn1 b/tests/tests-asn1c-compiler/151-per-b2110-OK.asn1
new file mode 100644 (file)
index 0000000..8706d86
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .151
+
+ModulePerEffectiveConstraint
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 151 }
+DEFINITIONS ::= BEGIN
+
+    -- B.2.1.10
+    -- Effective constraint: SIZE(3..20) and FROM("A".."K")
+    B ::= VisibleString (SIZE (20) INTERSECTION FROM ("A".."F")
+                    UNION SIZE (3) INTERSECTION FROM ("F".."K"))
+
+END
diff --git a/tests/tests-asn1c-compiler/151-per-b2110-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/151-per-b2110-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..09b56f8
--- /dev/null
@@ -0,0 +1,12 @@
+ModulePerEffectiveConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 151 }
+DEFINITIONS ::=
+BEGIN
+
+B ::= VisibleString (SIZE(20) ^ FROM("A".."F") | SIZE(3) ^ FROM("F".."K"))
+-- Combined constraints: (SIZE(20) ^ FROM("A".."F") | SIZE(3) ^ FROM("F".."K"))
+-- Practical constraints (B): (MIN..MAX) (SIZE(3 | 20)) (FROM("A".."K"))
+-- OER-visible constraints (B): (MIN..MAX) (SIZE(3 | 20)) 
+-- PER-visible constraints (B): (MIN..MAX) (SIZE(3 | 20)) (FROM("A".."K"))
+
+END
diff --git a/tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1 b/tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1
new file mode 100644 (file)
index 0000000..fcbd527
--- /dev/null
@@ -0,0 +1,43 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .152
+
+ModuleValueAndTypeReferences
+        { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+                spelio(9363) software(1) asn1c(5) test(1) 152 }
+DEFINITIONS ::= BEGIN
+
+    value INTEGER ::= 3
+
+    valueAssignment3 INTEGER ::= value
+    valueAssignment4 INTEGER ::= MOD-CAPITALS.value4
+
+    Foo ::= Extension {{CAPS.SomeType}}
+    Bar ::= Extension {{Uppercase.SomeType}}
+
+    Extension {Foo} ::= SEQUENCE {
+    }
+
+    MTYPE ::= CLASS {
+        &id    INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    MessageFrame ::= SEQUENCE {
+        messageIdE   MTYPE.&id,
+        messageIdF   MTYPE.&id({MessageTypes}),
+        valueE       MTYPE.&Type,
+        valueF       MTYPE.&Type({MessageTypes}{@.messageId})
+    }
+
+END
+
+MOD-CAPITALS
+        { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+                spelio(9363) software(1) asn1c(5) test(1) 152 1 }
+DEFINITIONS ::= BEGIN
+    value4 INTEGER ::= 4
+END
diff --git a/tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1.-EF b/tests/tests-asn1c-compiler/152-value-and-type-references-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..ac83aa5
--- /dev/null
@@ -0,0 +1,40 @@
+ModuleValueAndTypeReferences { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 152 }
+DEFINITIONS ::=
+BEGIN
+
+value INTEGER ::= 3
+
+valueAssignment3 INTEGER ::= 3
+
+valueAssignment4 INTEGER ::= 4
+
+Foo ::= Extension{ { CAPS.SomeType}}
+
+Bar ::= Extension{ { Uppercase.SomeType}}
+
+Extension{Foo} ::= SEQUENCE { }
+
+MTYPE ::= CLASS {
+    &id         INTEGER UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+
+MessageFrame ::= SEQUENCE {
+    messageIdE  MTYPE.&id,
+    messageIdF  MTYPE.&id ({MessageTypes}),
+    valueE      MTYPE.&Type,
+    valueF      MTYPE.&Type ({MessageTypes}{@.messageId})
+}
+
+END
+
+MOD-CAPITALS { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 152 1 }
+DEFINITIONS ::=
+BEGIN
+
+value4 INTEGER ::= 4
+
+END
diff --git a/tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1 b/tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..ea87f14
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .153
+
+ModuleSingleValueConstraint
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 153 }
+DEFINITIONS ::= BEGIN
+
+    zero8 OCTET STRING ::= '0000000000000000'H
+
+    Index ::= SEQUENCE {
+        padding OCTET STRING (SIZE(8)) (zero8)
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1.-EF b/tests/tests-asn1c-compiler/153-single-value-constraint-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..6586849
--- /dev/null
@@ -0,0 +1,12 @@
+ModuleSingleValueConstraint { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 153 }
+DEFINITIONS ::=
+BEGIN
+
+zero8 OCTET STRING ::= '0000000000000000'H
+
+Index ::= SEQUENCE {
+    padding     OCTET STRING (SIZE(8)) ('0000000000000000'H)
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1 b/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1
new file mode 100644 (file)
index 0000000..11abf12
--- /dev/null
@@ -0,0 +1,59 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .154
+
+ModuleREALWithComponents
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 154 }
+DEFINITIONS ::= BEGIN
+
+    UnconstrainedREAL ::= REAL
+
+    WeirdlyConstrainedREAL ::= REAL (3, ...)    -- Not really constrained
+
+    Indirect-IEEE-binary32 ::= UnconstrainedREAL (WITH COMPONENTS {
+                                    mantissa (-16777215..16777215),
+                                    base (2), exponent (-149..104)})
+
+    -- X.696 (08/2005) #12.2 and #12.3
+
+    -- IEEE 754 encoding single precision 
+    IEEE-binary32-w ::= REAL (WITH COMPONENTS { 
+                mantissa (-16777215..16777215),
+                base (2), exponent (-149..104)})
+
+    IEEE-binary32-0w ::= REAL (0 | WITH COMPONENTS { 
+                mantissa (-16777215..16777215),
+                base (2), exponent (-149..104)})
+
+    IEEE-binary32-w0 ::= REAL (WITH COMPONENTS { 
+                mantissa (-16777215..16777215),
+                base (2), exponent (-149..104)} | 0)
+
+    -- IEEE 754 encoding double precision 
+    IEEE-binary64-w ::= REAL (WITH COMPONENTS { 
+                mantissa (-9007199254740991..9007199254740991),
+                base (2), exponent (-1074..971)})
+
+    IEEE-binary64-0w ::= REAL (0 | WITH COMPONENTS { 
+                mantissa (-9007199254740991..9007199254740991),
+                base (2), exponent (-1074..971)})
+
+    IEEE-binary64-w0 ::= REAL (WITH COMPONENTS { 
+                mantissa (-9007199254740991..9007199254740991),
+                base (2), exponent (-1074..971)} | 0)
+
+    Test ::= SEQUENCE {
+        indirect-ieee-binary32 Indirect-IEEE-binary32,
+        ieee-binary32-w     IEEE-binary32-w,
+        ieee-binary32-0w    IEEE-binary32-0w,
+        ieee-binary32-w0    IEEE-binary32-w0,
+        ieee-binary64-w     IEEE-binary64-w,
+        ieee-binary64-0w    IEEE-binary64-0w,
+        ieee-binary64-w0    IEEE-binary64-w0
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..9403b97
--- /dev/null
@@ -0,0 +1,924 @@
+
+/*** <<< INCLUDES [UnconstrainedREAL] >>> ***/
+
+#include <REAL.h>
+
+/*** <<< TYPE-DECLS [UnconstrainedREAL] >>> ***/
+
+typedef REAL_t  UnconstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [UnconstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL;
+asn_struct_free_f UnconstrainedREAL_free;
+asn_struct_print_f UnconstrainedREAL_print;
+asn_constr_check_f UnconstrainedREAL_constraint;
+ber_type_decoder_f UnconstrainedREAL_decode_ber;
+der_type_encoder_f UnconstrainedREAL_encode_der;
+xer_type_decoder_f UnconstrainedREAL_decode_xer;
+xer_type_encoder_f UnconstrainedREAL_encode_xer;
+
+/*** <<< CODE [UnconstrainedREAL] >>> ***/
+
+/*
+ * This type is implemented using REAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [UnconstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_UnconstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL = {
+       "UnconstrainedREAL",
+       "UnconstrainedREAL",
+       &asn_OP_REAL,
+       asn_DEF_UnconstrainedREAL_tags_1,
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_UnconstrainedREAL_tags_1,       /* Same as above */
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [WeirdlyConstrainedREAL] >>> ***/
+
+#include <REAL.h>
+
+/*** <<< TYPE-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+typedef REAL_t  WeirdlyConstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL;
+asn_struct_free_f WeirdlyConstrainedREAL_free;
+asn_struct_print_f WeirdlyConstrainedREAL_print;
+asn_constr_check_f WeirdlyConstrainedREAL_constraint;
+ber_type_decoder_f WeirdlyConstrainedREAL_decode_ber;
+der_type_encoder_f WeirdlyConstrainedREAL_encode_der;
+xer_type_decoder_f WeirdlyConstrainedREAL_decode_xer;
+xer_type_encoder_f WeirdlyConstrainedREAL_encode_xer;
+
+/*** <<< CODE [WeirdlyConstrainedREAL] >>> ***/
+
+int
+WeirdlyConstrainedREAL_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const REAL_t *st = (const REAL_t *)sptr;
+       double value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_REAL2double(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value == 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using REAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [WeirdlyConstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_WeirdlyConstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL = {
+       "WeirdlyConstrainedREAL",
+       "WeirdlyConstrainedREAL",
+       &asn_OP_REAL,
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,  /* Same as above */
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       { 0, 0, WeirdlyConstrainedREAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Indirect-IEEE-binary32] >>> ***/
+
+#include "UnconstrainedREAL.h"
+
+/*** <<< TYPE-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+typedef UnconstrainedREAL_t     Indirect_IEEE_binary32_t;
+
+/*** <<< FUNC-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32;
+extern const asn_REAL_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1;
+asn_struct_free_f Indirect_IEEE_binary32_free;
+asn_struct_print_f Indirect_IEEE_binary32_print;
+asn_constr_check_f Indirect_IEEE_binary32_constraint;
+ber_type_decoder_f Indirect_IEEE_binary32_decode_ber;
+der_type_encoder_f Indirect_IEEE_binary32_encode_der;
+xer_type_decoder_f Indirect_IEEE_binary32_decode_xer;
+xer_type_encoder_f Indirect_IEEE_binary32_encode_xer;
+
+/*** <<< CODE [Indirect-IEEE-binary32] >>> ***/
+
+int
+Indirect_IEEE_binary32_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using UnconstrainedREAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Indirect-IEEE-binary32] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_Indirect_IEEE_binary32_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32 = {
+       "Indirect-IEEE-binary32",
+       "Indirect-IEEE-binary32",
+       &asn_OP_REAL,
+       asn_DEF_Indirect_IEEE_binary32_tags_1,
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       asn_DEF_Indirect_IEEE_binary32_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       { 0, 0, Indirect_IEEE_binary32_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_Indirect_IEEE_binary32_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w] >>> ***/
+
+typedef float   IEEE_binary32_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1;
+asn_struct_free_f IEEE_binary32_w_free;
+asn_struct_print_f IEEE_binary32_w_print;
+asn_constr_check_f IEEE_binary32_w_constraint;
+ber_type_decoder_f IEEE_binary32_w_decode_ber;
+der_type_encoder_f IEEE_binary32_w_encode_der;
+xer_type_decoder_f IEEE_binary32_w_decode_xer;
+xer_type_encoder_f IEEE_binary32_w_encode_xer;
+
+/*** <<< CODE [IEEE-binary32-w] >>> ***/
+
+int
+IEEE_binary32_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary32-w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w = {
+       "IEEE-binary32-w",
+       "IEEE-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary32_w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-0w] >>> ***/
+
+typedef float   IEEE_binary32_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-0w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1;
+asn_struct_free_f IEEE_binary32_0w_free;
+asn_struct_print_f IEEE_binary32_0w_print;
+asn_constr_check_f IEEE_binary32_0w_constraint;
+ber_type_decoder_f IEEE_binary32_0w_decode_ber;
+der_type_encoder_f IEEE_binary32_0w_encode_der;
+xer_type_decoder_f IEEE_binary32_0w_decode_xer;
+xer_type_encoder_f IEEE_binary32_0w_encode_xer;
+
+/*** <<< CODE [IEEE-binary32-0w] >>> ***/
+
+int
+IEEE_binary32_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary32-0w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w = {
+       "IEEE-binary32-0w",
+       "IEEE-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary32_0w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_0w_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w0] >>> ***/
+
+typedef float   IEEE_binary32_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1;
+asn_struct_free_f IEEE_binary32_w0_free;
+asn_struct_print_f IEEE_binary32_w0_print;
+asn_constr_check_f IEEE_binary32_w0_constraint;
+ber_type_decoder_f IEEE_binary32_w0_decode_ber;
+der_type_encoder_f IEEE_binary32_w0_encode_der;
+xer_type_decoder_f IEEE_binary32_w0_decode_xer;
+xer_type_encoder_f IEEE_binary32_w0_encode_xer;
+
+/*** <<< CODE [IEEE-binary32-w0] >>> ***/
+
+int
+IEEE_binary32_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary32-w0] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0 = {
+       "IEEE-binary32-w0",
+       "IEEE-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary32_w0_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w0_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w] >>> ***/
+
+typedef double  IEEE_binary64_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w;
+asn_struct_free_f IEEE_binary64_w_free;
+asn_struct_print_f IEEE_binary64_w_print;
+asn_constr_check_f IEEE_binary64_w_constraint;
+ber_type_decoder_f IEEE_binary64_w_decode_ber;
+der_type_encoder_f IEEE_binary64_w_encode_der;
+xer_type_decoder_f IEEE_binary64_w_decode_xer;
+xer_type_encoder_f IEEE_binary64_w_encode_xer;
+
+/*** <<< CODE [IEEE-binary64-w] >>> ***/
+
+int
+IEEE_binary64_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary64-w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w = {
+       "IEEE-binary64-w",
+       "IEEE-binary64-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary64_w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-0w] >>> ***/
+
+typedef double  IEEE_binary64_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-0w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w;
+asn_struct_free_f IEEE_binary64_0w_free;
+asn_struct_print_f IEEE_binary64_0w_print;
+asn_constr_check_f IEEE_binary64_0w_constraint;
+ber_type_decoder_f IEEE_binary64_0w_decode_ber;
+der_type_encoder_f IEEE_binary64_0w_encode_der;
+xer_type_decoder_f IEEE_binary64_0w_decode_xer;
+xer_type_encoder_f IEEE_binary64_0w_encode_xer;
+
+/*** <<< CODE [IEEE-binary64-0w] >>> ***/
+
+int
+IEEE_binary64_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary64-0w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w = {
+       "IEEE-binary64-0w",
+       "IEEE-binary64-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary64_0w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w0] >>> ***/
+
+typedef double  IEEE_binary64_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0;
+asn_struct_free_f IEEE_binary64_w0_free;
+asn_struct_print_f IEEE_binary64_w0_print;
+asn_constr_check_f IEEE_binary64_w0_constraint;
+ber_type_decoder_f IEEE_binary64_w0_decode_ber;
+der_type_encoder_f IEEE_binary64_w0_encode_der;
+xer_type_decoder_f IEEE_binary64_w0_decode_xer;
+xer_type_encoder_f IEEE_binary64_w0_encode_xer;
+
+/*** <<< CODE [IEEE-binary64-w0] >>> ***/
+
+int
+IEEE_binary64_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [IEEE-binary64-w0] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0 = {
+       "IEEE-binary64-w0",
+       "IEEE-binary64-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       { 0, 0, IEEE_binary64_w0_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Test] >>> ***/
+
+#include "Indirect-IEEE-binary32.h"
+#include "IEEE-binary32-w.h"
+#include "IEEE-binary32-0w.h"
+#include "IEEE-binary32-w0.h"
+#include "IEEE-binary64-w.h"
+#include "IEEE-binary64-0w.h"
+#include "IEEE-binary64-w0.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Test] >>> ***/
+
+typedef struct Test {
+       Indirect_IEEE_binary32_t         indirect_ieee_binary32;
+       IEEE_binary32_w_t        ieee_binary32_w;
+       IEEE_binary32_0w_t       ieee_binary32_0w;
+       IEEE_binary32_w0_t       ieee_binary32_w0;
+       IEEE_binary64_w_t        ieee_binary64_w;
+       IEEE_binary64_0w_t       ieee_binary64_0w;
+       IEEE_binary64_w0_t       ieee_binary64_w0;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_t;
+
+/*** <<< FUNC-DECLS [Test] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2;      // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3;     // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4;    // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5;    // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Test;
+
+/*** <<< CODE [Test] >>> ***/
+
+static int
+indirect_ieee_binary32_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using Indirect_IEEE_binary32,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_0w_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_0w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w0_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Test] >>> ***/
+
+static const asn_NativeReal_specifics_t asn_SPC_indirect_ieee_binary32_specs_2 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_indirect_ieee_binary32_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2 = {
+       "indirect-ieee-binary32",
+       "indirect-ieee-binary32",
+       &asn_OP_REAL,
+       asn_DEF_indirect_ieee_binary32_tags_2,
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       asn_DEF_indirect_ieee_binary32_tags_2,  /* Same as above */
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       { 0, 0, indirect_ieee_binary32_2_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_indirect_ieee_binary32_specs_2 /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w_specs_3 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3 = {
+       "ieee-binary32-w",
+       "ieee-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w_tags_3,
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       asn_DEF_ieee_binary32_w_tags_3, /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       { 0, 0, ieee_binary32_w_3_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w_specs_3        /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_0w_specs_4 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_0w_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4 = {
+       "ieee-binary32-0w",
+       "ieee-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_0w_tags_4,
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       asn_DEF_ieee_binary32_0w_tags_4,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       { 0, 0, ieee_binary32_0w_4_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_0w_specs_4       /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w0_specs_5 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w0_tags_5[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5 = {
+       "ieee-binary32-w0",
+       "ieee-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w0_tags_5,
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       asn_DEF_ieee_binary32_w0_tags_5,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       { 0, 0, ieee_binary32_w0_5_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w0_specs_5       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Test_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Test, indirect_ieee_binary32),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Indirect_IEEE_binary32,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "indirect-ieee-binary32"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w0"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w0"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 0, 0, 6 }, /* indirect-ieee-binary32 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 1, -1, 5 }, /* ieee-binary32-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 2, -2, 4 }, /* ieee-binary32-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, -3, 3 }, /* ieee-binary32-w0 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 4, -4, 2 }, /* ieee-binary64-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 5, -5, 1 }, /* ieee-binary64-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 6, -6, 0 } /* ieee-binary64-w0 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Test_specs_1 = {
+       sizeof(struct Test),
+       offsetof(struct Test, _asn_ctx),
+       .tag2el = asn_MAP_Test_tag2el_1,
+       .tag2el_count = 7,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Test = {
+       "Test",
+       "Test",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Test_tags_1,
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       asn_DEF_Test_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Test_1,
+       7,      /* Elements count */
+       &asn_SPC_Test_specs_1   /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-OER
new file mode 100644 (file)
index 0000000..71cb428
--- /dev/null
@@ -0,0 +1,999 @@
+
+/*** <<< INCLUDES [UnconstrainedREAL] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [UnconstrainedREAL] >>> ***/
+
+typedef double  UnconstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [UnconstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL;
+asn_struct_free_f UnconstrainedREAL_free;
+asn_struct_print_f UnconstrainedREAL_print;
+asn_constr_check_f UnconstrainedREAL_constraint;
+ber_type_decoder_f UnconstrainedREAL_decode_ber;
+der_type_encoder_f UnconstrainedREAL_encode_der;
+xer_type_decoder_f UnconstrainedREAL_decode_xer;
+xer_type_encoder_f UnconstrainedREAL_encode_xer;
+oer_type_decoder_f UnconstrainedREAL_decode_oer;
+oer_type_encoder_f UnconstrainedREAL_encode_oer;
+
+/*** <<< CODE [UnconstrainedREAL] >>> ***/
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [UnconstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_UnconstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL = {
+       "UnconstrainedREAL",
+       "UnconstrainedREAL",
+       &asn_OP_NativeReal,
+       asn_DEF_UnconstrainedREAL_tags_1,
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_UnconstrainedREAL_tags_1,       /* Same as above */
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [WeirdlyConstrainedREAL] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+typedef double  WeirdlyConstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL;
+asn_struct_free_f WeirdlyConstrainedREAL_free;
+asn_struct_print_f WeirdlyConstrainedREAL_print;
+asn_constr_check_f WeirdlyConstrainedREAL_constraint;
+ber_type_decoder_f WeirdlyConstrainedREAL_decode_ber;
+der_type_encoder_f WeirdlyConstrainedREAL_encode_der;
+xer_type_decoder_f WeirdlyConstrainedREAL_decode_xer;
+xer_type_encoder_f WeirdlyConstrainedREAL_encode_xer;
+oer_type_decoder_f WeirdlyConstrainedREAL_decode_oer;
+oer_type_encoder_f WeirdlyConstrainedREAL_encode_oer;
+
+/*** <<< CODE [WeirdlyConstrainedREAL] >>> ***/
+
+int
+WeirdlyConstrainedREAL_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       double value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const double *)sptr;
+       
+       if((value == 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [WeirdlyConstrainedREAL] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_WeirdlyConstrainedREAL_constr_1 CC_NOTUSED = {
+       { 0, 0 },
+       -1};
+
+/*** <<< STAT-DEFS [WeirdlyConstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_WeirdlyConstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL = {
+       "WeirdlyConstrainedREAL",
+       "WeirdlyConstrainedREAL",
+       &asn_OP_NativeReal,
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,  /* Same as above */
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       { &asn_OER_type_WeirdlyConstrainedREAL_constr_1, 0, WeirdlyConstrainedREAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Indirect-IEEE-binary32] >>> ***/
+
+#include "UnconstrainedREAL.h"
+
+/*** <<< TYPE-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+typedef UnconstrainedREAL_t     Indirect_IEEE_binary32_t;
+
+/*** <<< FUNC-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32;
+extern const asn_NativeReal_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1;
+asn_struct_free_f Indirect_IEEE_binary32_free;
+asn_struct_print_f Indirect_IEEE_binary32_print;
+asn_constr_check_f Indirect_IEEE_binary32_constraint;
+ber_type_decoder_f Indirect_IEEE_binary32_decode_ber;
+der_type_encoder_f Indirect_IEEE_binary32_encode_der;
+xer_type_decoder_f Indirect_IEEE_binary32_decode_xer;
+xer_type_encoder_f Indirect_IEEE_binary32_encode_xer;
+oer_type_decoder_f Indirect_IEEE_binary32_decode_oer;
+oer_type_encoder_f Indirect_IEEE_binary32_encode_oer;
+
+/*** <<< CODE [Indirect-IEEE-binary32] >>> ***/
+
+int
+Indirect_IEEE_binary32_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using UnconstrainedREAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Indirect-IEEE-binary32] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_Indirect_IEEE_binary32_constr_1 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [Indirect-IEEE-binary32] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_Indirect_IEEE_binary32_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32 = {
+       "Indirect-IEEE-binary32",
+       "Indirect-IEEE-binary32",
+       &asn_OP_NativeReal,
+       asn_DEF_Indirect_IEEE_binary32_tags_1,
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       asn_DEF_Indirect_IEEE_binary32_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       { &asn_OER_type_Indirect_IEEE_binary32_constr_1, 0, Indirect_IEEE_binary32_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_Indirect_IEEE_binary32_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w] >>> ***/
+
+typedef float   IEEE_binary32_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1;
+asn_struct_free_f IEEE_binary32_w_free;
+asn_struct_print_f IEEE_binary32_w_print;
+asn_constr_check_f IEEE_binary32_w_constraint;
+ber_type_decoder_f IEEE_binary32_w_decode_ber;
+der_type_encoder_f IEEE_binary32_w_encode_der;
+xer_type_decoder_f IEEE_binary32_w_decode_xer;
+xer_type_encoder_f IEEE_binary32_w_encode_xer;
+oer_type_decoder_f IEEE_binary32_w_decode_oer;
+oer_type_encoder_f IEEE_binary32_w_encode_oer;
+
+/*** <<< CODE [IEEE-binary32-w] >>> ***/
+
+int
+IEEE_binary32_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-w] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary32_w_constr_1 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary32-w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w = {
+       "IEEE-binary32-w",
+       "IEEE-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary32_w_constr_1, 0, IEEE_binary32_w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-0w] >>> ***/
+
+typedef float   IEEE_binary32_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-0w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1;
+asn_struct_free_f IEEE_binary32_0w_free;
+asn_struct_print_f IEEE_binary32_0w_print;
+asn_constr_check_f IEEE_binary32_0w_constraint;
+ber_type_decoder_f IEEE_binary32_0w_decode_ber;
+der_type_encoder_f IEEE_binary32_0w_encode_der;
+xer_type_decoder_f IEEE_binary32_0w_decode_xer;
+xer_type_encoder_f IEEE_binary32_0w_encode_xer;
+oer_type_decoder_f IEEE_binary32_0w_decode_oer;
+oer_type_encoder_f IEEE_binary32_0w_encode_oer;
+
+/*** <<< CODE [IEEE-binary32-0w] >>> ***/
+
+int
+IEEE_binary32_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-0w] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary32_0w_constr_1 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary32-0w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w = {
+       "IEEE-binary32-0w",
+       "IEEE-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary32_0w_constr_1, 0, IEEE_binary32_0w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_0w_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w0] >>> ***/
+
+typedef float   IEEE_binary32_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1;
+asn_struct_free_f IEEE_binary32_w0_free;
+asn_struct_print_f IEEE_binary32_w0_print;
+asn_constr_check_f IEEE_binary32_w0_constraint;
+ber_type_decoder_f IEEE_binary32_w0_decode_ber;
+der_type_encoder_f IEEE_binary32_w0_encode_der;
+xer_type_decoder_f IEEE_binary32_w0_decode_xer;
+xer_type_encoder_f IEEE_binary32_w0_encode_xer;
+oer_type_decoder_f IEEE_binary32_w0_decode_oer;
+oer_type_encoder_f IEEE_binary32_w0_encode_oer;
+
+/*** <<< CODE [IEEE-binary32-w0] >>> ***/
+
+int
+IEEE_binary32_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-w0] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary32_w0_constr_1 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary32-w0] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0 = {
+       "IEEE-binary32-w0",
+       "IEEE-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary32_w0_constr_1, 0, IEEE_binary32_w0_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w0_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w] >>> ***/
+
+typedef double  IEEE_binary64_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w;
+asn_struct_free_f IEEE_binary64_w_free;
+asn_struct_print_f IEEE_binary64_w_print;
+asn_constr_check_f IEEE_binary64_w_constraint;
+ber_type_decoder_f IEEE_binary64_w_decode_ber;
+der_type_encoder_f IEEE_binary64_w_encode_der;
+xer_type_decoder_f IEEE_binary64_w_decode_xer;
+xer_type_encoder_f IEEE_binary64_w_encode_xer;
+oer_type_decoder_f IEEE_binary64_w_decode_oer;
+oer_type_encoder_f IEEE_binary64_w_encode_oer;
+
+/*** <<< CODE [IEEE-binary64-w] >>> ***/
+
+int
+IEEE_binary64_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-w] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary64_w_constr_1 CC_NOTUSED = {
+       { sizeof(double), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary64-w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w = {
+       "IEEE-binary64-w",
+       "IEEE-binary64-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary64_w_constr_1, 0, IEEE_binary64_w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-0w] >>> ***/
+
+typedef double  IEEE_binary64_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-0w] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w;
+asn_struct_free_f IEEE_binary64_0w_free;
+asn_struct_print_f IEEE_binary64_0w_print;
+asn_constr_check_f IEEE_binary64_0w_constraint;
+ber_type_decoder_f IEEE_binary64_0w_decode_ber;
+der_type_encoder_f IEEE_binary64_0w_encode_der;
+xer_type_decoder_f IEEE_binary64_0w_decode_xer;
+xer_type_encoder_f IEEE_binary64_0w_encode_xer;
+oer_type_decoder_f IEEE_binary64_0w_decode_oer;
+oer_type_encoder_f IEEE_binary64_0w_encode_oer;
+
+/*** <<< CODE [IEEE-binary64-0w] >>> ***/
+
+int
+IEEE_binary64_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-0w] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary64_0w_constr_1 CC_NOTUSED = {
+       { sizeof(double), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary64-0w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w = {
+       "IEEE-binary64-0w",
+       "IEEE-binary64-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary64_0w_constr_1, 0, IEEE_binary64_0w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w0] >>> ***/
+
+typedef double  IEEE_binary64_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0;
+asn_struct_free_f IEEE_binary64_w0_free;
+asn_struct_print_f IEEE_binary64_w0_print;
+asn_constr_check_f IEEE_binary64_w0_constraint;
+ber_type_decoder_f IEEE_binary64_w0_decode_ber;
+der_type_encoder_f IEEE_binary64_w0_encode_der;
+xer_type_decoder_f IEEE_binary64_w0_decode_xer;
+xer_type_encoder_f IEEE_binary64_w0_encode_xer;
+oer_type_decoder_f IEEE_binary64_w0_decode_oer;
+oer_type_encoder_f IEEE_binary64_w0_encode_oer;
+
+/*** <<< CODE [IEEE-binary64-w0] >>> ***/
+
+int
+IEEE_binary64_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-w0] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_IEEE_binary64_w0_constr_1 CC_NOTUSED = {
+       { sizeof(double), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [IEEE-binary64-w0] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0 = {
+       "IEEE-binary64-w0",
+       "IEEE-binary64-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       { &asn_OER_type_IEEE_binary64_w0_constr_1, 0, IEEE_binary64_w0_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Test] >>> ***/
+
+#include "Indirect-IEEE-binary32.h"
+#include "IEEE-binary32-w.h"
+#include "IEEE-binary32-0w.h"
+#include "IEEE-binary32-w0.h"
+#include "IEEE-binary64-w.h"
+#include "IEEE-binary64-0w.h"
+#include "IEEE-binary64-w0.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Test] >>> ***/
+
+typedef struct Test {
+       Indirect_IEEE_binary32_t         indirect_ieee_binary32;
+       IEEE_binary32_w_t        ieee_binary32_w;
+       IEEE_binary32_0w_t       ieee_binary32_0w;
+       IEEE_binary32_w0_t       ieee_binary32_w0;
+       IEEE_binary64_w_t        ieee_binary64_w;
+       IEEE_binary64_0w_t       ieee_binary64_0w;
+       IEEE_binary64_w0_t       ieee_binary64_w0;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_t;
+
+/*** <<< FUNC-DECLS [Test] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2;      // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3;     // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4;    // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5;    // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Test;
+
+/*** <<< CODE [Test] >>> ***/
+
+static int
+indirect_ieee_binary32_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using Indirect_IEEE_binary32,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_0w_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_0w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w0_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Test] >>> ***/
+
+static asn_oer_constraints_t asn_OER_type_indirect_ieee_binary32_constr_2 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+static asn_oer_constraints_t asn_OER_type_ieee_binary32_w_constr_3 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+static asn_oer_constraints_t asn_OER_type_ieee_binary32_0w_constr_4 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+static asn_oer_constraints_t asn_OER_type_ieee_binary32_w0_constr_5 CC_NOTUSED = {
+       { sizeof(float), 0 },
+       -1};
+
+/*** <<< STAT-DEFS [Test] >>> ***/
+
+static const asn_NativeReal_specifics_t asn_SPC_indirect_ieee_binary32_specs_2 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_indirect_ieee_binary32_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2 = {
+       "indirect-ieee-binary32",
+       "indirect-ieee-binary32",
+       &asn_OP_NativeReal,
+       asn_DEF_indirect_ieee_binary32_tags_2,
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       asn_DEF_indirect_ieee_binary32_tags_2,  /* Same as above */
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       { &asn_OER_type_indirect_ieee_binary32_constr_2, 0, indirect_ieee_binary32_2_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_indirect_ieee_binary32_specs_2 /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w_specs_3 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3 = {
+       "ieee-binary32-w",
+       "ieee-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w_tags_3,
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       asn_DEF_ieee_binary32_w_tags_3, /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       { &asn_OER_type_ieee_binary32_w_constr_3, 0, ieee_binary32_w_3_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w_specs_3        /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_0w_specs_4 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_0w_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4 = {
+       "ieee-binary32-0w",
+       "ieee-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_0w_tags_4,
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       asn_DEF_ieee_binary32_0w_tags_4,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       { &asn_OER_type_ieee_binary32_0w_constr_4, 0, ieee_binary32_0w_4_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_0w_specs_4       /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w0_specs_5 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w0_tags_5[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5 = {
+       "ieee-binary32-w0",
+       "ieee-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w0_tags_5,
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       asn_DEF_ieee_binary32_w0_tags_5,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       { &asn_OER_type_ieee_binary32_w0_constr_5, 0, ieee_binary32_w0_5_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w0_specs_5       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Test_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Test, indirect_ieee_binary32),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Indirect_IEEE_binary32,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "indirect-ieee-binary32"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w0"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w0"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 0, 0, 6 }, /* indirect-ieee-binary32 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 1, -1, 5 }, /* ieee-binary32-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 2, -2, 4 }, /* ieee-binary32-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, -3, 3 }, /* ieee-binary32-w0 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 4, -4, 2 }, /* ieee-binary64-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 5, -5, 1 }, /* ieee-binary64-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 6, -6, 0 } /* ieee-binary64-w0 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Test_specs_1 = {
+       sizeof(struct Test),
+       offsetof(struct Test, _asn_ctx),
+       .tag2el = asn_MAP_Test_tag2el_1,
+       .tag2el_count = 7,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Test = {
+       "Test",
+       "Test",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Test_tags_1,
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       asn_DEF_Test_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Test_1,
+       7,      /* Elements count */
+       &asn_SPC_Test_specs_1   /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/154-with-REAL-components-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..0826565
--- /dev/null
@@ -0,0 +1,1048 @@
+
+/*** <<< INCLUDES [UnconstrainedREAL] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [UnconstrainedREAL] >>> ***/
+
+typedef double  UnconstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [UnconstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL;
+asn_struct_free_f UnconstrainedREAL_free;
+asn_struct_print_f UnconstrainedREAL_print;
+asn_constr_check_f UnconstrainedREAL_constraint;
+ber_type_decoder_f UnconstrainedREAL_decode_ber;
+der_type_encoder_f UnconstrainedREAL_encode_der;
+xer_type_decoder_f UnconstrainedREAL_decode_xer;
+xer_type_encoder_f UnconstrainedREAL_encode_xer;
+per_type_decoder_f UnconstrainedREAL_decode_uper;
+per_type_encoder_f UnconstrainedREAL_encode_uper;
+per_type_decoder_f UnconstrainedREAL_decode_aper;
+per_type_encoder_f UnconstrainedREAL_encode_aper;
+
+/*** <<< CODE [UnconstrainedREAL] >>> ***/
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [UnconstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_UnconstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_UnconstrainedREAL = {
+       "UnconstrainedREAL",
+       "UnconstrainedREAL",
+       &asn_OP_NativeReal,
+       asn_DEF_UnconstrainedREAL_tags_1,
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_UnconstrainedREAL_tags_1,       /* Same as above */
+       sizeof(asn_DEF_UnconstrainedREAL_tags_1)
+               /sizeof(asn_DEF_UnconstrainedREAL_tags_1[0]), /* 1 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [WeirdlyConstrainedREAL] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+typedef double  WeirdlyConstrainedREAL_t;
+
+/*** <<< FUNC-DECLS [WeirdlyConstrainedREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL;
+asn_struct_free_f WeirdlyConstrainedREAL_free;
+asn_struct_print_f WeirdlyConstrainedREAL_print;
+asn_constr_check_f WeirdlyConstrainedREAL_constraint;
+ber_type_decoder_f WeirdlyConstrainedREAL_decode_ber;
+der_type_encoder_f WeirdlyConstrainedREAL_encode_der;
+xer_type_decoder_f WeirdlyConstrainedREAL_decode_xer;
+xer_type_encoder_f WeirdlyConstrainedREAL_encode_xer;
+per_type_decoder_f WeirdlyConstrainedREAL_decode_uper;
+per_type_encoder_f WeirdlyConstrainedREAL_encode_uper;
+per_type_decoder_f WeirdlyConstrainedREAL_decode_aper;
+per_type_encoder_f WeirdlyConstrainedREAL_encode_aper;
+
+/*** <<< CODE [WeirdlyConstrainedREAL] >>> ***/
+
+int
+WeirdlyConstrainedREAL_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       double value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const double *)sptr;
+       
+       if((value == 3)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [WeirdlyConstrainedREAL] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_WeirdlyConstrainedREAL_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [WeirdlyConstrainedREAL] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_WeirdlyConstrainedREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_WeirdlyConstrainedREAL = {
+       "WeirdlyConstrainedREAL",
+       "WeirdlyConstrainedREAL",
+       &asn_OP_NativeReal,
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       asn_DEF_WeirdlyConstrainedREAL_tags_1,  /* Same as above */
+       sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1)
+               /sizeof(asn_DEF_WeirdlyConstrainedREAL_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_WeirdlyConstrainedREAL_constr_1, WeirdlyConstrainedREAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Indirect-IEEE-binary32] >>> ***/
+
+#include "UnconstrainedREAL.h"
+
+/*** <<< TYPE-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+typedef UnconstrainedREAL_t     Indirect_IEEE_binary32_t;
+
+/*** <<< FUNC-DECLS [Indirect-IEEE-binary32] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Indirect_IEEE_binary32_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32;
+extern const asn_NativeReal_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1;
+asn_struct_free_f Indirect_IEEE_binary32_free;
+asn_struct_print_f Indirect_IEEE_binary32_print;
+asn_constr_check_f Indirect_IEEE_binary32_constraint;
+ber_type_decoder_f Indirect_IEEE_binary32_decode_ber;
+der_type_encoder_f Indirect_IEEE_binary32_encode_der;
+xer_type_decoder_f Indirect_IEEE_binary32_decode_xer;
+xer_type_encoder_f Indirect_IEEE_binary32_encode_xer;
+per_type_decoder_f Indirect_IEEE_binary32_decode_uper;
+per_type_encoder_f Indirect_IEEE_binary32_encode_uper;
+per_type_decoder_f Indirect_IEEE_binary32_decode_aper;
+per_type_encoder_f Indirect_IEEE_binary32_encode_aper;
+
+/*** <<< CODE [Indirect-IEEE-binary32] >>> ***/
+
+int
+Indirect_IEEE_binary32_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using UnconstrainedREAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Indirect-IEEE-binary32] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Indirect_IEEE_binary32_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Indirect-IEEE-binary32] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_Indirect_IEEE_binary32_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_Indirect_IEEE_binary32_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Indirect_IEEE_binary32 = {
+       "Indirect-IEEE-binary32",
+       "Indirect-IEEE-binary32",
+       &asn_OP_NativeReal,
+       asn_DEF_Indirect_IEEE_binary32_tags_1,
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       asn_DEF_Indirect_IEEE_binary32_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1)
+               /sizeof(asn_DEF_Indirect_IEEE_binary32_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Indirect_IEEE_binary32_constr_1, Indirect_IEEE_binary32_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_Indirect_IEEE_binary32_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w] >>> ***/
+
+typedef float   IEEE_binary32_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary32_w_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1;
+asn_struct_free_f IEEE_binary32_w_free;
+asn_struct_print_f IEEE_binary32_w_print;
+asn_constr_check_f IEEE_binary32_w_constraint;
+ber_type_decoder_f IEEE_binary32_w_decode_ber;
+der_type_encoder_f IEEE_binary32_w_encode_der;
+xer_type_decoder_f IEEE_binary32_w_decode_xer;
+xer_type_encoder_f IEEE_binary32_w_encode_xer;
+per_type_decoder_f IEEE_binary32_w_decode_uper;
+per_type_encoder_f IEEE_binary32_w_encode_uper;
+per_type_decoder_f IEEE_binary32_w_decode_aper;
+per_type_encoder_f IEEE_binary32_w_encode_aper;
+
+/*** <<< CODE [IEEE-binary32-w] >>> ***/
+
+int
+IEEE_binary32_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-w] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary32_w_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary32-w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w = {
+       "IEEE-binary32-w",
+       "IEEE-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary32_w_constr_1, IEEE_binary32_w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-0w] >>> ***/
+
+typedef float   IEEE_binary32_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-0w] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary32_0w_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1;
+asn_struct_free_f IEEE_binary32_0w_free;
+asn_struct_print_f IEEE_binary32_0w_print;
+asn_constr_check_f IEEE_binary32_0w_constraint;
+ber_type_decoder_f IEEE_binary32_0w_decode_ber;
+der_type_encoder_f IEEE_binary32_0w_encode_der;
+xer_type_decoder_f IEEE_binary32_0w_decode_xer;
+xer_type_encoder_f IEEE_binary32_0w_encode_xer;
+per_type_decoder_f IEEE_binary32_0w_decode_uper;
+per_type_encoder_f IEEE_binary32_0w_encode_uper;
+per_type_decoder_f IEEE_binary32_0w_decode_aper;
+per_type_encoder_f IEEE_binary32_0w_encode_aper;
+
+/*** <<< CODE [IEEE-binary32-0w] >>> ***/
+
+int
+IEEE_binary32_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-0w] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary32_0w_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary32-0w] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_0w_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_0w = {
+       "IEEE-binary32-0w",
+       "IEEE-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_0w_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary32_0w_constr_1, IEEE_binary32_0w_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_0w_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary32-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary32-w0] >>> ***/
+
+typedef float   IEEE_binary32_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary32-w0] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary32_w0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0;
+extern const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1;
+asn_struct_free_f IEEE_binary32_w0_free;
+asn_struct_print_f IEEE_binary32_w0_print;
+asn_constr_check_f IEEE_binary32_w0_constraint;
+ber_type_decoder_f IEEE_binary32_w0_decode_ber;
+der_type_encoder_f IEEE_binary32_w0_encode_der;
+xer_type_decoder_f IEEE_binary32_w0_decode_xer;
+xer_type_encoder_f IEEE_binary32_w0_encode_xer;
+per_type_decoder_f IEEE_binary32_w0_decode_uper;
+per_type_encoder_f IEEE_binary32_w0_encode_uper;
+per_type_decoder_f IEEE_binary32_w0_decode_aper;
+per_type_encoder_f IEEE_binary32_w0_encode_aper;
+
+/*** <<< CODE [IEEE-binary32-w0] >>> ***/
+
+int
+IEEE_binary32_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary32-w0] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary32_w0_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary32-w0] >>> ***/
+
+const asn_NativeReal_specifics_t asn_SPC_IEEE_binary32_w0_specs_1 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_IEEE_binary32_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary32_w0 = {
+       "IEEE-binary32-w0",
+       "IEEE-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary32_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary32_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary32_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary32_w0_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary32_w0_constr_1, IEEE_binary32_w0_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_IEEE_binary32_w0_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w] >>> ***/
+
+typedef double  IEEE_binary64_w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary64_w_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w;
+asn_struct_free_f IEEE_binary64_w_free;
+asn_struct_print_f IEEE_binary64_w_print;
+asn_constr_check_f IEEE_binary64_w_constraint;
+ber_type_decoder_f IEEE_binary64_w_decode_ber;
+der_type_encoder_f IEEE_binary64_w_encode_der;
+xer_type_decoder_f IEEE_binary64_w_decode_xer;
+xer_type_encoder_f IEEE_binary64_w_encode_xer;
+per_type_decoder_f IEEE_binary64_w_decode_uper;
+per_type_encoder_f IEEE_binary64_w_encode_uper;
+per_type_decoder_f IEEE_binary64_w_decode_aper;
+per_type_encoder_f IEEE_binary64_w_encode_aper;
+
+/*** <<< CODE [IEEE-binary64-w] >>> ***/
+
+int
+IEEE_binary64_w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-w] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary64_w_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary64-w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w = {
+       "IEEE-binary64-w",
+       "IEEE-binary64-w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w_tags_1, /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary64_w_constr_1, IEEE_binary64_w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-0w] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-0w] >>> ***/
+
+typedef double  IEEE_binary64_0w_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-0w] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary64_0w_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w;
+asn_struct_free_f IEEE_binary64_0w_free;
+asn_struct_print_f IEEE_binary64_0w_print;
+asn_constr_check_f IEEE_binary64_0w_constraint;
+ber_type_decoder_f IEEE_binary64_0w_decode_ber;
+der_type_encoder_f IEEE_binary64_0w_encode_der;
+xer_type_decoder_f IEEE_binary64_0w_decode_xer;
+xer_type_encoder_f IEEE_binary64_0w_encode_xer;
+per_type_decoder_f IEEE_binary64_0w_decode_uper;
+per_type_encoder_f IEEE_binary64_0w_encode_uper;
+per_type_decoder_f IEEE_binary64_0w_decode_aper;
+per_type_encoder_f IEEE_binary64_0w_encode_aper;
+
+/*** <<< CODE [IEEE-binary64-0w] >>> ***/
+
+int
+IEEE_binary64_0w_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-0w] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary64_0w_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary64-0w] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_0w_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_0w = {
+       "IEEE-binary64-0w",
+       "IEEE-binary64-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_0w_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_0w_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_0w_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_0w_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary64_0w_constr_1, IEEE_binary64_0w_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [IEEE-binary64-w0] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [IEEE-binary64-w0] >>> ***/
+
+typedef double  IEEE_binary64_w0_t;
+
+/*** <<< FUNC-DECLS [IEEE-binary64-w0] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_IEEE_binary64_w0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0;
+asn_struct_free_f IEEE_binary64_w0_free;
+asn_struct_print_f IEEE_binary64_w0_print;
+asn_constr_check_f IEEE_binary64_w0_constraint;
+ber_type_decoder_f IEEE_binary64_w0_decode_ber;
+der_type_encoder_f IEEE_binary64_w0_encode_der;
+xer_type_decoder_f IEEE_binary64_w0_decode_xer;
+xer_type_encoder_f IEEE_binary64_w0_encode_xer;
+per_type_decoder_f IEEE_binary64_w0_decode_uper;
+per_type_encoder_f IEEE_binary64_w0_encode_uper;
+per_type_decoder_f IEEE_binary64_w0_decode_aper;
+per_type_encoder_f IEEE_binary64_w0_encode_aper;
+
+/*** <<< CODE [IEEE-binary64-w0] >>> ***/
+
+int
+IEEE_binary64_w0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [IEEE-binary64-w0] >>> ***/
+
+asn_per_constraints_t asn_PER_type_IEEE_binary64_w0_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [IEEE-binary64-w0] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_IEEE_binary64_w0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_IEEE_binary64_w0 = {
+       "IEEE-binary64-w0",
+       "IEEE-binary64-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_IEEE_binary64_w0_tags_1,
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       asn_DEF_IEEE_binary64_w0_tags_1,        /* Same as above */
+       sizeof(asn_DEF_IEEE_binary64_w0_tags_1)
+               /sizeof(asn_DEF_IEEE_binary64_w0_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_IEEE_binary64_w0_constr_1, IEEE_binary64_w0_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Test] >>> ***/
+
+#include "Indirect-IEEE-binary32.h"
+#include "IEEE-binary32-w.h"
+#include "IEEE-binary32-0w.h"
+#include "IEEE-binary32-w0.h"
+#include "IEEE-binary64-w.h"
+#include "IEEE-binary64-0w.h"
+#include "IEEE-binary64-w0.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Test] >>> ***/
+
+typedef struct Test {
+       Indirect_IEEE_binary32_t         indirect_ieee_binary32;
+       IEEE_binary32_w_t        ieee_binary32_w;
+       IEEE_binary32_0w_t       ieee_binary32_0w;
+       IEEE_binary32_w0_t       ieee_binary32_w0;
+       IEEE_binary64_w_t        ieee_binary64_w;
+       IEEE_binary64_0w_t       ieee_binary64_0w;
+       IEEE_binary64_w0_t       ieee_binary64_w0;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_t;
+
+/*** <<< FUNC-DECLS [Test] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2;      // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3;     // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4;    // (Use -fall-defs-global to expose) */
+/* extern asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5;    // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Test;
+
+/*** <<< CODE [Test] >>> ***/
+
+static int
+indirect_ieee_binary32_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using Indirect_IEEE_binary32,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_0w_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_0w,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+ieee_binary32_w0_5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using IEEE_binary32_w0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Test] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_indirect_ieee_binary32_constr_2 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_ieee_binary32_w_constr_3 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_ieee_binary32_0w_constr_4 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_ieee_binary32_w0_constr_5 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Test] >>> ***/
+
+static const asn_NativeReal_specifics_t asn_SPC_indirect_ieee_binary32_specs_2 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_indirect_ieee_binary32_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_indirect_ieee_binary32_2 = {
+       "indirect-ieee-binary32",
+       "indirect-ieee-binary32",
+       &asn_OP_NativeReal,
+       asn_DEF_indirect_ieee_binary32_tags_2,
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       asn_DEF_indirect_ieee_binary32_tags_2,  /* Same as above */
+       sizeof(asn_DEF_indirect_ieee_binary32_tags_2)
+               /sizeof(asn_DEF_indirect_ieee_binary32_tags_2[0]), /* 1 */
+       { 0, &asn_PER_type_indirect_ieee_binary32_constr_2, indirect_ieee_binary32_2_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_indirect_ieee_binary32_specs_2 /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w_specs_3 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w_3 = {
+       "ieee-binary32-w",
+       "ieee-binary32-w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w_tags_3,
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       asn_DEF_ieee_binary32_w_tags_3, /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w_tags_3)
+               /sizeof(asn_DEF_ieee_binary32_w_tags_3[0]), /* 1 */
+       { 0, &asn_PER_type_ieee_binary32_w_constr_3, ieee_binary32_w_3_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w_specs_3        /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_0w_specs_4 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_0w_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_0w_4 = {
+       "ieee-binary32-0w",
+       "ieee-binary32-0w",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_0w_tags_4,
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       asn_DEF_ieee_binary32_0w_tags_4,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_0w_tags_4)
+               /sizeof(asn_DEF_ieee_binary32_0w_tags_4[0]), /* 1 */
+       { 0, &asn_PER_type_ieee_binary32_0w_constr_4, ieee_binary32_0w_4_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_0w_specs_4       /* Additional specs */
+};
+
+static const asn_NativeReal_specifics_t asn_SPC_ieee_binary32_w0_specs_5 = {
+       4       /* Use 'float' type. */
+};
+static const ber_tlv_tag_t asn_DEF_ieee_binary32_w0_tags_5[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ieee_binary32_w0_5 = {
+       "ieee-binary32-w0",
+       "ieee-binary32-w0",
+       &asn_OP_NativeReal,
+       asn_DEF_ieee_binary32_w0_tags_5,
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       asn_DEF_ieee_binary32_w0_tags_5,        /* Same as above */
+       sizeof(asn_DEF_ieee_binary32_w0_tags_5)
+               /sizeof(asn_DEF_ieee_binary32_w0_tags_5[0]), /* 1 */
+       { 0, &asn_PER_type_ieee_binary32_w0_constr_5, ieee_binary32_w0_5_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_ieee_binary32_w0_specs_5       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Test_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Test, indirect_ieee_binary32),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Indirect_IEEE_binary32,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "indirect-ieee-binary32"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary32_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary32_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary32-w0"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_0w),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_0w,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-0w"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test, ieee_binary64_w0),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IEEE_binary64_w0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ieee-binary64-w0"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 0, 0, 6 }, /* indirect-ieee-binary32 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 1, -1, 5 }, /* ieee-binary32-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 2, -2, 4 }, /* ieee-binary32-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, -3, 3 }, /* ieee-binary32-w0 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 4, -4, 2 }, /* ieee-binary64-w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 5, -5, 1 }, /* ieee-binary64-0w */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 6, -6, 0 } /* ieee-binary64-w0 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Test_specs_1 = {
+       sizeof(struct Test),
+       offsetof(struct Test, _asn_ctx),
+       .tag2el = asn_MAP_Test_tag2el_1,
+       .tag2el_count = 7,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Test = {
+       "Test",
+       "Test",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Test_tags_1,
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       asn_DEF_Test_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Test_tags_1)
+               /sizeof(asn_DEF_Test_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Test_1,
+       7,      /* Elements count */
+       &asn_SPC_Test_specs_1   /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1 b/tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1
new file mode 100644 (file)
index 0000000..c9f3138
--- /dev/null
@@ -0,0 +1,58 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .155
+
+ModuleParameterizationMoreThanTwoLevel
+    { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+        spelio(9363) software(1) asn1c(5) test(1) 155 }
+DEFINITIONS ::= BEGIN
+
+    id-TYPE1 PacketId ::= 1
+
+    PacketId ::= INTEGER (0..65535)
+
+    Color ::= ENUMERATED { red(0), green, blue }
+
+    Valid ::= ENUMERATED { crc-nok, crc-ok(1) }
+
+    PACKET ::= CLASS {
+        &id             PacketId     UNIQUE,
+        &color          Color,
+        &Value,
+        &valid          Valid
+    }
+    WITH SYNTAX {
+        ID              &id
+        COLOR           &color
+        TYPE            &Value
+        VALID           &valid
+    }
+
+    ClassItem PACKET ::= {
+        { ID id-TYPE1   COLOR blue   TYPE OCTET STRING VALID crc-ok },
+        ...
+    }
+
+    Packet-List ::= UpperLayer-List { {ClassItem} }
+
+    UpperLayer-List {PACKET : Param} ::= LowerLayer-List { 1, max-items, {Param} }
+
+    LowerLayer-List {INTEGER : low, INTEGER : high, PACKET : Param} ::=
+        SEQUENCE (SIZE (low..high)) OF
+        SinglePacket {{Param}}
+
+    SinglePacket {PACKET : Param} ::=
+        Packet {{Param}}
+
+    Packet {PACKET : Param} ::= SEQUENCE {
+        id      PACKET.&id     ({Param}),
+        color   PACKET.&color  ({Param}{@id}),
+        value   PACKET.&Value  ({Param}{@id})
+    }
+
+    max-items INTEGER ::= 256
+
+END
diff --git a/tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/155-parameterization-more-than-two-level-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..c4aaa97
--- /dev/null
@@ -0,0 +1,880 @@
+
+/*** <<< INCLUDES [PacketId] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [PacketId] >>> ***/
+
+typedef long    PacketId_t;
+
+/*** <<< FUNC-DECLS [PacketId] >>> ***/
+
+#define PacketId_id_TYPE1      ((PacketId_t)1)
+extern asn_per_constraints_t asn_PER_type_PacketId_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_PacketId;
+asn_struct_free_f PacketId_free;
+asn_struct_print_f PacketId_print;
+asn_constr_check_f PacketId_constraint;
+ber_type_decoder_f PacketId_decode_ber;
+der_type_encoder_f PacketId_encode_der;
+xer_type_decoder_f PacketId_decode_xer;
+xer_type_encoder_f PacketId_encode_xer;
+per_type_decoder_f PacketId_decode_uper;
+per_type_encoder_f PacketId_encode_uper;
+per_type_decoder_f PacketId_decode_aper;
+per_type_encoder_f PacketId_encode_aper;
+
+/*** <<< CODE [PacketId] >>> ***/
+
+int
+PacketId_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [PacketId] >>> ***/
+
+asn_per_constraints_t asn_PER_type_PacketId_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [PacketId] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PacketId_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PacketId = {
+       "PacketId",
+       "PacketId",
+       &asn_OP_NativeInteger,
+       asn_DEF_PacketId_tags_1,
+       sizeof(asn_DEF_PacketId_tags_1)
+               /sizeof(asn_DEF_PacketId_tags_1[0]), /* 1 */
+       asn_DEF_PacketId_tags_1,        /* Same as above */
+       sizeof(asn_DEF_PacketId_tags_1)
+               /sizeof(asn_DEF_PacketId_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_PacketId_constr_1, PacketId_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Color] >>> ***/
+
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Color] >>> ***/
+
+typedef enum Color {
+       Color_red       = 0,
+       Color_green     = 1,
+       Color_blue      = 2
+} e_Color;
+
+/*** <<< TYPE-DECLS [Color] >>> ***/
+
+typedef long    Color_t;
+
+/*** <<< FUNC-DECLS [Color] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Color_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Color;
+extern const asn_INTEGER_specifics_t asn_SPC_Color_specs_1;
+asn_struct_free_f Color_free;
+asn_struct_print_f Color_print;
+asn_constr_check_f Color_constraint;
+ber_type_decoder_f Color_decode_ber;
+der_type_encoder_f Color_encode_der;
+xer_type_decoder_f Color_decode_xer;
+xer_type_encoder_f Color_encode_xer;
+per_type_decoder_f Color_decode_uper;
+per_type_encoder_f Color_encode_uper;
+per_type_decoder_f Color_decode_aper;
+per_type_encoder_f Color_encode_aper;
+
+/*** <<< CODE [Color] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Color] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Color_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       2,  2,  0,  2 }        /* (0..2) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Color] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Color_value2enum_1[] = {
+       { 0,    3,      "red" },
+       { 1,    5,      "green" },
+       { 2,    4,      "blue" }
+};
+static const unsigned int asn_MAP_Color_enum2value_1[] = {
+       2,      /* blue(2) */
+       1,      /* green(1) */
+       0       /* red(0) */
+};
+const asn_INTEGER_specifics_t asn_SPC_Color_specs_1 = {
+       asn_MAP_Color_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Color_enum2value_1,     /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Color_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Color = {
+       "Color",
+       "Color",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_Color_tags_1,
+       sizeof(asn_DEF_Color_tags_1)
+               /sizeof(asn_DEF_Color_tags_1[0]), /* 1 */
+       asn_DEF_Color_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Color_tags_1)
+               /sizeof(asn_DEF_Color_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Color_constr_1, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Color_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Valid] >>> ***/
+
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Valid] >>> ***/
+
+typedef enum Valid {
+       Valid_crc_nok   = 0,
+       Valid_crc_ok    = 1
+} e_Valid;
+
+/*** <<< TYPE-DECLS [Valid] >>> ***/
+
+typedef long    Valid_t;
+
+/*** <<< FUNC-DECLS [Valid] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Valid_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Valid;
+extern const asn_INTEGER_specifics_t asn_SPC_Valid_specs_1;
+asn_struct_free_f Valid_free;
+asn_struct_print_f Valid_print;
+asn_constr_check_f Valid_constraint;
+ber_type_decoder_f Valid_decode_ber;
+der_type_encoder_f Valid_encode_der;
+xer_type_decoder_f Valid_decode_xer;
+xer_type_encoder_f Valid_encode_xer;
+per_type_decoder_f Valid_decode_uper;
+per_type_encoder_f Valid_encode_uper;
+per_type_decoder_f Valid_decode_aper;
+per_type_encoder_f Valid_encode_aper;
+
+/*** <<< CODE [Valid] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Valid] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Valid_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  0,  1 }        /* (0..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Valid] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Valid_value2enum_1[] = {
+       { 0,    7,      "crc-nok" },
+       { 1,    6,      "crc-ok" }
+};
+static const unsigned int asn_MAP_Valid_enum2value_1[] = {
+       0,      /* crc-nok(0) */
+       1       /* crc-ok(1) */
+};
+const asn_INTEGER_specifics_t asn_SPC_Valid_specs_1 = {
+       asn_MAP_Valid_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Valid_enum2value_1,     /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Valid_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Valid = {
+       "Valid",
+       "Valid",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_Valid_tags_1,
+       sizeof(asn_DEF_Valid_tags_1)
+               /sizeof(asn_DEF_Valid_tags_1[0]), /* 1 */
+       asn_DEF_Valid_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Valid_tags_1)
+               /sizeof(asn_DEF_Valid_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Valid_constr_1, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Valid_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Packet-List] >>> ***/
+
+#include "UpperLayer-List.h"
+
+/*** <<< TYPE-DECLS [Packet-List] >>> ***/
+
+typedef UpperLayer_List_41P0_t  Packet_List_t;
+
+/*** <<< FUNC-DECLS [Packet-List] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Packet_List;
+asn_struct_free_f Packet_List_free;
+asn_struct_print_f Packet_List_print;
+asn_constr_check_f Packet_List_constraint;
+ber_type_decoder_f Packet_List_decode_ber;
+der_type_encoder_f Packet_List_encode_der;
+xer_type_decoder_f Packet_List_decode_xer;
+xer_type_encoder_f Packet_List_encode_xer;
+per_type_decoder_f Packet_List_decode_uper;
+per_type_encoder_f Packet_List_encode_uper;
+per_type_decoder_f Packet_List_decode_aper;
+per_type_encoder_f Packet_List_encode_aper;
+
+/*** <<< CODE [Packet-List] >>> ***/
+
+int
+Packet_List_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       /* Determine the number of elements */
+       size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+       
+       if((size >= 1 && size <= 256)) {
+               /* Perform validation of the inner elements */
+               return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using UpperLayer_List_41P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Packet-List] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Packet_List_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_CONSTRAINED,       8,  8,  1,  256 }      /* (SIZE(1..256)) */,
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Packet-List] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Packet_List_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Packet_List = {
+       "Packet-List",
+       "Packet-List",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_Packet_List_tags_1,
+       sizeof(asn_DEF_Packet_List_tags_1)
+               /sizeof(asn_DEF_Packet_List_tags_1[0]), /* 1 */
+       asn_DEF_Packet_List_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Packet_List_tags_1)
+               /sizeof(asn_DEF_Packet_List_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Packet_List_constr_1, Packet_List_constraint },
+       asn_MBR_LowerLayer_List_45P0_1,
+       1,      /* Single element */
+       &asn_SPC_LowerLayer_List_45P0_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [UpperLayer-List] >>> ***/
+
+#include "LowerLayer-List.h"
+
+/*** <<< TYPE-DECLS [UpperLayer-List] >>> ***/
+
+typedef LowerLayer_List_45P0_t  UpperLayer_List_41P0_t;
+
+/*** <<< FUNC-DECLS [UpperLayer-List] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_UpperLayer_List_41P0_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_UpperLayer_List_41P0;
+asn_struct_free_f UpperLayer_List_41P0_free;
+asn_struct_print_f UpperLayer_List_41P0_print;
+asn_constr_check_f UpperLayer_List_41P0_constraint;
+ber_type_decoder_f UpperLayer_List_41P0_decode_ber;
+der_type_encoder_f UpperLayer_List_41P0_encode_der;
+xer_type_decoder_f UpperLayer_List_41P0_decode_xer;
+xer_type_encoder_f UpperLayer_List_41P0_encode_xer;
+per_type_decoder_f UpperLayer_List_41P0_decode_uper;
+per_type_encoder_f UpperLayer_List_41P0_encode_uper;
+per_type_decoder_f UpperLayer_List_41P0_decode_aper;
+per_type_encoder_f UpperLayer_List_41P0_encode_aper;
+
+/*** <<< CODE [UpperLayer-List] >>> ***/
+
+int
+UpperLayer_List_41P0_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       /* Determine the number of elements */
+       size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+       
+       if((size >= 1 && size <= 256)) {
+               /* Perform validation of the inner elements */
+               return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using LowerLayer_List_45P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [UpperLayer-List] >>> ***/
+
+asn_per_constraints_t asn_PER_type_UpperLayer_List_41P0_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_CONSTRAINED,       8,  8,  1,  256 }      /* (SIZE(1..256)) */,
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [UpperLayer-List] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_UpperLayer_List_41P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_UpperLayer_List_41P0 = {
+       "UpperLayer-List",
+       "UpperLayer-List",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_UpperLayer_List_41P0_tags_1,
+       sizeof(asn_DEF_UpperLayer_List_41P0_tags_1)
+               /sizeof(asn_DEF_UpperLayer_List_41P0_tags_1[0]), /* 1 */
+       asn_DEF_UpperLayer_List_41P0_tags_1,    /* Same as above */
+       sizeof(asn_DEF_UpperLayer_List_41P0_tags_1)
+               /sizeof(asn_DEF_UpperLayer_List_41P0_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_UpperLayer_List_41P0_constr_1, UpperLayer_List_41P0_constraint },
+       asn_MBR_LowerLayer_List_45P0_1,
+       1,      /* Single element */
+       &asn_SPC_LowerLayer_List_45P0_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [LowerLayer-List] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DECLS [LowerLayer-List] >>> ***/
+
+struct SinglePacket;
+
+/*** <<< TYPE-DECLS [LowerLayer-List] >>> ***/
+
+typedef struct LowerLayer_List_45P0 {
+       A_SEQUENCE_OF(struct SinglePacket) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} LowerLayer_List_45P0_t;
+
+/*** <<< FUNC-DECLS [LowerLayer-List] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_LowerLayer_List_45P0;
+extern asn_SET_OF_specifics_t asn_SPC_LowerLayer_List_45P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_LowerLayer_List_45P0_1[1];
+extern asn_per_constraints_t asn_PER_type_LowerLayer_List_45P0_constr_1;
+
+/*** <<< POST-INCLUDE [LowerLayer-List] >>> ***/
+
+#include "SinglePacket.h"
+
+/*** <<< CTDEFS [LowerLayer-List] >>> ***/
+
+asn_per_constraints_t asn_PER_type_LowerLayer_List_45P0_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_CONSTRAINED,       8,  8,  1,  256 }      /* (SIZE(1..256)) */,
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [LowerLayer-List] >>> ***/
+
+asn_TYPE_member_t asn_MBR_LowerLayer_List_45P0_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_SinglePacket_48P0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_LowerLayer_List_45P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_LowerLayer_List_45P0_specs_1 = {
+       sizeof(struct LowerLayer_List_45P0),
+       offsetof(struct LowerLayer_List_45P0, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_LowerLayer_List_45P0 = {
+       "LowerLayer-List",
+       "LowerLayer-List",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_LowerLayer_List_45P0_tags_1,
+       sizeof(asn_DEF_LowerLayer_List_45P0_tags_1)
+               /sizeof(asn_DEF_LowerLayer_List_45P0_tags_1[0]), /* 1 */
+       asn_DEF_LowerLayer_List_45P0_tags_1,    /* Same as above */
+       sizeof(asn_DEF_LowerLayer_List_45P0_tags_1)
+               /sizeof(asn_DEF_LowerLayer_List_45P0_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_LowerLayer_List_45P0_constr_1, SEQUENCE_OF_constraint },
+       asn_MBR_LowerLayer_List_45P0_1,
+       1,      /* Single element */
+       &asn_SPC_LowerLayer_List_45P0_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SinglePacket] >>> ***/
+
+#include "Packet.h"
+
+/*** <<< TYPE-DECLS [SinglePacket] >>> ***/
+
+typedef ClassItem_t     SinglePacket_48P0_t;
+
+/*** <<< FUNC-DECLS [SinglePacket] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SinglePacket_48P0;
+asn_struct_free_f SinglePacket_48P0_free;
+asn_struct_print_f SinglePacket_48P0_print;
+asn_constr_check_f SinglePacket_48P0_constraint;
+ber_type_decoder_f SinglePacket_48P0_decode_ber;
+der_type_encoder_f SinglePacket_48P0_encode_der;
+xer_type_decoder_f SinglePacket_48P0_decode_xer;
+xer_type_encoder_f SinglePacket_48P0_encode_xer;
+per_type_decoder_f SinglePacket_48P0_decode_uper;
+per_type_encoder_f SinglePacket_48P0_encode_uper;
+per_type_decoder_f SinglePacket_48P0_decode_aper;
+per_type_encoder_f SinglePacket_48P0_encode_aper;
+
+/*** <<< CODE [SinglePacket] >>> ***/
+
+/*
+ * This type is implemented using ClassItem,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SinglePacket] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SinglePacket_48P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SinglePacket_48P0 = {
+       "SinglePacket",
+       "SinglePacket",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SinglePacket_48P0_tags_1,
+       sizeof(asn_DEF_SinglePacket_48P0_tags_1)
+               /sizeof(asn_DEF_SinglePacket_48P0_tags_1[0]), /* 1 */
+       asn_DEF_SinglePacket_48P0_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SinglePacket_48P0_tags_1)
+               /sizeof(asn_DEF_SinglePacket_48P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ClassItem_1,
+       3,      /* Elements count */
+       &asn_SPC_ClassItem_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Packet] >>> ***/
+
+#include "PacketId.h"
+#include "Color.h"
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <OCTET_STRING.h>
+#include "Valid.h"
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Packet] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_OCTET_STRING
+} value_PR;
+
+/*** <<< TYPE-DECLS [Packet] >>> ***/
+
+typedef struct ClassItem {
+       PacketId_t       id;
+       Color_t  color;
+       struct value {
+               value_PR present;
+               union ClassItem__value_u {
+                       OCTET_STRING_t   OCTET_STRING;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ClassItem_t;
+
+/*** <<< FUNC-DECLS [Packet] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ClassItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_ClassItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_ClassItem_1[3];
+
+/*** <<< IOC-TABLES [Packet] >>> ***/
+
+static const long asn_VAL_1_id_TYPE1 = 1;
+static const long asn_VAL_1_blue = 2;
+static const long asn_VAL_1_crc_ok = 1;
+static const asn_ioc_cell_t asn_IOS_ClassItem_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_PacketId, &asn_VAL_1_id_TYPE1 },
+       { "&color", aioc__value, &asn_DEF_Color, &asn_VAL_1_blue },
+       { "&Value", aioc__type, &asn_DEF_OCTET_STRING },
+       { "&valid", aioc__value, &asn_DEF_Valid, &asn_VAL_1_crc_ok }
+};
+static const asn_ioc_set_t asn_IOS_ClassItem_1[] = {
+       { 1, 4, asn_IOS_ClassItem_1_rows }
+};
+
+/*** <<< CODE [Packet] >>> ***/
+
+static int
+memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 65535)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static asn_type_selector_result_t
+select_ClassItem_color_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_ClassItem_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &color */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ClassItem, id));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_color_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_ClassItem_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_ClassItem_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 2; /* &Value */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct ClassItem, id));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< CTDEFS [Packet] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = {
+       { APC_CONSTRAINED,       16,  16,  0,  65535 }  /* (0..65535) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_color_constr_3 CC_NOTUSED = {
+       { APC_CONSTRAINED,       2,  2,  0,  2 }        /* (0..2) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_value_constr_4 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Packet] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.OCTET_STRING),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "OCTET STRING"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* OCTET STRING */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_4 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_4,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_4 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_4,
+       1,      /* Elements count */
+       &asn_SPC_value_specs_4  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ClassItem_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ClassItem, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_PacketId,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_id_constr_2, .general_constraints =  memb_id_constraint_1 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct ClassItem, color),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Color,
+               .type_selector = select_ClassItem_color_type,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_color_constr_3, .general_constraints =  memb_color_constraint_1 },
+               0, 0, /* No default value */
+               .name = "color"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct ClassItem, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_4,
+               .type_selector = select_ClassItem_value_type,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_value_constr_4, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ClassItem_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ClassItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 1, 0, 0 } /* color */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ClassItem_specs_1 = {
+       sizeof(struct ClassItem),
+       offsetof(struct ClassItem, _asn_ctx),
+       .tag2el = asn_MAP_ClassItem_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ClassItem = {
+       "ClassItem",
+       "ClassItem",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ClassItem_tags_1,
+       sizeof(asn_DEF_ClassItem_tags_1)
+               /sizeof(asn_DEF_ClassItem_tags_1[0]), /* 1 */
+       asn_DEF_ClassItem_tags_1,       /* Same as above */
+       sizeof(asn_DEF_ClassItem_tags_1)
+               /sizeof(asn_DEF_ClassItem_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ClassItem_1,
+       3,      /* Elements count */
+       &asn_SPC_ClassItem_specs_1      /* Additional specs */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define max_items (256)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/156-union-ios-OK.asn1 b/tests/tests-asn1c-compiler/156-union-ios-OK.asn1
new file mode 100644 (file)
index 0000000..efdf467
--- /dev/null
@@ -0,0 +1,46 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .156
+
+ModuleUnionIOS
+    { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+        spelio(9363) software(1) asn1c(5) test(1) 156 }
+DEFINITIONS ::= BEGIN
+
+    MYID ::= CLASS {
+        &id     INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    TotalRegionExtension MYID ::= {
+        RegionalExtension1 |
+        RegionalExtension2
+    }
+
+    RegionalExtension1 MYID ::= {
+        {INTEGER IDENTIFIED BY 1} |
+        {BOOLEAN IDENTIFIED BY 2},
+        ...,
+        {OCTET STRING IDENTIFIED BY 3}
+    }
+
+    RegionalExtension2 MYID ::= {
+        {INTEGER IDENTIFIED BY 1},
+        ...,
+        {BOOLEAN IDENTIFIED BY 2} |
+        {OCTET STRING IDENTIFIED BY 3}
+    }
+
+    Message ::= SEQUENCE {
+        content SpecializedContent {{TotalRegionExtension}}
+    }
+
+    SpecializedContent {MYID : Set} ::= SEQUENCE {
+        id      MYID.&id({Set}),
+        value   MYID.&Type({Set}{@id})
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/156-union-ios-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/156-union-ios-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..8c053e4
--- /dev/null
@@ -0,0 +1,330 @@
+
+/*** <<< INCLUDES [Message] >>> ***/
+
+#include "SpecializedContent.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Message] >>> ***/
+
+typedef struct Message {
+       TotalRegionExtension_t   content;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Message_t;
+
+/*** <<< FUNC-DECLS [Message] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Message;
+
+/*** <<< STAT-DEFS [Message] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Message_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Message, content),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_TotalRegionExtension,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "content"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Message_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Message_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* content */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Message_specs_1 = {
+       sizeof(struct Message),
+       offsetof(struct Message, _asn_ctx),
+       .tag2el = asn_MAP_Message_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Message = {
+       "Message",
+       "Message",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Message_tags_1,
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       asn_DEF_Message_tags_1, /* Same as above */
+       sizeof(asn_DEF_Message_tags_1)
+               /sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Message_1,
+       1,      /* Elements count */
+       &asn_SPC_Message_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SpecializedContent] >>> ***/
+
+#include <NativeInteger.h>
+#include <ANY.h>
+#include <asn_ioc.h>
+#include <BOOLEAN.h>
+#include <OCTET_STRING.h>
+#include <OPEN_TYPE.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [SpecializedContent] >>> ***/
+
+typedef enum value_PR {
+       value_PR_NOTHING,       /* No components present */
+       value_PR_INTEGER,
+       value_PR_BOOLEAN,
+       value_PR_OCTET_STRING
+} value_PR;
+
+/*** <<< TYPE-DECLS [SpecializedContent] >>> ***/
+
+typedef struct TotalRegionExtension {
+       long     id;
+       struct value {
+               value_PR present;
+               union TotalRegionExtension__value_u {
+                       long     INTEGER;
+                       BOOLEAN_t        BOOLEAN;
+                       OCTET_STRING_t   OCTET_STRING;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } value;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TotalRegionExtension_t;
+
+/*** <<< FUNC-DECLS [SpecializedContent] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TotalRegionExtension;
+extern asn_SEQUENCE_specifics_t asn_SPC_TotalRegionExtension_specs_1;
+extern asn_TYPE_member_t asn_MBR_TotalRegionExtension_1[2];
+
+/*** <<< IOC-TABLES [SpecializedContent] >>> ***/
+
+static const long asn_VAL_1_1 = 1;
+static const long asn_VAL_2_2 = 2;
+static const long asn_VAL_3_3 = 3;
+static const long asn_VAL_4_1 = 1;
+static const long asn_VAL_5_2 = 2;
+static const long asn_VAL_6_3 = 3;
+static const asn_ioc_cell_t asn_IOS_TotalRegionExtension_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_1_1 },
+       { "&Type", aioc__type, &asn_DEF_NativeInteger },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_2_2 },
+       { "&Type", aioc__type, &asn_DEF_BOOLEAN },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_3_3 },
+       { "&Type", aioc__type, &asn_DEF_OCTET_STRING },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_4_1 },
+       { "&Type", aioc__type, &asn_DEF_NativeInteger },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_5_2 },
+       { "&Type", aioc__type, &asn_DEF_BOOLEAN },
+       { "&id", aioc__value, &asn_DEF_NativeInteger, &asn_VAL_6_3 },
+       { "&Type", aioc__type, &asn_DEF_OCTET_STRING }
+};
+static const asn_ioc_set_t asn_IOS_TotalRegionExtension_1[] = {
+       { 6, 2, asn_IOS_TotalRegionExtension_1_rows }
+};
+
+/*** <<< CODE [SpecializedContent] >>> ***/
+
+static int
+memb_id_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+static asn_type_selector_result_t
+select_TotalRegionExtension_value_type(const asn_TYPE_descriptor_t *parent_type, const void *parent_sptr) {
+       asn_type_selector_result_t result = {0, 0};
+       const asn_ioc_set_t *itable = asn_IOS_TotalRegionExtension_1;
+       size_t constraining_column = 0; /* &id */
+       size_t for_column = 1; /* &Type */
+       size_t row, presence_index = 0;
+       const long *constraining_value = (const long *)((const char *)parent_sptr + offsetof(struct TotalRegionExtension, id));
+       
+       for(row=0; row < itable->rows_count; row++) {
+           const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
+           const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
+       
+           if(type_cell->cell_kind == aioc__undefined)
+               continue;
+       
+           presence_index++;
+           if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+               result.type_descriptor = type_cell->type_descriptor;
+               result.presence_index = presence_index;
+               break;
+           }
+       }
+       
+       return result;
+}
+
+static int
+memb_value_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< CTDEFS [SpecializedContent] >>> ***/
+
+static asn_per_constraints_t asn_PER_memb_id_constr_2 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_value_constr_3 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [SpecializedContent] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_value_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.INTEGER),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "INTEGER"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.BOOLEAN),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "BOOLEAN"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct value, choice.OCTET_STRING),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "OCTET STRING"
+               },
+};
+static const unsigned asn_MAP_value_to_canonical_3[] = { 1, 0, 2 };
+static const unsigned asn_MAP_value_from_canonical_3[] = { 1, 0, 2 };
+static const asn_TYPE_tag2member_t asn_MAP_value_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 1, 0, 0 }, /* BOOLEAN */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* INTEGER */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 2, 0, 0 } /* OCTET STRING */
+};
+static asn_CHOICE_specifics_t asn_SPC_value_specs_3 = {
+       sizeof(struct value),
+       offsetof(struct value, _asn_ctx),
+       offsetof(struct value, present),
+       sizeof(((struct value *)0)->present),
+       .tag2el = asn_MAP_value_tag2el_3,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_value_to_canonical_3,
+       .from_canonical_order = asn_MAP_value_from_canonical_3,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_value_3 = {
+       "value",
+       "value",
+       &asn_OP_OPEN_TYPE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, OPEN_TYPE_constraint },
+       asn_MBR_value_3,
+       3,      /* Elements count */
+       &asn_SPC_value_specs_3  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_TotalRegionExtension_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct TotalRegionExtension, id),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_id_constr_2, .general_constraints =  memb_id_constraint_1 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+       { ATF_OPEN_TYPE | ATF_NOFLAGS, 0, offsetof(struct TotalRegionExtension, value),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_value_3,
+               .type_selector = select_TotalRegionExtension_value_type,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_value_constr_3, .general_constraints =  memb_value_constraint_1 },
+               0, 0, /* No default value */
+               .name = "value"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TotalRegionExtension_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TotalRegionExtension_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* id */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TotalRegionExtension_specs_1 = {
+       sizeof(struct TotalRegionExtension),
+       offsetof(struct TotalRegionExtension, _asn_ctx),
+       .tag2el = asn_MAP_TotalRegionExtension_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_TotalRegionExtension = {
+       "TotalRegionExtension",
+       "TotalRegionExtension",
+       &asn_OP_SEQUENCE,
+       asn_DEF_TotalRegionExtension_tags_1,
+       sizeof(asn_DEF_TotalRegionExtension_tags_1)
+               /sizeof(asn_DEF_TotalRegionExtension_tags_1[0]), /* 1 */
+       asn_DEF_TotalRegionExtension_tags_1,    /* Same as above */
+       sizeof(asn_DEF_TotalRegionExtension_tags_1)
+               /sizeof(asn_DEF_TotalRegionExtension_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_TotalRegionExtension_1,
+       2,      /* Elements count */
+       &asn_SPC_TotalRegionExtension_specs_1   /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1 b/tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1
new file mode 100644 (file)
index 0000000..d35e052
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .157
+
+ModulePERCanonicalOrder
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 157 }
+DEFINITIONS ::= BEGIN
+
+    T ::= CHOICE {
+        one   [4] NULL,
+        two   [3] NULL,
+        three [1] NULL,
+        four  [2] NULL
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/157-per-canonical-order-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..ba6520c
--- /dev/null
@@ -0,0 +1,116 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <NULL.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T_PR {
+       T_PR_NOTHING,   /* No components present */
+       T_PR_one,
+       T_PR_two,
+       T_PR_three,
+       T_PR_four
+} T_PR;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       T_PR present;
+       union T_u {
+               NULL_t   one;
+               NULL_t   two;
+               NULL_t   three;
+               NULL_t   four;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CTDEFS [T] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_T_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       2,  2,  0,  3 }        /* (0..3) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.one),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "one"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.two),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "two"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.three),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "three"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.four),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "four"
+               },
+};
+static const unsigned asn_MAP_T_to_canonical_1[] = { 2, 3, 1, 0 };
+static const unsigned asn_MAP_T_from_canonical_1[] = { 3, 2, 0, 1 };
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* three */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 3, 0, 0 }, /* four */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* two */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* one */
+};
+static asn_CHOICE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       offsetof(struct T, present),
+       sizeof(((struct T *)0)->present),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_T_to_canonical_1,
+       .from_canonical_order = asn_MAP_T_from_canonical_1,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, &asn_PER_type_T_constr_1, CHOICE_constraint },
+       asn_MBR_T_1,
+       4,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1 b/tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1
new file mode 100644 (file)
index 0000000..16de4fa
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .158
+
+ModuleTestSequenceOfSequenceNested
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 158 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       SeqWithNestedSOS ::= SEQUENCE {
+               someString [0] UTF8String,
+               sos [1] SEQUENCE OF SEQUENCE {
+                       anotherString [2] UTF8String,
+                       nested-sos [3] SEQUENCE OF SEQUENCE {
+                               nested-string [4] UTF8String
+                       }
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/158-sequence-of-sequence-nested-OK.asn1.-Pfcompound-names
new file mode 100644 (file)
index 0000000..9e98f34
--- /dev/null
@@ -0,0 +1,269 @@
+
+/*** <<< INCLUDES [SeqWithNestedSOS] >>> ***/
+
+#include <UTF8String.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DEFS [SeqWithNestedSOS] >>> ***/
+
+typedef struct SeqWithNestedSOS__sos__Member {
+       UTF8String_t     anotherString;
+       struct SeqWithNestedSOS__sos__Member__nested_sos {
+               A_SEQUENCE_OF(typedef struct SeqWithNestedSOS__sos__Member__nested_sos__Member {
+                       UTF8String_t     nested_string;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } SeqWithNestedSOS__sos__Member__nested_sos__Member;
+               SeqWithNestedSOS__sos__Member__nested_sos__Member) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } nested_sos;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SeqWithNestedSOS__sos__Member;
+
+/*** <<< TYPE-DECLS [SeqWithNestedSOS] >>> ***/
+
+typedef struct SeqWithNestedSOS {
+       UTF8String_t     someString;
+       struct SeqWithNestedSOS__sos {
+               A_SEQUENCE_OF(SeqWithNestedSOS__sos__Member) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } sos;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SeqWithNestedSOS_t;
+
+/*** <<< FUNC-DECLS [SeqWithNestedSOS] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SeqWithNestedSOS;
+
+/*** <<< STAT-DEFS [SeqWithNestedSOS] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Member_7[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithNestedSOS__sos__Member__nested_sos__Member, nested_string),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "nested-string"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_7[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_7[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 0, 0, 0 } /* nested-string */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_7 = {
+       sizeof(struct SeqWithNestedSOS__sos__Member__nested_sos__Member),
+       offsetof(struct SeqWithNestedSOS__sos__Member__nested_sos__Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_7,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_7 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_7,
+       sizeof(asn_DEF_Member_tags_7)
+               /sizeof(asn_DEF_Member_tags_7[0]), /* 1 */
+       asn_DEF_Member_tags_7,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_7)
+               /sizeof(asn_DEF_Member_tags_7[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_7,
+       1,      /* Elements count */
+       &asn_SPC_Member_specs_7 /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_nested_sos_6[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_7,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_nested_sos_tags_6[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_nested_sos_specs_6 = {
+       sizeof(struct SeqWithNestedSOS__sos__Member__nested_sos),
+       offsetof(struct SeqWithNestedSOS__sos__Member__nested_sos, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_nested_sos_6 = {
+       "nested-sos",
+       "nested-sos",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_nested_sos_tags_6,
+       sizeof(asn_DEF_nested_sos_tags_6)
+               /sizeof(asn_DEF_nested_sos_tags_6[0]) - 1, /* 1 */
+       asn_DEF_nested_sos_tags_6,      /* Same as above */
+       sizeof(asn_DEF_nested_sos_tags_6)
+               /sizeof(asn_DEF_nested_sos_tags_6[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_nested_sos_6,
+       1,      /* Single element */
+       &asn_SPC_nested_sos_specs_6     /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Member_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithNestedSOS__sos__Member, anotherString),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "anotherString"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithNestedSOS__sos__Member, nested_sos),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_nested_sos_6,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "nested-sos"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_4[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 0, 0, 0 }, /* anotherString */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* nested-sos */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_4 = {
+       sizeof(struct SeqWithNestedSOS__sos__Member),
+       offsetof(struct SeqWithNestedSOS__sos__Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_4,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_4 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_4,
+       sizeof(asn_DEF_Member_tags_4)
+               /sizeof(asn_DEF_Member_tags_4[0]), /* 1 */
+       asn_DEF_Member_tags_4,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_4)
+               /sizeof(asn_DEF_Member_tags_4[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_4,
+       2,      /* Elements count */
+       &asn_SPC_Member_specs_4 /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_sos_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_sos_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_sos_specs_3 = {
+       sizeof(struct SeqWithNestedSOS__sos),
+       offsetof(struct SeqWithNestedSOS__sos, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_sos_3 = {
+       "sos",
+       "sos",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_sos_tags_3,
+       sizeof(asn_DEF_sos_tags_3)
+               /sizeof(asn_DEF_sos_tags_3[0]) - 1, /* 1 */
+       asn_DEF_sos_tags_3,     /* Same as above */
+       sizeof(asn_DEF_sos_tags_3)
+               /sizeof(asn_DEF_sos_tags_3[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_sos_3,
+       1,      /* Single element */
+       &asn_SPC_sos_specs_3    /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_SeqWithNestedSOS_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithNestedSOS, someString),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "someString"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithNestedSOS, sos),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_sos_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "sos"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SeqWithNestedSOS_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SeqWithNestedSOS_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* someString */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sos */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SeqWithNestedSOS_specs_1 = {
+       sizeof(struct SeqWithNestedSOS),
+       offsetof(struct SeqWithNestedSOS, _asn_ctx),
+       .tag2el = asn_MAP_SeqWithNestedSOS_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SeqWithNestedSOS = {
+       "SeqWithNestedSOS",
+       "SeqWithNestedSOS",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SeqWithNestedSOS_tags_1,
+       sizeof(asn_DEF_SeqWithNestedSOS_tags_1)
+               /sizeof(asn_DEF_SeqWithNestedSOS_tags_1[0]), /* 1 */
+       asn_DEF_SeqWithNestedSOS_tags_1,        /* Same as above */
+       sizeof(asn_DEF_SeqWithNestedSOS_tags_1)
+               /sizeof(asn_DEF_SeqWithNestedSOS_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SeqWithNestedSOS_1,
+       2,      /* Elements count */
+       &asn_SPC_SeqWithNestedSOS_specs_1       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/16-constraint-OK.asn1 b/tests/tests-asn1c-compiler/16-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..00ade37
--- /dev/null
@@ -0,0 +1,39 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .16 1
+-- .16 2
+
+ModuleTestConstraint1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 16 1 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS Type1 FROM ModuleTestConstraint2;
+
+       -- external reference
+       Type0 ::= IA5String (Type6)
+       Type6 ::= IA5String (Type1)
+END
+
+ModuleTestConstraint2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 16 2 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS Type1;
+
+       -- external reference
+       Type1 ::= IA5String (SIZE(1..ten,...))(FROM("a".."z"|"#",...))
+       Type2 ::= IA5String (SIZE (MIN..4)|FROM ("abc"))
+       Type3 ::= BMPString (SIZE(1))
+       Type4 ::= INTEGER (1..MAX)
+       Type5 ::= BOOLEAN (TRUE|FALSE)
+
+       ten INTEGER ::= 10
+
+       v1 Type1 ::= "#value wi
+               th ""double quotes"""
+END
diff --git a/tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EF b/tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..314f710
--- /dev/null
@@ -0,0 +1,31 @@
+ModuleTestConstraint1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 16 1 }
+DEFINITIONS ::=
+BEGIN
+
+Type0 ::= IA5String (((SIZE(1..10)) (FROM("a".."z" | "#"))))
+
+Type6 ::= IA5String ((SIZE(1..10)) (FROM("a".."z" | "#")))
+
+END
+
+ModuleTestConstraint2 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 16 2 }
+DEFINITIONS ::=
+BEGIN
+
+Type1 ::= IA5String (SIZE(1..10,...)) (FROM("a".."z" | "#",...))
+
+Type2 ::= IA5String (SIZE(MIN..4) | FROM("abc"))
+
+Type3 ::= BMPString (SIZE(1))
+
+Type4 ::= INTEGER (1..MAX)
+
+Type5 ::= BOOLEAN (TRUE | FALSE)
+
+ten INTEGER ::= 10
+
+v1 Type1 ::= "#value with ""double quotes"""
+
+END
diff --git a/tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..df2e07f
Binary files /dev/null and b/tests/tests-asn1c-compiler/16-constraint-OK.asn1.-EFprint-constraints differ
diff --git a/tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1 b/tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1
new file mode 100644 (file)
index 0000000..4ecce1b
--- /dev/null
@@ -0,0 +1,66 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .158
+
+ModuleMultipleParameterizedInstance
+    { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+        spelio(9363) software(1) asn1c(5) test(1) 158 }
+DEFINITIONS ::= BEGIN
+
+    MYID ::= CLASS {
+        &id     INTEGER UNIQUE,
+        &Type
+    } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+    TotalRegionExtension MYID ::= {
+        RegionalExtension1 |
+        RegionalExtension2
+    }
+
+    RegionalExtension1 MYID ::= {
+        {INTEGER IDENTIFIED BY 1} |
+        {BOOLEAN IDENTIFIED BY 2},
+        ...,
+        {OCTET STRING IDENTIFIED BY 3}
+    }
+
+    RegionalExtension2 MYID ::= {
+        {INTEGER IDENTIFIED BY 1},
+        ...,
+        {BOOLEAN IDENTIFIED BY 2} |
+        {OCTET STRING IDENTIFIED BY 3}
+    }
+
+    RegionalExtension3 MYID ::= {
+        {OCTET STRING IDENTIFIED BY 1} |
+        {OCTET STRING IDENTIFIED BY 4},
+        ...
+    }
+
+    RegionalExtension4 MYID ::= {
+        {INTEGER IDENTIFIED BY 5},
+        ...,
+        {OCTET STRING (5) IDENTIFIED BY 6}
+    }
+
+    Message1 ::= SEQUENCE {
+        content SpecializedContent {{TotalRegionExtension}}
+    }
+
+    Message2 ::= SEQUENCE {
+        content SpecializedContent {{RegionalExtension3}}
+    }
+
+    Message3 ::= SEQUENCE {
+        content SpecializedContent {{RegionalExtension4}}
+    }
+
+    SpecializedContent {MYID : Set} ::= SEQUENCE {
+        id      MYID.&id({Set}),
+        value   MYID.&Type({Set}{@id})
+    }
+
+END
diff --git a/tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1.-Pgen-PERfcompound-names b/tests/tests-asn1c-compiler/160-multiple-parameterized-instance-OK.asn1.-Pgen-PERfcompound-names
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/tests-asn1c-compiler/17-tags-OK.asn1 b/tests/tests-asn1c-compiler/17-tags-OK.asn1
new file mode 100644 (file)
index 0000000..40f9c07
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .17
+
+ModuleTestTags
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 17 }
+       DEFINITIONS ::=
+BEGIN
+
+       T3 ::= [3] IMPLICIT T2
+       T1 ::= [1] INTEGER
+       T2 ::= [2] EXPLICIT T1
+
+       T4 ::= [APPLICATION 1] SET {
+                       t1      [4] IMPLICIT T1,
+                       t2      [5] T2,
+                       t3      [6] T3
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/18-class-OK.asn1 b/tests/tests-asn1c-compiler/18-class-OK.asn1
new file mode 100644 (file)
index 0000000..edae856
--- /dev/null
@@ -0,0 +1,36 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .18
+
+ModuleTestClass
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 18 }
+       DEFINITIONS ::=
+BEGIN
+
+       AlphaNumeric ::= IA5String (FROM ("A".."Z"|"a".."z"|"0".."9"))
+
+       FUNCTION ::= CLASS {
+               &code                   INTEGER (0..MAX) UNIQUE,
+               &Alphabet               IA5String DEFAULT {AlphaNumeric},
+               &ArgType                ,
+               &SupportedArguments     &ArgType OPTIONAL,
+               &ResultType             DEFAULT NULL,
+               &result-if-error        &ResultType DEFAULT NULL,
+               &associated-function    FUNCTION OPTIONAL
+       }
+
+       operator-plus FUNCTION ::= {
+               &ArgType                Pair,
+               &SupportedArguments     { PosPair | NegPair }
+               &ResultType             INTEGER,
+               &result-if-error        0,
+               &code                   1
+       }
+
+       FunctionCodeType ::= FUNCTION.&code
+
+END
diff --git a/tests/tests-asn1c-compiler/18-class-OK.asn1.-EF b/tests/tests-asn1c-compiler/18-class-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..e5ce9c2
--- /dev/null
@@ -0,0 +1,28 @@
+ModuleTestClass { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 18 }
+DEFINITIONS ::=
+BEGIN
+
+AlphaNumeric ::= IA5String (FROM("A".."Z" | "a".."z" | "0".."9"))
+
+FUNCTION ::= CLASS {
+    &code       INTEGER (0..MAX) UNIQUE,
+    &Alphabet   IA5String DEFAULT {AlphaNumeric},
+    &ArgType   ,
+    &SupportedArguments         &ArgType OPTIONAL,
+    &ResultType         DEFAULT NULL,
+    &result-if-error    &ResultType DEFAULT NULL,
+    &associated-function        FUNCTION OPTIONAL
+}
+
+operator-plus FUNCTION ::= {
+               &ArgType                Pair,
+               &SupportedArguments     { PosPair | NegPair }
+               &ResultType             INTEGER,
+               &result-if-error        0,
+               &code                   1
+       }
+
+FunctionCodeType ::= FUNCTION.&code
+
+END
diff --git a/tests/tests-asn1c-compiler/19-param-OK.asn1 b/tests/tests-asn1c-compiler/19-param-OK.asn1
new file mode 100644 (file)
index 0000000..32c31a2
--- /dev/null
@@ -0,0 +1,31 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .19
+
+ModuleTestParam
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 19 }
+       DEFINITIONS ::=
+BEGIN
+
+       SIGNED { ToBeSigned } ::= SEQUENCE {
+               toBeSigned      ToBeSigned,
+               algorithm       OBJECT IDENTIFIER,
+               signature       BIT STRING (SIZE(0..256))
+       }
+
+       Certificate ::= SIGNED { SEQUENCE {
+               version         INTEGER,
+               signature       OBJECT IDENTIFIER,
+               issuer          Name
+       } }
+
+       Name ::= SEQUENCE OF RelativeDistinguishedName
+
+       RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
+               IA5String (FROM("A".."Z"|"a".."z"|"0-9"|",-."))
+
+END
diff --git a/tests/tests-asn1c-compiler/19-param-OK.asn1.-EF b/tests/tests-asn1c-compiler/19-param-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..e1af483
--- /dev/null
@@ -0,0 +1,22 @@
+ModuleTestParam { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 19 }
+DEFINITIONS ::=
+BEGIN
+
+SIGNED{ToBeSigned} ::= SEQUENCE {
+    toBeSigned  ToBeSigned,
+    algorithm   OBJECT IDENTIFIER,
+    signature   BIT STRING (SIZE(0..256))
+}
+
+Certificate ::= SIGNED{ SEQUENCE {
+        version         INTEGER,    
+        signature       OBJECT IDENTIFIER,    
+        issuer  Name
+    }}
+
+Name ::= SEQUENCE OF RelativeDistinguishedName
+
+RelativeDistinguishedName ::= SET SIZE(1..MAX) OF IA5String (FROM("A".."Z" | "a".."z" | "0-9" | ",-."))
+
+END
diff --git a/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..2e9ee7f
--- /dev/null
@@ -0,0 +1,420 @@
+
+/*** <<< INCLUDES [SIGNED] >>> ***/
+
+#include <OBJECT_IDENTIFIER.h>
+#include <BIT_STRING.h>
+#include <INTEGER.h>
+#include "Name.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [SIGNED] >>> ***/
+
+typedef struct SIGNED_15P0 {
+       struct toBeSigned {
+               INTEGER_t        version;
+               OBJECT_IDENTIFIER_t      signature;
+               Name_t   issuer;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } toBeSigned;
+       OBJECT_IDENTIFIER_t      algorithm;
+       BIT_STRING_t     signature;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SIGNED_15P0_t;
+
+/*** <<< FUNC-DECLS [SIGNED] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIGNED_15P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_SIGNED_15P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_SIGNED_15P0_1[3];
+
+/*** <<< CODE [SIGNED] >>> ***/
+
+static int
+memb_signature_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(st->size > 0) {
+               /* Size in bits */
+               size = 8 * st->size - (st->bits_unused & 0x07);
+       } else {
+               size = 0;
+       }
+       
+       if((size <= 256)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [SIGNED] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_toBeSigned_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, version),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "version"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, signature),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OBJECT_IDENTIFIER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "signature"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct toBeSigned, issuer),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Name,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "issuer"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_toBeSigned_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_toBeSigned_tag2el_2[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* version */
+    { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* signature */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, 0, 0 } /* issuer */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_toBeSigned_specs_2 = {
+       sizeof(struct toBeSigned),
+       offsetof(struct toBeSigned, _asn_ctx),
+       .tag2el = asn_MAP_toBeSigned_tag2el_2,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_toBeSigned_2 = {
+       "toBeSigned",
+       "toBeSigned",
+       &asn_OP_SEQUENCE,
+       asn_DEF_toBeSigned_tags_2,
+       sizeof(asn_DEF_toBeSigned_tags_2)
+               /sizeof(asn_DEF_toBeSigned_tags_2[0]), /* 1 */
+       asn_DEF_toBeSigned_tags_2,      /* Same as above */
+       sizeof(asn_DEF_toBeSigned_tags_2)
+               /sizeof(asn_DEF_toBeSigned_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_toBeSigned_2,
+       3,      /* Elements count */
+       &asn_SPC_toBeSigned_specs_2     /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_SIGNED_15P0_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SIGNED_15P0, toBeSigned),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_toBeSigned_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "toBeSigned"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SIGNED_15P0, algorithm),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OBJECT_IDENTIFIER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "algorithm"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SIGNED_15P0, signature),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_signature_constraint_1 },
+               0, 0, /* No default value */
+               .name = "signature"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SIGNED_15P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SIGNED_15P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 2, 0, 0 }, /* signature */
+    { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* algorithm */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* toBeSigned */
+};
+asn_SEQUENCE_specifics_t asn_SPC_SIGNED_15P0_specs_1 = {
+       sizeof(struct SIGNED_15P0),
+       offsetof(struct SIGNED_15P0, _asn_ctx),
+       .tag2el = asn_MAP_SIGNED_15P0_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SIGNED_15P0 = {
+       "SIGNED",
+       "SIGNED",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SIGNED_15P0_tags_1,
+       sizeof(asn_DEF_SIGNED_15P0_tags_1)
+               /sizeof(asn_DEF_SIGNED_15P0_tags_1[0]), /* 1 */
+       asn_DEF_SIGNED_15P0_tags_1,     /* Same as above */
+       sizeof(asn_DEF_SIGNED_15P0_tags_1)
+               /sizeof(asn_DEF_SIGNED_15P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_15P0_1,
+       3,      /* Elements count */
+       &asn_SPC_SIGNED_15P0_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Certificate] >>> ***/
+
+#include "SIGNED.h"
+
+/*** <<< TYPE-DECLS [Certificate] >>> ***/
+
+typedef SIGNED_15P0_t   Certificate_t;
+
+/*** <<< FUNC-DECLS [Certificate] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Certificate;
+asn_struct_free_f Certificate_free;
+asn_struct_print_f Certificate_print;
+asn_constr_check_f Certificate_constraint;
+ber_type_decoder_f Certificate_decode_ber;
+der_type_encoder_f Certificate_encode_der;
+xer_type_decoder_f Certificate_decode_xer;
+xer_type_encoder_f Certificate_encode_xer;
+
+/*** <<< CODE [Certificate] >>> ***/
+
+/*
+ * This type is implemented using SIGNED_15P0,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Certificate] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Certificate_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Certificate = {
+       "Certificate",
+       "Certificate",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Certificate_tags_1,
+       sizeof(asn_DEF_Certificate_tags_1)
+               /sizeof(asn_DEF_Certificate_tags_1[0]), /* 1 */
+       asn_DEF_Certificate_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Certificate_tags_1)
+               /sizeof(asn_DEF_Certificate_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SIGNED_15P0_1,
+       3,      /* Elements count */
+       &asn_SPC_SIGNED_15P0_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Name] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DECLS [Name] >>> ***/
+
+struct RelativeDistinguishedName;
+
+/*** <<< TYPE-DECLS [Name] >>> ***/
+
+typedef struct Name {
+       A_SEQUENCE_OF(struct RelativeDistinguishedName) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Name_t;
+
+/*** <<< FUNC-DECLS [Name] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Name;
+extern asn_SET_OF_specifics_t asn_SPC_Name_specs_1;
+extern asn_TYPE_member_t asn_MBR_Name_1[1];
+
+/*** <<< POST-INCLUDE [Name] >>> ***/
+
+#include "RelativeDistinguishedName.h"
+
+/*** <<< STAT-DEFS [Name] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Name_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RelativeDistinguishedName,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Name_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Name_specs_1 = {
+       sizeof(struct Name),
+       offsetof(struct Name, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Name = {
+       "Name",
+       "Name",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_Name_tags_1,
+       sizeof(asn_DEF_Name_tags_1)
+               /sizeof(asn_DEF_Name_tags_1[0]), /* 1 */
+       asn_DEF_Name_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Name_tags_1)
+               /sizeof(asn_DEF_Name_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_Name_1,
+       1,      /* Single element */
+       &asn_SPC_Name_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [RelativeDistinguishedName] >>> ***/
+
+#include <IA5String.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [RelativeDistinguishedName] >>> ***/
+
+typedef struct RelativeDistinguishedName {
+       A_SET_OF(IA5String_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} RelativeDistinguishedName_t;
+
+/*** <<< FUNC-DECLS [RelativeDistinguishedName] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName;
+extern asn_SET_OF_specifics_t asn_SPC_RelativeDistinguishedName_specs_1;
+extern asn_TYPE_member_t asn_MBR_RelativeDistinguishedName_1[1];
+
+/*** <<< CTABLES [RelativeDistinguishedName] >>> ***/
+
+static const int permitted_alphabet_table_2[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0,       /*             ,-.  */
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,       /* 0        9       */
+ 0, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,       /*  ABCDEFGHIJKLMNO */
+21,22,23,24,25,26,27,28,29,30,31, 0, 0, 0, 0, 0,       /* PQRSTUVWXYZ      */
+ 0,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,       /*  abcdefghijklmno */
+47,48,49,50,51,52,53,54,55,56,57, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_2(const void *sptr) {
+       const int *table = permitted_alphabet_table_2;
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [RelativeDistinguishedName] >>> ***/
+
+static int
+memb_IA5String_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_2(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [RelativeDistinguishedName] >>> ***/
+
+asn_TYPE_member_t asn_MBR_RelativeDistinguishedName_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_IA5String_constraint_1 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_RelativeDistinguishedName_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_RelativeDistinguishedName_specs_1 = {
+       sizeof(struct RelativeDistinguishedName),
+       offsetof(struct RelativeDistinguishedName, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName = {
+       "RelativeDistinguishedName",
+       "RelativeDistinguishedName",
+       &asn_OP_SET_OF,
+       asn_DEF_RelativeDistinguishedName_tags_1,
+       sizeof(asn_DEF_RelativeDistinguishedName_tags_1)
+               /sizeof(asn_DEF_RelativeDistinguishedName_tags_1[0]), /* 1 */
+       asn_DEF_RelativeDistinguishedName_tags_1,       /* Same as above */
+       sizeof(asn_DEF_RelativeDistinguishedName_tags_1)
+               /sizeof(asn_DEF_RelativeDistinguishedName_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_RelativeDistinguishedName_1,
+       1,      /* Single element */
+       &asn_SPC_RelativeDistinguishedName_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/20-constr-OK.asn1 b/tests/tests-asn1c-compiler/20-constr-OK.asn1
new file mode 100644 (file)
index 0000000..f2a97f0
--- /dev/null
@@ -0,0 +1,30 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .20
+
+ModuleTestConstr
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 20 }
+       DEFINITIONS IMPLICIT TAGS EXTENSIBILITY IMPLIED ::=
+BEGIN
+
+       ConstructedType1 ::= SEQUENCE {
+                               a       [1] INTEGER,
+                               b       [2] INTEGER,
+                               ...!ex1,
+                               c       IA5String,
+                               ...,
+                               d       UTF8String
+                       }
+
+       ConstructedType2 ::= SET {
+                               a       [1] INTEGER,
+                               b       [2] INTEGER
+                       }
+
+       ex1 INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/20-constr-OK.asn1.-EF b/tests/tests-asn1c-compiler/20-constr-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..798f756
--- /dev/null
@@ -0,0 +1,22 @@
+ModuleTestConstr { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 20 }
+DEFINITIONS IMPLICIT TAGS EXTENSIBILITY IMPLIED ::=
+BEGIN
+
+ConstructedType1 ::= SEQUENCE {
+    a   [1] IMPLICIT INTEGER,
+    b   [2] IMPLICIT INTEGER,
+    d   UTF8String,
+    ...!ex1,
+    c   IA5String
+}
+
+ConstructedType2 ::= SET {
+    a   [1] IMPLICIT INTEGER,
+    b   [2] IMPLICIT INTEGER,
+    ...
+}
+
+ex1 INTEGER ::= 1
+
+END
diff --git a/tests/tests-asn1c-compiler/21-tags-OK.asn1 b/tests/tests-asn1c-compiler/21-tags-OK.asn1
new file mode 100644 (file)
index 0000000..3a46c32
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .21 1
+-- .21 2
+
+ModuleTestTags1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 21 1 }
+       DEFINITIONS EXPLICIT TAGS ::=
+BEGIN
+
+       T1 ::= CHOICE {
+                       first   [0] INTEGER,
+                       second  [1] INTEGER
+               }
+
+END
+
+ModuleTestTags2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 21 2 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+       IMPORTS T1 FROM ModuleTestTags1;
+
+       T2 ::= SEQUENCE {
+                       one     [0] T1,
+                       two     [1] IA5String
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/21-tags-OK.asn1.-EF b/tests/tests-asn1c-compiler/21-tags-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..566e6a1
--- /dev/null
@@ -0,0 +1,23 @@
+ModuleTestTags1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 21 1 }
+DEFINITIONS EXPLICIT TAGS ::=
+BEGIN
+
+T1 ::= CHOICE {
+    first       [0] EXPLICIT INTEGER,
+    second      [1] EXPLICIT INTEGER
+}
+
+END
+
+ModuleTestTags2 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 21 2 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+T2 ::= SEQUENCE {
+    one         [0] EXPLICIT T1,
+    two         [1] IMPLICIT IA5String
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/22-tags-OK.asn1 b/tests/tests-asn1c-compiler/22-tags-OK.asn1
new file mode 100644 (file)
index 0000000..562e14b
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .22
+
+ModuleTestTags3
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 22 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T1 ::= SEQUENCE {
+               a INTEGER,
+               b CHOICE {
+                               i INTEGER,
+                               n IA5String
+                       },
+               c UTF8String
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/22-tags-OK.asn1.-EF b/tests/tests-asn1c-compiler/22-tags-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..b1a0b8c
--- /dev/null
@@ -0,0 +1,15 @@
+ModuleTestTags3 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 22 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+T1 ::= SEQUENCE {
+    a   [0] IMPLICIT INTEGER,
+    b   [1] EXPLICIT CHOICE {
+        i       [0] IMPLICIT INTEGER,    
+        n       [1] IMPLICIT IA5String
+    },
+    c   [2] IMPLICIT UTF8String
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..e9d863d
--- /dev/null
@@ -0,0 +1,153 @@
+
+/*** <<< INCLUDES [T1] >>> ***/
+
+#include <INTEGER.h>
+#include <UTF8String.h>
+#include <IA5String.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [T1] >>> ***/
+
+typedef enum b_PR {
+       b_PR_NOTHING,   /* No components present */
+       b_PR_i,
+       b_PR_n
+} b_PR;
+
+/*** <<< TYPE-DECLS [T1] >>> ***/
+
+typedef struct T1 {
+       INTEGER_t        a;
+       struct b {
+               b_PR present;
+               union T1__b_u {
+                       INTEGER_t        i;
+                       IA5String_t      n;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } b;
+       UTF8String_t     c;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T1_t;
+
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+
+/*** <<< STAT-DEFS [T1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_b_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.i),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.n),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "n"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_b_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* i */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* n */
+};
+static asn_CHOICE_specifics_t asn_SPC_b_specs_3 = {
+       sizeof(struct b),
+       offsetof(struct b, _asn_ctx),
+       offsetof(struct b, present),
+       sizeof(((struct b *)0)->present),
+       .tag2el = asn_MAP_b_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_b_3 = {
+       "b",
+       "b",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_b_3,
+       2,      /* Elements count */
+       &asn_SPC_b_specs_3      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T1, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T1, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_b_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T1, c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T1_specs_1 = {
+       sizeof(struct T1),
+       offsetof(struct T1, _asn_ctx),
+       .tag2el = asn_MAP_T1_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T1 = {
+       "T1",
+       "T1",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T1_tags_1,
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       asn_DEF_T1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T1_1,
+       3,      /* Elements count */
+       &asn_SPC_T1_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/23-bits-OK.asn1 b/tests/tests-asn1c-compiler/23-bits-OK.asn1
new file mode 100644 (file)
index 0000000..a4c1a65
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .23
+
+ModuleTestBitString
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 23 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       v28 INTEGER ::= 28
+
+       BS1     ::= BIT STRING { first(0), third(2), twenty-eight(v28) }
+
+       one-zero-one BS1 ::= { first, third }   -- Equivalent to '101'B
+
+       one0one BS1 ::= '1010000'B              -- Equivalent to '101'B
+
+       empty BS1 ::= { }       -- Equivalent to ''B
+
+END
diff --git a/tests/tests-asn1c-compiler/23-bits-OK.asn1.-EF b/tests/tests-asn1c-compiler/23-bits-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..d02605b
--- /dev/null
@@ -0,0 +1,20 @@
+ModuleTestBitString { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 23 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+v28 INTEGER ::= 28
+
+BS1 ::= BIT STRING {
+    first(0),
+    third(2),
+    twenty-eight(28)
+}
+
+one-zero-one BS1 ::= '101'B
+
+one0one BS1 ::= '101'B
+
+empty BS1 ::= ''H
+
+END
diff --git a/tests/tests-asn1c-compiler/24-sequence-OK.asn1 b/tests/tests-asn1c-compiler/24-sequence-OK.asn1
new file mode 100644 (file)
index 0000000..ce6f6d6
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .24
+
+ModuleTestSequence
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 24 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= [5] EXPLICIT SEQUENCE {
+               a               INTEGER,
+               b [0]           INTEGER OPTIONAL,
+               c [1]           INTEGER DEFAULT ten,
+               d [5] EXPLICIT  INTEGER
+               }
+
+       ten INTEGER ::= 10
+
+END
diff --git a/tests/tests-asn1c-compiler/24-sequence-OK.asn1.-EF b/tests/tests-asn1c-compiler/24-sequence-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..ecdc4b0
--- /dev/null
@@ -0,0 +1,15 @@
+ModuleTestSequence { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 24 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+T ::= [5] EXPLICIT SEQUENCE {
+    a   INTEGER,
+    b   [0] IMPLICIT INTEGER OPTIONAL,
+    c   [1] IMPLICIT INTEGER DEFAULT 10,
+    d   [5] EXPLICIT INTEGER
+}
+
+ten INTEGER ::= 10
+
+END
diff --git a/tests/tests-asn1c-compiler/25-misc-OK.asn1 b/tests/tests-asn1c-compiler/25-misc-OK.asn1
new file mode 100644 (file)
index 0000000..43487de
--- /dev/null
@@ -0,0 +1,29 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .25
+
+ModuleTestMisc
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 25 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               a       INTEGER,
+               b [2]   BOOLEAN,
+               c       NULL,
+               ...,
+               d       ENUMERATED {
+                               a(1), b(2)
+                               },
+               e       OCTET STRING,
+               f [5]   VisibleString,
+               g       BIT STRING,
+               h [7]   BIT STRING,
+               ...
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/26-sequence-SE.asn1 b/tests/tests-asn1c-compiler/26-sequence-SE.asn1
new file mode 100644 (file)
index 0000000..8c5866a
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .26
+
+ModuleTestSequenceTagsDistinct
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 26 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               a INTEGER,
+               b INTEGER       OPTIONAL,
+               c INTEGER
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/27-set-SE.asn1 b/tests/tests-asn1c-compiler/27-set-SE.asn1
new file mode 100644 (file)
index 0000000..91e5697
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .27
+
+ModuleTestSetTagsDistinct
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 27 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= SET {
+               a INTEGER,
+               b CHOICE {              -- Could we lookup tag past CHOICE?..
+                       c INTEGER       -- Tags must be distinct here.
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/28-tags-SE.asn1 b/tests/tests-asn1c-compiler/28-tags-SE.asn1
new file mode 100644 (file)
index 0000000..b3af0e3
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .28
+
+ModuleTestTagsDistinct
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 28 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       S ::= SET {
+               a INTEGER,
+               b CHOICE {
+                       c IA5String,
+                       ...
+               },
+               d CHOICE {
+                       e BOOLEAN,
+                       ...
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/29-tags-OK.asn1 b/tests/tests-asn1c-compiler/29-tags-OK.asn1
new file mode 100644 (file)
index 0000000..440f16c
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- OK: Everything is fin
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .29
+
+ModuleTestTagsDistinct2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 29 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       S ::= SET {
+               a INTEGER,
+               b CHOICE {
+                       c IA5String,
+                       ...
+               },
+               d CHOICE {
+                       e BOOLEAN,
+                       ...
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/30-set-OK.asn1 b/tests/tests-asn1c-compiler/30-set-OK.asn1
new file mode 100644 (file)
index 0000000..41ad52d
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .30
+
+ModuleTestSetSimple
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 30 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= SET {
+               i [APPLICATION 3] INTEGER,
+               s IA5String,
+               ...,
+               b [2] BOOLEAN
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..ef0ea21
--- /dev/null
@@ -0,0 +1,113 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <IA5String.h>
+#include <BOOLEAN.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum T_PR {
+       T_PR_i, /* Member i is present */
+       T_PR_s, /* Member s is present */
+       T_PR_b, /* Member b is present */
+} T_PR;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       INTEGER_t        i;
+       IA5String_t      s;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       BOOLEAN_t       *b;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pT, T_PR_x) */
+       unsigned int _presence_map
+               [((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, i),
+               .tag = (ASN_TAG_CLASS_APPLICATION | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, s),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "s"
+               },
+       { ATF_POINTER, 1, offsetof(struct T, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 }, /* s */
+    { (ASN_TAG_CLASS_APPLICATION | (3 << 2)), 0, 0, 0 }, /* i */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* b */
+};
+static const uint8_t asn_MAP_T_mmap_1[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (1 << 6) | (0 << 5)
+};
+static 
+asn_SET_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       offsetof(struct T, _presence_map),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       asn_MAP_T_tag2el_1,     /* Same as above */
+       3,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_T_mmap_1  /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SET,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_T_1,
+       3,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/31-set-of-OK.asn1 b/tests/tests-asn1c-compiler/31-set-of-OK.asn1
new file mode 100644 (file)
index 0000000..c8fa51e
--- /dev/null
@@ -0,0 +1,40 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .31
+
+ModuleTestSetOfSimple
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 31 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       Forest ::= SET OF Tree
+
+       Tree ::= SEQUENCE {
+               height  INTEGER,
+               width   INTEGER
+       }
+
+       -- The following clause tests OPTIONAL.
+       Stuff ::= SET {
+                       trees    [1] SET OF Forest OPTIONAL,
+                       ...,
+                       other    CHOICE {
+                               a [0] INTEGER,
+                               b [3] INTEGER
+                       },
+                       ...,
+                       anything [2] SET OF
+                               SEQUENCE {
+                                       cup-of-coffee   BIT STRING,
+                                       ...
+                               } OPTIONAL
+                       -- The above OPTIONAL applies to the "anything"
+                       -- member of the outer CHOICE,
+                       -- not to the SET OF's embedded SEQUENCE!
+               }
+
+END
diff --git a/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-EF b/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..f97ce2a
--- /dev/null
@@ -0,0 +1,26 @@
+ModuleTestSetOfSimple { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 31 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+Forest ::= SET OF Tree
+
+Tree ::= SEQUENCE {
+    height      INTEGER,
+    width       INTEGER
+}
+
+Stuff ::= SET {
+    trees       [1] IMPLICIT SET OF Forest OPTIONAL,
+    anything    [2] IMPLICIT SET OF SEQUENCE {
+            cup-of-coffee       BIT STRING,        
+            ...
+        } OPTIONAL,
+    ...,
+    other       CHOICE {
+        a       [0] IMPLICIT INTEGER,    
+        b       [3] IMPLICIT INTEGER
+    }
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfcompound-names
new file mode 100644 (file)
index 0000000..fc39f33
--- /dev/null
@@ -0,0 +1,473 @@
+
+/*** <<< INCLUDES [Forest] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [Forest] >>> ***/
+
+struct Tree;
+
+/*** <<< TYPE-DECLS [Forest] >>> ***/
+
+typedef struct Forest {
+       A_SET_OF(struct Tree) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Forest_t;
+
+/*** <<< FUNC-DECLS [Forest] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Forest;
+extern asn_SET_OF_specifics_t asn_SPC_Forest_specs_1;
+extern asn_TYPE_member_t asn_MBR_Forest_1[1];
+
+/*** <<< POST-INCLUDE [Forest] >>> ***/
+
+#include "Tree.h"
+
+/*** <<< STAT-DEFS [Forest] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Forest_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Tree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Forest_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Forest_specs_1 = {
+       sizeof(struct Forest),
+       offsetof(struct Forest, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Forest = {
+       "Forest",
+       "Forest",
+       &asn_OP_SET_OF,
+       asn_DEF_Forest_tags_1,
+       sizeof(asn_DEF_Forest_tags_1)
+               /sizeof(asn_DEF_Forest_tags_1[0]), /* 1 */
+       asn_DEF_Forest_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Forest_tags_1)
+               /sizeof(asn_DEF_Forest_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Forest_1,
+       1,      /* Single element */
+       &asn_SPC_Forest_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Tree] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Tree] >>> ***/
+
+typedef struct Tree {
+       long     height;
+       long     width;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Tree_t;
+
+/*** <<< FUNC-DECLS [Tree] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Tree;
+extern asn_SEQUENCE_specifics_t asn_SPC_Tree_specs_1;
+extern asn_TYPE_member_t asn_MBR_Tree_1[2];
+
+/*** <<< STAT-DEFS [Tree] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Tree_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Tree, height),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "height"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Tree, width),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "width"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Tree_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Tree_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* height */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* width */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Tree_specs_1 = {
+       sizeof(struct Tree),
+       offsetof(struct Tree, _asn_ctx),
+       .tag2el = asn_MAP_Tree_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Tree = {
+       "Tree",
+       "Tree",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Tree_tags_1,
+       sizeof(asn_DEF_Tree_tags_1)
+               /sizeof(asn_DEF_Tree_tags_1[0]), /* 1 */
+       asn_DEF_Tree_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Tree_tags_1)
+               /sizeof(asn_DEF_Tree_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Tree_1,
+       2,      /* Elements count */
+       &asn_SPC_Tree_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Stuff] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Stuff] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Stuff_PR {
+       Stuff_PR_trees, /* Member trees is present */
+       Stuff_PR_anything,      /* Member anything is present */
+       Stuff_PR_other, /* Member other is present */
+} Stuff_PR;
+typedef enum Stuff__other_PR {
+       Stuff__other_PR_NOTHING,        /* No components present */
+       Stuff__other_PR_a,
+       Stuff__other_PR_b
+} Stuff__other_PR;
+
+/*** <<< FWD-DECLS [Stuff] >>> ***/
+
+struct Forest;
+
+/*** <<< FWD-DEFS [Stuff] >>> ***/
+
+typedef struct Stuff__anything__Member {
+       BIT_STRING_t     cup_of_coffee;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Stuff__anything__Member;
+
+/*** <<< TYPE-DECLS [Stuff] >>> ***/
+
+typedef struct Stuff {
+       struct Stuff__trees {
+               A_SET_OF(struct Forest) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *trees;
+       struct Stuff__anything {
+               A_SET_OF(Stuff__anything__Member) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *anything;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       struct Stuff__other {
+               Stuff__other_PR present;
+               union Stuff__other_u {
+                       long     a;
+                       long     b;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *other;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pStuff, Stuff_PR_x) */
+       unsigned int _presence_map
+               [((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Stuff_t;
+
+/*** <<< FUNC-DECLS [Stuff] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Stuff;
+
+/*** <<< POST-INCLUDE [Stuff] >>> ***/
+
+#include "Forest.h"
+
+/*** <<< STAT-DEFS [Stuff] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_trees_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Forest,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_trees_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_trees_specs_2 = {
+       sizeof(struct Stuff__trees),
+       offsetof(struct Stuff__trees, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_trees_2 = {
+       "trees",
+       "trees",
+       &asn_OP_SET_OF,
+       asn_DEF_trees_tags_2,
+       sizeof(asn_DEF_trees_tags_2)
+               /sizeof(asn_DEF_trees_tags_2[0]) - 1, /* 1 */
+       asn_DEF_trees_tags_2,   /* Same as above */
+       sizeof(asn_DEF_trees_tags_2)
+               /sizeof(asn_DEF_trees_tags_2[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_trees_2,
+       1,      /* Single element */
+       &asn_SPC_trees_specs_2  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Member_5[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Stuff__anything__Member, cup_of_coffee),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "cup-of-coffee"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_5[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_5[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* cup-of-coffee */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_5 = {
+       sizeof(struct Stuff__anything__Member),
+       offsetof(struct Stuff__anything__Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_5,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       1,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_5 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_5,
+       sizeof(asn_DEF_Member_tags_5)
+               /sizeof(asn_DEF_Member_tags_5[0]), /* 1 */
+       asn_DEF_Member_tags_5,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_5)
+               /sizeof(asn_DEF_Member_tags_5[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_5,
+       1,      /* Elements count */
+       &asn_SPC_Member_specs_5 /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_anything_4[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_anything_tags_4[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_anything_specs_4 = {
+       sizeof(struct Stuff__anything),
+       offsetof(struct Stuff__anything, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_anything_4 = {
+       "anything",
+       "anything",
+       &asn_OP_SET_OF,
+       asn_DEF_anything_tags_4,
+       sizeof(asn_DEF_anything_tags_4)
+               /sizeof(asn_DEF_anything_tags_4[0]) - 1, /* 1 */
+       asn_DEF_anything_tags_4,        /* Same as above */
+       sizeof(asn_DEF_anything_tags_4)
+               /sizeof(asn_DEF_anything_tags_4[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_anything_4,
+       1,      /* Single element */
+       &asn_SPC_anything_specs_4       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_other_9[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Stuff__other, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Stuff__other, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_other_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* b */
+};
+static asn_CHOICE_specifics_t asn_SPC_other_specs_9 = {
+       sizeof(struct Stuff__other),
+       offsetof(struct Stuff__other, _asn_ctx),
+       offsetof(struct Stuff__other, present),
+       sizeof(((struct Stuff__other *)0)->present),
+       .tag2el = asn_MAP_other_tag2el_9,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_other_9 = {
+       "other",
+       "other",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_other_9,
+       2,      /* Elements count */
+       &asn_SPC_other_specs_9  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Stuff_1[] = {
+       { ATF_POINTER, 3, offsetof(struct Stuff, trees),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_trees_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "trees"
+               },
+       { ATF_POINTER, 2, offsetof(struct Stuff, anything),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_anything_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "anything"
+               },
+       { ATF_POINTER, 1, offsetof(struct Stuff, other),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_other_9,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "other"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Stuff_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Stuff_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* b */
+};
+static const asn_TYPE_tag2member_t asn_MAP_Stuff_tag2el_cxer_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 } /* a */
+};
+static const uint8_t asn_MAP_Stuff_mmap_1[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (0 << 7) | (0 << 6) | (0 << 5)
+};
+static 
+asn_SET_specifics_t asn_SPC_Stuff_specs_1 = {
+       sizeof(struct Stuff),
+       offsetof(struct Stuff, _asn_ctx),
+       offsetof(struct Stuff, _presence_map),
+       .tag2el = asn_MAP_Stuff_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       asn_MAP_Stuff_tag2el_cxer_1,
+       3,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Stuff_mmap_1      /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Stuff = {
+       "Stuff",
+       "Stuff",
+       &asn_OP_SET,
+       asn_DEF_Stuff_tags_1,
+       sizeof(asn_DEF_Stuff_tags_1)
+               /sizeof(asn_DEF_Stuff_tags_1[0]), /* 1 */
+       asn_DEF_Stuff_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Stuff_tags_1)
+               /sizeof(asn_DEF_Stuff_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Stuff_1,
+       3,      /* Elements count */
+       &asn_SPC_Stuff_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..2a4cf8f
--- /dev/null
@@ -0,0 +1,473 @@
+
+/*** <<< INCLUDES [Forest] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [Forest] >>> ***/
+
+struct Tree;
+
+/*** <<< TYPE-DECLS [Forest] >>> ***/
+
+typedef struct Forest {
+       A_SET_OF(struct Tree) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Forest_t;
+
+/*** <<< FUNC-DECLS [Forest] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Forest;
+extern asn_SET_OF_specifics_t asn_SPC_Forest_specs_1;
+extern asn_TYPE_member_t asn_MBR_Forest_1[1];
+
+/*** <<< POST-INCLUDE [Forest] >>> ***/
+
+#include "Tree.h"
+
+/*** <<< STAT-DEFS [Forest] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Forest_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Tree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Forest_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Forest_specs_1 = {
+       sizeof(struct Forest),
+       offsetof(struct Forest, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Forest = {
+       "Forest",
+       "Forest",
+       &asn_OP_SET_OF,
+       asn_DEF_Forest_tags_1,
+       sizeof(asn_DEF_Forest_tags_1)
+               /sizeof(asn_DEF_Forest_tags_1[0]), /* 1 */
+       asn_DEF_Forest_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Forest_tags_1)
+               /sizeof(asn_DEF_Forest_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Forest_1,
+       1,      /* Single element */
+       &asn_SPC_Forest_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Tree] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Tree] >>> ***/
+
+typedef struct Tree {
+       INTEGER_t        height;
+       INTEGER_t        width;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Tree_t;
+
+/*** <<< FUNC-DECLS [Tree] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Tree;
+extern asn_SEQUENCE_specifics_t asn_SPC_Tree_specs_1;
+extern asn_TYPE_member_t asn_MBR_Tree_1[2];
+
+/*** <<< STAT-DEFS [Tree] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Tree_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Tree, height),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "height"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Tree, width),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "width"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Tree_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Tree_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* height */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* width */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Tree_specs_1 = {
+       sizeof(struct Tree),
+       offsetof(struct Tree, _asn_ctx),
+       .tag2el = asn_MAP_Tree_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Tree = {
+       "Tree",
+       "Tree",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Tree_tags_1,
+       sizeof(asn_DEF_Tree_tags_1)
+               /sizeof(asn_DEF_Tree_tags_1[0]), /* 1 */
+       asn_DEF_Tree_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Tree_tags_1)
+               /sizeof(asn_DEF_Tree_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Tree_1,
+       2,      /* Elements count */
+       &asn_SPC_Tree_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Stuff] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Stuff] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Stuff_PR {
+       Stuff_PR_trees, /* Member trees is present */
+       Stuff_PR_anything,      /* Member anything is present */
+       Stuff_PR_other, /* Member other is present */
+} Stuff_PR;
+typedef enum other_PR {
+       other_PR_NOTHING,       /* No components present */
+       other_PR_a,
+       other_PR_b
+} other_PR;
+
+/*** <<< FWD-DECLS [Stuff] >>> ***/
+
+struct Forest;
+
+/*** <<< FWD-DEFS [Stuff] >>> ***/
+
+typedef struct Member {
+       BIT_STRING_t     cup_of_coffee;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Member;
+
+/*** <<< TYPE-DECLS [Stuff] >>> ***/
+
+typedef struct Stuff {
+       struct trees {
+               A_SET_OF(struct Forest) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *trees;
+       struct anything {
+               A_SET_OF(Member) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *anything;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       struct other {
+               other_PR present;
+               union Stuff__other_u {
+                       INTEGER_t        a;
+                       INTEGER_t        b;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *other;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pStuff, Stuff_PR_x) */
+       unsigned int _presence_map
+               [((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Stuff_t;
+
+/*** <<< FUNC-DECLS [Stuff] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Stuff;
+
+/*** <<< POST-INCLUDE [Stuff] >>> ***/
+
+#include "Forest.h"
+
+/*** <<< STAT-DEFS [Stuff] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_trees_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Forest,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_trees_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_trees_specs_2 = {
+       sizeof(struct trees),
+       offsetof(struct trees, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_trees_2 = {
+       "trees",
+       "trees",
+       &asn_OP_SET_OF,
+       asn_DEF_trees_tags_2,
+       sizeof(asn_DEF_trees_tags_2)
+               /sizeof(asn_DEF_trees_tags_2[0]) - 1, /* 1 */
+       asn_DEF_trees_tags_2,   /* Same as above */
+       sizeof(asn_DEF_trees_tags_2)
+               /sizeof(asn_DEF_trees_tags_2[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_trees_2,
+       1,      /* Single element */
+       &asn_SPC_trees_specs_2  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Member_5[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Member, cup_of_coffee),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "cup-of-coffee"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_5[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_5[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* cup-of-coffee */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_5 = {
+       sizeof(struct Member),
+       offsetof(struct Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_5,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       1,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_5 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_5,
+       sizeof(asn_DEF_Member_tags_5)
+               /sizeof(asn_DEF_Member_tags_5[0]), /* 1 */
+       asn_DEF_Member_tags_5,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_5)
+               /sizeof(asn_DEF_Member_tags_5[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_5,
+       1,      /* Elements count */
+       &asn_SPC_Member_specs_5 /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_anything_4[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_anything_tags_4[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_anything_specs_4 = {
+       sizeof(struct anything),
+       offsetof(struct anything, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_anything_4 = {
+       "anything",
+       "anything",
+       &asn_OP_SET_OF,
+       asn_DEF_anything_tags_4,
+       sizeof(asn_DEF_anything_tags_4)
+               /sizeof(asn_DEF_anything_tags_4[0]) - 1, /* 1 */
+       asn_DEF_anything_tags_4,        /* Same as above */
+       sizeof(asn_DEF_anything_tags_4)
+               /sizeof(asn_DEF_anything_tags_4[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_anything_4,
+       1,      /* Single element */
+       &asn_SPC_anything_specs_4       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_other_9[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct other, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct other, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_other_tag2el_9[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 } /* b */
+};
+static asn_CHOICE_specifics_t asn_SPC_other_specs_9 = {
+       sizeof(struct other),
+       offsetof(struct other, _asn_ctx),
+       offsetof(struct other, present),
+       sizeof(((struct other *)0)->present),
+       .tag2el = asn_MAP_other_tag2el_9,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_other_9 = {
+       "other",
+       "other",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_other_9,
+       2,      /* Elements count */
+       &asn_SPC_other_specs_9  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Stuff_1[] = {
+       { ATF_POINTER, 3, offsetof(struct Stuff, trees),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_trees_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "trees"
+               },
+       { ATF_POINTER, 2, offsetof(struct Stuff, anything),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_anything_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "anything"
+               },
+       { ATF_POINTER, 1, offsetof(struct Stuff, other),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_other_9,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "other"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Stuff_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Stuff_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* b */
+};
+static const asn_TYPE_tag2member_t asn_MAP_Stuff_tag2el_cxer_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 } /* a */
+};
+static const uint8_t asn_MAP_Stuff_mmap_1[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (0 << 7) | (0 << 6) | (0 << 5)
+};
+static 
+asn_SET_specifics_t asn_SPC_Stuff_specs_1 = {
+       sizeof(struct Stuff),
+       offsetof(struct Stuff, _asn_ctx),
+       offsetof(struct Stuff, _presence_map),
+       .tag2el = asn_MAP_Stuff_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       asn_MAP_Stuff_tag2el_cxer_1,
+       3,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Stuff_mmap_1      /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Stuff = {
+       "Stuff",
+       "Stuff",
+       &asn_OP_SET,
+       asn_DEF_Stuff_tags_1,
+       sizeof(asn_DEF_Stuff_tags_1)
+               /sizeof(asn_DEF_Stuff_tags_1[0]), /* 1 */
+       asn_DEF_Stuff_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Stuff_tags_1)
+               /sizeof(asn_DEF_Stuff_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Stuff_1,
+       3,      /* Elements count */
+       &asn_SPC_Stuff_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1 b/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1
new file mode 100644 (file)
index 0000000..467e5bd
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .32
+
+ModuleTestSequenceSimple
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 32 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       Programming ::= SEQUENCE SIZE(1..maxSize) OF [0] IMPLICIT Fault
+
+       Fault ::= SET OF Error
+
+       Error ::= SEQUENCE {
+                       ...
+               }
+
+       maxSize INTEGER ::= 10
+
+       SeqWithMandatory ::= SEQUENCE {
+               someString UTF8String,
+               seqOfMan [0] EXPLICIT SEQUENCE OF Error
+       }
+
+       SeqWithOptional ::= SEQUENCE {
+               someString UTF8String,
+               seqOfOpt [0] EXPLICIT SEQUENCE OF Error OPTIONAL
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-EF b/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..d0059b2
--- /dev/null
@@ -0,0 +1,26 @@
+ModuleTestSequenceSimple { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 32 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+Programming ::= SEQUENCE SIZE(1..10) OF [0] IMPLICIT Fault
+
+Fault ::= SET OF Error
+
+Error ::= SEQUENCE {
+    ...
+}
+
+maxSize INTEGER ::= 10
+
+SeqWithMandatory ::= SEQUENCE {
+    someString  UTF8String,
+    seqOfMan    [0] EXPLICIT SEQUENCE OF Error
+}
+
+SeqWithOptional ::= SEQUENCE {
+    someString  UTF8String,
+    seqOfOpt    [0] EXPLICIT SEQUENCE OF Error OPTIONAL
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P b/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P
new file mode 100644 (file)
index 0000000..4a7298b
--- /dev/null
@@ -0,0 +1,452 @@
+
+/*** <<< INCLUDES [Programming] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DECLS [Programming] >>> ***/
+
+struct Fault;
+
+/*** <<< TYPE-DECLS [Programming] >>> ***/
+
+typedef struct Programming {
+       A_SEQUENCE_OF(struct Fault) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Programming_t;
+
+/*** <<< FUNC-DECLS [Programming] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Programming;
+
+/*** <<< POST-INCLUDE [Programming] >>> ***/
+
+#include "Fault.h"
+
+/*** <<< STAT-DEFS [Programming] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Programming_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Fault,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Programming_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_Programming_specs_1 = {
+       sizeof(struct Programming),
+       offsetof(struct Programming, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Programming = {
+       "Programming",
+       "Programming",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_Programming_tags_1,
+       sizeof(asn_DEF_Programming_tags_1)
+               /sizeof(asn_DEF_Programming_tags_1[0]), /* 1 */
+       asn_DEF_Programming_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Programming_tags_1)
+               /sizeof(asn_DEF_Programming_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_Programming_1,
+       1,      /* Single element */
+       &asn_SPC_Programming_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Fault] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [Fault] >>> ***/
+
+struct Error;
+
+/*** <<< TYPE-DECLS [Fault] >>> ***/
+
+typedef struct Fault {
+       A_SET_OF(struct Error) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Fault_t;
+
+/*** <<< FUNC-DECLS [Fault] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Fault;
+extern asn_SET_OF_specifics_t asn_SPC_Fault_specs_1;
+extern asn_TYPE_member_t asn_MBR_Fault_1[1];
+
+/*** <<< POST-INCLUDE [Fault] >>> ***/
+
+#include "Error.h"
+
+/*** <<< STAT-DEFS [Fault] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Fault_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Error,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Fault_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Fault_specs_1 = {
+       sizeof(struct Fault),
+       offsetof(struct Fault, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Fault = {
+       "Fault",
+       "Fault",
+       &asn_OP_SET_OF,
+       asn_DEF_Fault_tags_1,
+       sizeof(asn_DEF_Fault_tags_1)
+               /sizeof(asn_DEF_Fault_tags_1[0]), /* 1 */
+       asn_DEF_Fault_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Fault_tags_1)
+               /sizeof(asn_DEF_Fault_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Fault_1,
+       1,      /* Single element */
+       &asn_SPC_Fault_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Error] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Error] >>> ***/
+
+typedef struct Error {
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Error_t;
+
+/*** <<< FUNC-DECLS [Error] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Error;
+extern asn_SEQUENCE_specifics_t asn_SPC_Error_specs_1;
+
+/*** <<< STAT-DEFS [Error] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Error_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SEQUENCE_specifics_t asn_SPC_Error_specs_1 = {
+       sizeof(struct Error),
+       offsetof(struct Error, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Error = {
+       "Error",
+       "Error",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Error_tags_1,
+       sizeof(asn_DEF_Error_tags_1)
+               /sizeof(asn_DEF_Error_tags_1[0]), /* 1 */
+       asn_DEF_Error_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Error_tags_1)
+               /sizeof(asn_DEF_Error_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_Error_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SeqWithMandatory] >>> ***/
+
+#include <UTF8String.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [SeqWithMandatory] >>> ***/
+
+struct Error;
+
+/*** <<< TYPE-DECLS [SeqWithMandatory] >>> ***/
+
+typedef struct SeqWithMandatory {
+       UTF8String_t     someString;
+       struct seqOfMan {
+               A_SEQUENCE_OF(struct Error) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } seqOfMan;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SeqWithMandatory_t;
+
+/*** <<< FUNC-DECLS [SeqWithMandatory] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SeqWithMandatory;
+
+/*** <<< POST-INCLUDE [SeqWithMandatory] >>> ***/
+
+#include "Error.h"
+
+/*** <<< STAT-DEFS [SeqWithMandatory] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_seqOfMan_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Error,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_seqOfMan_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_seqOfMan_specs_3 = {
+       sizeof(struct seqOfMan),
+       offsetof(struct seqOfMan, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_seqOfMan_3 = {
+       "seqOfMan",
+       "seqOfMan",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_seqOfMan_tags_3,
+       sizeof(asn_DEF_seqOfMan_tags_3)
+               /sizeof(asn_DEF_seqOfMan_tags_3[0]), /* 2 */
+       asn_DEF_seqOfMan_tags_3,        /* Same as above */
+       sizeof(asn_DEF_seqOfMan_tags_3)
+               /sizeof(asn_DEF_seqOfMan_tags_3[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_seqOfMan_3,
+       1,      /* Single element */
+       &asn_SPC_seqOfMan_specs_3       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_SeqWithMandatory_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithMandatory, someString),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "someString"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithMandatory, seqOfMan),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_seqOfMan_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seqOfMan"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SeqWithMandatory_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SeqWithMandatory_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 0, 0, 0 }, /* someString */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 } /* seqOfMan */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SeqWithMandatory_specs_1 = {
+       sizeof(struct SeqWithMandatory),
+       offsetof(struct SeqWithMandatory, _asn_ctx),
+       .tag2el = asn_MAP_SeqWithMandatory_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SeqWithMandatory = {
+       "SeqWithMandatory",
+       "SeqWithMandatory",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SeqWithMandatory_tags_1,
+       sizeof(asn_DEF_SeqWithMandatory_tags_1)
+               /sizeof(asn_DEF_SeqWithMandatory_tags_1[0]), /* 1 */
+       asn_DEF_SeqWithMandatory_tags_1,        /* Same as above */
+       sizeof(asn_DEF_SeqWithMandatory_tags_1)
+               /sizeof(asn_DEF_SeqWithMandatory_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SeqWithMandatory_1,
+       2,      /* Elements count */
+       &asn_SPC_SeqWithMandatory_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SeqWithOptional] >>> ***/
+
+#include <UTF8String.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [SeqWithOptional] >>> ***/
+
+struct Error;
+
+/*** <<< TYPE-DECLS [SeqWithOptional] >>> ***/
+
+typedef struct SeqWithOptional {
+       UTF8String_t     someString;
+       struct seqOfOpt {
+               A_SEQUENCE_OF(struct Error) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *seqOfOpt;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SeqWithOptional_t;
+
+/*** <<< FUNC-DECLS [SeqWithOptional] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SeqWithOptional;
+
+/*** <<< POST-INCLUDE [SeqWithOptional] >>> ***/
+
+#include "Error.h"
+
+/*** <<< STAT-DEFS [SeqWithOptional] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_seqOfOpt_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Error,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_seqOfOpt_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_seqOfOpt_specs_3 = {
+       sizeof(struct seqOfOpt),
+       offsetof(struct seqOfOpt, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_seqOfOpt_3 = {
+       "seqOfOpt",
+       "seqOfOpt",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_seqOfOpt_tags_3,
+       sizeof(asn_DEF_seqOfOpt_tags_3)
+               /sizeof(asn_DEF_seqOfOpt_tags_3[0]), /* 2 */
+       asn_DEF_seqOfOpt_tags_3,        /* Same as above */
+       sizeof(asn_DEF_seqOfOpt_tags_3)
+               /sizeof(asn_DEF_seqOfOpt_tags_3[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_seqOfOpt_3,
+       1,      /* Single element */
+       &asn_SPC_seqOfOpt_specs_3       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_SeqWithOptional_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SeqWithOptional, someString),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "someString"
+               },
+       { ATF_POINTER, 1, offsetof(struct SeqWithOptional, seqOfOpt),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_seqOfOpt_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seqOfOpt"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SeqWithOptional_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SeqWithOptional_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 0, 0, 0 }, /* someString */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 } /* seqOfOpt */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SeqWithOptional_specs_1 = {
+       sizeof(struct SeqWithOptional),
+       offsetof(struct SeqWithOptional, _asn_ctx),
+       .tag2el = asn_MAP_SeqWithOptional_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_SeqWithOptional = {
+       "SeqWithOptional",
+       "SeqWithOptional",
+       &asn_OP_SEQUENCE,
+       asn_DEF_SeqWithOptional_tags_1,
+       sizeof(asn_DEF_SeqWithOptional_tags_1)
+               /sizeof(asn_DEF_SeqWithOptional_tags_1[0]), /* 1 */
+       asn_DEF_SeqWithOptional_tags_1, /* Same as above */
+       sizeof(asn_DEF_SeqWithOptional_tags_1)
+               /sizeof(asn_DEF_SeqWithOptional_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_SeqWithOptional_1,
+       2,      /* Elements count */
+       &asn_SPC_SeqWithOptional_specs_1        /* Additional specs */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define maxSize (10)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/33-misc-OK.asn1 b/tests/tests-asn1c-compiler/33-misc-OK.asn1
new file mode 100644 (file)
index 0000000..1018a40
--- /dev/null
@@ -0,0 +1,33 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .33
+
+ModuleTestMiscComplex
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 33 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               a [1] INTEGER,
+               ...,
+               b [2] EXPLICIT  BitString,
+               c [8] IMPLICIT  Label,
+               d [10] IMPLICIT Int,
+               e [12] T2
+       }
+
+       BitString ::= [8] BIT STRING
+
+       Label   ::= [9] EXPLICIT UTF8String
+
+       Label2  ::= [1] Label
+
+       Int     ::= [3] IMPLICIT INTEGER { a(1), b(2) }
+
+       T2      ::= SEQUENCE { l Label2 }
+
+END
diff --git a/tests/tests-asn1c-compiler/34-class-OK.asn1 b/tests/tests-asn1c-compiler/34-class-OK.asn1
new file mode 100644 (file)
index 0000000..2ea8901
--- /dev/null
@@ -0,0 +1,53 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .34
+
+ModuleTestClassSimple
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 34 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       -- First CLASS
+
+       EXTENSION ::= CLASS {
+               &id [PRIVATE 0] INTEGER UNIQUE,
+               &ExtnType
+       } WITH SYNTAX {
+               SYNTAX          &ExtnType
+               IDENTIFIED BY   &id
+       }
+
+       -- Basic CLASS extraction
+       Ext1    ::= SEQUENCE {
+                       extnId  EXTENSION.&id
+               }
+
+       -- Second CLASS
+
+       EXTENSION-ATTRIBUTE ::= CLASS {
+               &id     INTEGER (0..ub-extension-attributes) UNIQUE,
+               &Type
+       } WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+       terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+
+       TerminalType ::= INTEGER { terminal(0) }
+
+       -- Advanced CLASS extraction
+
+       ExtensionAttribute ::= SEQUENCE {
+               extension-attribute-type [0] EXTENSION-ATTRIBUTE.&id
+                               ({ExtensionAttributeTable}),
+               extension-attribute-value [1] EXTENSION-ATTRIBUTE.&Type
+                       ({ExtensionAttributeTable} {@extension-attribute-type})
+       }
+
+       -- Variables referenced by subtype constraints
+
+       ub-extension-attributes INTEGER ::= 256
+
+END
diff --git a/tests/tests-asn1c-compiler/34-class-OK.asn1.-EF b/tests/tests-asn1c-compiler/34-class-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..8af80a8
--- /dev/null
@@ -0,0 +1,38 @@
+ModuleTestClassSimple { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 34 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+EXTENSION ::= CLASS {
+    &id         [PRIVATE 0] INTEGER UNIQUE,
+    &ExtnType  
+} WITH SYNTAX {
+               SYNTAX          &ExtnType
+               IDENTIFIED BY   &id
+       }
+
+
+Ext1 ::= SEQUENCE {
+    extnId      EXTENSION.&id
+}
+
+EXTENSION-ATTRIBUTE ::= CLASS {
+    &id         INTEGER (0..256) UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+
+terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+
+TerminalType ::= INTEGER {
+    terminal(0)
+}
+
+ExtensionAttribute ::= SEQUENCE {
+    extension-attribute-type    [0] IMPLICIT EXTENSION-ATTRIBUTE.&id ({ExtensionAttributeTable}),
+    extension-attribute-value   [1] EXPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type})
+}
+
+ub-extension-attributes INTEGER ::= 256
+
+END
diff --git a/tests/tests-asn1c-compiler/34-class-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/34-class-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..136dd92
--- /dev/null
@@ -0,0 +1,47 @@
+ModuleTestClassSimple { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 34 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+EXTENSION ::= CLASS {
+    &id         [PRIVATE 0] INTEGER UNIQUE,
+    &ExtnType  
+} WITH SYNTAX {
+               SYNTAX          &ExtnType
+               IDENTIFIED BY   &id
+       }
+
+-- Information Object Class table is empty
+
+Ext1 ::= SEQUENCE {
+    extnId      EXTENSION.&id
+}
+
+EXTENSION-ATTRIBUTE ::= CLASS {
+    &id         INTEGER (0..256) UNIQUE,
+    &Type       ANY
+} WITH SYNTAX {&Type IDENTIFIED BY &id}
+
+-- Information Object Set has 1 entry:
+--    [         &id][       &Type]
+-- [1]           23  TerminalType 
+
+
+terminal-type EXTENSION-ATTRIBUTE ::= {TerminalType IDENTIFIED BY 23}
+-- Information Object Set has 1 entry:
+--    [         &id][       &Type]
+-- [1]           23  TerminalType 
+
+
+TerminalType ::= INTEGER {
+    terminal(0)
+}
+
+ExtensionAttribute ::= SEQUENCE {
+    extension-attribute-type    [0] IMPLICIT EXTENSION-ATTRIBUTE.&id ({ExtensionAttributeTable}),
+    extension-attribute-value   [1] EXPLICIT EXTENSION-ATTRIBUTE.&Type ({ExtensionAttributeTable}{@extension-attribute-type})
+}
+
+ub-extension-attributes INTEGER ::= 256
+
+END
diff --git a/tests/tests-asn1c-compiler/35-set-choice-OK.asn1 b/tests/tests-asn1c-compiler/35-set-choice-OK.asn1
new file mode 100644 (file)
index 0000000..3678021
--- /dev/null
@@ -0,0 +1,36 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .35
+
+ModuleTestSetAndUntaggedChoice
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 35 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= SET {
+               a NumericString,
+               b CHOICE {                      -- Untagged choice
+                       b1  IA5String,
+                       b2  ObjectDescriptor,
+                       b3  Choice
+               },
+               c BOOLEAN,
+               ...,
+               d OID
+       }
+
+       Choice ::= CHOICE {                     -- One more level
+               ch-a OCTET STRING,
+               ch-b BIT STRING
+       }
+
+       OID ::= CHOICE {
+               oid OBJECT IDENTIFIER,
+               r-oid RELATIVE-OID
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/36-indirect-choice-SE.asn1 b/tests/tests-asn1c-compiler/36-indirect-choice-SE.asn1
new file mode 100644 (file)
index 0000000..90155c7
--- /dev/null
@@ -0,0 +1,25 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .36
+
+ModuleTestIndirectChoiceError
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 36 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= CHOICE {
+               t-a  INTEGER,
+               t-b  OCTET STRING,
+               t-c  Choice
+       }
+
+       Choice ::= CHOICE {                     -- One more level
+               c-a OCTET STRING,
+               c-b INTEGER
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1 b/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1
new file mode 100644 (file)
index 0000000..86b3b66
--- /dev/null
@@ -0,0 +1,38 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .37
+
+ModuleTestIndirectChoiceFine
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 37 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= CHOICE {
+               t-a  INTEGER,
+               t-b  OCTET STRING,
+               t-c  [1] Choice1,
+               t-d  [3] Choice2
+       }
+
+       Choice1 ::= CHOICE {
+               c-a OCTET STRING,
+               c-b INTEGER
+       }
+
+       Choice2 ::= [2] CHOICE {
+               c-a OCTET STRING,
+               c-b INTEGER,
+               c-d [3] Choice1,
+               c-e [4] Choice1
+       }
+
+       Choice3 ::= [3] EXPLICIT Choice2                -- tags [3] [2]
+       Choice4 ::= [4] IMPLICIT Choice2                -- tags [4]
+       Choice5 ::= Choice2                             -- tags [2]
+       Choice6 ::= Choice1                             -- tags
+
+END
diff --git a/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-EF b/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..b4031a8
--- /dev/null
@@ -0,0 +1,33 @@
+ModuleTestIndirectChoiceFine { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 37 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+T ::= CHOICE {
+    t-a         INTEGER,
+    t-b         OCTET STRING,
+    t-c         [1] EXPLICIT Choice1,
+    t-d         [3] IMPLICIT Choice2
+}
+
+Choice1 ::= CHOICE {
+    c-a         OCTET STRING,
+    c-b         INTEGER
+}
+
+Choice2 ::= [2] EXPLICIT CHOICE {
+    c-a         OCTET STRING,
+    c-b         INTEGER,
+    c-d         [3] EXPLICIT Choice1,
+    c-e         [4] EXPLICIT Choice1
+}
+
+Choice3 ::= [3] EXPLICIT Choice2
+
+Choice4 ::= [4] IMPLICIT Choice2
+
+Choice5 ::= Choice2
+
+Choice6 ::= Choice1
+
+END
diff --git a/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..b1ea6bf
--- /dev/null
@@ -0,0 +1,495 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <OCTET_STRING.h>
+#include "Choice1.h"
+#include "Choice2.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T_PR {
+       T_PR_NOTHING,   /* No components present */
+       T_PR_t_a,
+       T_PR_t_b,
+       T_PR_t_c,
+       T_PR_t_d
+} T_PR;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       T_PR present;
+       union T_u {
+               INTEGER_t        t_a;
+               OCTET_STRING_t   t_b;
+               Choice1_t        t_c;
+               Choice2_t        t_d;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.t_a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.t_b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.t_c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-c"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.t_d),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Choice2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-d"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* t-a */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* t-b */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 2, 0, 0 }, /* t-c */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* t-d */
+};
+static asn_CHOICE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       offsetof(struct T, present),
+       sizeof(((struct T *)0)->present),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_T_1,
+       4,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice1] >>> ***/
+
+#include <OCTET_STRING.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice1] >>> ***/
+
+typedef enum Choice1_PR {
+       Choice1_PR_NOTHING,     /* No components present */
+       Choice1_PR_c_a,
+       Choice1_PR_c_b
+} Choice1_PR;
+
+/*** <<< TYPE-DECLS [Choice1] >>> ***/
+
+typedef struct Choice1 {
+       Choice1_PR present;
+       union Choice1_u {
+               OCTET_STRING_t   c_a;
+               INTEGER_t        c_b;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice1_t;
+
+/*** <<< FUNC-DECLS [Choice1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice1;
+extern asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice1_1[2];
+
+/*** <<< STAT-DEFS [Choice1] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice1, choice.c_a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice1, choice.c_b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-b"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* c-b */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 } /* c-a */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1 = {
+       sizeof(struct Choice1),
+       offsetof(struct Choice1, _asn_ctx),
+       offsetof(struct Choice1, present),
+       sizeof(((struct Choice1 *)0)->present),
+       .tag2el = asn_MAP_Choice1_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice1 = {
+       "Choice1",
+       "Choice1",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice1_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice1_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include <OCTET_STRING.h>
+#include <INTEGER.h>
+#include "Choice1.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_c_a,
+       Choice2_PR_c_b,
+       Choice2_PR_c_d,
+       Choice2_PR_c_e
+} Choice2_PR;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               OCTET_STRING_t   c_a;
+               INTEGER_t        c_b;
+               Choice1_t        c_d;
+               Choice1_t        c_e;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+extern asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice2_1[4];
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.c_a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.c_b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.c_d),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-d"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.c_e),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c-e"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Choice2_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* c-b */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, 0, 0 }, /* c-a */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* c-d */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* c-e */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       asn_DEF_Choice2_tags_1,
+       sizeof(asn_DEF_Choice2_tags_1)
+               /sizeof(asn_DEF_Choice2_tags_1[0]), /* 1 */
+       asn_DEF_Choice2_tags_1, /* Same as above */
+       sizeof(asn_DEF_Choice2_tags_1)
+               /sizeof(asn_DEF_Choice2_tags_1[0]), /* 1 */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice3] >>> ***/
+
+#include "Choice2.h"
+
+/*** <<< TYPE-DECLS [Choice3] >>> ***/
+
+typedef Choice2_t       Choice3_t;
+
+/*** <<< FUNC-DECLS [Choice3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice3;
+asn_struct_free_f Choice3_free;
+asn_struct_print_f Choice3_print;
+asn_constr_check_f Choice3_constraint;
+ber_type_decoder_f Choice3_decode_ber;
+der_type_encoder_f Choice3_encode_der;
+xer_type_decoder_f Choice3_decode_xer;
+xer_type_encoder_f Choice3_encode_xer;
+
+/*** <<< CODE [Choice3] >>> ***/
+
+/*
+ * This type is implemented using Choice2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Choice3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Choice3_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Choice3 = {
+       "Choice3",
+       "Choice3",
+       &asn_OP_CHOICE,
+       asn_DEF_Choice3_tags_1,
+       sizeof(asn_DEF_Choice3_tags_1)
+               /sizeof(asn_DEF_Choice3_tags_1[0]), /* 2 */
+       asn_DEF_Choice3_tags_1, /* Same as above */
+       sizeof(asn_DEF_Choice3_tags_1)
+               /sizeof(asn_DEF_Choice3_tags_1[0]), /* 2 */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice4] >>> ***/
+
+#include "Choice2.h"
+
+/*** <<< TYPE-DECLS [Choice4] >>> ***/
+
+typedef Choice2_t       Choice4_t;
+
+/*** <<< FUNC-DECLS [Choice4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice4;
+asn_struct_free_f Choice4_free;
+asn_struct_print_f Choice4_print;
+asn_constr_check_f Choice4_constraint;
+ber_type_decoder_f Choice4_decode_ber;
+der_type_encoder_f Choice4_encode_der;
+xer_type_decoder_f Choice4_decode_xer;
+xer_type_encoder_f Choice4_encode_xer;
+
+/*** <<< CODE [Choice4] >>> ***/
+
+/*
+ * This type is implemented using Choice2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Choice4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Choice4_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Choice4 = {
+       "Choice4",
+       "Choice4",
+       &asn_OP_CHOICE,
+       asn_DEF_Choice4_tags_1,
+       sizeof(asn_DEF_Choice4_tags_1)
+               /sizeof(asn_DEF_Choice4_tags_1[0]) - 1, /* 1 */
+       asn_DEF_Choice4_tags_1, /* Same as above */
+       sizeof(asn_DEF_Choice4_tags_1)
+               /sizeof(asn_DEF_Choice4_tags_1[0]), /* 2 */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice5] >>> ***/
+
+#include "Choice2.h"
+
+/*** <<< TYPE-DECLS [Choice5] >>> ***/
+
+typedef Choice2_t       Choice5_t;
+
+/*** <<< FUNC-DECLS [Choice5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice5;
+asn_struct_free_f Choice5_free;
+asn_struct_print_f Choice5_print;
+asn_constr_check_f Choice5_constraint;
+ber_type_decoder_f Choice5_decode_ber;
+der_type_encoder_f Choice5_encode_der;
+xer_type_decoder_f Choice5_decode_xer;
+xer_type_encoder_f Choice5_encode_xer;
+
+/*** <<< CODE [Choice5] >>> ***/
+
+/*
+ * This type is implemented using Choice2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Choice5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Choice5_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Choice5 = {
+       "Choice5",
+       "Choice5",
+       &asn_OP_CHOICE,
+       asn_DEF_Choice5_tags_1,
+       sizeof(asn_DEF_Choice5_tags_1)
+               /sizeof(asn_DEF_Choice5_tags_1[0]), /* 1 */
+       asn_DEF_Choice5_tags_1, /* Same as above */
+       sizeof(asn_DEF_Choice5_tags_1)
+               /sizeof(asn_DEF_Choice5_tags_1[0]), /* 1 */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice6] >>> ***/
+
+#include "Choice1.h"
+
+/*** <<< TYPE-DECLS [Choice6] >>> ***/
+
+typedef Choice1_t       Choice6_t;
+
+/*** <<< FUNC-DECLS [Choice6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice6;
+asn_struct_free_f Choice6_free;
+asn_struct_print_f Choice6_print;
+asn_constr_check_f Choice6_constraint;
+ber_type_decoder_f Choice6_decode_ber;
+der_type_encoder_f Choice6_encode_der;
+xer_type_decoder_f Choice6_decode_xer;
+xer_type_encoder_f Choice6_encode_xer;
+
+/*** <<< CODE [Choice6] >>> ***/
+
+/*
+ * This type is implemented using Choice1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Choice6] >>> ***/
+
+asn_TYPE_descriptor_t asn_DEF_Choice6 = {
+       "Choice6",
+       "Choice6",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice1_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice1_specs_1        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/38-comments-OK.asn1 b/tests/tests-asn1c-compiler/38-comments-OK.asn1
new file mode 100644 (file)
index 0000000..f2f9aab
--- /dev/null
@@ -0,0 +1,33 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .38
+
+ModuleNestedCTypeComments
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 38 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= CHOICE {
+               t-a  INTEGER,
+               t-b  OCTET STRING
+/*             t-c  [1] Choice1, t-d  Choice2 */
+       }
+
+       -- this is a comment too -- This-Is-Not-A-Comment
+       ::= INTEGER
+
+/*
+       ISO/IEC 8824-1 #11.6.4
+
+       blah blah blah
+       /* nested comment */
+       -- this is an insignificant coment
+       -- this is a comment too -- and this is a comment
+
+ */
+
+END
diff --git a/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1 b/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1
new file mode 100644 (file)
index 0000000..b8ac3f4
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .39
+
+ModuleNestedSequenceOf
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 39 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               int     INTEGER,
+               collection      SEQUENCE OF T2
+       }
+
+       T2 ::= SEQUENCE {
+               flag    BOOLEAN,
+               str     UTF8String
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..c535515
--- /dev/null
@@ -0,0 +1,200 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [T] >>> ***/
+
+struct T2;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       INTEGER_t        Int;
+       struct collection {
+               A_SEQUENCE_OF(struct T2) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } collection;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< POST-INCLUDE [T] >>> ***/
+
+#include "T2.h"
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_collection_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_T2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_collection_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_collection_specs_3 = {
+       sizeof(struct collection),
+       offsetof(struct collection, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_collection_3 = {
+       "collection",
+       "collection",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_collection_tags_3,
+       sizeof(asn_DEF_collection_tags_3)
+               /sizeof(asn_DEF_collection_tags_3[0]), /* 1 */
+       asn_DEF_collection_tags_3,      /* Same as above */
+       sizeof(asn_DEF_collection_tags_3)
+               /sizeof(asn_DEF_collection_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_collection_3,
+       1,      /* Single element */
+       &asn_SPC_collection_specs_3     /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, Int),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, collection),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_collection_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "collection"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* collection */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       2,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T2] >>> ***/
+
+#include <BOOLEAN.h>
+#include <UTF8String.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T2] >>> ***/
+
+typedef struct T2 {
+       BOOLEAN_t        flag;
+       UTF8String_t     str;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T2_t;
+
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+extern asn_SEQUENCE_specifics_t asn_SPC_T2_specs_1;
+extern asn_TYPE_member_t asn_MBR_T2_1[2];
+
+/*** <<< STAT-DEFS [T2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_T2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T2, flag),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "flag"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T2, str),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "str"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* flag */
+    { (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)), 1, 0, 0 } /* str */
+};
+asn_SEQUENCE_specifics_t asn_SPC_T2_specs_1 = {
+       sizeof(struct T2),
+       offsetof(struct T2, _asn_ctx),
+       .tag2el = asn_MAP_T2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T2 = {
+       "T2",
+       "T2",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T2_tags_1,
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       asn_DEF_T2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T2_1,
+       2,      /* Elements count */
+       &asn_SPC_T2_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/40-int-optional-SE.asn1 b/tests/tests-asn1c-compiler/40-int-optional-SE.asn1
new file mode 100644 (file)
index 0000000..fbcb0a5
--- /dev/null
@@ -0,0 +1,27 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .40
+
+ModuleTestIntOptional
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 40 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= CHOICE {
+               seq SEQUENCE {
+                       string  UTF8String,
+                       alpha   INTEGER OPTIONAL,
+                       beta    INTEGER OPTIONAL
+               },
+               set SET {
+                       string  UTF8String,
+                       alpha   INTEGER OPTIONAL,
+                       beta    INTEGER OPTIONAL
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/41-int-optional-OK.asn1 b/tests/tests-asn1c-compiler/41-int-optional-OK.asn1
new file mode 100644 (file)
index 0000000..3e091d7
--- /dev/null
@@ -0,0 +1,27 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .41
+
+ModuleTestIntOptional
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 41 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       T ::= CHOICE {
+               seq SEQUENCE {
+                       string  UTF8String,
+                       alpha   INTEGER OPTIONAL,
+                       beta    INTEGER OPTIONAL
+               },
+               set SET {
+                       string  UTF8String,
+                       alpha   INTEGER OPTIONAL,
+                       beta    INTEGER OPTIONAL
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/42-real-life-OK.asn1 b/tests/tests-asn1c-compiler/42-real-life-OK.asn1
new file mode 100644 (file)
index 0000000..8c1d59e
--- /dev/null
@@ -0,0 +1,67 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .42
+
+ModuleLAPStorage
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 42 }
+       DEFINITIONS EXTENSIBILITY IMPLIED ::=
+BEGIN
+
+       /*
+        * A package representing a distinguished log line.
+        * It contains
+        *  - a digest of that line (actually, a normalized
+        *    form with bells (\007) in place of variable components),
+        *  - one or more sets of variable parts (presumably with different
+        *    acceptability rules).
+        */
+       LogLine ::= SEQUENCE {
+               line-digest     IA5String,      -- Log line normal form
+               varsets         SEQUENCE SIZE(1..MAX) OF VariablePartSet
+       }
+
+       /*
+        * This package contains a set of variable components of a log line.
+        * Each variable component may contain one or more "value samples",
+        * or a range between two samples.
+        */
+       VariablePartSet ::= SEQUENCE {
+               vparts          SEQUENCE SIZE(0..MAX) OF VariablePart, -- {123,321}
+               resolution      ActionItem
+       }
+
+       /*
+        * A description of a single variable part.
+        */
+       VariablePart ::= CHOICE {
+               -- A set of acceptable values
+               vset    SET SIZE(1..MAX) OF VisibleString,
+               -- A range of acceptable values
+               vrange  SEQUENCE {
+                       from    VisibleString,
+                       to      VisibleString
+               }
+       }
+
+       /*
+        * What to do with the log line.
+        */
+       ActionItem ::= SEQUENCE {
+               accept-as       ENUMERATED {
+                       unknown,        -- Action yet unknown.
+                       safe,           -- No action, just move on.
+                       unsafe,         -- Unsafe message. Inform NOC.
+                       ...
+               },
+               notify  SEQUENCE {      -- How to notify NOC.
+                       critical  BOOLEAN,              -- Emit critical message
+                       email     SET OF VisibleString, -- Send emails
+                       ...
+               } OPTIONAL
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-EF b/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..0543ee3
--- /dev/null
@@ -0,0 +1,43 @@
+ModuleLAPStorage { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 42 }
+DEFINITIONS EXTENSIBILITY IMPLIED ::=
+BEGIN
+
+LogLine ::= SEQUENCE {
+    line-digest         IA5String,
+    varsets     SEQUENCE SIZE(1..MAX) OF VariablePartSet,
+    ...
+}
+
+VariablePartSet ::= SEQUENCE {
+    vparts      SEQUENCE SIZE(0..MAX) OF VariablePart,
+    resolution  ActionItem,
+    ...
+}
+
+VariablePart ::= CHOICE {
+    vset        SET SIZE(1..MAX) OF VisibleString,
+    vrange      SEQUENCE {
+        from    VisibleString,    
+        to      VisibleString,    
+        ...
+    },
+    ...
+}
+
+ActionItem ::= SEQUENCE {
+    accept-as   ENUMERATED {
+        unknown(0),    
+        safe(1),    
+        unsafe(2),    
+        ...
+    },
+    notify      SEQUENCE {
+        critical        BOOLEAN,    
+        email   SET OF VisibleString,    
+        ...
+    } OPTIONAL,
+    ...
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR b/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR
new file mode 100644 (file)
index 0000000..b27e77a
--- /dev/null
@@ -0,0 +1,778 @@
+
+/*** <<< INCLUDES [LogLine] >>> ***/
+
+#include <IA5String.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [LogLine] >>> ***/
+
+struct VariablePartSet;
+
+/*** <<< TYPE-DECLS [LogLine] >>> ***/
+
+typedef struct LogLine {
+       IA5String_t      line_digest;
+       struct varsets {
+               A_SEQUENCE_OF(struct VariablePartSet) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } varsets;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} LogLine_t;
+
+/*** <<< FUNC-DECLS [LogLine] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_LogLine;
+
+/*** <<< POST-INCLUDE [LogLine] >>> ***/
+
+#include "VariablePartSet.h"
+
+/*** <<< CODE [LogLine] >>> ***/
+
+static int
+memb_varsets_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       /* Determine the number of elements */
+       size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+       
+       if((size >= 1)) {
+               /* Perform validation of the inner elements */
+               return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [LogLine] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_varsets_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_VariablePartSet,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_varsets_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_varsets_specs_3 = {
+       sizeof(struct varsets),
+       offsetof(struct varsets, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_varsets_3 = {
+       "varsets",
+       "varsets",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_varsets_tags_3,
+       sizeof(asn_DEF_varsets_tags_3)
+               /sizeof(asn_DEF_varsets_tags_3[0]), /* 1 */
+       asn_DEF_varsets_tags_3, /* Same as above */
+       sizeof(asn_DEF_varsets_tags_3)
+               /sizeof(asn_DEF_varsets_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_varsets_3,
+       1,      /* Single element */
+       &asn_SPC_varsets_specs_3        /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_LogLine_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct LogLine, line_digest),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "line-digest"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct LogLine, varsets),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_varsets_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_varsets_constraint_1 },
+               0, 0, /* No default value */
+               .name = "varsets"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_LogLine_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_LogLine_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* varsets */
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 0, 0, 0 } /* line-digest */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_LogLine_specs_1 = {
+       sizeof(struct LogLine),
+       offsetof(struct LogLine, _asn_ctx),
+       .tag2el = asn_MAP_LogLine_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_LogLine = {
+       "LogLine",
+       "LogLine",
+       &asn_OP_SEQUENCE,
+       asn_DEF_LogLine_tags_1,
+       sizeof(asn_DEF_LogLine_tags_1)
+               /sizeof(asn_DEF_LogLine_tags_1[0]), /* 1 */
+       asn_DEF_LogLine_tags_1, /* Same as above */
+       sizeof(asn_DEF_LogLine_tags_1)
+               /sizeof(asn_DEF_LogLine_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_LogLine_1,
+       2,      /* Elements count */
+       &asn_SPC_LogLine_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [VariablePartSet] >>> ***/
+
+#include "ActionItem.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [VariablePartSet] >>> ***/
+
+struct VariablePart;
+
+/*** <<< TYPE-DECLS [VariablePartSet] >>> ***/
+
+typedef struct VariablePartSet {
+       struct vparts {
+               A_SEQUENCE_OF(struct VariablePart) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } vparts;
+       ActionItem_t     resolution;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} VariablePartSet_t;
+
+/*** <<< FUNC-DECLS [VariablePartSet] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_VariablePartSet;
+extern asn_SEQUENCE_specifics_t asn_SPC_VariablePartSet_specs_1;
+extern asn_TYPE_member_t asn_MBR_VariablePartSet_1[2];
+
+/*** <<< POST-INCLUDE [VariablePartSet] >>> ***/
+
+#include "VariablePart.h"
+
+/*** <<< CODE [VariablePartSet] >>> ***/
+
+static int
+memb_vparts_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [VariablePartSet] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_vparts_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_VariablePart,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_vparts_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_vparts_specs_2 = {
+       sizeof(struct vparts),
+       offsetof(struct vparts, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_vparts_2 = {
+       "vparts",
+       "vparts",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_vparts_tags_2,
+       sizeof(asn_DEF_vparts_tags_2)
+               /sizeof(asn_DEF_vparts_tags_2[0]), /* 1 */
+       asn_DEF_vparts_tags_2,  /* Same as above */
+       sizeof(asn_DEF_vparts_tags_2)
+               /sizeof(asn_DEF_vparts_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_vparts_2,
+       1,      /* Single element */
+       &asn_SPC_vparts_specs_2 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_VariablePartSet_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct VariablePartSet, vparts),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_vparts_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_vparts_constraint_1 },
+               0, 0, /* No default value */
+               .name = "vparts"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct VariablePartSet, resolution),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_ActionItem,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "resolution"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_VariablePartSet_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_VariablePartSet_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* vparts */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 } /* resolution */
+};
+asn_SEQUENCE_specifics_t asn_SPC_VariablePartSet_specs_1 = {
+       sizeof(struct VariablePartSet),
+       offsetof(struct VariablePartSet, _asn_ctx),
+       .tag2el = asn_MAP_VariablePartSet_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_VariablePartSet = {
+       "VariablePartSet",
+       "VariablePartSet",
+       &asn_OP_SEQUENCE,
+       asn_DEF_VariablePartSet_tags_1,
+       sizeof(asn_DEF_VariablePartSet_tags_1)
+               /sizeof(asn_DEF_VariablePartSet_tags_1[0]), /* 1 */
+       asn_DEF_VariablePartSet_tags_1, /* Same as above */
+       sizeof(asn_DEF_VariablePartSet_tags_1)
+               /sizeof(asn_DEF_VariablePartSet_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_VariablePartSet_1,
+       2,      /* Elements count */
+       &asn_SPC_VariablePartSet_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [VariablePart] >>> ***/
+
+#include <VisibleString.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_SEQUENCE.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [VariablePart] >>> ***/
+
+typedef enum VariablePart_PR {
+       VariablePart_PR_NOTHING,        /* No components present */
+       VariablePart_PR_vset,
+       VariablePart_PR_vrange
+       /* Extensions may appear below */
+       
+} VariablePart_PR;
+
+/*** <<< TYPE-DECLS [VariablePart] >>> ***/
+
+typedef struct VariablePart {
+       VariablePart_PR present;
+       union VariablePart_u {
+               struct vset {
+                       A_SET_OF(VisibleString_t) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } vset;
+               struct vrange {
+                       VisibleString_t  from;
+                       VisibleString_t  to;
+                       /*
+                        * This type is extensible,
+                        * possible extensions are below.
+                        */
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } vrange;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} VariablePart_t;
+
+/*** <<< FUNC-DECLS [VariablePart] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_VariablePart;
+extern asn_CHOICE_specifics_t asn_SPC_VariablePart_specs_1;
+extern asn_TYPE_member_t asn_MBR_VariablePart_1[2];
+
+/*** <<< CODE [VariablePart] >>> ***/
+
+static int
+memb_vset_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       /* Determine the number of elements */
+       size = _A_CSET_FROM_VOID(sptr)->count;
+       
+       if((size >= 1)) {
+               /* Perform validation of the inner elements */
+               return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [VariablePart] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_vset_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_vset_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_vset_specs_2 = {
+       sizeof(struct vset),
+       offsetof(struct vset, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_vset_2 = {
+       "vset",
+       "vset",
+       &asn_OP_SET_OF,
+       asn_DEF_vset_tags_2,
+       sizeof(asn_DEF_vset_tags_2)
+               /sizeof(asn_DEF_vset_tags_2[0]), /* 1 */
+       asn_DEF_vset_tags_2,    /* Same as above */
+       sizeof(asn_DEF_vset_tags_2)
+               /sizeof(asn_DEF_vset_tags_2[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_vset_2,
+       1,      /* Single element */
+       &asn_SPC_vset_specs_2   /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_vrange_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct vrange, from),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "from"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct vrange, to),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "to"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_vrange_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_vrange_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from */
+    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 } /* to */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_vrange_specs_4 = {
+       sizeof(struct vrange),
+       offsetof(struct vrange, _asn_ctx),
+       .tag2el = asn_MAP_vrange_tag2el_4,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_vrange_4 = {
+       "vrange",
+       "vrange",
+       &asn_OP_SEQUENCE,
+       asn_DEF_vrange_tags_4,
+       sizeof(asn_DEF_vrange_tags_4)
+               /sizeof(asn_DEF_vrange_tags_4[0]), /* 1 */
+       asn_DEF_vrange_tags_4,  /* Same as above */
+       sizeof(asn_DEF_vrange_tags_4)
+               /sizeof(asn_DEF_vrange_tags_4[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_vrange_4,
+       2,      /* Elements count */
+       &asn_SPC_vrange_specs_4 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_VariablePart_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct VariablePart, choice.vset),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_vset_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_vset_constraint_1 },
+               0, 0, /* No default value */
+               .name = "vset"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct VariablePart, choice.vrange),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_vrange_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "vrange"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_VariablePart_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* vrange */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 } /* vset */
+};
+asn_CHOICE_specifics_t asn_SPC_VariablePart_specs_1 = {
+       sizeof(struct VariablePart),
+       offsetof(struct VariablePart, _asn_ctx),
+       offsetof(struct VariablePart, present),
+       sizeof(((struct VariablePart *)0)->present),
+       .tag2el = asn_MAP_VariablePart_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 2    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_VariablePart = {
+       "VariablePart",
+       "VariablePart",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_VariablePart_1,
+       2,      /* Elements count */
+       &asn_SPC_VariablePart_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ActionItem] >>> ***/
+
+#include <NativeEnumerated.h>
+#include <BOOLEAN.h>
+#include <VisibleString.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [ActionItem] >>> ***/
+
+typedef enum accept_as {
+       accept_as_unknown       = 0,
+       accept_as_safe  = 1,
+       accept_as_unsafe        = 2
+       /*
+        * Enumeration is extensible
+        */
+} e_accept_as;
+
+/*** <<< TYPE-DECLS [ActionItem] >>> ***/
+
+typedef struct ActionItem {
+       long     accept_as;
+       struct notify {
+               BOOLEAN_t        critical;
+               struct email {
+                       A_SET_OF(VisibleString_t) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } email;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } *notify;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ActionItem_t;
+
+/*** <<< FUNC-DECLS [ActionItem] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_accept_as_2;   // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_ActionItem;
+extern asn_SEQUENCE_specifics_t asn_SPC_ActionItem_specs_1;
+extern asn_TYPE_member_t asn_MBR_ActionItem_1[2];
+
+/*** <<< CODE [ActionItem] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [ActionItem] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_accept_as_value2enum_2[] = {
+       { 0,    7,      "unknown" },
+       { 1,    4,      "safe" },
+       { 2,    6,      "unsafe" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_accept_as_enum2value_2[] = {
+       1,      /* safe(1) */
+       0,      /* unknown(0) */
+       2       /* unsafe(2) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_accept_as_specs_2 = {
+       asn_MAP_accept_as_value2enum_2, /* "tag" => N; sorted by tag */
+       asn_MAP_accept_as_enum2value_2, /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       4,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_accept_as_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_accept_as_2 = {
+       "accept-as",
+       "accept-as",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_accept_as_tags_2,
+       sizeof(asn_DEF_accept_as_tags_2)
+               /sizeof(asn_DEF_accept_as_tags_2[0]), /* 1 */
+       asn_DEF_accept_as_tags_2,       /* Same as above */
+       sizeof(asn_DEF_accept_as_tags_2)
+               /sizeof(asn_DEF_accept_as_tags_2[0]), /* 1 */
+       { 0, 0, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_accept_as_specs_2      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_email_9[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_email_tags_9[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_email_specs_9 = {
+       sizeof(struct email),
+       offsetof(struct email, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_email_9 = {
+       "email",
+       "email",
+       &asn_OP_SET_OF,
+       asn_DEF_email_tags_9,
+       sizeof(asn_DEF_email_tags_9)
+               /sizeof(asn_DEF_email_tags_9[0]), /* 1 */
+       asn_DEF_email_tags_9,   /* Same as above */
+       sizeof(asn_DEF_email_tags_9)
+               /sizeof(asn_DEF_email_tags_9[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_email_9,
+       1,      /* Single element */
+       &asn_SPC_email_specs_9  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_notify_7[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct notify, critical),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "critical"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct notify, email),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_email_9,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "email"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_notify_tags_7[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_notify_tag2el_7[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 } /* email */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_notify_specs_7 = {
+       sizeof(struct notify),
+       offsetof(struct notify, _asn_ctx),
+       .tag2el = asn_MAP_notify_tag2el_7,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_notify_7 = {
+       "notify",
+       "notify",
+       &asn_OP_SEQUENCE,
+       asn_DEF_notify_tags_7,
+       sizeof(asn_DEF_notify_tags_7)
+               /sizeof(asn_DEF_notify_tags_7[0]), /* 1 */
+       asn_DEF_notify_tags_7,  /* Same as above */
+       sizeof(asn_DEF_notify_tags_7)
+               /sizeof(asn_DEF_notify_tags_7[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_notify_7,
+       2,      /* Elements count */
+       &asn_SPC_notify_specs_7 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ActionItem_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ActionItem, accept_as),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_accept_as_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "accept-as"
+               },
+       { ATF_POINTER, 1, offsetof(struct ActionItem, notify),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_notify_7,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "notify"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ActionItem_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ActionItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 0, 0, 0 }, /* accept-as */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 } /* notify */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ActionItem_specs_1 = {
+       sizeof(struct ActionItem),
+       offsetof(struct ActionItem, _asn_ctx),
+       .tag2el = asn_MAP_ActionItem_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ActionItem = {
+       "ActionItem",
+       "ActionItem",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ActionItem_tags_1,
+       sizeof(asn_DEF_ActionItem_tags_1)
+               /sizeof(asn_DEF_ActionItem_tags_1[0]), /* 1 */
+       asn_DEF_ActionItem_tags_1,      /* Same as above */
+       sizeof(asn_DEF_ActionItem_tags_1)
+               /sizeof(asn_DEF_ActionItem_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ActionItem_1,
+       2,      /* Elements count */
+       &asn_SPC_ActionItem_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/43-recursion-OK.asn1 b/tests/tests-asn1c-compiler/43-recursion-OK.asn1
new file mode 100644 (file)
index 0000000..782f6c3
--- /dev/null
@@ -0,0 +1,31 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .43
+
+ModuleRecursion
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 43 }
+       DEFINITIONS ::=
+BEGIN
+
+       Test-structure-1 ::= SEQUENCE {
+               t-member1 SET OF Test-structure-1,
+               t-member2 SEQUENCE OF Test-structure-1,
+               t-member3 Test-structure-1 OPTIONAL,
+               t-member4 INTEGER
+       }
+
+       Choice-1 ::= CHOICE {
+               and   [1] Choice-1,
+               or    [2] IMPLICIT SET OF Choice-1,
+               not   [3] Choice-1,
+               other [4] INTEGER
+       }
+
+       Test-structure-2 ::= SET { m1 Test-structure-3 OPTIONAL }
+       Test-structure-3 ::= SET { m1 Test-structure-2 OPTIONAL }
+
+END
diff --git a/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..b3bc7e7
--- /dev/null
@@ -0,0 +1,532 @@
+
+/*** <<< INCLUDES [Test-structure-1] >>> ***/
+
+#include <INTEGER.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Test-structure-1] >>> ***/
+
+struct Test_structure_1;
+
+/*** <<< TYPE-DECLS [Test-structure-1] >>> ***/
+
+typedef struct Test_structure_1 {
+       struct t_member1 {
+               A_SET_OF(struct Test_structure_1) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } t_member1;
+       struct t_member2 {
+               A_SEQUENCE_OF(struct Test_structure_1) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } t_member2;
+       struct Test_structure_1 *t_member3;     /* OPTIONAL */
+       INTEGER_t        t_member4;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_structure_1_t;
+
+/*** <<< FUNC-DECLS [Test-structure-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_1;
+extern asn_SEQUENCE_specifics_t asn_SPC_Test_structure_1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Test_structure_1_1[4];
+
+/*** <<< POST-INCLUDE [Test-structure-1] >>> ***/
+
+#include "Test-structure-1.h"
+
+/*** <<< STAT-DEFS [Test-structure-1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_t_member1_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Test_structure_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_t_member1_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_t_member1_specs_2 = {
+       sizeof(struct t_member1),
+       offsetof(struct t_member1, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_t_member1_2 = {
+       "t-member1",
+       "t-member1",
+       &asn_OP_SET_OF,
+       asn_DEF_t_member1_tags_2,
+       sizeof(asn_DEF_t_member1_tags_2)
+               /sizeof(asn_DEF_t_member1_tags_2[0]), /* 1 */
+       asn_DEF_t_member1_tags_2,       /* Same as above */
+       sizeof(asn_DEF_t_member1_tags_2)
+               /sizeof(asn_DEF_t_member1_tags_2[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_t_member1_2,
+       1,      /* Single element */
+       &asn_SPC_t_member1_specs_2      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_t_member2_4[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Test_structure_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_t_member2_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_t_member2_specs_4 = {
+       sizeof(struct t_member2),
+       offsetof(struct t_member2, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_t_member2_4 = {
+       "t-member2",
+       "t-member2",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_t_member2_tags_4,
+       sizeof(asn_DEF_t_member2_tags_4)
+               /sizeof(asn_DEF_t_member2_tags_4[0]), /* 1 */
+       asn_DEF_t_member2_tags_4,       /* Same as above */
+       sizeof(asn_DEF_t_member2_tags_4)
+               /sizeof(asn_DEF_t_member2_tags_4[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_t_member2_4,
+       1,      /* Single element */
+       &asn_SPC_t_member2_specs_4      /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Test_structure_1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_t_member1_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-member1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member2),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_t_member2_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-member2"
+               },
+       { ATF_POINTER, 1, offsetof(struct Test_structure_1, t_member3),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Test_structure_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-member3"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member4),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t-member4"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_structure_1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_structure_1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, 0, 0 }, /* t-member4 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* t-member2 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 }, /* t-member3 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 } /* t-member1 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Test_structure_1_specs_1 = {
+       sizeof(struct Test_structure_1),
+       offsetof(struct Test_structure_1, _asn_ctx),
+       .tag2el = asn_MAP_Test_structure_1_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Test_structure_1 = {
+       "Test-structure-1",
+       "Test-structure-1",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Test_structure_1_tags_1,
+       sizeof(asn_DEF_Test_structure_1_tags_1)
+               /sizeof(asn_DEF_Test_structure_1_tags_1[0]), /* 1 */
+       asn_DEF_Test_structure_1_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Test_structure_1_tags_1)
+               /sizeof(asn_DEF_Test_structure_1_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Test_structure_1_1,
+       4,      /* Elements count */
+       &asn_SPC_Test_structure_1_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice-1] >>> ***/
+
+#include <INTEGER.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice-1] >>> ***/
+
+typedef enum Choice_1_PR {
+       Choice_1_PR_NOTHING,    /* No components present */
+       Choice_1_PR_and,
+       Choice_1_PR_or,
+       Choice_1_PR_not,
+       Choice_1_PR_other
+} Choice_1_PR;
+
+/*** <<< FWD-DECLS [Choice-1] >>> ***/
+
+struct Choice_1;
+
+/*** <<< TYPE-DECLS [Choice-1] >>> ***/
+
+typedef struct Choice_1 {
+       Choice_1_PR present;
+       union Choice_1_u {
+               struct Choice_1 *And;
+               struct Or {
+                       A_SET_OF(struct Choice_1) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } Or;
+               struct Choice_1 *Not;
+               INTEGER_t        other;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_1_t;
+
+/*** <<< FUNC-DECLS [Choice-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice_1;
+extern asn_CHOICE_specifics_t asn_SPC_Choice_1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice_1_1[4];
+
+/*** <<< POST-INCLUDE [Choice-1] >>> ***/
+
+#include "Choice-1.h"
+
+/*** <<< STAT-DEFS [Choice-1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_or_3[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_Choice_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_or_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_or_specs_3 = {
+       sizeof(struct Or),
+       offsetof(struct Or, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_or_3 = {
+       "or",
+       "or",
+       &asn_OP_SET_OF,
+       asn_DEF_or_tags_3,
+       sizeof(asn_DEF_or_tags_3)
+               /sizeof(asn_DEF_or_tags_3[0]) - 1, /* 1 */
+       asn_DEF_or_tags_3,      /* Same as above */
+       sizeof(asn_DEF_or_tags_3)
+               /sizeof(asn_DEF_or_tags_3[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_or_3,
+       1,      /* Single element */
+       &asn_SPC_or_specs_3     /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Choice_1_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice_1, choice.And),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "and"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.Or),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_or_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "or"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice_1, choice.Not),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice_1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "not"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.other),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "other"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice_1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* and */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* or */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* not */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 } /* other */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice_1_specs_1 = {
+       sizeof(struct Choice_1),
+       offsetof(struct Choice_1, _asn_ctx),
+       offsetof(struct Choice_1, present),
+       sizeof(((struct Choice_1 *)0)->present),
+       .tag2el = asn_MAP_Choice_1_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice_1 = {
+       "Choice-1",
+       "Choice-1",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice_1_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice_1_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Test-structure-2] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [Test-structure-2] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Test_structure_2_PR {
+       Test_structure_2_PR_m1, /* Member m1 is present */
+} Test_structure_2_PR;
+
+/*** <<< FWD-DECLS [Test-structure-2] >>> ***/
+
+struct Test_structure_3;
+
+/*** <<< TYPE-DECLS [Test-structure-2] >>> ***/
+
+typedef struct Test_structure_2 {
+       struct Test_structure_3 *m1;    /* OPTIONAL */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pTest_structure_2, Test_structure_2_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_structure_2_t;
+
+/*** <<< FUNC-DECLS [Test-structure-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_2;
+extern asn_SET_specifics_t asn_SPC_Test_structure_2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Test_structure_2_1[1];
+
+/*** <<< POST-INCLUDE [Test-structure-2] >>> ***/
+
+#include "Test-structure-3.h"
+
+/*** <<< STAT-DEFS [Test-structure-2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Test_structure_2_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Test_structure_2, m1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Test_structure_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m1"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_structure_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_structure_2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 } /* m1 */
+};
+static const uint8_t asn_MAP_Test_structure_2_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (0 << 7)
+};
+asn_SET_specifics_t asn_SPC_Test_structure_2_specs_1 = {
+       sizeof(struct Test_structure_2),
+       offsetof(struct Test_structure_2, _asn_ctx),
+       offsetof(struct Test_structure_2, _presence_map),
+       .tag2el = asn_MAP_Test_structure_2_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_Test_structure_2_tag2el_1,      /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Test_structure_2_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Test_structure_2 = {
+       "Test-structure-2",
+       "Test-structure-2",
+       &asn_OP_SET,
+       asn_DEF_Test_structure_2_tags_1,
+       sizeof(asn_DEF_Test_structure_2_tags_1)
+               /sizeof(asn_DEF_Test_structure_2_tags_1[0]), /* 1 */
+       asn_DEF_Test_structure_2_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Test_structure_2_tags_1)
+               /sizeof(asn_DEF_Test_structure_2_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Test_structure_2_1,
+       1,      /* Elements count */
+       &asn_SPC_Test_structure_2_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Test-structure-3] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [Test-structure-3] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Test_structure_3_PR {
+       Test_structure_3_PR_m1, /* Member m1 is present */
+} Test_structure_3_PR;
+
+/*** <<< FWD-DECLS [Test-structure-3] >>> ***/
+
+struct Test_structure_2;
+
+/*** <<< TYPE-DECLS [Test-structure-3] >>> ***/
+
+typedef struct Test_structure_3 {
+       struct Test_structure_2 *m1;    /* OPTIONAL */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pTest_structure_3, Test_structure_3_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Test_structure_3_t;
+
+/*** <<< FUNC-DECLS [Test-structure-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_3;
+extern asn_SET_specifics_t asn_SPC_Test_structure_3_specs_1;
+extern asn_TYPE_member_t asn_MBR_Test_structure_3_1[1];
+
+/*** <<< POST-INCLUDE [Test-structure-3] >>> ***/
+
+#include "Test-structure-2.h"
+
+/*** <<< STAT-DEFS [Test-structure-3] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Test_structure_3_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Test_structure_3, m1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Test_structure_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m1"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Test_structure_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Test_structure_3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 } /* m1 */
+};
+static const uint8_t asn_MAP_Test_structure_3_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (0 << 7)
+};
+asn_SET_specifics_t asn_SPC_Test_structure_3_specs_1 = {
+       sizeof(struct Test_structure_3),
+       offsetof(struct Test_structure_3, _asn_ctx),
+       offsetof(struct Test_structure_3, _presence_map),
+       .tag2el = asn_MAP_Test_structure_3_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_Test_structure_3_tag2el_1,      /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Test_structure_3_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Test_structure_3 = {
+       "Test-structure-3",
+       "Test-structure-3",
+       &asn_OP_SET,
+       asn_DEF_Test_structure_3_tags_1,
+       sizeof(asn_DEF_Test_structure_3_tags_1)
+               /sizeof(asn_DEF_Test_structure_3_tags_1[0]), /* 1 */
+       asn_DEF_Test_structure_3_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Test_structure_3_tags_1)
+               /sizeof(asn_DEF_Test_structure_3_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Test_structure_3_1,
+       1,      /* Elements count */
+       &asn_SPC_Test_structure_3_specs_1       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1 b/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1
new file mode 100644 (file)
index 0000000..ef375f6
--- /dev/null
@@ -0,0 +1,30 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .44
+
+ModuleChoiceInSequence
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 44 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= [PRIVATE 1] SEQUENCE {
+               a [PRIVATE 2] NULL,
+               b CHOICE {
+                       c [PRIVATE 5] NULL,
+                       d [PRIVATE 6] NULL,
+                       e CHOICE {
+                               f [PRIVATE 7] NULL,
+                               g [PRIVATE 8] NULL
+                       },
+                       h [PRIVATE 9] CHOICE {  -- EXPLICIT!
+                               i [PRIVATE 1] NULL,
+                               j [PRIVATE 2] NULL
+                       }
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P b/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P
new file mode 100644 (file)
index 0000000..003c11a
--- /dev/null
@@ -0,0 +1,296 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <NULL.h>
+#include <constr_CHOICE.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum b_PR {
+       b_PR_NOTHING,   /* No components present */
+       b_PR_c,
+       b_PR_d,
+       b_PR_e,
+       b_PR_h
+} b_PR;
+typedef enum e_PR {
+       e_PR_NOTHING,   /* No components present */
+       e_PR_f,
+       e_PR_g
+} e_PR;
+typedef enum h_PR {
+       h_PR_NOTHING,   /* No components present */
+       h_PR_i,
+       h_PR_j
+} h_PR;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       NULL_t   a;
+       struct b {
+               b_PR present;
+               union T__b_u {
+                       NULL_t   c;
+                       NULL_t   d;
+                       struct e {
+                               e_PR present;
+                               union T__b__e_u {
+                                       NULL_t   f;
+                                       NULL_t   g;
+                               } choice;
+                               
+                               /* Context for parsing across buffer boundaries */
+                               asn_struct_ctx_t _asn_ctx;
+                       } e;
+                       struct h {
+                               h_PR present;
+                               union T__b__h_u {
+                                       NULL_t   i;
+                                       NULL_t   j;
+                               } choice;
+                               
+                               /* Context for parsing across buffer boundaries */
+                               asn_struct_ctx_t _asn_ctx;
+                       } h;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } b;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_e_6[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct e, choice.f),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "f"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct e, choice.g),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_e_tag2el_6[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f */
+    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 } /* g */
+};
+static asn_CHOICE_specifics_t asn_SPC_e_specs_6 = {
+       sizeof(struct e),
+       offsetof(struct e, _asn_ctx),
+       offsetof(struct e, present),
+       sizeof(((struct e *)0)->present),
+       .tag2el = asn_MAP_e_tag2el_6,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_e_6 = {
+       "e",
+       "e",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_e_6,
+       2,      /* Elements count */
+       &asn_SPC_e_specs_6      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_h_9[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct h, choice.i),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct h, choice.j),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "j"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_h_tag2el_9[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i */
+    { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 } /* j */
+};
+static asn_CHOICE_specifics_t asn_SPC_h_specs_9 = {
+       sizeof(struct h),
+       offsetof(struct h, _asn_ctx),
+       offsetof(struct h, present),
+       sizeof(((struct h *)0)->present),
+       .tag2el = asn_MAP_h_tag2el_9,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_h_9 = {
+       "h",
+       "h",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_h_9,
+       2,      /* Elements count */
+       &asn_SPC_h_specs_9      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_b_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.c),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.d),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "d"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.e),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_e_6,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "e"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct b, choice.h),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_h_9,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "h"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_b_tag2el_3[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c */
+    { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d */
+    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f */
+    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g */
+    { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 } /* h */
+};
+static asn_CHOICE_specifics_t asn_SPC_b_specs_3 = {
+       sizeof(struct b),
+       offsetof(struct b, _asn_ctx),
+       offsetof(struct b, present),
+       sizeof(((struct b *)0)->present),
+       .tag2el = asn_MAP_b_tag2el_3,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_b_3 = {
+       "b",
+       "b",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_b_3,
+       4,      /* Elements count */
+       &asn_SPC_b_specs_3      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, a),
+               .tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, b),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_b_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 1, 0, 0 }, /* c */
+    { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d */
+    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 1, 0, 0 }, /* f */
+    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g */
+    { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 1, 0, 0 } /* h */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 6,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]) - 1, /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       2,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/45-undefined-type-SE.asn1 b/tests/tests-asn1c-compiler/45-undefined-type-SE.asn1
new file mode 100644 (file)
index 0000000..a068b5c
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .45
+
+ModuleKnownExternType
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 45 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= KnownExt -- KnownExt is known to be external.
+
+END
diff --git a/tests/tests-asn1c-compiler/45-undefined-type-SE.asn1.-EFfknown-extern-type=KnownExt b/tests/tests-asn1c-compiler/45-undefined-type-SE.asn1.-EFfknown-extern-type=KnownExt
new file mode 100644 (file)
index 0000000..994a890
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleKnownExternType { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 45 }
+DEFINITIONS ::=
+BEGIN
+
+Type ::= KnownExt
+
+END
diff --git a/tests/tests-asn1c-compiler/46-redefine-OK.asn1 b/tests/tests-asn1c-compiler/46-redefine-OK.asn1
new file mode 100644 (file)
index 0000000..0585404
--- /dev/null
@@ -0,0 +1,22 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .46
+
+ModuleRedefineType
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 46 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       PrimitiveType ::= OCTET STRING
+
+       ConstructedType ::= SEQUENCE {
+               field   [5] PrimitiveType
+       }
+
+       T ::= [3] ConstructedType
+
+END
diff --git a/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR b/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR
new file mode 100644 (file)
index 0000000..ea18361
--- /dev/null
@@ -0,0 +1,160 @@
+
+/*** <<< INCLUDES [PrimitiveType] >>> ***/
+
+#include <OCTET_STRING.h>
+
+/*** <<< TYPE-DECLS [PrimitiveType] >>> ***/
+
+typedef OCTET_STRING_t  PrimitiveType_t;
+
+/*** <<< FUNC-DECLS [PrimitiveType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PrimitiveType;
+asn_struct_free_f PrimitiveType_free;
+asn_struct_print_f PrimitiveType_print;
+asn_constr_check_f PrimitiveType_constraint;
+ber_type_decoder_f PrimitiveType_decode_ber;
+der_type_encoder_f PrimitiveType_encode_der;
+xer_type_decoder_f PrimitiveType_decode_xer;
+xer_type_encoder_f PrimitiveType_encode_xer;
+
+/*** <<< CODE [PrimitiveType] >>> ***/
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PrimitiveType_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PrimitiveType = {
+       "PrimitiveType",
+       "PrimitiveType",
+       &asn_OP_OCTET_STRING,
+       asn_DEF_PrimitiveType_tags_1,
+       sizeof(asn_DEF_PrimitiveType_tags_1)
+               /sizeof(asn_DEF_PrimitiveType_tags_1[0]), /* 1 */
+       asn_DEF_PrimitiveType_tags_1,   /* Same as above */
+       sizeof(asn_DEF_PrimitiveType_tags_1)
+               /sizeof(asn_DEF_PrimitiveType_tags_1[0]), /* 1 */
+       { 0, 0, OCTET_STRING_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_OCTET_STRING_specs     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ConstructedType] >>> ***/
+
+#include "PrimitiveType.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ConstructedType] >>> ***/
+
+typedef struct ConstructedType {
+       PrimitiveType_t  field;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ConstructedType_t;
+
+/*** <<< FUNC-DECLS [ConstructedType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ConstructedType;
+extern asn_SEQUENCE_specifics_t asn_SPC_ConstructedType_specs_1;
+extern asn_TYPE_member_t asn_MBR_ConstructedType_1[1];
+
+/*** <<< STAT-DEFS [ConstructedType] >>> ***/
+
+asn_TYPE_member_t asn_MBR_ConstructedType_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ConstructedType, field),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_PrimitiveType,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "field"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ConstructedType_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ConstructedType_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 0, 0, 0 } /* field */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ConstructedType_specs_1 = {
+       sizeof(struct ConstructedType),
+       offsetof(struct ConstructedType, _asn_ctx),
+       .tag2el = asn_MAP_ConstructedType_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ConstructedType = {
+       "ConstructedType",
+       "ConstructedType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ConstructedType_tags_1,
+       sizeof(asn_DEF_ConstructedType_tags_1)
+               /sizeof(asn_DEF_ConstructedType_tags_1[0]), /* 1 */
+       asn_DEF_ConstructedType_tags_1, /* Same as above */
+       sizeof(asn_DEF_ConstructedType_tags_1)
+               /sizeof(asn_DEF_ConstructedType_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ConstructedType_1,
+       1,      /* Elements count */
+       &asn_SPC_ConstructedType_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include "ConstructedType.h"
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef ConstructedType_t       T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+asn_struct_free_f T_free;
+asn_struct_print_f T_print;
+asn_constr_check_f T_constraint;
+ber_type_decoder_f T_decode_ber;
+der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
+xer_type_encoder_f T_encode_xer;
+
+/*** <<< CODE [T] >>> ***/
+
+/*
+ * This type is implemented using ConstructedType,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]) - 1, /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ConstructedType_1,
+       1,      /* Elements count */
+       &asn_SPC_ConstructedType_specs_1        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/47-set-ext-OK.asn1 b/tests/tests-asn1c-compiler/47-set-ext-OK.asn1
new file mode 100644 (file)
index 0000000..52afef1
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .47
+
+ModuleSetChoiceExtensibility
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 47 }
+       DEFINITIONS IMPLICIT TAGS EXTENSIBILITY IMPLIED ::=
+BEGIN
+
+       T1 ::= SET { i INTEGER }
+       T2 ::= SET { i INTEGER, ... }
+       T3 ::= CHOICE { i INTEGER }
+       T4 ::= CHOICE { i INTEGER, ... }
+
+END
diff --git a/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..5aca445
--- /dev/null
@@ -0,0 +1,324 @@
+
+/*** <<< INCLUDES [T1] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [T1] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum T1_PR {
+       T1_PR_i,        /* Member i is present */
+} T1_PR;
+
+/*** <<< TYPE-DECLS [T1] >>> ***/
+
+typedef struct T1 {
+       INTEGER_t        i;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pT1, T1_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T1_t;
+
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+
+/*** <<< STAT-DEFS [T1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T1, i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* i */
+};
+static const uint8_t asn_MAP_T1_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+static 
+asn_SET_specifics_t asn_SPC_T1_specs_1 = {
+       sizeof(struct T1),
+       offsetof(struct T1, _asn_ctx),
+       offsetof(struct T1, _presence_map),
+       .tag2el = asn_MAP_T1_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_T1_tag2el_1,    /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_T1_mmap_1 /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_T1 = {
+       "T1",
+       "T1",
+       &asn_OP_SET,
+       asn_DEF_T1_tags_1,
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       asn_DEF_T1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_T1_1,
+       1,      /* Elements count */
+       &asn_SPC_T1_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T2] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [T2] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum T2_PR {
+       T2_PR_i,        /* Member i is present */
+} T2_PR;
+
+/*** <<< TYPE-DECLS [T2] >>> ***/
+
+typedef struct T2 {
+       INTEGER_t        i;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pT2, T2_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T2_t;
+
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+
+/*** <<< STAT-DEFS [T2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T2, i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* i */
+};
+static const uint8_t asn_MAP_T2_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+static 
+asn_SET_specifics_t asn_SPC_T2_specs_1 = {
+       sizeof(struct T2),
+       offsetof(struct T2, _asn_ctx),
+       offsetof(struct T2, _presence_map),
+       .tag2el = asn_MAP_T2_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_T2_tag2el_1,    /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_T2_mmap_1 /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_T2 = {
+       "T2",
+       "T2",
+       &asn_OP_SET,
+       asn_DEF_T2_tags_1,
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       asn_DEF_T2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_T2_1,
+       1,      /* Elements count */
+       &asn_SPC_T2_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T3] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T3] >>> ***/
+
+typedef enum T3_PR {
+       T3_PR_NOTHING,  /* No components present */
+       T3_PR_i
+       /* Extensions may appear below */
+       
+} T3_PR;
+
+/*** <<< TYPE-DECLS [T3] >>> ***/
+
+typedef struct T3 {
+       T3_PR present;
+       union T3_u {
+               INTEGER_t        i;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T3_t;
+
+/*** <<< FUNC-DECLS [T3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T3;
+
+/*** <<< STAT-DEFS [T3] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T3_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T3, choice.i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_T3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* i */
+};
+static asn_CHOICE_specifics_t asn_SPC_T3_specs_1 = {
+       sizeof(struct T3),
+       offsetof(struct T3, _asn_ctx),
+       offsetof(struct T3, present),
+       sizeof(((struct T3 *)0)->present),
+       .tag2el = asn_MAP_T3_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T3 = {
+       "T3",
+       "T3",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_T3_1,
+       1,      /* Elements count */
+       &asn_SPC_T3_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T4] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T4] >>> ***/
+
+typedef enum T4_PR {
+       T4_PR_NOTHING,  /* No components present */
+       T4_PR_i
+       /* Extensions may appear below */
+       
+} T4_PR;
+
+/*** <<< TYPE-DECLS [T4] >>> ***/
+
+typedef struct T4 {
+       T4_PR present;
+       union T4_u {
+               INTEGER_t        i;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T4_t;
+
+/*** <<< FUNC-DECLS [T4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T4;
+
+/*** <<< STAT-DEFS [T4] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T4_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T4, choice.i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_T4_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* i */
+};
+static asn_CHOICE_specifics_t asn_SPC_T4_specs_1 = {
+       sizeof(struct T4),
+       offsetof(struct T4, _asn_ctx),
+       offsetof(struct T4, present),
+       sizeof(((struct T4 *)0)->present),
+       .tag2el = asn_MAP_T4_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T4 = {
+       "T4",
+       "T4",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_T4_1,
+       1,      /* Elements count */
+       &asn_SPC_T4_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/48-real-life-OK.asn1 b/tests/tests-asn1c-compiler/48-real-life-OK.asn1
new file mode 100644 (file)
index 0000000..7173676
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .48
+
+ModuleSetChoiceExtensibility
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 48 }
+       DEFINITIONS ::=
+BEGIN
+
+       /*
+        * 0.8.14 had problem saving/reloading this object
+        */
+       UserIdentifier ::= CHOICE {
+               phoneNumber [3] EXPLICIT IA5String
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/49-real-life-OK.asn1 b/tests/tests-asn1c-compiler/49-real-life-OK.asn1
new file mode 100644 (file)
index 0000000..aeba3b0
--- /dev/null
@@ -0,0 +1,24 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .49
+
+ModuleSetChoiceExtensibility
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 49 }
+       DEFINITIONS ::=
+BEGIN
+       /*
+        * 0.8.17 had problem parsing this module
+        */
+
+       EXPORTS TypeA ;
+
+       IMPORTS TypeB FROM ModuleB
+               TypeC FROM ModuleC ;
+
+       Z ::= INTEGER   -- Can't specify only EXPORTS & IMPOTS
+
+END
diff --git a/tests/tests-asn1c-compiler/49-real-life-OK.asn1.-E b/tests/tests-asn1c-compiler/49-real-life-OK.asn1.-E
new file mode 100644 (file)
index 0000000..018bc6b
--- /dev/null
@@ -0,0 +1,8 @@
+ModuleSetChoiceExtensibility { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 49 }
+DEFINITIONS ::=
+BEGIN
+
+Z ::= INTEGER
+
+END
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1 b/tests/tests-asn1c-compiler/50-constraint-OK.asn1
new file mode 100644 (file)
index 0000000..43c9ba4
--- /dev/null
@@ -0,0 +1,93 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .50 1
+-- .50 2
+
+ModuleNestedConstraintsCheck
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 50 1 }
+       DEFINITIONS ::=
+BEGIN
+       IMPORTS Identifier FROM IdentifierModule;
+
+       Int1 ::= INTEGER
+       Int2 ::= Int1 (0..MAX)          -- X.680-0207::41.4.4
+       Int3 ::= Int2 (MIN..ten)        -- Means (0..10)
+       Int4 ::= Int3 (5..MAX,...,1..4) -- Means (1..10,...)
+       Int5 ::= Int4 (MIN..5)          -- Means (5)
+       -- Int6 ::= INTEGER (Int5) -- -- Not yet supported
+
+       ten Int1 ::= other-ten
+       other-ten Int2 ::= 10
+
+       -- G.4.3.4
+       ExtensibleExtensions ::= INTEGER (1..256) (1..255,...)
+
+       Str1 ::= IA5String
+       Str2 ::= Str1 (SIZE(MIN..20 | 25..30))  
+                                       -- Means (SIZE(0..20 | 25..30))
+       Str3 ::= Str2 (SIZE(10..27))(FROM("ABC"|"def"))
+                                       -- (SIZE(10..20,25..27))(FROM("ABCdef"))
+       Str4 ::= IA5String ("ABCD"|SIZE(4))
+                                       -- Not PER-visible
+
+       PER-Visible ::= IA5String (FROM("A".."F"))
+       PER-Visible-2 ::= PER-Visible (FROM("E".."F"))  -- Means (FROM("EF"))
+       -- The following maintain parent permitted alphabet constraint
+       Not-PER-Visible-1 ::= PER-Visible (FROM("AB") | SIZE(1..2))
+       Not-PER-Visible-2 ::= PER-Visible (FROM("AB",...))
+       Not-PER-Visible-3 ::= PER-Visible (FROM("AB"),...)
+
+       SIZE-but-not-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD",...))
+       SIZE-and-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD"))
+       Neither-SIZE-nor-FROM ::= PER-Visible (SIZE(1..4) | FROM("ABCD",...))
+
+       Utf8-4 ::= UTF8String (FROM("A".."Z"))          -- Alphabet
+       Utf8-3 ::= Utf8-2 (FROM("A".."Z"|"a".."z"))     -- Alphabet and size
+       Utf8-2 ::= Utf8-1 (SIZE(1..2))                  -- Size
+       Utf8-1 ::= UTF8String
+
+       VisibleIdentifier ::= Identifier
+
+       Sequence ::= SEQUENCE {
+               int1-c  Int1    (-2..MAX) DEFAULT 3,
+               int4    [2] Int4,
+               int4-c  Int4    (MIN..7),
+               bool    BOOLEAN DEFAULT 1,
+               enum-c  ENUMERATED { one(1), two(2), ..., three(3) },
+               ...,
+               int5-c  Int5 (5) OPTIONAL,
+               ...,
+               null    NULL OPTIONAL
+       }
+
+       SequenceOf ::= SEQUENCE (SIZE(1..2)) OF Sequence
+
+       Enum0   ::= ENUMERATED { one, two }
+       Enum1   ::= ENUMERATED { one, two }     (one)
+
+END
+
+
+IdentifierModule
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 50 2 }
+       DEFINITIONS ::=
+BEGIN
+       EXPORTS Identifier;
+
+       maxIdentifier INTEGER ::= 32
+
+       Identifier ::=
+           VisibleString ( FROM
+          ("A"|"a"|"B"|"b"|"C"|"c"|"D"|"d"|"E"|"e"|"F"|"f"|
+          "G"|"g"|"H"|"h"|"I"|"i"|"J"|"j"|"K"|"k"|"L"|"l"|
+          "M"|"m"|"N"|"n"|"O"|"o"|"P"|"p"|"Q"|"q"|"R"|"r"|
+          "S"|"s"|"T"|"t"|"U"|"u"|"V"|"v"|"W"|"w"|"X"|"x"|
+          "Y"|"y"|"Z"|"z"|"$"|"_"|"0"|"1"|"2"|"3"|"4"|"5"|
+          "6"|"7"|"8"|"9") ) (SIZE(1..maxIdentifier))
+
+END
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..d77822b
Binary files /dev/null and b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-EFprint-constraints differ
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..a5863e5
--- /dev/null
@@ -0,0 +1,2573 @@
+
+/*** <<< INCLUDES [Int1] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [Int1] >>> ***/
+
+typedef INTEGER_t       Int1_t;
+
+/*** <<< FUNC-DECLS [Int1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int1;
+asn_struct_free_f Int1_free;
+asn_struct_print_f Int1_print;
+asn_constr_check_f Int1_constraint;
+ber_type_decoder_f Int1_decode_ber;
+der_type_encoder_f Int1_encode_der;
+xer_type_decoder_f Int1_decode_xer;
+xer_type_encoder_f Int1_encode_xer;
+#define Int1_ten       ((Int1_t)10)
+
+/*** <<< CODE [Int1] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int1 = {
+       "Int1",
+       "Int1",
+       &asn_OP_INTEGER,
+       asn_DEF_Int1_tags_1,
+       sizeof(asn_DEF_Int1_tags_1)
+               /sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
+       asn_DEF_Int1_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int1_tags_1)
+               /sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int2] >>> ***/
+
+#include "Int1.h"
+
+/*** <<< TYPE-DECLS [Int2] >>> ***/
+
+typedef Int1_t  Int2_t;
+
+/*** <<< FUNC-DECLS [Int2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int2;
+asn_struct_free_f Int2_free;
+asn_struct_print_f Int2_print;
+asn_constr_check_f Int2_constraint;
+ber_type_decoder_f Int2_decode_ber;
+der_type_encoder_f Int2_encode_der;
+xer_type_decoder_f Int2_decode_xer;
+xer_type_encoder_f Int2_encode_xer;
+
+/*** <<< CODE [Int2] >>> ***/
+
+int
+Int2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int1_t *st = (const Int1_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       /* Check if the sign bit is present */
+       value = st->buf ? ((st->buf[0] & 0x80) ? -1 : 1) : 0;
+       
+       if((value >= 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int2 = {
+       "Int2",
+       "Int2",
+       &asn_OP_INTEGER,
+       asn_DEF_Int2_tags_1,
+       sizeof(asn_DEF_Int2_tags_1)
+               /sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
+       asn_DEF_Int2_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int2_tags_1)
+               /sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
+       { 0, 0, Int2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int3] >>> ***/
+
+#include "Int2.h"
+
+/*** <<< TYPE-DECLS [Int3] >>> ***/
+
+typedef Int2_t  Int3_t;
+
+/*** <<< FUNC-DECLS [Int3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int3;
+asn_struct_free_f Int3_free;
+asn_struct_print_f Int3_print;
+asn_constr_check_f Int3_constraint;
+ber_type_decoder_f Int3_decode_ber;
+der_type_encoder_f Int3_encode_der;
+xer_type_decoder_f Int3_decode_xer;
+xer_type_encoder_f Int3_encode_xer;
+
+/*** <<< CODE [Int3] >>> ***/
+
+int
+Int3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int2_t *st = (const Int2_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 0 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int3 = {
+       "Int3",
+       "Int3",
+       &asn_OP_INTEGER,
+       asn_DEF_Int3_tags_1,
+       sizeof(asn_DEF_Int3_tags_1)
+               /sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
+       asn_DEF_Int3_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int3_tags_1)
+               /sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
+       { 0, 0, Int3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int4] >>> ***/
+
+#include "Int3.h"
+
+/*** <<< TYPE-DECLS [Int4] >>> ***/
+
+typedef Int3_t  Int4_t;
+
+/*** <<< FUNC-DECLS [Int4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int4;
+asn_struct_free_f Int4_free;
+asn_struct_print_f Int4_print;
+asn_constr_check_f Int4_constraint;
+ber_type_decoder_f Int4_decode_ber;
+der_type_encoder_f Int4_encode_der;
+xer_type_decoder_f Int4_decode_xer;
+xer_type_encoder_f Int4_encode_xer;
+
+/*** <<< CODE [Int4] >>> ***/
+
+int
+Int4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int3_t *st = (const Int3_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 1 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int3,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int4 = {
+       "Int4",
+       "Int4",
+       &asn_OP_INTEGER,
+       asn_DEF_Int4_tags_1,
+       sizeof(asn_DEF_Int4_tags_1)
+               /sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
+       asn_DEF_Int4_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int4_tags_1)
+               /sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
+       { 0, 0, Int4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int5] >>> ***/
+
+#include "Int4.h"
+
+/*** <<< TYPE-DECLS [Int5] >>> ***/
+
+typedef Int4_t  Int5_t;
+
+/*** <<< FUNC-DECLS [Int5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int5;
+asn_struct_free_f Int5_free;
+asn_struct_print_f Int5_print;
+asn_constr_check_f Int5_constraint;
+ber_type_decoder_f Int5_decode_ber;
+der_type_encoder_f Int5_encode_der;
+xer_type_decoder_f Int5_decode_xer;
+xer_type_encoder_f Int5_encode_xer;
+
+/*** <<< CODE [Int5] >>> ***/
+
+int
+Int5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int4_t *st = (const Int4_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value == 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int4,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int5 = {
+       "Int5",
+       "Int5",
+       &asn_OP_INTEGER,
+       asn_DEF_Int5_tags_1,
+       sizeof(asn_DEF_Int5_tags_1)
+               /sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
+       asn_DEF_Int5_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int5_tags_1)
+               /sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
+       { 0, 0, Int5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [ExtensibleExtensions] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [ExtensibleExtensions] >>> ***/
+
+typedef INTEGER_t       ExtensibleExtensions_t;
+
+/*** <<< FUNC-DECLS [ExtensibleExtensions] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions;
+asn_struct_free_f ExtensibleExtensions_free;
+asn_struct_print_f ExtensibleExtensions_print;
+asn_constr_check_f ExtensibleExtensions_constraint;
+ber_type_decoder_f ExtensibleExtensions_decode_ber;
+der_type_encoder_f ExtensibleExtensions_encode_der;
+xer_type_decoder_f ExtensibleExtensions_decode_xer;
+xer_type_encoder_f ExtensibleExtensions_encode_xer;
+
+/*** <<< CODE [ExtensibleExtensions] >>> ***/
+
+int
+ExtensibleExtensions_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 1 && value <= 255)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [ExtensibleExtensions] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ExtensibleExtensions_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions = {
+       "ExtensibleExtensions",
+       "ExtensibleExtensions",
+       &asn_OP_INTEGER,
+       asn_DEF_ExtensibleExtensions_tags_1,
+       sizeof(asn_DEF_ExtensibleExtensions_tags_1)
+               /sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
+       asn_DEF_ExtensibleExtensions_tags_1,    /* Same as above */
+       sizeof(asn_DEF_ExtensibleExtensions_tags_1)
+               /sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
+       { 0, 0, ExtensibleExtensions_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str1] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [Str1] >>> ***/
+
+typedef IA5String_t     Str1_t;
+
+/*** <<< FUNC-DECLS [Str1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str1;
+asn_struct_free_f Str1_free;
+asn_struct_print_f Str1_print;
+asn_constr_check_f Str1_constraint;
+ber_type_decoder_f Str1_decode_ber;
+der_type_encoder_f Str1_encode_der;
+xer_type_decoder_f Str1_decode_xer;
+xer_type_encoder_f Str1_encode_xer;
+
+/*** <<< CODE [Str1] >>> ***/
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Str1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str1 = {
+       "Str1",
+       "Str1",
+       &asn_OP_IA5String,
+       asn_DEF_Str1_tags_1,
+       sizeof(asn_DEF_Str1_tags_1)
+               /sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
+       asn_DEF_Str1_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str1_tags_1)
+               /sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
+       { 0, 0, IA5String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str2] >>> ***/
+
+#include "Str1.h"
+
+/*** <<< TYPE-DECLS [Str2] >>> ***/
+
+typedef Str1_t  Str2_t;
+
+/*** <<< FUNC-DECLS [Str2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str2;
+asn_struct_free_f Str2_free;
+asn_struct_print_f Str2_print;
+asn_constr_check_f Str2_constraint;
+ber_type_decoder_f Str2_decode_ber;
+der_type_encoder_f Str2_encode_der;
+xer_type_decoder_f Str2_decode_xer;
+xer_type_encoder_f Str2_encode_xer;
+
+/*** <<< CTABLES [Str2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv <= 127)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str2] >>> ***/
+
+int
+Str2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Str1_t *st = (const Str1_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if(((size <= 20) || (size >= 25 && size <= 30))
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Str1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Str2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str2 = {
+       "Str2",
+       "Str2",
+       &asn_OP_IA5String,
+       asn_DEF_Str2_tags_1,
+       sizeof(asn_DEF_Str2_tags_1)
+               /sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
+       asn_DEF_Str2_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str2_tags_1)
+               /sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
+       { 0, 0, Str2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str3] >>> ***/
+
+#include "Str2.h"
+
+/*** <<< TYPE-DECLS [Str3] >>> ***/
+
+typedef Str2_t  Str3_t;
+
+/*** <<< FUNC-DECLS [Str3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str3;
+asn_struct_free_f Str3_free;
+asn_struct_print_f Str3_print;
+asn_constr_check_f Str3_constraint;
+ber_type_decoder_f Str3_decode_ber;
+der_type_encoder_f Str3_encode_der;
+xer_type_decoder_f Str3_decode_xer;
+xer_type_encoder_f Str3_encode_xer;
+
+/*** <<< CTABLES [Str3] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  ABC             */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     def          */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str3] >>> ***/
+
+int
+Str3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Str2_t *st = (const Str2_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if(((size >= 10 && size <= 20) || (size >= 25 && size <= 27))
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Str2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Str3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str3 = {
+       "Str3",
+       "Str3",
+       &asn_OP_IA5String,
+       asn_DEF_Str3_tags_1,
+       sizeof(asn_DEF_Str3_tags_1)
+               /sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
+       asn_DEF_Str3_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str3_tags_1)
+               /sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
+       { 0, 0, Str3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str4] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [Str4] >>> ***/
+
+typedef IA5String_t     Str4_t;
+
+/*** <<< FUNC-DECLS [Str4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str4;
+asn_struct_free_f Str4_free;
+asn_struct_print_f Str4_print;
+asn_constr_check_f Str4_constraint;
+ber_type_decoder_f Str4_decode_ber;
+der_type_encoder_f Str4_encode_der;
+xer_type_decoder_f Str4_decode_xer;
+xer_type_encoder_f Str4_encode_xer;
+
+/*** <<< CTABLES [Str4] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv <= 127)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str4] >>> ***/
+
+int
+Str4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Str4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str4 = {
+       "Str4",
+       "Str4",
+       &asn_OP_IA5String,
+       asn_DEF_Str4_tags_1,
+       sizeof(asn_DEF_Str4_tags_1)
+               /sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
+       asn_DEF_Str4_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str4_tags_1)
+               /sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
+       { 0, 0, Str4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [PER-Visible] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [PER-Visible] >>> ***/
+
+typedef IA5String_t     PER_Visible_t;
+
+/*** <<< FUNC-DECLS [PER-Visible] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PER_Visible;
+asn_struct_free_f PER_Visible_free;
+asn_struct_print_f PER_Visible_print;
+asn_constr_check_f PER_Visible_constraint;
+ber_type_decoder_f PER_Visible_decode_ber;
+der_type_encoder_f PER_Visible_encode_der;
+xer_type_decoder_f PER_Visible_decode_xer;
+xer_type_encoder_f PER_Visible_encode_xer;
+
+/*** <<< CTABLES [PER-Visible] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [PER-Visible] >>> ***/
+
+int
+PER_Visible_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [PER-Visible] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PER_Visible_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PER_Visible = {
+       "PER-Visible",
+       "PER-Visible",
+       &asn_OP_IA5String,
+       asn_DEF_PER_Visible_tags_1,
+       sizeof(asn_DEF_PER_Visible_tags_1)
+               /sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
+       asn_DEF_PER_Visible_tags_1,     /* Same as above */
+       sizeof(asn_DEF_PER_Visible_tags_1)
+               /sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
+       { 0, 0, PER_Visible_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [PER-Visible-2] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [PER-Visible-2] >>> ***/
+
+typedef PER_Visible_t   PER_Visible_2_t;
+
+/*** <<< FUNC-DECLS [PER-Visible-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PER_Visible_2;
+asn_struct_free_f PER_Visible_2_free;
+asn_struct_print_f PER_Visible_2_print;
+asn_constr_check_f PER_Visible_2_constraint;
+ber_type_decoder_f PER_Visible_2_decode_ber;
+der_type_encoder_f PER_Visible_2_encode_der;
+xer_type_decoder_f PER_Visible_2_decode_xer;
+xer_type_encoder_f PER_Visible_2_encode_xer;
+
+/*** <<< CTABLES [PER-Visible-2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 69 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [PER-Visible-2] >>> ***/
+
+int
+PER_Visible_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [PER-Visible-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PER_Visible_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PER_Visible_2 = {
+       "PER-Visible-2",
+       "PER-Visible-2",
+       &asn_OP_IA5String,
+       asn_DEF_PER_Visible_2_tags_1,
+       sizeof(asn_DEF_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
+       asn_DEF_PER_Visible_2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
+       { 0, 0, PER_Visible_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-1] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-1] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_1_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1;
+asn_struct_free_f Not_PER_Visible_1_free;
+asn_struct_print_f Not_PER_Visible_1_print;
+asn_constr_check_f Not_PER_Visible_1_constraint;
+ber_type_decoder_f Not_PER_Visible_1_decode_ber;
+der_type_encoder_f Not_PER_Visible_1_encode_der;
+xer_type_decoder_f Not_PER_Visible_1_decode_xer;
+xer_type_encoder_f Not_PER_Visible_1_encode_xer;
+
+/*** <<< CTABLES [Not-PER-Visible-1] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-1] >>> ***/
+
+int
+Not_PER_Visible_1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Not-PER-Visible-1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1 = {
+       "Not-PER-Visible-1",
+       "Not-PER-Visible-1",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_1_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_1_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
+       { 0, 0, Not_PER_Visible_1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-2] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-2] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_2_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2;
+asn_struct_free_f Not_PER_Visible_2_free;
+asn_struct_print_f Not_PER_Visible_2_print;
+asn_constr_check_f Not_PER_Visible_2_constraint;
+ber_type_decoder_f Not_PER_Visible_2_decode_ber;
+der_type_encoder_f Not_PER_Visible_2_encode_der;
+xer_type_decoder_f Not_PER_Visible_2_decode_xer;
+xer_type_encoder_f Not_PER_Visible_2_encode_xer;
+
+/*** <<< CTABLES [Not-PER-Visible-2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 66)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-2] >>> ***/
+
+int
+Not_PER_Visible_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Not-PER-Visible-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2 = {
+       "Not-PER-Visible-2",
+       "Not-PER-Visible-2",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_2_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_2_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
+       { 0, 0, Not_PER_Visible_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-3] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-3] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_3_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3;
+asn_struct_free_f Not_PER_Visible_3_free;
+asn_struct_print_f Not_PER_Visible_3_print;
+asn_constr_check_f Not_PER_Visible_3_constraint;
+ber_type_decoder_f Not_PER_Visible_3_decode_ber;
+der_type_encoder_f Not_PER_Visible_3_encode_der;
+xer_type_decoder_f Not_PER_Visible_3_decode_xer;
+xer_type_encoder_f Not_PER_Visible_3_encode_xer;
+
+/*** <<< CTABLES [Not-PER-Visible-3] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 66)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-3] >>> ***/
+
+int
+Not_PER_Visible_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Not-PER-Visible-3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3 = {
+       "Not-PER-Visible-3",
+       "Not-PER-Visible-3",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_3_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_3_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
+       { 0, 0, Not_PER_Visible_3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [SIZE-but-not-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [SIZE-but-not-FROM] >>> ***/
+
+typedef PER_Visible_t   SIZE_but_not_FROM_t;
+
+/*** <<< FUNC-DECLS [SIZE-but-not-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM;
+asn_struct_free_f SIZE_but_not_FROM_free;
+asn_struct_print_f SIZE_but_not_FROM_print;
+asn_constr_check_f SIZE_but_not_FROM_constraint;
+ber_type_decoder_f SIZE_but_not_FROM_decode_ber;
+der_type_encoder_f SIZE_but_not_FROM_encode_der;
+xer_type_decoder_f SIZE_but_not_FROM_decode_xer;
+xer_type_encoder_f SIZE_but_not_FROM_encode_xer;
+
+/*** <<< CTABLES [SIZE-but-not-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 68)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [SIZE-but-not-FROM] >>> ***/
+
+int
+SIZE_but_not_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 4)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SIZE-but-not-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SIZE_but_not_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM = {
+       "SIZE-but-not-FROM",
+       "SIZE-but-not-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_SIZE_but_not_FROM_tags_1,
+       sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
+       asn_DEF_SIZE_but_not_FROM_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
+       { 0, 0, SIZE_but_not_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [SIZE-and-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [SIZE-and-FROM] >>> ***/
+
+typedef PER_Visible_t   SIZE_and_FROM_t;
+
+/*** <<< FUNC-DECLS [SIZE-and-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM;
+asn_struct_free_f SIZE_and_FROM_free;
+asn_struct_print_f SIZE_and_FROM_print;
+asn_constr_check_f SIZE_and_FROM_constraint;
+ber_type_decoder_f SIZE_and_FROM_decode_ber;
+der_type_encoder_f SIZE_and_FROM_encode_der;
+xer_type_decoder_f SIZE_and_FROM_decode_xer;
+xer_type_encoder_f SIZE_and_FROM_encode_xer;
+
+/*** <<< CTABLES [SIZE-and-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 68)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [SIZE-and-FROM] >>> ***/
+
+int
+SIZE_and_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 4)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SIZE-and-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SIZE_and_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM = {
+       "SIZE-and-FROM",
+       "SIZE-and-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_SIZE_and_FROM_tags_1,
+       sizeof(asn_DEF_SIZE_and_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
+       asn_DEF_SIZE_and_FROM_tags_1,   /* Same as above */
+       sizeof(asn_DEF_SIZE_and_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
+       { 0, 0, SIZE_and_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Neither-SIZE-nor-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Neither-SIZE-nor-FROM] >>> ***/
+
+typedef PER_Visible_t   Neither_SIZE_nor_FROM_t;
+
+/*** <<< FUNC-DECLS [Neither-SIZE-nor-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM;
+asn_struct_free_f Neither_SIZE_nor_FROM_free;
+asn_struct_print_f Neither_SIZE_nor_FROM_print;
+asn_constr_check_f Neither_SIZE_nor_FROM_constraint;
+ber_type_decoder_f Neither_SIZE_nor_FROM_decode_ber;
+der_type_encoder_f Neither_SIZE_nor_FROM_encode_der;
+xer_type_decoder_f Neither_SIZE_nor_FROM_decode_xer;
+xer_type_encoder_f Neither_SIZE_nor_FROM_encode_xer;
+
+/*** <<< CTABLES [Neither-SIZE-nor-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Neither-SIZE-nor-FROM] >>> ***/
+
+int
+Neither_SIZE_nor_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Neither-SIZE-nor-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Neither_SIZE_nor_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM = {
+       "Neither-SIZE-nor-FROM",
+       "Neither-SIZE-nor-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_Neither_SIZE_nor_FROM_tags_1,
+       sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
+               /sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
+       asn_DEF_Neither_SIZE_nor_FROM_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
+               /sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
+       { 0, 0, Neither_SIZE_nor_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-4] >>> ***/
+
+#include <UTF8String.h>
+
+/*** <<< TYPE-DECLS [Utf8-4] >>> ***/
+
+typedef UTF8String_t    Utf8_4_t;
+
+/*** <<< FUNC-DECLS [Utf8-4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_4;
+asn_struct_free_f Utf8_4_free;
+asn_struct_print_f Utf8_4_print;
+asn_constr_check_f Utf8_4_constraint;
+ber_type_decoder_f Utf8_4_decode_ber;
+der_type_encoder_f Utf8_4_encode_der;
+xer_type_decoder_f Utf8_4_decode_xer;
+xer_type_encoder_f Utf8_4_encode_xer;
+
+/*** <<< CTABLES [Utf8-4] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       if(UTF8String_length((const UTF8String_t *)sptr) < 0)
+               return -1; /* Alphabet (sic!) test failed. */
+       
+       return 0;
+}
+
+
+/*** <<< CODE [Utf8-4] >>> ***/
+
+int
+Utf8_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using UTF8String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Utf8-4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_4 = {
+       "Utf8-4",
+       "Utf8-4",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_4_tags_1,
+       sizeof(asn_DEF_Utf8_4_tags_1)
+               /sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_4_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_4_tags_1)
+               /sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
+       { 0, 0, Utf8_4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-3] >>> ***/
+
+#include "Utf8-2.h"
+
+/*** <<< TYPE-DECLS [Utf8-3] >>> ***/
+
+typedef Utf8_2_t        Utf8_3_t;
+
+/*** <<< FUNC-DECLS [Utf8-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_3;
+asn_struct_free_f Utf8_3_free;
+asn_struct_print_f Utf8_3_print;
+asn_constr_check_f Utf8_3_constraint;
+ber_type_decoder_f Utf8_3_decode_ber;
+der_type_encoder_f Utf8_3_encode_der;
+xer_type_decoder_f Utf8_3_decode_xer;
+xer_type_encoder_f Utf8_3_encode_xer;
+
+/*** <<< CTABLES [Utf8-3] >>> ***/
+
+static const int permitted_alphabet_table_1[128] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,       /*  ABCDEFGHIJKLMNO */
+16,17,18,19,20,21,22,23,24,25,26, 0, 0, 0, 0, 0,       /* PQRSTUVWXYZ      */
+ 0,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,       /*  abcdefghijklmno */
+42,43,44,45,46,47,48,49,50,51,52, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is UTF8String */
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(cv >= 0x80) return -1;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Utf8-3] >>> ***/
+
+int
+Utf8_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Utf8_2_t *st = (const Utf8_2_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size >= 1 && size <= 2)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Utf8_2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Utf8-3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_3 = {
+       "Utf8-3",
+       "Utf8-3",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_3_tags_1,
+       sizeof(asn_DEF_Utf8_3_tags_1)
+               /sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_3_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_3_tags_1)
+               /sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
+       { 0, 0, Utf8_3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-2] >>> ***/
+
+#include "Utf8-1.h"
+
+/*** <<< TYPE-DECLS [Utf8-2] >>> ***/
+
+typedef Utf8_1_t        Utf8_2_t;
+
+/*** <<< FUNC-DECLS [Utf8-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_2;
+asn_struct_free_f Utf8_2_free;
+asn_struct_print_f Utf8_2_print;
+asn_constr_check_f Utf8_2_constraint;
+ber_type_decoder_f Utf8_2_decode_ber;
+der_type_encoder_f Utf8_2_encode_der;
+xer_type_decoder_f Utf8_2_decode_xer;
+xer_type_encoder_f Utf8_2_encode_xer;
+
+/*** <<< CODE [Utf8-2] >>> ***/
+
+int
+Utf8_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Utf8_1_t *st = (const Utf8_1_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size >= 1 && size <= 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Utf8_1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Utf8-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_2 = {
+       "Utf8-2",
+       "Utf8-2",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_2_tags_1,
+       sizeof(asn_DEF_Utf8_2_tags_1)
+               /sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_2_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_2_tags_1)
+               /sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
+       { 0, 0, Utf8_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-1] >>> ***/
+
+#include <UTF8String.h>
+
+/*** <<< TYPE-DECLS [Utf8-1] >>> ***/
+
+typedef UTF8String_t    Utf8_1_t;
+
+/*** <<< FUNC-DECLS [Utf8-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_1;
+asn_struct_free_f Utf8_1_free;
+asn_struct_print_f Utf8_1_print;
+asn_constr_check_f Utf8_1_constraint;
+ber_type_decoder_f Utf8_1_decode_ber;
+der_type_encoder_f Utf8_1_encode_der;
+xer_type_decoder_f Utf8_1_decode_xer;
+xer_type_encoder_f Utf8_1_encode_xer;
+
+/*** <<< CODE [Utf8-1] >>> ***/
+
+/*
+ * This type is implemented using UTF8String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Utf8-1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_1 = {
+       "Utf8-1",
+       "Utf8-1",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_1_tags_1,
+       sizeof(asn_DEF_Utf8_1_tags_1)
+               /sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_1_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_1_tags_1)
+               /sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
+       { 0, 0, UTF8String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [VisibleIdentifier] >>> ***/
+
+#include "Identifier.h"
+
+/*** <<< TYPE-DECLS [VisibleIdentifier] >>> ***/
+
+typedef Identifier_t    VisibleIdentifier_t;
+
+/*** <<< FUNC-DECLS [VisibleIdentifier] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier;
+asn_struct_free_f VisibleIdentifier_free;
+asn_struct_print_f VisibleIdentifier_print;
+asn_constr_check_f VisibleIdentifier_constraint;
+ber_type_decoder_f VisibleIdentifier_decode_ber;
+der_type_encoder_f VisibleIdentifier_encode_der;
+xer_type_decoder_f VisibleIdentifier_decode_xer;
+xer_type_encoder_f VisibleIdentifier_encode_xer;
+
+/*** <<< CTABLES [VisibleIdentifier] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     $            */
+ 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 0, 0, 0, 0, 0,       /* 0123456789       */
+ 0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,       /*  ABCDEFGHIJKLMNO */
+27,28,29,30,31,32,33,34,35,36,37, 0, 0, 0, 0,38,       /* PQRSTUVWXYZ    _ */
+ 0,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,       /*  abcdefghijklmno */
+54,55,56,57,58,59,60,61,62,63,64, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [VisibleIdentifier] >>> ***/
+
+int
+VisibleIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Identifier_t *st = (const Identifier_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 32)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Identifier,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [VisibleIdentifier] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_VisibleIdentifier_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier = {
+       "VisibleIdentifier",
+       "VisibleIdentifier",
+       &asn_OP_VisibleString,
+       asn_DEF_VisibleIdentifier_tags_1,
+       sizeof(asn_DEF_VisibleIdentifier_tags_1)
+               /sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
+       asn_DEF_VisibleIdentifier_tags_1,       /* Same as above */
+       sizeof(asn_DEF_VisibleIdentifier_tags_1)
+               /sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
+       { 0, 0, VisibleIdentifier_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include "Int1.h"
+#include "Int4.h"
+#include <BOOLEAN.h>
+#include <ENUMERATED.h>
+#include <NULL.h>
+#include "Int5.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Sequence] >>> ***/
+
+typedef enum enum_c {
+       enum_c_one      = 1,
+       enum_c_two      = 2,
+       /*
+        * Enumeration is extensible
+        */
+       enum_c_three    = 3
+} e_enum_c;
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       Int1_t  *int1_c;        /* DEFAULT 3 */
+       Int4_t   int4;
+       Int4_t   int4_c;
+       BOOLEAN_t       *Bool;  /* DEFAULT 1 */
+       ENUMERATED_t     enum_c;
+       NULL_t  *null;  /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       Int5_t  *int5_c;        /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_enum_c_6;      // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[7];
+
+/*** <<< CODE [Sequence] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_int1_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int1_t *st = (const Int1_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_int4_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int4_t *st = (const Int4_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 5 && value <= 7)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_int5_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Int5_t *st = (const Int5_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value == 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+static int asn_DFL_2_cmp_3(const void *sptr) {
+       const Int1_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 3 */
+       long value;
+       if(asn_INTEGER2long(st, &value))
+               return -1;
+       return (value != 3);
+}
+static int asn_DFL_2_set_3(void **sptr) {
+       Int1_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 3 */
+       return asn_long2INTEGER(st, 3);
+}
+static int asn_DFL_5_cmp_1(const void *sptr) {
+       const BOOLEAN_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 1 */
+       return (*st != 1);
+}
+static int asn_DFL_5_set_1(void **sptr) {
+       BOOLEAN_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 1 */
+       *st = 1;
+       return 0;
+}
+static const asn_INTEGER_enum_map_t asn_MAP_enum_c_value2enum_6[] = {
+       { 1,    3,      "one" },
+       { 2,    3,      "two" },
+       { 3,    5,      "three" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_enum_c_enum2value_6[] = {
+       0,      /* one(1) */
+       2,      /* three(3) */
+       1       /* two(2) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_enum_c_specs_6 = {
+       asn_MAP_enum_c_value2enum_6,    /* "tag" => N; sorted by tag */
+       asn_MAP_enum_c_enum2value_6,    /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       3,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_enum_c_tags_6[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_enum_c_6 = {
+       "enum-c",
+       "enum-c",
+       &asn_OP_ENUMERATED,
+       asn_DEF_enum_c_tags_6,
+       sizeof(asn_DEF_enum_c_tags_6)
+               /sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
+       asn_DEF_enum_c_tags_6,  /* Same as above */
+       sizeof(asn_DEF_enum_c_tags_6)
+               /sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_enum_c_specs_6 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Sequence, int1_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_int1_c_constraint_1 },
+               .default_value_cmp = &asn_DFL_2_cmp_3,  /* Compare DEFAULT 3 */
+               .default_value_set = &asn_DFL_2_set_3,  /* Set DEFAULT 3 */
+               .name = "int1-c"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, int4),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Int4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int4"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, int4_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_int4_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "int4-c"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, Bool),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_5_cmp_1,  /* Compare DEFAULT 1 */
+               .default_value_set = &asn_DFL_5_set_1,  /* Set DEFAULT 1 */
+               .name = "bool"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, enum_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_enum_c_6,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "enum-c"
+               },
+       { ATF_POINTER, 2, offsetof(struct Sequence, null),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "null"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, int5_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_int5_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "int5-c"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, 0, 0 }, /* bool */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* int1-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* int4-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* int5-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 5, 0, 0 }, /* null */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* enum-c */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 } /* int4 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 7,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       6,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       7,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SequenceOf] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DECLS [SequenceOf] >>> ***/
+
+struct Sequence;
+
+/*** <<< TYPE-DECLS [SequenceOf] >>> ***/
+
+typedef struct SequenceOf {
+       A_SEQUENCE_OF(struct Sequence) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SequenceOf_t;
+
+/*** <<< FUNC-DECLS [SequenceOf] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SequenceOf;
+
+/*** <<< POST-INCLUDE [SequenceOf] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [SequenceOf] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_SequenceOf_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SequenceOf_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_SequenceOf_specs_1 = {
+       sizeof(struct SequenceOf),
+       offsetof(struct SequenceOf, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
+       "SequenceOf",
+       "SequenceOf",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_SequenceOf_tags_1,
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       asn_DEF_SequenceOf_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_SequenceOf_1,
+       1,      /* Single element */
+       &asn_SPC_SequenceOf_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum0] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [Enum0] >>> ***/
+
+typedef enum Enum0 {
+       Enum0_one       = 0,
+       Enum0_two       = 1
+} e_Enum0;
+
+/*** <<< TYPE-DECLS [Enum0] >>> ***/
+
+typedef ENUMERATED_t    Enum0_t;
+
+/*** <<< FUNC-DECLS [Enum0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum0;
+asn_struct_free_f Enum0_free;
+asn_struct_print_f Enum0_print;
+asn_constr_check_f Enum0_constraint;
+ber_type_decoder_f Enum0_decode_ber;
+der_type_encoder_f Enum0_encode_der;
+xer_type_decoder_f Enum0_decode_xer;
+xer_type_encoder_f Enum0_encode_xer;
+
+/*** <<< CODE [Enum0] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum0] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum0_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" }
+};
+static const unsigned int asn_MAP_Enum0_enum2value_1[] = {
+       0,      /* one(0) */
+       1       /* two(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum0_specs_1 = {
+       asn_MAP_Enum0_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum0_enum2value_1,     /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum0 = {
+       "Enum0",
+       "Enum0",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Enum0_tags_1,
+       sizeof(asn_DEF_Enum0_tags_1)
+               /sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
+       asn_DEF_Enum0_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum0_tags_1)
+               /sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum0_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum1] >>> ***/
+
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Enum1] >>> ***/
+
+typedef enum Enum1 {
+       Enum1_one       = 0,
+       Enum1_two       = 1
+} e_Enum1;
+
+/*** <<< TYPE-DECLS [Enum1] >>> ***/
+
+typedef long    Enum1_t;
+
+/*** <<< FUNC-DECLS [Enum1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum1;
+asn_struct_free_f Enum1_free;
+asn_struct_print_f Enum1_print;
+asn_constr_check_f Enum1_constraint;
+ber_type_decoder_f Enum1_decode_ber;
+der_type_encoder_f Enum1_encode_der;
+xer_type_decoder_f Enum1_decode_xer;
+xer_type_encoder_f Enum1_encode_xer;
+
+/*** <<< CODE [Enum1] >>> ***/
+
+int
+Enum1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Enum1] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum1_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" }
+};
+static const unsigned int asn_MAP_Enum1_enum2value_1[] = {
+       0,      /* one(0) */
+       1       /* two(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum1_specs_1 = {
+       asn_MAP_Enum1_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum1_enum2value_1,     /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum1 = {
+       "Enum1",
+       "Enum1",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_Enum1_tags_1,
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       asn_DEF_Enum1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       { 0, 0, Enum1_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum1_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Identifier] >>> ***/
+
+#include <VisibleString.h>
+
+/*** <<< TYPE-DECLS [Identifier] >>> ***/
+
+typedef VisibleString_t         Identifier_t;
+
+/*** <<< FUNC-DECLS [Identifier] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Identifier;
+asn_struct_free_f Identifier_free;
+asn_struct_print_f Identifier_print;
+asn_constr_check_f Identifier_constraint;
+ber_type_decoder_f Identifier_decode_ber;
+der_type_encoder_f Identifier_encode_der;
+xer_type_decoder_f Identifier_decode_xer;
+xer_type_encoder_f Identifier_encode_xer;
+
+/*** <<< CTABLES [Identifier] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     $            */
+ 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 0, 0, 0, 0, 0,       /* 0123456789       */
+ 0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,       /*  ABCDEFGHIJKLMNO */
+27,28,29,30,31,32,33,34,35,36,37, 0, 0, 0, 0,38,       /* PQRSTUVWXYZ    _ */
+ 0,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,       /*  abcdefghijklmno */
+54,55,56,57,58,59,60,61,62,63,64, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Identifier] >>> ***/
+
+int
+Identifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 32)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using VisibleString,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Identifier] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Identifier_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Identifier = {
+       "Identifier",
+       "Identifier",
+       &asn_OP_VisibleString,
+       asn_DEF_Identifier_tags_1,
+       sizeof(asn_DEF_Identifier_tags_1)
+               /sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
+       asn_DEF_Identifier_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Identifier_tags_1)
+               /sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
+       { 0, 0, Identifier_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define maxIdentifier (32)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..0bf4501
--- /dev/null
@@ -0,0 +1,2912 @@
+
+/*** <<< INCLUDES [Int1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [Int1] >>> ***/
+
+typedef long    Int1_t;
+
+/*** <<< FUNC-DECLS [Int1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Int1;
+asn_struct_free_f Int1_free;
+asn_struct_print_f Int1_print;
+asn_constr_check_f Int1_constraint;
+ber_type_decoder_f Int1_decode_ber;
+der_type_encoder_f Int1_encode_der;
+xer_type_decoder_f Int1_decode_xer;
+xer_type_encoder_f Int1_encode_xer;
+per_type_decoder_f Int1_decode_uper;
+per_type_encoder_f Int1_encode_uper;
+per_type_decoder_f Int1_decode_aper;
+per_type_encoder_f Int1_encode_aper;
+#define Int1_ten       ((Int1_t)10)
+
+/*** <<< CODE [Int1] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Int1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int1 = {
+       "Int1",
+       "Int1",
+       &asn_OP_NativeInteger,
+       asn_DEF_Int1_tags_1,
+       sizeof(asn_DEF_Int1_tags_1)
+               /sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
+       asn_DEF_Int1_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int1_tags_1)
+               /sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int2] >>> ***/
+
+#include "Int1.h"
+
+/*** <<< TYPE-DECLS [Int2] >>> ***/
+
+typedef Int1_t  Int2_t;
+
+/*** <<< FUNC-DECLS [Int2] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Int2_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Int2;
+asn_struct_free_f Int2_free;
+asn_struct_print_f Int2_print;
+asn_constr_check_f Int2_constraint;
+ber_type_decoder_f Int2_decode_ber;
+der_type_encoder_f Int2_encode_der;
+xer_type_decoder_f Int2_decode_xer;
+xer_type_encoder_f Int2_encode_xer;
+per_type_decoder_f Int2_decode_uper;
+per_type_encoder_f Int2_encode_uper;
+per_type_decoder_f Int2_decode_aper;
+per_type_encoder_f Int2_encode_aper;
+
+/*** <<< CODE [Int2] >>> ***/
+
+int
+Int2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               (void)value; /* Unused variable */
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using Int1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Int2] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Int2_constr_1 CC_NOTUSED = {
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (0..MAX) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Int2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int2 = {
+       "Int2",
+       "Int2",
+       &asn_OP_NativeInteger,
+       asn_DEF_Int2_tags_1,
+       sizeof(asn_DEF_Int2_tags_1)
+               /sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
+       asn_DEF_Int2_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int2_tags_1)
+               /sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Int2_constr_1, Int2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int3] >>> ***/
+
+#include "Int2.h"
+
+/*** <<< TYPE-DECLS [Int3] >>> ***/
+
+typedef Int2_t  Int3_t;
+
+/*** <<< FUNC-DECLS [Int3] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Int3_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Int3;
+asn_struct_free_f Int3_free;
+asn_struct_print_f Int3_print;
+asn_constr_check_f Int3_constraint;
+ber_type_decoder_f Int3_decode_ber;
+der_type_encoder_f Int3_encode_der;
+xer_type_decoder_f Int3_decode_xer;
+xer_type_encoder_f Int3_encode_xer;
+per_type_decoder_f Int3_decode_uper;
+per_type_encoder_f Int3_encode_uper;
+per_type_decoder_f Int3_decode_aper;
+per_type_encoder_f Int3_encode_aper;
+
+/*** <<< CODE [Int3] >>> ***/
+
+int
+Int3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 0 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Int3] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Int3_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       4,  4,  0,  10 }       /* (0..10) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Int3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int3 = {
+       "Int3",
+       "Int3",
+       &asn_OP_NativeInteger,
+       asn_DEF_Int3_tags_1,
+       sizeof(asn_DEF_Int3_tags_1)
+               /sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
+       asn_DEF_Int3_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int3_tags_1)
+               /sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Int3_constr_1, Int3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int4] >>> ***/
+
+#include "Int3.h"
+
+/*** <<< TYPE-DECLS [Int4] >>> ***/
+
+typedef Int3_t  Int4_t;
+
+/*** <<< FUNC-DECLS [Int4] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Int4_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Int4;
+asn_struct_free_f Int4_free;
+asn_struct_print_f Int4_print;
+asn_constr_check_f Int4_constraint;
+ber_type_decoder_f Int4_decode_ber;
+der_type_encoder_f Int4_encode_der;
+xer_type_decoder_f Int4_decode_xer;
+xer_type_encoder_f Int4_encode_xer;
+per_type_decoder_f Int4_decode_uper;
+per_type_encoder_f Int4_encode_uper;
+per_type_decoder_f Int4_decode_aper;
+per_type_encoder_f Int4_encode_aper;
+
+/*** <<< CODE [Int4] >>> ***/
+
+int
+Int4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int3,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Int4] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Int4_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  4,  4,  1,  10 }   /* (1..10,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Int4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int4 = {
+       "Int4",
+       "Int4",
+       &asn_OP_NativeInteger,
+       asn_DEF_Int4_tags_1,
+       sizeof(asn_DEF_Int4_tags_1)
+               /sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
+       asn_DEF_Int4_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int4_tags_1)
+               /sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Int4_constr_1, Int4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Int5] >>> ***/
+
+#include "Int4.h"
+
+/*** <<< TYPE-DECLS [Int5] >>> ***/
+
+typedef Int4_t  Int5_t;
+
+/*** <<< FUNC-DECLS [Int5] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Int5_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Int5;
+asn_struct_free_f Int5_free;
+asn_struct_print_f Int5_print;
+asn_constr_check_f Int5_constraint;
+ber_type_decoder_f Int5_decode_ber;
+der_type_encoder_f Int5_encode_der;
+xer_type_decoder_f Int5_decode_xer;
+xer_type_encoder_f Int5_encode_xer;
+per_type_decoder_f Int5_decode_uper;
+per_type_encoder_f Int5_encode_uper;
+per_type_decoder_f Int5_decode_aper;
+per_type_encoder_f Int5_encode_aper;
+
+/*** <<< CODE [Int5] >>> ***/
+
+int
+Int5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Int4,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Int5] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Int5_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       0,  0,  5,  5 }        /* (5..5) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Int5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Int5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Int5 = {
+       "Int5",
+       "Int5",
+       &asn_OP_NativeInteger,
+       asn_DEF_Int5_tags_1,
+       sizeof(asn_DEF_Int5_tags_1)
+               /sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
+       asn_DEF_Int5_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Int5_tags_1)
+               /sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Int5_constr_1, Int5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [ExtensibleExtensions] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [ExtensibleExtensions] >>> ***/
+
+typedef long    ExtensibleExtensions_t;
+
+/*** <<< FUNC-DECLS [ExtensibleExtensions] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions;
+asn_struct_free_f ExtensibleExtensions_free;
+asn_struct_print_f ExtensibleExtensions_print;
+asn_constr_check_f ExtensibleExtensions_constraint;
+ber_type_decoder_f ExtensibleExtensions_decode_ber;
+der_type_encoder_f ExtensibleExtensions_encode_der;
+xer_type_decoder_f ExtensibleExtensions_decode_xer;
+xer_type_encoder_f ExtensibleExtensions_encode_xer;
+per_type_decoder_f ExtensibleExtensions_decode_uper;
+per_type_encoder_f ExtensibleExtensions_encode_uper;
+per_type_decoder_f ExtensibleExtensions_decode_aper;
+per_type_encoder_f ExtensibleExtensions_encode_aper;
+
+/*** <<< CODE [ExtensibleExtensions] >>> ***/
+
+int
+ExtensibleExtensions_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 255)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [ExtensibleExtensions] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_ExtensibleExtensions_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  8,  8,  1,  255 }  /* (1..255,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [ExtensibleExtensions] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_ExtensibleExtensions_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions = {
+       "ExtensibleExtensions",
+       "ExtensibleExtensions",
+       &asn_OP_NativeInteger,
+       asn_DEF_ExtensibleExtensions_tags_1,
+       sizeof(asn_DEF_ExtensibleExtensions_tags_1)
+               /sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
+       asn_DEF_ExtensibleExtensions_tags_1,    /* Same as above */
+       sizeof(asn_DEF_ExtensibleExtensions_tags_1)
+               /sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_ExtensibleExtensions_constr_1, ExtensibleExtensions_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str1] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [Str1] >>> ***/
+
+typedef IA5String_t     Str1_t;
+
+/*** <<< FUNC-DECLS [Str1] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Str1_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Str1;
+asn_struct_free_f Str1_free;
+asn_struct_print_f Str1_print;
+asn_constr_check_f Str1_constraint;
+ber_type_decoder_f Str1_decode_ber;
+der_type_encoder_f Str1_encode_der;
+xer_type_decoder_f Str1_decode_xer;
+xer_type_encoder_f Str1_encode_xer;
+per_type_decoder_f Str1_decode_uper;
+per_type_encoder_f Str1_encode_uper;
+per_type_decoder_f Str1_decode_aper;
+per_type_encoder_f Str1_encode_aper;
+
+/*** <<< CODE [Str1] >>> ***/
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Str1] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Str1_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       7,  7,  0,  127 }      /* (0..127) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Str1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str1 = {
+       "Str1",
+       "Str1",
+       &asn_OP_IA5String,
+       asn_DEF_Str1_tags_1,
+       sizeof(asn_DEF_Str1_tags_1)
+               /sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
+       asn_DEF_Str1_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str1_tags_1)
+               /sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Str1_constr_1, IA5String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str2] >>> ***/
+
+#include "Str1.h"
+
+/*** <<< TYPE-DECLS [Str2] >>> ***/
+
+typedef Str1_t  Str2_t;
+
+/*** <<< FUNC-DECLS [Str2] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Str2_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Str2;
+asn_struct_free_f Str2_free;
+asn_struct_print_f Str2_print;
+asn_constr_check_f Str2_constraint;
+ber_type_decoder_f Str2_decode_ber;
+der_type_encoder_f Str2_encode_der;
+xer_type_decoder_f Str2_decode_xer;
+xer_type_encoder_f Str2_encode_xer;
+per_type_decoder_f Str2_decode_uper;
+per_type_encoder_f Str2_encode_uper;
+per_type_decoder_f Str2_decode_aper;
+per_type_encoder_f Str2_encode_aper;
+
+/*** <<< CTABLES [Str2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv <= 127)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str2] >>> ***/
+
+int
+Str2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Str1_t *st = (const Str1_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if(((size <= 20) || (size >= 25 && size <= 30))
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Str1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Str2] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Str2_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       7,  7,  0,  127 }      /* (0..127) */,
+       { APC_CONSTRAINED,       5,  5,  0,  30 }       /* (SIZE(0..30)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Str2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str2 = {
+       "Str2",
+       "Str2",
+       &asn_OP_IA5String,
+       asn_DEF_Str2_tags_1,
+       sizeof(asn_DEF_Str2_tags_1)
+               /sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
+       asn_DEF_Str2_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str2_tags_1)
+               /sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Str2_constr_1, Str2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str3] >>> ***/
+
+#include "Str2.h"
+
+/*** <<< TYPE-DECLS [Str3] >>> ***/
+
+typedef Str2_t  Str3_t;
+
+/*** <<< FUNC-DECLS [Str3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str3;
+asn_struct_free_f Str3_free;
+asn_struct_print_f Str3_print;
+asn_constr_check_f Str3_constraint;
+ber_type_decoder_f Str3_decode_ber;
+der_type_encoder_f Str3_encode_der;
+xer_type_decoder_f Str3_decode_xer;
+xer_type_encoder_f Str3_encode_xer;
+per_type_decoder_f Str3_decode_uper;
+per_type_encoder_f Str3_encode_uper;
+per_type_decoder_f Str3_decode_aper;
+per_type_encoder_f Str3_encode_aper;
+
+/*** <<< CTABLES [Str3] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*  ABC             */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     def          */
+};
+static const int permitted_alphabet_code2value_1[6] = {
+65,66,67,100,101,102,};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str3] >>> ***/
+
+int
+Str3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Str2_t *st = (const Str2_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if(((size >= 10 && size <= 20) || (size >= 25 && size <= 27))
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_Str3_1_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+               return -1;
+       return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_Str3_1_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+               return -1;
+       return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using Str2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Str3] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Str3_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  102 }     /* (65..102) */,
+       { APC_CONSTRAINED,       5,  5,  10,  27 }      /* (SIZE(10..27)) */,
+       asn_PER_MAP_Str3_1_v2c, /* Value to PER code map */
+       asn_PER_MAP_Str3_1_c2v  /* PER code to value map */
+};
+
+/*** <<< STAT-DEFS [Str3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str3 = {
+       "Str3",
+       "Str3",
+       &asn_OP_IA5String,
+       asn_DEF_Str3_tags_1,
+       sizeof(asn_DEF_Str3_tags_1)
+               /sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
+       asn_DEF_Str3_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str3_tags_1)
+               /sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Str3_constr_1, Str3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Str4] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [Str4] >>> ***/
+
+typedef IA5String_t     Str4_t;
+
+/*** <<< FUNC-DECLS [Str4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Str4;
+asn_struct_free_f Str4_free;
+asn_struct_print_f Str4_print;
+asn_constr_check_f Str4_constraint;
+ber_type_decoder_f Str4_decode_ber;
+der_type_encoder_f Str4_encode_der;
+xer_type_decoder_f Str4_decode_xer;
+xer_type_encoder_f Str4_encode_xer;
+per_type_decoder_f Str4_decode_uper;
+per_type_encoder_f Str4_encode_uper;
+per_type_decoder_f Str4_decode_aper;
+per_type_encoder_f Str4_encode_aper;
+
+/*** <<< CTABLES [Str4] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv <= 127)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Str4] >>> ***/
+
+int
+Str4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Str4] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Str4_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       7,  7,  0,  127 }      /* (0..127) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Str4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Str4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Str4 = {
+       "Str4",
+       "Str4",
+       &asn_OP_IA5String,
+       asn_DEF_Str4_tags_1,
+       sizeof(asn_DEF_Str4_tags_1)
+               /sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
+       asn_DEF_Str4_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Str4_tags_1)
+               /sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Str4_constr_1, Str4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [PER-Visible] >>> ***/
+
+#include <IA5String.h>
+
+/*** <<< TYPE-DECLS [PER-Visible] >>> ***/
+
+typedef IA5String_t     PER_Visible_t;
+
+/*** <<< FUNC-DECLS [PER-Visible] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_PER_Visible_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_PER_Visible;
+asn_struct_free_f PER_Visible_free;
+asn_struct_print_f PER_Visible_print;
+asn_constr_check_f PER_Visible_constraint;
+ber_type_decoder_f PER_Visible_decode_ber;
+der_type_encoder_f PER_Visible_encode_der;
+xer_type_decoder_f PER_Visible_decode_xer;
+xer_type_encoder_f PER_Visible_encode_xer;
+per_type_decoder_f PER_Visible_decode_uper;
+per_type_encoder_f PER_Visible_encode_uper;
+per_type_decoder_f PER_Visible_decode_aper;
+per_type_encoder_f PER_Visible_encode_aper;
+
+/*** <<< CTABLES [PER-Visible] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [PER-Visible] >>> ***/
+
+int
+PER_Visible_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using IA5String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [PER-Visible] >>> ***/
+
+asn_per_constraints_t asn_PER_type_PER_Visible_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  70 }      /* (65..70) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [PER-Visible] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PER_Visible_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PER_Visible = {
+       "PER-Visible",
+       "PER-Visible",
+       &asn_OP_IA5String,
+       asn_DEF_PER_Visible_tags_1,
+       sizeof(asn_DEF_PER_Visible_tags_1)
+               /sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
+       asn_DEF_PER_Visible_tags_1,     /* Same as above */
+       sizeof(asn_DEF_PER_Visible_tags_1)
+               /sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_PER_Visible_constr_1, PER_Visible_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [PER-Visible-2] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [PER-Visible-2] >>> ***/
+
+typedef PER_Visible_t   PER_Visible_2_t;
+
+/*** <<< FUNC-DECLS [PER-Visible-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PER_Visible_2;
+asn_struct_free_f PER_Visible_2_free;
+asn_struct_print_f PER_Visible_2_print;
+asn_constr_check_f PER_Visible_2_constraint;
+ber_type_decoder_f PER_Visible_2_decode_ber;
+der_type_encoder_f PER_Visible_2_encode_der;
+xer_type_decoder_f PER_Visible_2_decode_xer;
+xer_type_encoder_f PER_Visible_2_encode_xer;
+per_type_decoder_f PER_Visible_2_decode_uper;
+per_type_encoder_f PER_Visible_2_encode_uper;
+per_type_decoder_f PER_Visible_2_decode_aper;
+per_type_encoder_f PER_Visible_2_encode_aper;
+
+/*** <<< CTABLES [PER-Visible-2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 69 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [PER-Visible-2] >>> ***/
+
+int
+PER_Visible_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [PER-Visible-2] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_PER_Visible_2_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  69,  70 }      /* (69..70) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [PER-Visible-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_PER_Visible_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_PER_Visible_2 = {
+       "PER-Visible-2",
+       "PER-Visible-2",
+       &asn_OP_IA5String,
+       asn_DEF_PER_Visible_2_tags_1,
+       sizeof(asn_DEF_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
+       asn_DEF_PER_Visible_2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_PER_Visible_2_constr_1, PER_Visible_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-1] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-1] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_1_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1;
+asn_struct_free_f Not_PER_Visible_1_free;
+asn_struct_print_f Not_PER_Visible_1_print;
+asn_constr_check_f Not_PER_Visible_1_constraint;
+ber_type_decoder_f Not_PER_Visible_1_decode_ber;
+der_type_encoder_f Not_PER_Visible_1_encode_der;
+xer_type_decoder_f Not_PER_Visible_1_decode_xer;
+xer_type_encoder_f Not_PER_Visible_1_encode_xer;
+per_type_decoder_f Not_PER_Visible_1_decode_uper;
+per_type_encoder_f Not_PER_Visible_1_encode_uper;
+per_type_decoder_f Not_PER_Visible_1_decode_aper;
+per_type_encoder_f Not_PER_Visible_1_encode_aper;
+
+/*** <<< CTABLES [Not-PER-Visible-1] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-1] >>> ***/
+
+int
+Not_PER_Visible_1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Not-PER-Visible-1] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Not_PER_Visible_1_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  70 }      /* (65..70) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Not-PER-Visible-1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1 = {
+       "Not-PER-Visible-1",
+       "Not-PER-Visible-1",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_1_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_1_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Not_PER_Visible_1_constr_1, Not_PER_Visible_1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-2] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-2] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_2_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2;
+asn_struct_free_f Not_PER_Visible_2_free;
+asn_struct_print_f Not_PER_Visible_2_print;
+asn_constr_check_f Not_PER_Visible_2_constraint;
+ber_type_decoder_f Not_PER_Visible_2_decode_ber;
+der_type_encoder_f Not_PER_Visible_2_encode_der;
+xer_type_decoder_f Not_PER_Visible_2_decode_xer;
+xer_type_encoder_f Not_PER_Visible_2_encode_xer;
+per_type_decoder_f Not_PER_Visible_2_decode_uper;
+per_type_encoder_f Not_PER_Visible_2_encode_uper;
+per_type_decoder_f Not_PER_Visible_2_decode_aper;
+per_type_encoder_f Not_PER_Visible_2_encode_aper;
+
+/*** <<< CTABLES [Not-PER-Visible-2] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 66)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-2] >>> ***/
+
+int
+Not_PER_Visible_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Not-PER-Visible-2] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Not_PER_Visible_2_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Not-PER-Visible-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2 = {
+       "Not-PER-Visible-2",
+       "Not-PER-Visible-2",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_2_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_2_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Not_PER_Visible_2_constr_1, Not_PER_Visible_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Not-PER-Visible-3] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Not-PER-Visible-3] >>> ***/
+
+typedef PER_Visible_t   Not_PER_Visible_3_t;
+
+/*** <<< FUNC-DECLS [Not-PER-Visible-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3;
+asn_struct_free_f Not_PER_Visible_3_free;
+asn_struct_print_f Not_PER_Visible_3_print;
+asn_constr_check_f Not_PER_Visible_3_constraint;
+ber_type_decoder_f Not_PER_Visible_3_decode_ber;
+der_type_encoder_f Not_PER_Visible_3_encode_der;
+xer_type_decoder_f Not_PER_Visible_3_decode_xer;
+xer_type_encoder_f Not_PER_Visible_3_encode_xer;
+per_type_decoder_f Not_PER_Visible_3_decode_uper;
+per_type_encoder_f Not_PER_Visible_3_encode_uper;
+per_type_decoder_f Not_PER_Visible_3_decode_aper;
+per_type_encoder_f Not_PER_Visible_3_encode_aper;
+
+/*** <<< CTABLES [Not-PER-Visible-3] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 66)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Not-PER-Visible-3] >>> ***/
+
+int
+Not_PER_Visible_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Not-PER-Visible-3] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Not_PER_Visible_3_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Not-PER-Visible-3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Not_PER_Visible_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3 = {
+       "Not-PER-Visible-3",
+       "Not-PER-Visible-3",
+       &asn_OP_IA5String,
+       asn_DEF_Not_PER_Visible_3_tags_1,
+       sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
+       asn_DEF_Not_PER_Visible_3_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
+               /sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Not_PER_Visible_3_constr_1, Not_PER_Visible_3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [SIZE-but-not-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [SIZE-but-not-FROM] >>> ***/
+
+typedef PER_Visible_t   SIZE_but_not_FROM_t;
+
+/*** <<< FUNC-DECLS [SIZE-but-not-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM;
+asn_struct_free_f SIZE_but_not_FROM_free;
+asn_struct_print_f SIZE_but_not_FROM_print;
+asn_constr_check_f SIZE_but_not_FROM_constraint;
+ber_type_decoder_f SIZE_but_not_FROM_decode_ber;
+der_type_encoder_f SIZE_but_not_FROM_encode_der;
+xer_type_decoder_f SIZE_but_not_FROM_decode_xer;
+xer_type_encoder_f SIZE_but_not_FROM_encode_xer;
+per_type_decoder_f SIZE_but_not_FROM_decode_uper;
+per_type_encoder_f SIZE_but_not_FROM_encode_uper;
+per_type_decoder_f SIZE_but_not_FROM_decode_aper;
+per_type_encoder_f SIZE_but_not_FROM_encode_aper;
+
+/*** <<< CTABLES [SIZE-but-not-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 68)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [SIZE-but-not-FROM] >>> ***/
+
+int
+SIZE_but_not_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 4)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [SIZE-but-not-FROM] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_SIZE_but_not_FROM_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_CONSTRAINED,       2,  2,  1,  4 }        /* (SIZE(1..4)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [SIZE-but-not-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SIZE_but_not_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM = {
+       "SIZE-but-not-FROM",
+       "SIZE-but-not-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_SIZE_but_not_FROM_tags_1,
+       sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
+       asn_DEF_SIZE_but_not_FROM_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_SIZE_but_not_FROM_constr_1, SIZE_but_not_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [SIZE-and-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [SIZE-and-FROM] >>> ***/
+
+typedef PER_Visible_t   SIZE_and_FROM_t;
+
+/*** <<< FUNC-DECLS [SIZE-and-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM;
+asn_struct_free_f SIZE_and_FROM_free;
+asn_struct_print_f SIZE_and_FROM_print;
+asn_constr_check_f SIZE_and_FROM_constraint;
+ber_type_decoder_f SIZE_and_FROM_decode_ber;
+der_type_encoder_f SIZE_and_FROM_encode_der;
+xer_type_decoder_f SIZE_and_FROM_decode_xer;
+xer_type_encoder_f SIZE_and_FROM_encode_xer;
+per_type_decoder_f SIZE_and_FROM_decode_uper;
+per_type_encoder_f SIZE_and_FROM_encode_uper;
+per_type_decoder_f SIZE_and_FROM_decode_aper;
+per_type_encoder_f SIZE_and_FROM_encode_aper;
+
+/*** <<< CTABLES [SIZE-and-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 68)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [SIZE-and-FROM] >>> ***/
+
+int
+SIZE_and_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 4)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [SIZE-and-FROM] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_SIZE_and_FROM_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       2,  2,  65,  68 }      /* (65..68) */,
+       { APC_CONSTRAINED,       2,  2,  1,  4 }        /* (SIZE(1..4)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [SIZE-and-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_SIZE_and_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM = {
+       "SIZE-and-FROM",
+       "SIZE-and-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_SIZE_and_FROM_tags_1,
+       sizeof(asn_DEF_SIZE_and_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
+       asn_DEF_SIZE_and_FROM_tags_1,   /* Same as above */
+       sizeof(asn_DEF_SIZE_and_FROM_tags_1)
+               /sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_SIZE_and_FROM_constr_1, SIZE_and_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Neither-SIZE-nor-FROM] >>> ***/
+
+#include "PER-Visible.h"
+
+/*** <<< TYPE-DECLS [Neither-SIZE-nor-FROM] >>> ***/
+
+typedef PER_Visible_t   Neither_SIZE_nor_FROM_t;
+
+/*** <<< FUNC-DECLS [Neither-SIZE-nor-FROM] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM;
+asn_struct_free_f Neither_SIZE_nor_FROM_free;
+asn_struct_print_f Neither_SIZE_nor_FROM_print;
+asn_constr_check_f Neither_SIZE_nor_FROM_constraint;
+ber_type_decoder_f Neither_SIZE_nor_FROM_decode_ber;
+der_type_encoder_f Neither_SIZE_nor_FROM_encode_der;
+xer_type_decoder_f Neither_SIZE_nor_FROM_decode_xer;
+xer_type_encoder_f Neither_SIZE_nor_FROM_encode_xer;
+per_type_decoder_f Neither_SIZE_nor_FROM_decode_uper;
+per_type_encoder_f Neither_SIZE_nor_FROM_encode_uper;
+per_type_decoder_f Neither_SIZE_nor_FROM_decode_aper;
+per_type_encoder_f Neither_SIZE_nor_FROM_encode_aper;
+
+/*** <<< CTABLES [Neither-SIZE-nor-FROM] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 70)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Neither-SIZE-nor-FROM] >>> ***/
+
+int
+Neither_SIZE_nor_FROM_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const PER_Visible_t *st = (const PER_Visible_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using PER_Visible,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Neither-SIZE-nor-FROM] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Neither_SIZE_nor_FROM_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       3,  3,  65,  70 }      /* (65..70) */,
+       { APC_SEMI_CONSTRAINED, -1, -1,  0,  0 }        /* (SIZE(0..MAX)) */,
+       0, 0    /* No PER character map necessary */
+};
+
+/*** <<< STAT-DEFS [Neither-SIZE-nor-FROM] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Neither_SIZE_nor_FROM_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (22 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM = {
+       "Neither-SIZE-nor-FROM",
+       "Neither-SIZE-nor-FROM",
+       &asn_OP_IA5String,
+       asn_DEF_Neither_SIZE_nor_FROM_tags_1,
+       sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
+               /sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
+       asn_DEF_Neither_SIZE_nor_FROM_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
+               /sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Neither_SIZE_nor_FROM_constr_1, Neither_SIZE_nor_FROM_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-4] >>> ***/
+
+#include <UTF8String.h>
+
+/*** <<< TYPE-DECLS [Utf8-4] >>> ***/
+
+typedef UTF8String_t    Utf8_4_t;
+
+/*** <<< FUNC-DECLS [Utf8-4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_4;
+asn_struct_free_f Utf8_4_free;
+asn_struct_print_f Utf8_4_print;
+asn_constr_check_f Utf8_4_constraint;
+ber_type_decoder_f Utf8_4_decode_ber;
+der_type_encoder_f Utf8_4_encode_der;
+xer_type_decoder_f Utf8_4_decode_xer;
+xer_type_encoder_f Utf8_4_encode_xer;
+per_type_decoder_f Utf8_4_decode_uper;
+per_type_encoder_f Utf8_4_encode_uper;
+per_type_decoder_f Utf8_4_decode_aper;
+per_type_encoder_f Utf8_4_encode_aper;
+
+/*** <<< CTABLES [Utf8-4] >>> ***/
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       if(UTF8String_length((const UTF8String_t *)sptr) < 0)
+               return -1; /* Alphabet (sic!) test failed. */
+       
+       return 0;
+}
+
+
+/*** <<< CODE [Utf8-4] >>> ***/
+
+int
+Utf8_4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using UTF8String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Utf8-4] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Utf8_4_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Utf8-4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_4 = {
+       "Utf8-4",
+       "Utf8-4",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_4_tags_1,
+       sizeof(asn_DEF_Utf8_4_tags_1)
+               /sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_4_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_4_tags_1)
+               /sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Utf8_4_constr_1, Utf8_4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-3] >>> ***/
+
+#include "Utf8-2.h"
+
+/*** <<< TYPE-DECLS [Utf8-3] >>> ***/
+
+typedef Utf8_2_t        Utf8_3_t;
+
+/*** <<< FUNC-DECLS [Utf8-3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_3;
+asn_struct_free_f Utf8_3_free;
+asn_struct_print_f Utf8_3_print;
+asn_constr_check_f Utf8_3_constraint;
+ber_type_decoder_f Utf8_3_decode_ber;
+der_type_encoder_f Utf8_3_encode_der;
+xer_type_decoder_f Utf8_3_decode_xer;
+xer_type_encoder_f Utf8_3_encode_xer;
+per_type_decoder_f Utf8_3_decode_uper;
+per_type_encoder_f Utf8_3_encode_uper;
+per_type_decoder_f Utf8_3_decode_aper;
+per_type_encoder_f Utf8_3_encode_aper;
+
+/*** <<< CTABLES [Utf8-3] >>> ***/
+
+static const int permitted_alphabet_table_1[128] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,       /*  ABCDEFGHIJKLMNO */
+16,17,18,19,20,21,22,23,24,25,26, 0, 0, 0, 0, 0,       /* PQRSTUVWXYZ      */
+ 0,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,       /*  abcdefghijklmno */
+42,43,44,45,46,47,48,49,50,51,52, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is UTF8String */
+       const UTF8String_t *st = (const UTF8String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(cv >= 0x80) return -1;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Utf8-3] >>> ***/
+
+int
+Utf8_3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Utf8_2_t *st = (const Utf8_2_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size >= 1 && size <= 2)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Utf8_2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Utf8-3] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Utf8_3_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Utf8-3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_3 = {
+       "Utf8-3",
+       "Utf8-3",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_3_tags_1,
+       sizeof(asn_DEF_Utf8_3_tags_1)
+               /sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_3_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_3_tags_1)
+               /sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Utf8_3_constr_1, Utf8_3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-2] >>> ***/
+
+#include "Utf8-1.h"
+
+/*** <<< TYPE-DECLS [Utf8-2] >>> ***/
+
+typedef Utf8_1_t        Utf8_2_t;
+
+/*** <<< FUNC-DECLS [Utf8-2] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Utf8_2_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_2;
+asn_struct_free_f Utf8_2_free;
+asn_struct_print_f Utf8_2_print;
+asn_constr_check_f Utf8_2_constraint;
+ber_type_decoder_f Utf8_2_decode_ber;
+der_type_encoder_f Utf8_2_encode_der;
+xer_type_decoder_f Utf8_2_decode_xer;
+xer_type_encoder_f Utf8_2_encode_xer;
+per_type_decoder_f Utf8_2_decode_uper;
+per_type_encoder_f Utf8_2_encode_uper;
+per_type_decoder_f Utf8_2_decode_aper;
+per_type_encoder_f Utf8_2_encode_aper;
+
+/*** <<< CODE [Utf8-2] >>> ***/
+
+int
+Utf8_2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Utf8_1_t *st = (const Utf8_1_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = UTF8String_length(st);
+       if((ssize_t)size < 0) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: UTF-8: broken encoding (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((size >= 1 && size <= 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using Utf8_1,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Utf8-2] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Utf8_2_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Utf8-2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_2 = {
+       "Utf8-2",
+       "Utf8-2",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_2_tags_1,
+       sizeof(asn_DEF_Utf8_2_tags_1)
+               /sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_2_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_2_tags_1)
+               /sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Utf8_2_constr_1, Utf8_2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Utf8-1] >>> ***/
+
+#include <UTF8String.h>
+
+/*** <<< TYPE-DECLS [Utf8-1] >>> ***/
+
+typedef UTF8String_t    Utf8_1_t;
+
+/*** <<< FUNC-DECLS [Utf8-1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Utf8_1;
+asn_struct_free_f Utf8_1_free;
+asn_struct_print_f Utf8_1_print;
+asn_constr_check_f Utf8_1_constraint;
+ber_type_decoder_f Utf8_1_decode_ber;
+der_type_encoder_f Utf8_1_encode_der;
+xer_type_decoder_f Utf8_1_decode_xer;
+xer_type_encoder_f Utf8_1_encode_xer;
+per_type_decoder_f Utf8_1_decode_uper;
+per_type_encoder_f Utf8_1_encode_uper;
+per_type_decoder_f Utf8_1_decode_aper;
+per_type_encoder_f Utf8_1_encode_aper;
+
+/*** <<< CODE [Utf8-1] >>> ***/
+
+/*
+ * This type is implemented using UTF8String,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [Utf8-1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Utf8_1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (12 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Utf8_1 = {
+       "Utf8-1",
+       "Utf8-1",
+       &asn_OP_UTF8String,
+       asn_DEF_Utf8_1_tags_1,
+       sizeof(asn_DEF_Utf8_1_tags_1)
+               /sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
+       asn_DEF_Utf8_1_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Utf8_1_tags_1)
+               /sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
+       { 0, 0, UTF8String_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [VisibleIdentifier] >>> ***/
+
+#include "Identifier.h"
+
+/*** <<< TYPE-DECLS [VisibleIdentifier] >>> ***/
+
+typedef Identifier_t    VisibleIdentifier_t;
+
+/*** <<< FUNC-DECLS [VisibleIdentifier] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier;
+asn_struct_free_f VisibleIdentifier_free;
+asn_struct_print_f VisibleIdentifier_print;
+asn_constr_check_f VisibleIdentifier_constraint;
+ber_type_decoder_f VisibleIdentifier_decode_ber;
+der_type_encoder_f VisibleIdentifier_encode_der;
+xer_type_decoder_f VisibleIdentifier_decode_xer;
+xer_type_encoder_f VisibleIdentifier_encode_xer;
+per_type_decoder_f VisibleIdentifier_decode_uper;
+per_type_encoder_f VisibleIdentifier_encode_uper;
+per_type_decoder_f VisibleIdentifier_decode_aper;
+per_type_encoder_f VisibleIdentifier_encode_aper;
+
+/*** <<< CTABLES [VisibleIdentifier] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     $            */
+ 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 0, 0, 0, 0, 0,       /* 0123456789       */
+ 0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,       /*  ABCDEFGHIJKLMNO */
+27,28,29,30,31,32,33,34,35,36,37, 0, 0, 0, 0,38,       /* PQRSTUVWXYZ    _ */
+ 0,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,       /*  abcdefghijklmno */
+54,55,56,57,58,59,60,61,62,63,64, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+static const int permitted_alphabet_code2value_1[64] = {
+36,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,
+70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,
+86,87,88,89,90,95,97,98,99,100,101,102,103,104,105,106,
+107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,
+};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [VisibleIdentifier] >>> ***/
+
+int
+VisibleIdentifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const Identifier_t *st = (const Identifier_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 32)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_VisibleIdentifier_1_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+               return -1;
+       return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_VisibleIdentifier_1_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+               return -1;
+       return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using Identifier,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [VisibleIdentifier] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_VisibleIdentifier_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       6,  6,  36,  122 }     /* (36..122) */,
+       { APC_CONSTRAINED,       5,  5,  1,  32 }       /* (SIZE(1..32)) */,
+       asn_PER_MAP_VisibleIdentifier_1_v2c,    /* Value to PER code map */
+       asn_PER_MAP_VisibleIdentifier_1_c2v     /* PER code to value map */
+};
+
+/*** <<< STAT-DEFS [VisibleIdentifier] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_VisibleIdentifier_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier = {
+       "VisibleIdentifier",
+       "VisibleIdentifier",
+       &asn_OP_VisibleString,
+       asn_DEF_VisibleIdentifier_tags_1,
+       sizeof(asn_DEF_VisibleIdentifier_tags_1)
+               /sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
+       asn_DEF_VisibleIdentifier_tags_1,       /* Same as above */
+       sizeof(asn_DEF_VisibleIdentifier_tags_1)
+               /sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_VisibleIdentifier_constr_1, VisibleIdentifier_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include "Int1.h"
+#include "Int4.h"
+#include <BOOLEAN.h>
+#include <NativeEnumerated.h>
+#include <NULL.h>
+#include "Int5.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Sequence] >>> ***/
+
+typedef enum enum_c {
+       enum_c_one      = 1,
+       enum_c_two      = 2,
+       /*
+        * Enumeration is extensible
+        */
+       enum_c_three    = 3
+} e_enum_c;
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       Int1_t  *int1_c;        /* DEFAULT 3 */
+       Int4_t   int4;
+       Int4_t   int4_c;
+       BOOLEAN_t       *Bool;  /* DEFAULT 1 */
+       long     enum_c;
+       NULL_t  *null;  /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       Int5_t  *int5_c;        /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_enum_c_6;      // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[7];
+
+/*** <<< CODE [Sequence] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+static int
+memb_int1_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_int4_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 5 && value <= 7)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_int5_c_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 5)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< CTDEFS [Sequence] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_enum_c_constr_6 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  1,  1,  0,  1 }    /* (0..1,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_int1_c_constr_2 CC_NOTUSED = {
+       { APC_SEMI_CONSTRAINED, -1, -1, -2,  0 }        /* (-2..MAX) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_int4_c_constr_4 CC_NOTUSED = {
+       { APC_CONSTRAINED,       2,  2,  5,  7 }        /* (5..7) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_int5_c_constr_13 CC_NOTUSED = {
+       { APC_CONSTRAINED,       0,  0,  5,  5 }        /* (5..5) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+static int asn_DFL_2_cmp_3(const void *sptr) {
+       const Int1_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 3 */
+       return (*st != 3);
+}
+static int asn_DFL_2_set_3(void **sptr) {
+       Int1_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 3 */
+       *st = 3;
+       return 0;
+}
+static int asn_DFL_5_cmp_1(const void *sptr) {
+       const BOOLEAN_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 1 */
+       return (*st != 1);
+}
+static int asn_DFL_5_set_1(void **sptr) {
+       BOOLEAN_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 1 */
+       *st = 1;
+       return 0;
+}
+static const asn_INTEGER_enum_map_t asn_MAP_enum_c_value2enum_6[] = {
+       { 1,    3,      "one" },
+       { 2,    3,      "two" },
+       { 3,    5,      "three" }
+       /* This list is extensible */
+};
+static const unsigned int asn_MAP_enum_c_enum2value_6[] = {
+       0,      /* one(1) */
+       2,      /* three(3) */
+       1       /* two(2) */
+       /* This list is extensible */
+};
+static const asn_INTEGER_specifics_t asn_SPC_enum_c_specs_6 = {
+       asn_MAP_enum_c_value2enum_6,    /* "tag" => N; sorted by tag */
+       asn_MAP_enum_c_enum2value_6,    /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       3,      /* Extensions before this member */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_enum_c_tags_6[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_enum_c_6 = {
+       "enum-c",
+       "enum-c",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_enum_c_tags_6,
+       sizeof(asn_DEF_enum_c_tags_6)
+               /sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
+       asn_DEF_enum_c_tags_6,  /* Same as above */
+       sizeof(asn_DEF_enum_c_tags_6)
+               /sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
+       { 0, &asn_PER_type_enum_c_constr_6, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_enum_c_specs_6 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_POINTER, 1, offsetof(struct Sequence, int1_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_int1_c_constr_2, .general_constraints =  memb_int1_c_constraint_1 },
+               .default_value_cmp = &asn_DFL_2_cmp_3,  /* Compare DEFAULT 3 */
+               .default_value_set = &asn_DFL_2_set_3,  /* Set DEFAULT 3 */
+               .name = "int1-c"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, int4),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Int4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int4"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, int4_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_int4_c_constr_4, .general_constraints =  memb_int4_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "int4-c"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, Bool),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_5_cmp_1,  /* Compare DEFAULT 1 */
+               .default_value_set = &asn_DFL_5_set_1,  /* Set DEFAULT 1 */
+               .name = "bool"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, enum_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_enum_c_6,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "enum-c"
+               },
+       { ATF_POINTER, 2, offsetof(struct Sequence, null),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "null"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, int5_c),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Int5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = &asn_PER_memb_int5_c_constr_13, .general_constraints =  memb_int5_c_constraint_1 },
+               0, 0, /* No default value */
+               .name = "int5-c"
+               },
+};
+static const int asn_MAP_Sequence_oms_1[] = { 0, 3, 5, 6 };
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, 0, 0 }, /* bool */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 2 }, /* int1-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, -1, 1 }, /* int4-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 6, -2, 0 }, /* int5-c */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 5, 0, 0 }, /* null */
+    { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), 4, 0, 0 }, /* enum-c */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 } /* int4 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 7,      /* Count of tags in the map */
+       asn_MAP_Sequence_oms_1, /* Optional members */
+       3, 1,   /* Root/Additions */
+       6,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       7,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SequenceOf] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< FWD-DECLS [SequenceOf] >>> ***/
+
+struct Sequence;
+
+/*** <<< TYPE-DECLS [SequenceOf] >>> ***/
+
+typedef struct SequenceOf {
+       A_SEQUENCE_OF(struct Sequence) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SequenceOf_t;
+
+/*** <<< FUNC-DECLS [SequenceOf] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SequenceOf;
+
+/*** <<< POST-INCLUDE [SequenceOf] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< CTDEFS [SequenceOf] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_SequenceOf_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_CONSTRAINED,       1,  1,  1,  2 }        /* (SIZE(1..2)) */,
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [SequenceOf] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_SequenceOf_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SequenceOf_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_SequenceOf_specs_1 = {
+       sizeof(struct SequenceOf),
+       offsetof(struct SequenceOf, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
+       "SequenceOf",
+       "SequenceOf",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_SequenceOf_tags_1,
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       asn_DEF_SequenceOf_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_SequenceOf_constr_1, SEQUENCE_OF_constraint },
+       asn_MBR_SequenceOf_1,
+       1,      /* Single element */
+       &asn_SPC_SequenceOf_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum0] >>> ***/
+
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Enum0] >>> ***/
+
+typedef enum Enum0 {
+       Enum0_one       = 0,
+       Enum0_two       = 1
+} e_Enum0;
+
+/*** <<< TYPE-DECLS [Enum0] >>> ***/
+
+typedef long    Enum0_t;
+
+/*** <<< FUNC-DECLS [Enum0] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum0;
+asn_struct_free_f Enum0_free;
+asn_struct_print_f Enum0_print;
+asn_constr_check_f Enum0_constraint;
+ber_type_decoder_f Enum0_decode_ber;
+der_type_encoder_f Enum0_encode_der;
+xer_type_decoder_f Enum0_decode_xer;
+xer_type_encoder_f Enum0_encode_xer;
+per_type_decoder_f Enum0_decode_uper;
+per_type_encoder_f Enum0_encode_uper;
+per_type_decoder_f Enum0_decode_aper;
+per_type_encoder_f Enum0_encode_aper;
+
+/*** <<< CODE [Enum0] >>> ***/
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Enum0] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Enum0_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  0,  1 }        /* (0..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Enum0] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum0_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" }
+};
+static const unsigned int asn_MAP_Enum0_enum2value_1[] = {
+       0,      /* one(0) */
+       1       /* two(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum0_specs_1 = {
+       asn_MAP_Enum0_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum0_enum2value_1,     /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum0 = {
+       "Enum0",
+       "Enum0",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_Enum0_tags_1,
+       sizeof(asn_DEF_Enum0_tags_1)
+               /sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
+       asn_DEF_Enum0_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum0_tags_1)
+               /sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Enum0_constr_1, NativeEnumerated_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum0_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Enum1] >>> ***/
+
+#include <NativeEnumerated.h>
+
+/*** <<< DEPS [Enum1] >>> ***/
+
+typedef enum Enum1 {
+       Enum1_one       = 0,
+       Enum1_two       = 1
+} e_Enum1;
+
+/*** <<< TYPE-DECLS [Enum1] >>> ***/
+
+typedef long    Enum1_t;
+
+/*** <<< FUNC-DECLS [Enum1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Enum1;
+asn_struct_free_f Enum1_free;
+asn_struct_print_f Enum1_print;
+asn_constr_check_f Enum1_constraint;
+ber_type_decoder_f Enum1_decode_ber;
+der_type_encoder_f Enum1_encode_der;
+xer_type_decoder_f Enum1_decode_xer;
+xer_type_encoder_f Enum1_encode_xer;
+per_type_decoder_f Enum1_decode_uper;
+per_type_encoder_f Enum1_encode_uper;
+per_type_decoder_f Enum1_decode_aper;
+per_type_encoder_f Enum1_encode_aper;
+
+/*** <<< CODE [Enum1] >>> ***/
+
+int
+Enum1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeEnumerated,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Enum1] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Enum1_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  0,  1 }        /* (0..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Enum1] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Enum1_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" }
+};
+static const unsigned int asn_MAP_Enum1_enum2value_1[] = {
+       0,      /* one(0) */
+       1       /* two(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Enum1_specs_1 = {
+       asn_MAP_Enum1_value2enum_1,     /* "tag" => N; sorted by tag */
+       asn_MAP_Enum1_enum2value_1,     /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Enum1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Enum1 = {
+       "Enum1",
+       "Enum1",
+       &asn_OP_NativeEnumerated,
+       asn_DEF_Enum1_tags_1,
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       asn_DEF_Enum1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Enum1_tags_1)
+               /sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Enum1_constr_1, Enum1_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Enum1_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Identifier] >>> ***/
+
+#include <VisibleString.h>
+
+/*** <<< TYPE-DECLS [Identifier] >>> ***/
+
+typedef VisibleString_t         Identifier_t;
+
+/*** <<< FUNC-DECLS [Identifier] >>> ***/
+
+extern asn_per_constraints_t asn_PER_type_Identifier_constr_1;
+extern asn_TYPE_descriptor_t asn_DEF_Identifier;
+asn_struct_free_f Identifier_free;
+asn_struct_print_f Identifier_print;
+asn_constr_check_f Identifier_constraint;
+ber_type_decoder_f Identifier_decode_ber;
+der_type_encoder_f Identifier_encode_der;
+xer_type_decoder_f Identifier_decode_xer;
+xer_type_encoder_f Identifier_encode_xer;
+per_type_decoder_f Identifier_decode_uper;
+per_type_encoder_f Identifier_encode_uper;
+per_type_decoder_f Identifier_decode_aper;
+per_type_encoder_f Identifier_encode_aper;
+
+/*** <<< CTABLES [Identifier] >>> ***/
+
+static const int permitted_alphabet_table_1[256] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*                  */
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,       /*     $            */
+ 2, 3, 4, 5, 6, 7, 8, 9,10,11, 0, 0, 0, 0, 0, 0,       /* 0123456789       */
+ 0,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,       /*  ABCDEFGHIJKLMNO */
+27,28,29,30,31,32,33,34,35,36,37, 0, 0, 0, 0,38,       /* PQRSTUVWXYZ    _ */
+ 0,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,       /*  abcdefghijklmno */
+54,55,56,57,58,59,60,61,62,63,64, 0, 0, 0, 0, 0,       /* pqrstuvwxyz      */
+};
+static const int permitted_alphabet_code2value_1[64] = {
+36,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,
+70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,
+86,87,88,89,90,95,97,98,99,100,101,102,103,104,105,106,
+107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,
+};
+
+
+static int check_permitted_alphabet_1(const void *sptr) {
+       const int *table = permitted_alphabet_table_1;
+       /* The underlying type is VisibleString */
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!table[cv]) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Identifier] >>> ***/
+
+int
+Identifier_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const VisibleString_t *st = (const VisibleString_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size >= 1 && size <= 32)
+                && !check_permitted_alphabet_1(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int asn_PER_MAP_Identifier_1_v2c(unsigned int value) {
+       if(value >= sizeof(permitted_alphabet_table_1)/sizeof(permitted_alphabet_table_1[0]))
+               return -1;
+       return permitted_alphabet_table_1[value] - 1;
+}
+static int asn_PER_MAP_Identifier_1_c2v(unsigned int code) {
+       if(code >= sizeof(permitted_alphabet_code2value_1)/sizeof(permitted_alphabet_code2value_1[0]))
+               return -1;
+       return permitted_alphabet_code2value_1[code];
+}
+/*
+ * This type is implemented using VisibleString,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [Identifier] >>> ***/
+
+asn_per_constraints_t asn_PER_type_Identifier_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       6,  6,  36,  122 }     /* (36..122) */,
+       { APC_CONSTRAINED,       5,  5,  1,  32 }       /* (SIZE(1..32)) */,
+       asn_PER_MAP_Identifier_1_v2c,   /* Value to PER code map */
+       asn_PER_MAP_Identifier_1_c2v    /* PER code to value map */
+};
+
+/*** <<< STAT-DEFS [Identifier] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_Identifier_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (26 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_Identifier = {
+       "Identifier",
+       "Identifier",
+       &asn_OP_VisibleString,
+       asn_DEF_Identifier_tags_1,
+       sizeof(asn_DEF_Identifier_tags_1)
+               /sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
+       asn_DEF_Identifier_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Identifier_tags_1)
+               /sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_Identifier_constr_1, Identifier_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< asn_constant.h >>> ***/
+
+/*
+ * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
+ */
+
+#ifndef _ASN_CONSTANT_H
+#define _ASN_CONSTANT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define maxIdentifier (32)
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ASN_CONSTANT_H */
diff --git a/tests/tests-asn1c-compiler/51-constraint-SE.asn1 b/tests/tests-asn1c-compiler/51-constraint-SE.asn1
new file mode 100644 (file)
index 0000000..05df97b
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .51
+
+ModuleInvalidConstraintApplicability1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 51 }
+       DEFINITIONS ::=
+BEGIN
+
+       Int ::= INTEGER (FROM("abc"))
+
+END
diff --git a/tests/tests-asn1c-compiler/52-constraint-SE.asn1 b/tests/tests-asn1c-compiler/52-constraint-SE.asn1
new file mode 100644 (file)
index 0000000..0345271
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .52
+
+ModuleInvalidConstraintApplicability1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 52 }
+       DEFINITIONS ::=
+BEGIN
+
+       Int ::= INTEGER (SIZE(0..4))
+
+END
diff --git a/tests/tests-asn1c-compiler/53-constraint-SE.asn1 b/tests/tests-asn1c-compiler/53-constraint-SE.asn1
new file mode 100644 (file)
index 0000000..f043938
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .53
+
+ModuleInvalidConstraintApplicability1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 53 }
+       DEFINITIONS ::=
+BEGIN
+
+       Int ::= INTEGER (1..32) (MIN..63)
+
+END
diff --git a/tests/tests-asn1c-compiler/54-constraint-SE.asn1 b/tests/tests-asn1c-compiler/54-constraint-SE.asn1
new file mode 100644 (file)
index 0000000..e481fb0
--- /dev/null
@@ -0,0 +1,17 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .54
+
+ModuleInvalidConstraintApplicability1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 54 }
+       DEFINITIONS ::=
+BEGIN
+
+       StrFine ::= NumericString (FROM(" ".."9"))      -- That's fine
+       StrBad ::= NumericString (FROM("0".."9" | "#"))         -- That's bad
+
+END
diff --git a/tests/tests-asn1c-compiler/55-components-of-OK.asn1 b/tests/tests-asn1c-compiler/55-components-of-OK.asn1
new file mode 100644 (file)
index 0000000..54ecc1f
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .55
+
+ModuleTestComponentsOf
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 55 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       OneType ::= SEQUENCE {
+               one-1       INTEGER,
+               one-2   [1] BOOLEAN,
+               one-3   SEQUENCE {
+                       alpha   INTEGER,
+                       beta    INTEGER,
+                       ...
+               },
+               ...,
+               ignored-in-SecondType   INTEGER,
+               ...,
+               one-4   INTEGER
+       }
+
+       SecondType ::= SEQUENCE {
+               a       IA5String,
+               COMPONENTS OF OneType,
+               b       UniversalString
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/55-components-of-OK.asn1.-EF b/tests/tests-asn1c-compiler/55-components-of-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..fb2f76d
--- /dev/null
@@ -0,0 +1,31 @@
+ModuleTestComponentsOf { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 55 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+OneType ::= SEQUENCE {
+    one-1       INTEGER,
+    one-2       [1] IMPLICIT BOOLEAN,
+    one-3       SEQUENCE {
+        alpha   [0] IMPLICIT INTEGER,    
+        beta    [1] IMPLICIT INTEGER,    
+        ...
+    },
+    one-4       INTEGER,
+    ...,
+    ignored-in-SecondType       INTEGER
+}
+
+SecondType ::= SEQUENCE {
+    a   [0] IMPLICIT IA5String,
+    one-1       [1] IMPLICIT INTEGER,
+    one-2       [2] IMPLICIT BOOLEAN,
+    one-3       [3] IMPLICIT SEQUENCE {
+        alpha   [0] IMPLICIT INTEGER,    
+        beta    [1] IMPLICIT INTEGER
+    },
+    one-4       [4] IMPLICIT INTEGER,
+    b   [5] IMPLICIT UniversalString
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/56-components-of-SE.asn1 b/tests/tests-asn1c-compiler/56-components-of-SE.asn1
new file mode 100644 (file)
index 0000000..26e0757
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .56
+
+ModuleTestComponentsOfInvalidReference
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 56 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       OneType ::= SEQUENCE {
+               a       IA5String,
+               COMPONENTS OF INTEGER,  -- Error is here
+               b       UniversalString
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/57-components-of-OK.asn1 b/tests/tests-asn1c-compiler/57-components-of-OK.asn1
new file mode 100644 (file)
index 0000000..bb2c8bf
--- /dev/null
@@ -0,0 +1,38 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .57
+
+ModuleTestComponentsOfCrossModule1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 57 1 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       SecondType ::= SEQUENCE {
+               a       IA5String,
+               COMPONENTS OF ModuleTestComponentsOfCrossModule2.OneType,
+               b       UniversalString
+       }
+
+END
+
+ModuleTestComponentsOfCrossModule2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 57 2 }
+       DEFINITIONS EXPLICIT TAGS ::=
+BEGIN
+
+       OneType ::= SEQUENCE {
+               x       T1,
+               y       T2,
+               z       T3
+       }
+
+       T1 ::= INTEGER
+       T2 ::= INTEGER
+       T3 ::= INTEGER
+
+END
diff --git a/tests/tests-asn1c-compiler/58-param-OK.asn1 b/tests/tests-asn1c-compiler/58-param-OK.asn1
new file mode 100644 (file)
index 0000000..477cabe
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .58
+
+ModuleTestParam
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 58 }
+       DEFINITIONS ::=
+BEGIN
+
+       DirectoryString { INTEGER:maxSize } ::= CHOICE {
+               teletexString   TeletexString   (SIZE(1..maxSize)),
+               utf8String      UTF8String      (SIZE(1..maxSize))
+       }
+
+       DS1 ::= DirectoryString { ub-name }
+
+       ub-name INTEGER ::= 128
+
+END
diff --git a/tests/tests-asn1c-compiler/58-param-OK.asn1.-EF b/tests/tests-asn1c-compiler/58-param-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..9258e5b
--- /dev/null
@@ -0,0 +1,15 @@
+ModuleTestParam { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 58 }
+DEFINITIONS ::=
+BEGIN
+
+DirectoryString{INTEGER:maxSize} ::= CHOICE {
+    teletexString       TeletexString (SIZE(1..maxSize)),
+    utf8String  UTF8String (SIZE(1..maxSize))
+}
+
+DS1 ::= DirectoryString{ub-name}
+
+ub-name INTEGER ::= 128
+
+END
diff --git a/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1 b/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1
new file mode 100644 (file)
index 0000000..0e49221
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .59
+
+ModuleTestExtensibleChoice
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 59 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Choice ::= [123] CHOICE {
+               a       INTEGER,
+               ...,
+               b       INTEGER,
+               c       Choice          -- A reference to itself
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..16122b8
--- /dev/null
@@ -0,0 +1,113 @@
+
+/*** <<< INCLUDES [Choice] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice] >>> ***/
+
+typedef enum Choice_PR {
+       Choice_PR_NOTHING,      /* No components present */
+       Choice_PR_a,
+       /* Extensions may appear below */
+       Choice_PR_b,
+       Choice_PR_c
+} Choice_PR;
+
+/*** <<< FWD-DECLS [Choice] >>> ***/
+
+struct Choice;
+
+/*** <<< TYPE-DECLS [Choice] >>> ***/
+
+typedef struct Choice {
+       Choice_PR present;
+       union Choice_u {
+               INTEGER_t        a;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               INTEGER_t        b;
+               struct Choice   *c;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_t;
+
+/*** <<< FUNC-DECLS [Choice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice;
+extern asn_CHOICE_specifics_t asn_SPC_Choice_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice_1[3];
+
+/*** <<< POST-INCLUDE [Choice] >>> ***/
+
+#include "Choice.h"
+
+/*** <<< STAT-DEFS [Choice] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice, choice.c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Choice,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Choice_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (123 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice_specs_1 = {
+       sizeof(struct Choice),
+       offsetof(struct Choice, _asn_ctx),
+       offsetof(struct Choice, present),
+       sizeof(((struct Choice *)0)->present),
+       .tag2el = asn_MAP_Choice_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice = {
+       "Choice",
+       "Choice",
+       &asn_OP_CHOICE,
+       asn_DEF_Choice_tags_1,
+       sizeof(asn_DEF_Choice_tags_1)
+               /sizeof(asn_DEF_Choice_tags_1[0]), /* 1 */
+       asn_DEF_Choice_tags_1,  /* Same as above */
+       sizeof(asn_DEF_Choice_tags_1)
+               /sizeof(asn_DEF_Choice_tags_1[0]), /* 1 */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice_1,
+       3,      /* Elements count */
+       &asn_SPC_Choice_specs_1 /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/60-any-OK.asn1 b/tests/tests-asn1c-compiler/60-any-OK.asn1
new file mode 100644 (file)
index 0000000..e10c421
--- /dev/null
@@ -0,0 +1,29 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .60
+
+ModuleTestANY
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 60 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T1 ::= SEQUENCE {
+               i       INTEGER,
+               any     ANY
+       }
+
+       T2 ::= SEQUENCE {
+               i       INTEGER,
+               any     [0] ANY OPTIONAL
+       }
+
+       T3 ::= SEQUENCE {
+               any1    ANY,
+               any2    ANY
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/60-any-OK.asn1.-EF b/tests/tests-asn1c-compiler/60-any-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..89fa31d
--- /dev/null
@@ -0,0 +1,21 @@
+ModuleTestANY { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 60 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+T1 ::= SEQUENCE {
+    i   INTEGER,
+    any         ANY
+}
+
+T2 ::= SEQUENCE {
+    i   INTEGER,
+    any         [0] EXPLICIT ANY OPTIONAL
+}
+
+T3 ::= SEQUENCE {
+    any1        ANY,
+    any2        ANY
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..ee7edab
--- /dev/null
@@ -0,0 +1,216 @@
+
+/*** <<< INCLUDES [T1] >>> ***/
+
+#include <INTEGER.h>
+#include <ANY.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T1] >>> ***/
+
+typedef struct T1 {
+       INTEGER_t        i;
+       ANY_t    any;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T1_t;
+
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+
+/*** <<< STAT-DEFS [T1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T1, i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+       { ATF_ANY_TYPE | ATF_NOFLAGS, 0, offsetof(struct T1, any),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ANY,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "any"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* i */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T1_specs_1 = {
+       sizeof(struct T1),
+       offsetof(struct T1, _asn_ctx),
+       .tag2el = asn_MAP_T1_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T1 = {
+       "T1",
+       "T1",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T1_tags_1,
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       asn_DEF_T1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T1_1,
+       2,      /* Elements count */
+       &asn_SPC_T1_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T2] >>> ***/
+
+#include <INTEGER.h>
+#include <ANY.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T2] >>> ***/
+
+typedef struct T2 {
+       INTEGER_t        i;
+       ANY_t   *any;   /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T2_t;
+
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+
+/*** <<< STAT-DEFS [T2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T2, i),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "i"
+               },
+       { ATF_POINTER, 1, offsetof(struct T2, any),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_ANY,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "any"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* i */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 } /* any */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T2_specs_1 = {
+       sizeof(struct T2),
+       offsetof(struct T2, _asn_ctx),
+       .tag2el = asn_MAP_T2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T2 = {
+       "T2",
+       "T2",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T2_tags_1,
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       asn_DEF_T2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T2_1,
+       2,      /* Elements count */
+       &asn_SPC_T2_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [T3] >>> ***/
+
+#include <ANY.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [T3] >>> ***/
+
+typedef struct T3 {
+       ANY_t    any1;
+       ANY_t    any2;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T3_t;
+
+/*** <<< FUNC-DECLS [T3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T3;
+
+/*** <<< STAT-DEFS [T3] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T3_1[] = {
+       { ATF_ANY_TYPE | ATF_NOFLAGS, 0, offsetof(struct T3, any1),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ANY,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "any1"
+               },
+       { ATF_ANY_TYPE | ATF_NOFLAGS, 0, offsetof(struct T3, any2),
+               .tag = -1 /* Ambiguous tag (ANY?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ANY,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "any2"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T3_specs_1 = {
+       sizeof(struct T3),
+       offsetof(struct T3, _asn_ctx),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T3 = {
+       "T3",
+       "T3",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T3_tags_1,
+       sizeof(asn_DEF_T3_tags_1)
+               /sizeof(asn_DEF_T3_tags_1[0]), /* 1 */
+       asn_DEF_T3_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T3_tags_1)
+               /sizeof(asn_DEF_T3_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T3_1,
+       2,      /* Elements count */
+       &asn_SPC_T3_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/61-any-1-SE.asn1 b/tests/tests-asn1c-compiler/61-any-1-SE.asn1
new file mode 100644 (file)
index 0000000..aa3cec3
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .61
+
+ModuleTestBadANY1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 61 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               i1      INTEGER OPTIONAL,
+               any     ANY
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/62-any-OK.asn1 b/tests/tests-asn1c-compiler/62-any-OK.asn1
new file mode 100644 (file)
index 0000000..0e69e01
--- /dev/null
@@ -0,0 +1,45 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .62
+
+ModuleTestANYSyntax
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 62 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+       T ::= CHOICE {
+               s1 T1-ext,
+               s2 T2,
+               s3 T3,
+               s4 T4
+       }
+
+       T1-ext ::= SEQUENCE {
+               i       INTEGER OPTIONAL,
+               any     [1] ANY,        -- Converted into [1] EXPLICIT ANY
+               ...
+       }
+
+       T2 ::= [16] SEQUENCE {
+               m1  [0] NumericString,
+               m2  [1] BOOLEAN,
+               m3  [3] SEQUENCE OF NumericString,
+               o4  [4] BOOLEAN OPTIONAL,
+               o5  [5] BOOLEAN OPTIONAL,
+               o6  [6] BOOLEAN OPTIONAL
+       }
+
+       T3 ::= SET {
+               m1  [0] NumericString,
+               m2  [1] BOOLEAN
+       }
+
+       T4 ::= [53] CHOICE {
+               m1  [1] IMPLICIT OCTET STRING
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/62-any-OK.asn1.-EF b/tests/tests-asn1c-compiler/62-any-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..0316412
--- /dev/null
@@ -0,0 +1,37 @@
+ModuleTestANYSyntax { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 62 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+T ::= CHOICE {
+    s1  T1-ext,
+    s2  T2,
+    s3  T3,
+    s4  T4
+}
+
+T1-ext ::= SEQUENCE {
+    i   INTEGER OPTIONAL,
+    any         [1] EXPLICIT ANY,
+    ...
+}
+
+T2 ::= [16] IMPLICIT SEQUENCE {
+    m1  [0] IMPLICIT NumericString,
+    m2  [1] IMPLICIT BOOLEAN,
+    m3  [3] IMPLICIT SEQUENCE OF NumericString,
+    o4  [4] IMPLICIT BOOLEAN OPTIONAL,
+    o5  [5] IMPLICIT BOOLEAN OPTIONAL,
+    o6  [6] IMPLICIT BOOLEAN OPTIONAL
+}
+
+T3 ::= SET {
+    m1  [0] IMPLICIT NumericString,
+    m2  [1] IMPLICIT BOOLEAN
+}
+
+T4 ::= [53] EXPLICIT CHOICE {
+    m1  [1] IMPLICIT OCTET STRING
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/63-any-2-SE.asn1 b/tests/tests-asn1c-compiler/63-any-2-SE.asn1
new file mode 100644 (file)
index 0000000..ca747cf
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .63
+
+ModuleTestBadANY2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 62 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               any [1] IMPLICIT ANY
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/64-oid-constr-OK.asn1 b/tests/tests-asn1c-compiler/64-oid-constr-OK.asn1
new file mode 100644 (file)
index 0000000..f6cb41d
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .64
+
+ModuleTestOIDConstraint
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 64 }
+       DEFINITIONS ::=
+BEGIN
+
+       void OBJECT IDENTIFIER ::= { v 1 3 6 1 4 1 9363 1 5 1 64 1 1 }
+
+       Id ::= OBJECT IDENTIFIER (void)
+
+END
diff --git a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1 b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1
new file mode 100644 (file)
index 0000000..a6f85bb
--- /dev/null
@@ -0,0 +1,29 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .65
+
+ModuleTestMultipleTags
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 65 }
+       DEFINITIONS ::=
+BEGIN
+
+       T1 ::= [2] EXPLICIT T2
+       T2 ::= [3] EXPLICIT T3
+       T3 ::= [4] IMPLICIT T4
+       T4 ::= [5] EXPLICIT T5
+       T5 ::= [6] IMPLICIT T6
+       T6 ::= REAL
+
+       T ::= [0] IMPLICIT Ts
+
+       Ts ::= [123] IMPLICIT SEQUENCE {
+               m1      [1] IMPLICIT T2,        -- [1][4][6]
+               m2      [2] EXPLICIT T3 OPTIONAL, -- [2][4][6]
+               m3      [3] IMPLICIT T3         -- [3][6]
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types
new file mode 100644 (file)
index 0000000..d0e5ae3
--- /dev/null
@@ -0,0 +1,450 @@
+
+/*** <<< INCLUDES [T1] >>> ***/
+
+#include "T2.h"
+
+/*** <<< TYPE-DECLS [T1] >>> ***/
+
+typedef T2_t    T1_t;
+
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+asn_struct_free_f T1_free;
+asn_struct_print_f T1_print;
+asn_constr_check_f T1_constraint;
+ber_type_decoder_f T1_decode_ber;
+der_type_encoder_f T1_encode_der;
+xer_type_decoder_f T1_decode_xer;
+xer_type_encoder_f T1_encode_xer;
+
+/*** <<< CODE [T1] >>> ***/
+
+/*
+ * This type is implemented using T2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T1_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T1_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T1 = {
+       "T1",
+       "T1",
+       &asn_OP_NativeReal,
+       asn_DEF_T1_tags_1,
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 4 */
+       asn_DEF_T1_all_tags_1,
+       sizeof(asn_DEF_T1_all_tags_1)
+               /sizeof(asn_DEF_T1_all_tags_1[0]), /* 6 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T2] >>> ***/
+
+#include "T3.h"
+
+/*** <<< TYPE-DECLS [T2] >>> ***/
+
+typedef T3_t    T2_t;
+
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+asn_struct_free_f T2_free;
+asn_struct_print_f T2_print;
+asn_constr_check_f T2_constraint;
+ber_type_decoder_f T2_decode_ber;
+der_type_encoder_f T2_encode_der;
+xer_type_decoder_f T2_decode_xer;
+xer_type_encoder_f T2_encode_xer;
+
+/*** <<< CODE [T2] >>> ***/
+
+/*
+ * This type is implemented using T3,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T2_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T2_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T2 = {
+       "T2",
+       "T2",
+       &asn_OP_NativeReal,
+       asn_DEF_T2_tags_1,
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 3 */
+       asn_DEF_T2_all_tags_1,
+       sizeof(asn_DEF_T2_all_tags_1)
+               /sizeof(asn_DEF_T2_all_tags_1[0]), /* 5 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T3] >>> ***/
+
+#include "T4.h"
+
+/*** <<< TYPE-DECLS [T3] >>> ***/
+
+typedef T4_t    T3_t;
+
+/*** <<< FUNC-DECLS [T3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T3;
+asn_struct_free_f T3_free;
+asn_struct_print_f T3_print;
+asn_constr_check_f T3_constraint;
+ber_type_decoder_f T3_decode_ber;
+der_type_encoder_f T3_encode_der;
+xer_type_decoder_f T3_decode_xer;
+xer_type_encoder_f T3_encode_xer;
+
+/*** <<< CODE [T3] >>> ***/
+
+/*
+ * This type is implemented using T4,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T3_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T3_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T3 = {
+       "T3",
+       "T3",
+       &asn_OP_NativeReal,
+       asn_DEF_T3_tags_1,
+       sizeof(asn_DEF_T3_tags_1)
+               /sizeof(asn_DEF_T3_tags_1[0]), /* 2 */
+       asn_DEF_T3_all_tags_1,
+       sizeof(asn_DEF_T3_all_tags_1)
+               /sizeof(asn_DEF_T3_all_tags_1[0]), /* 4 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T4] >>> ***/
+
+#include "T5.h"
+
+/*** <<< TYPE-DECLS [T4] >>> ***/
+
+typedef T5_t    T4_t;
+
+/*** <<< FUNC-DECLS [T4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T4;
+asn_struct_free_f T4_free;
+asn_struct_print_f T4_print;
+asn_constr_check_f T4_constraint;
+ber_type_decoder_f T4_decode_ber;
+der_type_encoder_f T4_encode_der;
+xer_type_decoder_f T4_decode_xer;
+xer_type_encoder_f T4_encode_xer;
+
+/*** <<< CODE [T4] >>> ***/
+
+/*
+ * This type is implemented using T5,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T4_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T4 = {
+       "T4",
+       "T4",
+       &asn_OP_NativeReal,
+       asn_DEF_T4_tags_1,
+       sizeof(asn_DEF_T4_tags_1)
+               /sizeof(asn_DEF_T4_tags_1[0]) - 1, /* 2 */
+       asn_DEF_T4_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T4_tags_1)
+               /sizeof(asn_DEF_T4_tags_1[0]), /* 3 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T5] >>> ***/
+
+#include "T6.h"
+
+/*** <<< TYPE-DECLS [T5] >>> ***/
+
+typedef T6_t    T5_t;
+
+/*** <<< FUNC-DECLS [T5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T5;
+asn_struct_free_f T5_free;
+asn_struct_print_f T5_print;
+asn_constr_check_f T5_constraint;
+ber_type_decoder_f T5_decode_ber;
+der_type_encoder_f T5_encode_der;
+xer_type_decoder_f T5_decode_xer;
+xer_type_encoder_f T5_encode_xer;
+
+/*** <<< CODE [T5] >>> ***/
+
+/*
+ * This type is implemented using T6,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T5_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T5 = {
+       "T5",
+       "T5",
+       &asn_OP_NativeReal,
+       asn_DEF_T5_tags_1,
+       sizeof(asn_DEF_T5_tags_1)
+               /sizeof(asn_DEF_T5_tags_1[0]) - 1, /* 1 */
+       asn_DEF_T5_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T5_tags_1)
+               /sizeof(asn_DEF_T5_tags_1[0]), /* 2 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T6] >>> ***/
+
+#include <NativeReal.h>
+
+/*** <<< TYPE-DECLS [T6] >>> ***/
+
+typedef double  T6_t;
+
+/*** <<< FUNC-DECLS [T6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T6;
+asn_struct_free_f T6_free;
+asn_struct_print_f T6_print;
+asn_constr_check_f T6_constraint;
+ber_type_decoder_f T6_decode_ber;
+der_type_encoder_f T6_encode_der;
+xer_type_decoder_f T6_decode_xer;
+xer_type_encoder_f T6_encode_xer;
+
+/*** <<< CODE [T6] >>> ***/
+
+/*
+ * This type is implemented using NativeReal,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T6] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T6_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T6 = {
+       "T6",
+       "T6",
+       &asn_OP_NativeReal,
+       asn_DEF_T6_tags_1,
+       sizeof(asn_DEF_T6_tags_1)
+               /sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
+       asn_DEF_T6_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T6_tags_1)
+               /sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
+       { 0, 0, NativeReal_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include "Ts.h"
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef Ts_t    T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+asn_struct_free_f T_free;
+asn_struct_print_f T_print;
+asn_constr_check_f T_constraint;
+ber_type_decoder_f T_decode_ber;
+der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
+xer_type_encoder_f T_encode_xer;
+
+/*** <<< CODE [T] >>> ***/
+
+/*
+ * This type is implemented using Ts,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (123 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]) - 2, /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 3 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Ts_1,
+       3,      /* Elements count */
+       &asn_SPC_Ts_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Ts] >>> ***/
+
+#include "T2.h"
+#include "T3.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Ts] >>> ***/
+
+typedef struct Ts {
+       T2_t     m1;
+       T3_t    *m2;    /* OPTIONAL */
+       T3_t     m3;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Ts_t;
+
+/*** <<< FUNC-DECLS [Ts] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Ts;
+extern asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1;
+extern asn_TYPE_member_t asn_MBR_Ts_1[3];
+
+/*** <<< STAT-DEFS [Ts] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Ts_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Ts, m1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_T2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m1"
+               },
+       { ATF_POINTER, 1, offsetof(struct Ts, m2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_T3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m2"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Ts, m3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_T3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m3"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Ts_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (123 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Ts_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* m1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* m2 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* m3 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1 = {
+       sizeof(struct Ts),
+       offsetof(struct Ts, _asn_ctx),
+       .tag2el = asn_MAP_Ts_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Ts = {
+       "Ts",
+       "Ts",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Ts_tags_1,
+       sizeof(asn_DEF_Ts_tags_1)
+               /sizeof(asn_DEF_Ts_tags_1[0]) - 1, /* 1 */
+       asn_DEF_Ts_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Ts_tags_1)
+               /sizeof(asn_DEF_Ts_tags_1[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Ts_1,
+       3,      /* Elements count */
+       &asn_SPC_Ts_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..31570c0
--- /dev/null
@@ -0,0 +1,450 @@
+
+/*** <<< INCLUDES [T1] >>> ***/
+
+#include "T2.h"
+
+/*** <<< TYPE-DECLS [T1] >>> ***/
+
+typedef T2_t    T1_t;
+
+/*** <<< FUNC-DECLS [T1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T1;
+asn_struct_free_f T1_free;
+asn_struct_print_f T1_print;
+asn_constr_check_f T1_constraint;
+ber_type_decoder_f T1_decode_ber;
+der_type_encoder_f T1_encode_der;
+xer_type_decoder_f T1_decode_xer;
+xer_type_encoder_f T1_encode_xer;
+
+/*** <<< CODE [T1] >>> ***/
+
+/*
+ * This type is implemented using T2,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T1_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T1_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T1 = {
+       "T1",
+       "T1",
+       &asn_OP_REAL,
+       asn_DEF_T1_tags_1,
+       sizeof(asn_DEF_T1_tags_1)
+               /sizeof(asn_DEF_T1_tags_1[0]), /* 4 */
+       asn_DEF_T1_all_tags_1,
+       sizeof(asn_DEF_T1_all_tags_1)
+               /sizeof(asn_DEF_T1_all_tags_1[0]), /* 6 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T2] >>> ***/
+
+#include "T3.h"
+
+/*** <<< TYPE-DECLS [T2] >>> ***/
+
+typedef T3_t    T2_t;
+
+/*** <<< FUNC-DECLS [T2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T2;
+asn_struct_free_f T2_free;
+asn_struct_print_f T2_print;
+asn_constr_check_f T2_constraint;
+ber_type_decoder_f T2_decode_ber;
+der_type_encoder_f T2_encode_der;
+xer_type_decoder_f T2_decode_xer;
+xer_type_encoder_f T2_encode_xer;
+
+/*** <<< CODE [T2] >>> ***/
+
+/*
+ * This type is implemented using T3,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T2_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T2_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T2 = {
+       "T2",
+       "T2",
+       &asn_OP_REAL,
+       asn_DEF_T2_tags_1,
+       sizeof(asn_DEF_T2_tags_1)
+               /sizeof(asn_DEF_T2_tags_1[0]), /* 3 */
+       asn_DEF_T2_all_tags_1,
+       sizeof(asn_DEF_T2_all_tags_1)
+               /sizeof(asn_DEF_T2_all_tags_1[0]), /* 5 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T3] >>> ***/
+
+#include "T4.h"
+
+/*** <<< TYPE-DECLS [T3] >>> ***/
+
+typedef T4_t    T3_t;
+
+/*** <<< FUNC-DECLS [T3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T3;
+asn_struct_free_f T3_free;
+asn_struct_print_f T3_print;
+asn_constr_check_f T3_constraint;
+ber_type_decoder_f T3_decode_ber;
+der_type_encoder_f T3_encode_der;
+xer_type_decoder_f T3_decode_xer;
+xer_type_encoder_f T3_encode_xer;
+
+/*** <<< CODE [T3] >>> ***/
+
+/*
+ * This type is implemented using T4,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T3_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2))
+};
+static const ber_tlv_tag_t asn_DEF_T3_all_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T3 = {
+       "T3",
+       "T3",
+       &asn_OP_REAL,
+       asn_DEF_T3_tags_1,
+       sizeof(asn_DEF_T3_tags_1)
+               /sizeof(asn_DEF_T3_tags_1[0]), /* 2 */
+       asn_DEF_T3_all_tags_1,
+       sizeof(asn_DEF_T3_all_tags_1)
+               /sizeof(asn_DEF_T3_all_tags_1[0]), /* 4 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T4] >>> ***/
+
+#include "T5.h"
+
+/*** <<< TYPE-DECLS [T4] >>> ***/
+
+typedef T5_t    T4_t;
+
+/*** <<< FUNC-DECLS [T4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T4;
+asn_struct_free_f T4_free;
+asn_struct_print_f T4_print;
+asn_constr_check_f T4_constraint;
+ber_type_decoder_f T4_decode_ber;
+der_type_encoder_f T4_encode_der;
+xer_type_decoder_f T4_decode_xer;
+xer_type_encoder_f T4_encode_xer;
+
+/*** <<< CODE [T4] >>> ***/
+
+/*
+ * This type is implemented using T5,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T4_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T4 = {
+       "T4",
+       "T4",
+       &asn_OP_REAL,
+       asn_DEF_T4_tags_1,
+       sizeof(asn_DEF_T4_tags_1)
+               /sizeof(asn_DEF_T4_tags_1[0]) - 1, /* 2 */
+       asn_DEF_T4_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T4_tags_1)
+               /sizeof(asn_DEF_T4_tags_1[0]), /* 3 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T5] >>> ***/
+
+#include "T6.h"
+
+/*** <<< TYPE-DECLS [T5] >>> ***/
+
+typedef T6_t    T5_t;
+
+/*** <<< FUNC-DECLS [T5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T5;
+asn_struct_free_f T5_free;
+asn_struct_print_f T5_print;
+asn_constr_check_f T5_constraint;
+ber_type_decoder_f T5_decode_ber;
+der_type_encoder_f T5_encode_der;
+xer_type_decoder_f T5_decode_xer;
+xer_type_encoder_f T5_encode_xer;
+
+/*** <<< CODE [T5] >>> ***/
+
+/*
+ * This type is implemented using T6,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T5_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T5 = {
+       "T5",
+       "T5",
+       &asn_OP_REAL,
+       asn_DEF_T5_tags_1,
+       sizeof(asn_DEF_T5_tags_1)
+               /sizeof(asn_DEF_T5_tags_1[0]) - 1, /* 1 */
+       asn_DEF_T5_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T5_tags_1)
+               /sizeof(asn_DEF_T5_tags_1[0]), /* 2 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T6] >>> ***/
+
+#include <REAL.h>
+
+/*** <<< TYPE-DECLS [T6] >>> ***/
+
+typedef REAL_t  T6_t;
+
+/*** <<< FUNC-DECLS [T6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T6;
+asn_struct_free_f T6_free;
+asn_struct_print_f T6_print;
+asn_constr_check_f T6_constraint;
+ber_type_decoder_f T6_decode_ber;
+der_type_encoder_f T6_encode_der;
+xer_type_decoder_f T6_decode_xer;
+xer_type_encoder_f T6_encode_xer;
+
+/*** <<< CODE [T6] >>> ***/
+
+/*
+ * This type is implemented using REAL,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T6] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T6_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (9 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T6 = {
+       "T6",
+       "T6",
+       &asn_OP_REAL,
+       asn_DEF_T6_tags_1,
+       sizeof(asn_DEF_T6_tags_1)
+               /sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
+       asn_DEF_T6_tags_1,      /* Same as above */
+       sizeof(asn_DEF_T6_tags_1)
+               /sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
+       { 0, 0, REAL_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include "Ts.h"
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef Ts_t    T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+asn_struct_free_f T_free;
+asn_struct_print_f T_print;
+asn_constr_check_f T_constraint;
+ber_type_decoder_f T_decode_ber;
+der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
+xer_type_encoder_f T_encode_xer;
+
+/*** <<< CODE [T] >>> ***/
+
+/*
+ * This type is implemented using Ts,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_CONTEXT | (123 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]) - 2, /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 3 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Ts_1,
+       3,      /* Elements count */
+       &asn_SPC_Ts_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Ts] >>> ***/
+
+#include "T2.h"
+#include "T3.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Ts] >>> ***/
+
+typedef struct Ts {
+       T2_t     m1;
+       T3_t    *m2;    /* OPTIONAL */
+       T3_t     m3;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Ts_t;
+
+/*** <<< FUNC-DECLS [Ts] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Ts;
+extern asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1;
+extern asn_TYPE_member_t asn_MBR_Ts_1[3];
+
+/*** <<< STAT-DEFS [Ts] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Ts_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Ts, m1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_T2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m1"
+               },
+       { ATF_POINTER, 1, offsetof(struct Ts, m2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_T3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m2"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Ts, m3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_T3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m3"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Ts_tags_1[] = {
+       (ASN_TAG_CLASS_CONTEXT | (123 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Ts_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* m1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* m2 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* m3 */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1 = {
+       sizeof(struct Ts),
+       offsetof(struct Ts, _asn_ctx),
+       .tag2el = asn_MAP_Ts_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Ts = {
+       "Ts",
+       "Ts",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Ts_tags_1,
+       sizeof(asn_DEF_Ts_tags_1)
+               /sizeof(asn_DEF_Ts_tags_1[0]) - 1, /* 1 */
+       asn_DEF_Ts_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Ts_tags_1)
+               /sizeof(asn_DEF_Ts_tags_1[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Ts_1,
+       3,      /* Elements count */
+       &asn_SPC_Ts_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1 b/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1
new file mode 100644 (file)
index 0000000..38254a9
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .66
+
+ModuleTestReferenceToNamedSimpleType
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 66 }
+       DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+   T ::= SET OF named SimpleType
+
+   SimpleType ::= ENUMERATED { one, two, three }
+
+END
diff --git a/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..99f414a
--- /dev/null
@@ -0,0 +1,132 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include "SimpleType.h"
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       A_SET_OF(SimpleType_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_SimpleType,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "named"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SET_OF,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_T_1,
+       1,      /* Single element */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SimpleType] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [SimpleType] >>> ***/
+
+typedef enum SimpleType {
+       SimpleType_one  = 0,
+       SimpleType_two  = 1,
+       SimpleType_three        = 2
+} e_SimpleType;
+
+/*** <<< TYPE-DECLS [SimpleType] >>> ***/
+
+typedef ENUMERATED_t    SimpleType_t;
+
+/*** <<< FUNC-DECLS [SimpleType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SimpleType;
+extern const asn_INTEGER_specifics_t asn_SPC_SimpleType_specs_1;
+asn_struct_free_f SimpleType_free;
+asn_struct_print_f SimpleType_print;
+asn_constr_check_f SimpleType_constraint;
+ber_type_decoder_f SimpleType_decode_ber;
+der_type_encoder_f SimpleType_encode_der;
+xer_type_decoder_f SimpleType_decode_xer;
+xer_type_encoder_f SimpleType_encode_xer;
+
+/*** <<< CODE [SimpleType] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SimpleType] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_SimpleType_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" },
+       { 2,    5,      "three" }
+};
+static const unsigned int asn_MAP_SimpleType_enum2value_1[] = {
+       0,      /* one(0) */
+       2,      /* three(2) */
+       1       /* two(1) */
+};
+const asn_INTEGER_specifics_t asn_SPC_SimpleType_specs_1 = {
+       asn_MAP_SimpleType_value2enum_1,        /* "tag" => N; sorted by tag */
+       asn_MAP_SimpleType_enum2value_1,        /* N => "tag"; sorted by N */
+       3,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_SimpleType_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_SimpleType = {
+       "SimpleType",
+       "SimpleType",
+       &asn_OP_ENUMERATED,
+       asn_DEF_SimpleType_tags_1,
+       sizeof(asn_DEF_SimpleType_tags_1)
+               /sizeof(asn_DEF_SimpleType_tags_1[0]), /* 1 */
+       asn_DEF_SimpleType_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SimpleType_tags_1)
+               /sizeof(asn_DEF_SimpleType_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_SimpleType_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/67-embedded-choice-OK.asn1 b/tests/tests-asn1c-compiler/67-embedded-choice-OK.asn1
new file mode 100644 (file)
index 0000000..d3a1954
--- /dev/null
@@ -0,0 +1,35 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .67
+
+ModuleTestEmbeddedChoice
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 67 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       A ::= CHOICE {
+               a       NULL,
+               b       NULL,
+               ...
+       }
+
+       B ::= CHOICE {
+               a       NULL,
+               b       NULL,
+               ...,
+               other   A       -- Only AUTOMATIC TAGS make it right
+       }
+
+       C ::= SET {
+               a       NULL,
+               b       NULL,
+               ...,
+               other1  A,
+               other2  B
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/68-enum-default-OK.asn1 b/tests/tests-asn1c-compiler/68-enum-default-OK.asn1
new file mode 100644 (file)
index 0000000..0b26cf7
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .68
+
+ModuleTestEnumeratedDefault
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 68 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               reportAmount ReportAmount DEFAULT ra-default,
+               reportInterval  INTEGER
+       }
+
+       ReportAmount ::= ENUMERATED { a, b, c, ra-default }
+
+END
diff --git a/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1 b/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1
new file mode 100644 (file)
index 0000000..29014ee
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .69
+
+ModuleTestReservedWords
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 69 }
+       DEFINITIONS ::=
+BEGIN
+
+       T ::= SEQUENCE {
+               int     INTEGER,
+               char    OCTET STRING (SIZE(1)),
+               class   SET { ... },
+               double  REAL
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..b732292
--- /dev/null
@@ -0,0 +1,182 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <OCTET_STRING.h>
+#include <REAL.h>
+#include <constr_SET.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum class_PR {
+} class_PR;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       INTEGER_t        Int;
+       OCTET_STRING_t   Char;
+       struct Class {
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               
+               /* Presence bitmask: ASN_SET_ISPRESENT(pclass, class_PR_x) */
+               unsigned int _presence_map
+                       [((0+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } Class;
+       REAL_t   Double;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+memb_char_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       size = st->size;
+       
+       if((size == 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_class_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const uint8_t asn_MAP_class_mmap_4[(0 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       0
+};
+static 
+asn_SET_specifics_t asn_SPC_class_specs_4 = {
+       sizeof(struct Class),
+       offsetof(struct Class, _asn_ctx),
+       offsetof(struct Class, _presence_map),
+       0,      /* No top level tags */
+       0,      /* No tags in the map */
+       asn_MAP_class_tag2el_4, /* Same as above */
+       0,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_class_mmap_4      /* Mandatory elements map */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_class_4 = {
+       "class",
+       "class",
+       &asn_OP_SET,
+       asn_DEF_class_tags_4,
+       sizeof(asn_DEF_class_tags_4)
+               /sizeof(asn_DEF_class_tags_4[0]), /* 1 */
+       asn_DEF_class_tags_4,   /* Same as above */
+       sizeof(asn_DEF_class_tags_4)
+               /sizeof(asn_DEF_class_tags_4[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_class_specs_4  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, Int),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, Char),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_char_constraint_1 },
+               0, 0, /* No default value */
+               .name = "char"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, Class),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_class_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "class"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct T, Double),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_REAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "double"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* char */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, 0, 0 }, /* double */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 2, 0, 0 } /* class */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_SEQUENCE,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_T_1,
+       4,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/70-xer-test-OK.asn1 b/tests/tests-asn1c-compiler/70-xer-test-OK.asn1
new file mode 100644 (file)
index 0000000..2c23f52
--- /dev/null
@@ -0,0 +1,81 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .70
+
+ModuleTestXERDecoding
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 70 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+       /*
+        * This module defines several types for the XER decoder testing
+        * environment (defined elsewhere).
+        */
+
+       PDU ::= CHOICE {
+               sequence                Sequence,
+               set                     Set,
+               sequenceOf              SequenceOf,
+               extensibleSet           ExtensibleSet,
+               extensibleSequence      ExtensibleSequence,
+               extensibleSequence2     ExtensibleSequence2,
+               setOfNULL               SetOfNULL,
+               setOfREAL               SetOfREAL,
+               setOfEnums              SetOfEnums,
+               namedSetOfNULL          NamedSetOfNULL,
+               namedSetOfREAL          NamedSetOfREAL,
+               namedSetOfEnums         NamedSetOfEnums,
+               seqOfZuka               SeqOfZuka,
+               setOfChoice             SetOfChoice,
+               namedSetOfChoice        NamedSetOfChoice,
+               ...
+       }
+
+       Sequence ::= SEQUENCE {
+               integer         INTEGER,
+               sequence        Sequence   OPTIONAL,    -- backreference
+               bits            BIT STRING OPTIONAL,
+               string          UTF8String
+       }
+
+       Set ::= SET {
+               roid            RELATIVE-OID,
+               opaque          OCTET STRING    OPTIONAL
+       }
+
+       ExtensibleSet ::= SET {
+               string  UTF8String OPTIONAL,
+               ...,
+               enum    ENUMERATED { b, a }
+       }
+
+       ExtensibleSequence ::= SEQUENCE {
+               string  UTF8String OPTIONAL,
+               ...,
+               integer INTEGER OPTIONAL,
+               gtime   GeneralizedTime
+       }
+
+       ExtensibleSequence2 ::= SEQUENCE {
+               string  UTF8String OPTIONAL,
+               ...,
+               integer INTEGER OPTIONAL
+       }
+
+       SetOfNULL ::= SET OF NULL
+       SetOfREAL ::= SET OF REAL
+       SetOfEnums ::= SET OF ENUMERATED { one, oneMore }
+       NamedSetOfNULL ::= SET OF y NULL
+       NamedSetOfREAL ::= SET OF name REAL
+       NamedSetOfEnums ::= SET OF name ENUMERATED { one, oneMore }
+       SequenceOf ::= SEQUENCE OF id INTEGER { one(1), two(2) }
+       SeqOfZuka ::= SEQUENCE OF zuka NULL
+       SetOfChoice ::= SET OF SimpleChoice
+       NamedSetOfChoice ::= SET OF whatever SimpleChoice
+
+       SimpleChoice ::= CHOICE { a NULL, b INTEGER }
+
+END
diff --git a/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-EF b/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..983f40a
--- /dev/null
@@ -0,0 +1,93 @@
+ModuleTestXERDecoding { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 70 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+PDU ::= CHOICE {
+    sequence    [0] IMPLICIT Sequence,
+    set         [1] IMPLICIT Set,
+    sequenceOf  [2] IMPLICIT SequenceOf,
+    extensibleSet       [3] IMPLICIT ExtensibleSet,
+    extensibleSequence  [4] IMPLICIT ExtensibleSequence,
+    extensibleSequence2         [5] IMPLICIT ExtensibleSequence2,
+    setOfNULL   [6] IMPLICIT SetOfNULL,
+    setOfREAL   [7] IMPLICIT SetOfREAL,
+    setOfEnums  [8] IMPLICIT SetOfEnums,
+    namedSetOfNULL      [9] IMPLICIT NamedSetOfNULL,
+    namedSetOfREAL      [10] IMPLICIT NamedSetOfREAL,
+    namedSetOfEnums     [11] IMPLICIT NamedSetOfEnums,
+    seqOfZuka   [12] IMPLICIT SeqOfZuka,
+    setOfChoice         [13] IMPLICIT SetOfChoice,
+    namedSetOfChoice    [14] IMPLICIT NamedSetOfChoice,
+    ...
+}
+
+Sequence ::= SEQUENCE {
+    integer     [0] IMPLICIT INTEGER,
+    sequence    [1] IMPLICIT Sequence OPTIONAL,
+    bits        [2] IMPLICIT BIT STRING OPTIONAL,
+    string      [3] IMPLICIT UTF8String
+}
+
+Set ::= SET {
+    roid        [0] IMPLICIT RELATIVE-OID,
+    opaque      [1] IMPLICIT OCTET STRING OPTIONAL
+}
+
+ExtensibleSet ::= SET {
+    string      [0] IMPLICIT UTF8String OPTIONAL,
+    ...,
+    enum        [1] IMPLICIT ENUMERATED {
+        b(0),    
+        a(1)
+    }
+}
+
+ExtensibleSequence ::= SEQUENCE {
+    string      [0] IMPLICIT UTF8String OPTIONAL,
+    ...,
+    integer     [1] IMPLICIT INTEGER OPTIONAL,
+    gtime       [2] IMPLICIT GeneralizedTime
+}
+
+ExtensibleSequence2 ::= SEQUENCE {
+    string      [0] IMPLICIT UTF8String OPTIONAL,
+    ...,
+    integer     [1] IMPLICIT INTEGER OPTIONAL
+}
+
+SetOfNULL ::= SET OF NULL
+
+SetOfREAL ::= SET OF REAL
+
+SetOfEnums ::= SET OF ENUMERATED {
+        one(0),    
+        oneMore(1)
+    }
+
+NamedSetOfNULL ::= SET OF    y  NULL
+
+NamedSetOfREAL ::= SET OF    name       REAL
+
+NamedSetOfEnums ::= SET OF    name      ENUMERATED {
+        one(0),    
+        oneMore(1)
+    }
+
+SequenceOf ::= SEQUENCE OF    id        INTEGER {
+        one(1),    
+        two(2)
+    }
+
+SeqOfZuka ::= SEQUENCE OF    zuka       NULL
+
+SetOfChoice ::= SET OF SimpleChoice
+
+NamedSetOfChoice ::= SET OF    whatever         SimpleChoice
+
+SimpleChoice ::= CHOICE {
+    a   [0] IMPLICIT NULL,
+    b   [1] IMPLICIT INTEGER
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..8dc449a
--- /dev/null
@@ -0,0 +1,1573 @@
+
+/*** <<< INCLUDES [PDU] >>> ***/
+
+#include "Sequence.h"
+#include "Set.h"
+#include "SequenceOf.h"
+#include "ExtensibleSet.h"
+#include "ExtensibleSequence.h"
+#include "ExtensibleSequence2.h"
+#include "SetOfNULL.h"
+#include "SetOfREAL.h"
+#include "SetOfEnums.h"
+#include "NamedSetOfNULL.h"
+#include "NamedSetOfREAL.h"
+#include "NamedSetOfEnums.h"
+#include "SeqOfZuka.h"
+#include "SetOfChoice.h"
+#include "NamedSetOfChoice.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [PDU] >>> ***/
+
+typedef enum PDU_PR {
+       PDU_PR_NOTHING, /* No components present */
+       PDU_PR_sequence,
+       PDU_PR_set,
+       PDU_PR_sequenceOf,
+       PDU_PR_extensibleSet,
+       PDU_PR_extensibleSequence,
+       PDU_PR_extensibleSequence2,
+       PDU_PR_setOfNULL,
+       PDU_PR_setOfREAL,
+       PDU_PR_setOfEnums,
+       PDU_PR_namedSetOfNULL,
+       PDU_PR_namedSetOfREAL,
+       PDU_PR_namedSetOfEnums,
+       PDU_PR_seqOfZuka,
+       PDU_PR_setOfChoice,
+       PDU_PR_namedSetOfChoice
+       /* Extensions may appear below */
+       
+} PDU_PR;
+
+/*** <<< TYPE-DECLS [PDU] >>> ***/
+
+typedef struct PDU {
+       PDU_PR present;
+       union PDU_u {
+               Sequence_t       sequence;
+               Set_t    set;
+               SequenceOf_t     sequenceOf;
+               ExtensibleSet_t  extensibleSet;
+               ExtensibleSequence_t     extensibleSequence;
+               ExtensibleSequence2_t    extensibleSequence2;
+               SetOfNULL_t      setOfNULL;
+               SetOfREAL_t      setOfREAL;
+               SetOfEnums_t     setOfEnums;
+               NamedSetOfNULL_t         namedSetOfNULL;
+               NamedSetOfREAL_t         namedSetOfREAL;
+               NamedSetOfEnums_t        namedSetOfEnums;
+               SeqOfZuka_t      seqOfZuka;
+               SetOfChoice_t    setOfChoice;
+               NamedSetOfChoice_t       namedSetOfChoice;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} PDU_t;
+
+/*** <<< FUNC-DECLS [PDU] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_PDU;
+
+/*** <<< STAT-DEFS [PDU] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_PDU_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.sequence),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "sequence"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.sequenceOf),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SequenceOf,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "sequenceOf"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.extensibleSet),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ExtensibleSet,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "extensibleSet"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.extensibleSequence),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ExtensibleSequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "extensibleSequence"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.extensibleSequence2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ExtensibleSequence2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "extensibleSequence2"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.setOfNULL),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SetOfNULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "setOfNULL"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.setOfREAL),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SetOfREAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "setOfREAL"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.setOfEnums),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SetOfEnums,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "setOfEnums"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.namedSetOfNULL),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NamedSetOfNULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "namedSetOfNULL"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.namedSetOfREAL),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (10 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NamedSetOfREAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "namedSetOfREAL"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.namedSetOfEnums),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (11 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NamedSetOfEnums,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "namedSetOfEnums"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.seqOfZuka),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (12 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SeqOfZuka,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seqOfZuka"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.setOfChoice),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (13 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_SetOfChoice,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "setOfChoice"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct PDU, choice.namedSetOfChoice),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (14 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NamedSetOfChoice,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "namedSetOfChoice"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sequence */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* set */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sequenceOf */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* extensibleSet */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* extensibleSequence */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* extensibleSequence2 */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* setOfNULL */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* setOfREAL */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* setOfEnums */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* namedSetOfNULL */
+    { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* namedSetOfREAL */
+    { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* namedSetOfEnums */
+    { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* seqOfZuka */
+    { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* setOfChoice */
+    { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 } /* namedSetOfChoice */
+};
+static asn_CHOICE_specifics_t asn_SPC_PDU_specs_1 = {
+       sizeof(struct PDU),
+       offsetof(struct PDU, _asn_ctx),
+       offsetof(struct PDU, present),
+       sizeof(((struct PDU *)0)->present),
+       .tag2el = asn_MAP_PDU_tag2el_1,
+       .tag2el_count = 15,     /* Count of tags in the map */
+       0, 0,
+       .first_extension = 15   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_PDU = {
+       "PDU",
+       "PDU",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_PDU_1,
+       15,     /* Elements count */
+       &asn_SPC_PDU_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include <INTEGER.h>
+#include <BIT_STRING.h>
+#include <UTF8String.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Sequence] >>> ***/
+
+struct Sequence;
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       INTEGER_t        integer;
+       struct Sequence *sequence;      /* OPTIONAL */
+       BIT_STRING_t    *bits;  /* OPTIONAL */
+       UTF8String_t     string;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[4];
+
+/*** <<< POST-INCLUDE [Sequence] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, integer),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "integer"
+               },
+       { ATF_POINTER, 2, offsetof(struct Sequence, sequence),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "sequence"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, bits),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bits"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, string),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "string"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* integer */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sequence */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bits */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* string */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       4,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Set] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <OCTET_STRING.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Set] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Set_PR {
+       Set_PR_roid,    /* Member roid is present */
+       Set_PR_opaque,  /* Member opaque is present */
+} Set_PR;
+
+/*** <<< TYPE-DECLS [Set] >>> ***/
+
+typedef struct Set {
+       RELATIVE_OID_t   roid;
+       OCTET_STRING_t  *opaque;        /* OPTIONAL */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pSet, Set_PR_x) */
+       unsigned int _presence_map
+               [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Set_t;
+
+/*** <<< FUNC-DECLS [Set] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Set;
+extern asn_SET_specifics_t asn_SPC_Set_specs_1;
+extern asn_TYPE_member_t asn_MBR_Set_1[2];
+
+/*** <<< STAT-DEFS [Set] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Set_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Set, roid),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+       { ATF_POINTER, 1, offsetof(struct Set, opaque),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OCTET_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "opaque"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Set_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Set_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* roid */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* opaque */
+};
+static const uint8_t asn_MAP_Set_mmap_1[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (0 << 6)
+};
+asn_SET_specifics_t asn_SPC_Set_specs_1 = {
+       sizeof(struct Set),
+       offsetof(struct Set, _asn_ctx),
+       offsetof(struct Set, _presence_map),
+       .tag2el = asn_MAP_Set_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       asn_MAP_Set_tag2el_1,   /* Same as above */
+       2,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Set_mmap_1        /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Set = {
+       "Set",
+       "Set",
+       &asn_OP_SET,
+       asn_DEF_Set_tags_1,
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       asn_DEF_Set_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Set_1,
+       2,      /* Elements count */
+       &asn_SPC_Set_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ExtensibleSet] >>> ***/
+
+#include <UTF8String.h>
+#include <ENUMERATED.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [ExtensibleSet] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum ExtensibleSet_PR {
+       ExtensibleSet_PR_string,        /* Member string is present */
+       ExtensibleSet_PR_enum,  /* Member enum is present */
+} ExtensibleSet_PR;
+typedef enum Enum {
+       enum_b  = 0,
+       enum_a  = 1
+} e_enum;
+
+/*** <<< TYPE-DECLS [ExtensibleSet] >>> ***/
+
+typedef struct ExtensibleSet {
+       UTF8String_t    *string;        /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       ENUMERATED_t    *Enum;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pExtensibleSet, ExtensibleSet_PR_x) */
+       unsigned int _presence_map
+               [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ExtensibleSet_t;
+
+/*** <<< FUNC-DECLS [ExtensibleSet] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_enum_4;        // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSet;
+extern asn_SET_specifics_t asn_SPC_ExtensibleSet_specs_1;
+extern asn_TYPE_member_t asn_MBR_ExtensibleSet_1[2];
+
+/*** <<< CODE [ExtensibleSet] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [ExtensibleSet] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_enum_value2enum_4[] = {
+       { 0,    1,      "b" },
+       { 1,    1,      "a" }
+};
+static const unsigned int asn_MAP_enum_enum2value_4[] = {
+       1,      /* a(1) */
+       0       /* b(0) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_enum_specs_4 = {
+       asn_MAP_enum_value2enum_4,      /* "tag" => N; sorted by tag */
+       asn_MAP_enum_enum2value_4,      /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_enum_tags_4[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_enum_4 = {
+       "enum",
+       "enum",
+       &asn_OP_ENUMERATED,
+       asn_DEF_enum_tags_4,
+       sizeof(asn_DEF_enum_tags_4)
+               /sizeof(asn_DEF_enum_tags_4[0]) - 1, /* 1 */
+       asn_DEF_enum_tags_4,    /* Same as above */
+       sizeof(asn_DEF_enum_tags_4)
+               /sizeof(asn_DEF_enum_tags_4[0]), /* 2 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_enum_specs_4   /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_ExtensibleSet_1[] = {
+       { ATF_POINTER, 2, offsetof(struct ExtensibleSet, string),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "string"
+               },
+       { ATF_POINTER, 1, offsetof(struct ExtensibleSet, Enum),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_enum_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "enum"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ExtensibleSet_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ExtensibleSet_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* string */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enum */
+};
+static const uint8_t asn_MAP_ExtensibleSet_mmap_1[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (0 << 7) | (0 << 6)
+};
+asn_SET_specifics_t asn_SPC_ExtensibleSet_specs_1 = {
+       sizeof(struct ExtensibleSet),
+       offsetof(struct ExtensibleSet, _asn_ctx),
+       offsetof(struct ExtensibleSet, _presence_map),
+       .tag2el = asn_MAP_ExtensibleSet_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       asn_MAP_ExtensibleSet_tag2el_1, /* Same as above */
+       2,      /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_ExtensibleSet_mmap_1      /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_ExtensibleSet = {
+       "ExtensibleSet",
+       "ExtensibleSet",
+       &asn_OP_SET,
+       asn_DEF_ExtensibleSet_tags_1,
+       sizeof(asn_DEF_ExtensibleSet_tags_1)
+               /sizeof(asn_DEF_ExtensibleSet_tags_1[0]), /* 1 */
+       asn_DEF_ExtensibleSet_tags_1,   /* Same as above */
+       sizeof(asn_DEF_ExtensibleSet_tags_1)
+               /sizeof(asn_DEF_ExtensibleSet_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_ExtensibleSet_1,
+       2,      /* Elements count */
+       &asn_SPC_ExtensibleSet_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ExtensibleSequence] >>> ***/
+
+#include <UTF8String.h>
+#include <INTEGER.h>
+#include <GeneralizedTime.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ExtensibleSequence] >>> ***/
+
+typedef struct ExtensibleSequence {
+       UTF8String_t    *string;        /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       INTEGER_t       *integer;       /* OPTIONAL */
+       GeneralizedTime_t       *gtime;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ExtensibleSequence_t;
+
+/*** <<< FUNC-DECLS [ExtensibleSequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_ExtensibleSequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_ExtensibleSequence_1[3];
+
+/*** <<< STAT-DEFS [ExtensibleSequence] >>> ***/
+
+asn_TYPE_member_t asn_MBR_ExtensibleSequence_1[] = {
+       { ATF_POINTER, 3, offsetof(struct ExtensibleSequence, string),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "string"
+               },
+       { ATF_POINTER, 2, offsetof(struct ExtensibleSequence, integer),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "integer"
+               },
+       { ATF_POINTER, 1, offsetof(struct ExtensibleSequence, gtime),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_GeneralizedTime,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "gtime"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ExtensibleSequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ExtensibleSequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* string */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* integer */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gtime */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ExtensibleSequence_specs_1 = {
+       sizeof(struct ExtensibleSequence),
+       offsetof(struct ExtensibleSequence, _asn_ctx),
+       .tag2el = asn_MAP_ExtensibleSequence_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       1,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence = {
+       "ExtensibleSequence",
+       "ExtensibleSequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ExtensibleSequence_tags_1,
+       sizeof(asn_DEF_ExtensibleSequence_tags_1)
+               /sizeof(asn_DEF_ExtensibleSequence_tags_1[0]), /* 1 */
+       asn_DEF_ExtensibleSequence_tags_1,      /* Same as above */
+       sizeof(asn_DEF_ExtensibleSequence_tags_1)
+               /sizeof(asn_DEF_ExtensibleSequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ExtensibleSequence_1,
+       3,      /* Elements count */
+       &asn_SPC_ExtensibleSequence_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ExtensibleSequence2] >>> ***/
+
+#include <UTF8String.h>
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [ExtensibleSequence2] >>> ***/
+
+typedef struct ExtensibleSequence2 {
+       UTF8String_t    *string;        /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       INTEGER_t       *integer;       /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ExtensibleSequence2_t;
+
+/*** <<< FUNC-DECLS [ExtensibleSequence2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence2;
+extern asn_SEQUENCE_specifics_t asn_SPC_ExtensibleSequence2_specs_1;
+extern asn_TYPE_member_t asn_MBR_ExtensibleSequence2_1[2];
+
+/*** <<< STAT-DEFS [ExtensibleSequence2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_ExtensibleSequence2_1[] = {
+       { ATF_POINTER, 2, offsetof(struct ExtensibleSequence2, string),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_UTF8String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "string"
+               },
+       { ATF_POINTER, 1, offsetof(struct ExtensibleSequence2, integer),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "integer"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ExtensibleSequence2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ExtensibleSequence2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* string */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* integer */
+};
+asn_SEQUENCE_specifics_t asn_SPC_ExtensibleSequence2_specs_1 = {
+       sizeof(struct ExtensibleSequence2),
+       offsetof(struct ExtensibleSequence2, _asn_ctx),
+       .tag2el = asn_MAP_ExtensibleSequence2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       1,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence2 = {
+       "ExtensibleSequence2",
+       "ExtensibleSequence2",
+       &asn_OP_SEQUENCE,
+       asn_DEF_ExtensibleSequence2_tags_1,
+       sizeof(asn_DEF_ExtensibleSequence2_tags_1)
+               /sizeof(asn_DEF_ExtensibleSequence2_tags_1[0]), /* 1 */
+       asn_DEF_ExtensibleSequence2_tags_1,     /* Same as above */
+       sizeof(asn_DEF_ExtensibleSequence2_tags_1)
+               /sizeof(asn_DEF_ExtensibleSequence2_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_ExtensibleSequence2_1,
+       2,      /* Elements count */
+       &asn_SPC_ExtensibleSequence2_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SetOfNULL] >>> ***/
+
+#include <NULL.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [SetOfNULL] >>> ***/
+
+typedef struct SetOfNULL {
+       A_SET_OF(NULL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SetOfNULL_t;
+
+/*** <<< FUNC-DECLS [SetOfNULL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SetOfNULL;
+extern asn_SET_OF_specifics_t asn_SPC_SetOfNULL_specs_1;
+extern asn_TYPE_member_t asn_MBR_SetOfNULL_1[1];
+
+/*** <<< STAT-DEFS [SetOfNULL] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SetOfNULL_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SetOfNULL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SetOfNULL_specs_1 = {
+       sizeof(struct SetOfNULL),
+       offsetof(struct SetOfNULL, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_SetOfNULL = {
+       "SetOfNULL",
+       "SetOfNULL",
+       &asn_OP_SET_OF,
+       asn_DEF_SetOfNULL_tags_1,
+       sizeof(asn_DEF_SetOfNULL_tags_1)
+               /sizeof(asn_DEF_SetOfNULL_tags_1[0]), /* 1 */
+       asn_DEF_SetOfNULL_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SetOfNULL_tags_1)
+               /sizeof(asn_DEF_SetOfNULL_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_SetOfNULL_1,
+       1,      /* Single element */
+       &asn_SPC_SetOfNULL_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SetOfREAL] >>> ***/
+
+#include <REAL.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [SetOfREAL] >>> ***/
+
+typedef struct SetOfREAL {
+       A_SET_OF(REAL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SetOfREAL_t;
+
+/*** <<< FUNC-DECLS [SetOfREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SetOfREAL;
+extern asn_SET_OF_specifics_t asn_SPC_SetOfREAL_specs_1;
+extern asn_TYPE_member_t asn_MBR_SetOfREAL_1[1];
+
+/*** <<< STAT-DEFS [SetOfREAL] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SetOfREAL_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_REAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SetOfREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SetOfREAL_specs_1 = {
+       sizeof(struct SetOfREAL),
+       offsetof(struct SetOfREAL, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_SetOfREAL = {
+       "SetOfREAL",
+       "SetOfREAL",
+       &asn_OP_SET_OF,
+       asn_DEF_SetOfREAL_tags_1,
+       sizeof(asn_DEF_SetOfREAL_tags_1)
+               /sizeof(asn_DEF_SetOfREAL_tags_1[0]), /* 1 */
+       asn_DEF_SetOfREAL_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SetOfREAL_tags_1)
+               /sizeof(asn_DEF_SetOfREAL_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_SetOfREAL_1,
+       1,      /* Single element */
+       &asn_SPC_SetOfREAL_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SetOfEnums] >>> ***/
+
+#include <ENUMERATED.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< DEPS [SetOfEnums] >>> ***/
+
+typedef enum Member {
+       Member_one      = 0,
+       Member_oneMore  = 1
+} e_Member;
+
+/*** <<< TYPE-DECLS [SetOfEnums] >>> ***/
+
+typedef struct SetOfEnums {
+       A_SET_OF(ENUMERATED_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SetOfEnums_t;
+
+/*** <<< FUNC-DECLS [SetOfEnums] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_Member_2;      // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_SetOfEnums;
+extern asn_SET_OF_specifics_t asn_SPC_SetOfEnums_specs_1;
+extern asn_TYPE_member_t asn_MBR_SetOfEnums_1[1];
+
+/*** <<< CODE [SetOfEnums] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [SetOfEnums] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_Member_value2enum_2[] = {
+       { 0,    3,      "one" },
+       { 1,    7,      "oneMore" }
+};
+static const unsigned int asn_MAP_Member_enum2value_2[] = {
+       0,      /* one(0) */
+       1       /* oneMore(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_Member_specs_2 = {
+       asn_MAP_Member_value2enum_2,    /* "tag" => N; sorted by tag */
+       asn_MAP_Member_enum2value_2,    /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+       "ENUMERATED",
+       "ENUMERATED",
+       &asn_OP_ENUMERATED,
+       asn_DEF_Member_tags_2,
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       asn_DEF_Member_tags_2,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_Member_specs_2 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_SetOfEnums_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SetOfEnums_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SetOfEnums_specs_1 = {
+       sizeof(struct SetOfEnums),
+       offsetof(struct SetOfEnums, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_SetOfEnums = {
+       "SetOfEnums",
+       "SetOfEnums",
+       &asn_OP_SET_OF,
+       asn_DEF_SetOfEnums_tags_1,
+       sizeof(asn_DEF_SetOfEnums_tags_1)
+               /sizeof(asn_DEF_SetOfEnums_tags_1[0]), /* 1 */
+       asn_DEF_SetOfEnums_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SetOfEnums_tags_1)
+               /sizeof(asn_DEF_SetOfEnums_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_SetOfEnums_1,
+       1,      /* Single element */
+       &asn_SPC_SetOfEnums_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NamedSetOfNULL] >>> ***/
+
+#include <NULL.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [NamedSetOfNULL] >>> ***/
+
+typedef struct NamedSetOfNULL {
+       A_SET_OF(NULL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} NamedSetOfNULL_t;
+
+/*** <<< FUNC-DECLS [NamedSetOfNULL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NamedSetOfNULL;
+extern asn_SET_OF_specifics_t asn_SPC_NamedSetOfNULL_specs_1;
+extern asn_TYPE_member_t asn_MBR_NamedSetOfNULL_1[1];
+
+/*** <<< STAT-DEFS [NamedSetOfNULL] >>> ***/
+
+asn_TYPE_member_t asn_MBR_NamedSetOfNULL_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "y"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_NamedSetOfNULL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NamedSetOfNULL_specs_1 = {
+       sizeof(struct NamedSetOfNULL),
+       offsetof(struct NamedSetOfNULL, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_NamedSetOfNULL = {
+       "NamedSetOfNULL",
+       "NamedSetOfNULL",
+       &asn_OP_SET_OF,
+       asn_DEF_NamedSetOfNULL_tags_1,
+       sizeof(asn_DEF_NamedSetOfNULL_tags_1)
+               /sizeof(asn_DEF_NamedSetOfNULL_tags_1[0]), /* 1 */
+       asn_DEF_NamedSetOfNULL_tags_1,  /* Same as above */
+       sizeof(asn_DEF_NamedSetOfNULL_tags_1)
+               /sizeof(asn_DEF_NamedSetOfNULL_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_NamedSetOfNULL_1,
+       1,      /* Single element */
+       &asn_SPC_NamedSetOfNULL_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NamedSetOfREAL] >>> ***/
+
+#include <REAL.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< TYPE-DECLS [NamedSetOfREAL] >>> ***/
+
+typedef struct NamedSetOfREAL {
+       A_SET_OF(REAL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} NamedSetOfREAL_t;
+
+/*** <<< FUNC-DECLS [NamedSetOfREAL] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NamedSetOfREAL;
+extern asn_SET_OF_specifics_t asn_SPC_NamedSetOfREAL_specs_1;
+extern asn_TYPE_member_t asn_MBR_NamedSetOfREAL_1[1];
+
+/*** <<< STAT-DEFS [NamedSetOfREAL] >>> ***/
+
+asn_TYPE_member_t asn_MBR_NamedSetOfREAL_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_REAL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "name"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_NamedSetOfREAL_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NamedSetOfREAL_specs_1 = {
+       sizeof(struct NamedSetOfREAL),
+       offsetof(struct NamedSetOfREAL, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_NamedSetOfREAL = {
+       "NamedSetOfREAL",
+       "NamedSetOfREAL",
+       &asn_OP_SET_OF,
+       asn_DEF_NamedSetOfREAL_tags_1,
+       sizeof(asn_DEF_NamedSetOfREAL_tags_1)
+               /sizeof(asn_DEF_NamedSetOfREAL_tags_1[0]), /* 1 */
+       asn_DEF_NamedSetOfREAL_tags_1,  /* Same as above */
+       sizeof(asn_DEF_NamedSetOfREAL_tags_1)
+               /sizeof(asn_DEF_NamedSetOfREAL_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_NamedSetOfREAL_1,
+       1,      /* Single element */
+       &asn_SPC_NamedSetOfREAL_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NamedSetOfEnums] >>> ***/
+
+#include <ENUMERATED.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< DEPS [NamedSetOfEnums] >>> ***/
+
+typedef enum name {
+       name_one        = 0,
+       name_oneMore    = 1
+} e_name;
+
+/*** <<< TYPE-DECLS [NamedSetOfEnums] >>> ***/
+
+typedef struct NamedSetOfEnums {
+       A_SET_OF(ENUMERATED_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} NamedSetOfEnums_t;
+
+/*** <<< FUNC-DECLS [NamedSetOfEnums] >>> ***/
+
+/* extern asn_TYPE_descriptor_t asn_DEF_name_2;        // (Use -fall-defs-global to expose) */
+extern asn_TYPE_descriptor_t asn_DEF_NamedSetOfEnums;
+extern asn_SET_OF_specifics_t asn_SPC_NamedSetOfEnums_specs_1;
+extern asn_TYPE_member_t asn_MBR_NamedSetOfEnums_1[1];
+
+/*** <<< CODE [NamedSetOfEnums] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NamedSetOfEnums] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_name_value2enum_2[] = {
+       { 0,    3,      "one" },
+       { 1,    7,      "oneMore" }
+};
+static const unsigned int asn_MAP_name_enum2value_2[] = {
+       0,      /* one(0) */
+       1       /* oneMore(1) */
+};
+static const asn_INTEGER_specifics_t asn_SPC_name_specs_2 = {
+       asn_MAP_name_value2enum_2,      /* "tag" => N; sorted by tag */
+       asn_MAP_name_enum2value_2,      /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_name_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_name_2 = {
+       "ENUMERATED",
+       "ENUMERATED",
+       &asn_OP_ENUMERATED,
+       asn_DEF_name_tags_2,
+       sizeof(asn_DEF_name_tags_2)
+               /sizeof(asn_DEF_name_tags_2[0]), /* 1 */
+       asn_DEF_name_tags_2,    /* Same as above */
+       sizeof(asn_DEF_name_tags_2)
+               /sizeof(asn_DEF_name_tags_2[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_name_specs_2   /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_NamedSetOfEnums_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_name_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "name"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_NamedSetOfEnums_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NamedSetOfEnums_specs_1 = {
+       sizeof(struct NamedSetOfEnums),
+       offsetof(struct NamedSetOfEnums, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_NamedSetOfEnums = {
+       "NamedSetOfEnums",
+       "NamedSetOfEnums",
+       &asn_OP_SET_OF,
+       asn_DEF_NamedSetOfEnums_tags_1,
+       sizeof(asn_DEF_NamedSetOfEnums_tags_1)
+               /sizeof(asn_DEF_NamedSetOfEnums_tags_1[0]), /* 1 */
+       asn_DEF_NamedSetOfEnums_tags_1, /* Same as above */
+       sizeof(asn_DEF_NamedSetOfEnums_tags_1)
+               /sizeof(asn_DEF_NamedSetOfEnums_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_NamedSetOfEnums_1,
+       1,      /* Single element */
+       &asn_SPC_NamedSetOfEnums_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SequenceOf] >>> ***/
+
+#include <INTEGER.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< TYPE-DECLS [SequenceOf] >>> ***/
+
+typedef struct SequenceOf {
+       A_SEQUENCE_OF(INTEGER_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SequenceOf_t;
+
+/*** <<< FUNC-DECLS [SequenceOf] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SequenceOf;
+extern asn_SET_OF_specifics_t asn_SPC_SequenceOf_specs_1;
+extern asn_TYPE_member_t asn_MBR_SequenceOf_1[1];
+
+/*** <<< STAT-DEFS [SequenceOf] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SequenceOf_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "id"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SequenceOf_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SequenceOf_specs_1 = {
+       sizeof(struct SequenceOf),
+       offsetof(struct SequenceOf, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
+       "SequenceOf",
+       "SequenceOf",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_SequenceOf_tags_1,
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       asn_DEF_SequenceOf_tags_1,      /* Same as above */
+       sizeof(asn_DEF_SequenceOf_tags_1)
+               /sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_SequenceOf_1,
+       1,      /* Single element */
+       &asn_SPC_SequenceOf_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SeqOfZuka] >>> ***/
+
+#include <NULL.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+/*** <<< TYPE-DECLS [SeqOfZuka] >>> ***/
+
+typedef struct SeqOfZuka {
+       A_SEQUENCE_OF(NULL_t) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SeqOfZuka_t;
+
+/*** <<< FUNC-DECLS [SeqOfZuka] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SeqOfZuka;
+extern asn_SET_OF_specifics_t asn_SPC_SeqOfZuka_specs_1;
+extern asn_TYPE_member_t asn_MBR_SeqOfZuka_1[1];
+
+/*** <<< STAT-DEFS [SeqOfZuka] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SeqOfZuka_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "zuka"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SeqOfZuka_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SeqOfZuka_specs_1 = {
+       sizeof(struct SeqOfZuka),
+       offsetof(struct SeqOfZuka, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_SeqOfZuka = {
+       "SeqOfZuka",
+       "SeqOfZuka",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_SeqOfZuka_tags_1,
+       sizeof(asn_DEF_SeqOfZuka_tags_1)
+               /sizeof(asn_DEF_SeqOfZuka_tags_1[0]), /* 1 */
+       asn_DEF_SeqOfZuka_tags_1,       /* Same as above */
+       sizeof(asn_DEF_SeqOfZuka_tags_1)
+               /sizeof(asn_DEF_SeqOfZuka_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_SeqOfZuka_1,
+       1,      /* Single element */
+       &asn_SPC_SeqOfZuka_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SetOfChoice] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [SetOfChoice] >>> ***/
+
+struct SimpleChoice;
+
+/*** <<< TYPE-DECLS [SetOfChoice] >>> ***/
+
+typedef struct SetOfChoice {
+       A_SET_OF(struct SimpleChoice) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SetOfChoice_t;
+
+/*** <<< FUNC-DECLS [SetOfChoice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SetOfChoice;
+extern asn_SET_OF_specifics_t asn_SPC_SetOfChoice_specs_1;
+extern asn_TYPE_member_t asn_MBR_SetOfChoice_1[1];
+
+/*** <<< POST-INCLUDE [SetOfChoice] >>> ***/
+
+#include "SimpleChoice.h"
+
+/*** <<< STAT-DEFS [SetOfChoice] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SetOfChoice_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_SimpleChoice,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_SetOfChoice_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_SetOfChoice_specs_1 = {
+       sizeof(struct SetOfChoice),
+       offsetof(struct SetOfChoice, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_SetOfChoice = {
+       "SetOfChoice",
+       "SetOfChoice",
+       &asn_OP_SET_OF,
+       asn_DEF_SetOfChoice_tags_1,
+       sizeof(asn_DEF_SetOfChoice_tags_1)
+               /sizeof(asn_DEF_SetOfChoice_tags_1[0]), /* 1 */
+       asn_DEF_SetOfChoice_tags_1,     /* Same as above */
+       sizeof(asn_DEF_SetOfChoice_tags_1)
+               /sizeof(asn_DEF_SetOfChoice_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_SetOfChoice_1,
+       1,      /* Single element */
+       &asn_SPC_SetOfChoice_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NamedSetOfChoice] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [NamedSetOfChoice] >>> ***/
+
+struct SimpleChoice;
+
+/*** <<< TYPE-DECLS [NamedSetOfChoice] >>> ***/
+
+typedef struct NamedSetOfChoice {
+       A_SET_OF(struct SimpleChoice) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} NamedSetOfChoice_t;
+
+/*** <<< FUNC-DECLS [NamedSetOfChoice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NamedSetOfChoice;
+extern asn_SET_OF_specifics_t asn_SPC_NamedSetOfChoice_specs_1;
+extern asn_TYPE_member_t asn_MBR_NamedSetOfChoice_1[1];
+
+/*** <<< POST-INCLUDE [NamedSetOfChoice] >>> ***/
+
+#include "SimpleChoice.h"
+
+/*** <<< STAT-DEFS [NamedSetOfChoice] >>> ***/
+
+asn_TYPE_member_t asn_MBR_NamedSetOfChoice_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_SimpleChoice,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "whatever"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_NamedSetOfChoice_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_NamedSetOfChoice_specs_1 = {
+       sizeof(struct NamedSetOfChoice),
+       offsetof(struct NamedSetOfChoice, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+asn_TYPE_descriptor_t asn_DEF_NamedSetOfChoice = {
+       "NamedSetOfChoice",
+       "NamedSetOfChoice",
+       &asn_OP_SET_OF,
+       asn_DEF_NamedSetOfChoice_tags_1,
+       sizeof(asn_DEF_NamedSetOfChoice_tags_1)
+               /sizeof(asn_DEF_NamedSetOfChoice_tags_1[0]), /* 1 */
+       asn_DEF_NamedSetOfChoice_tags_1,        /* Same as above */
+       sizeof(asn_DEF_NamedSetOfChoice_tags_1)
+               /sizeof(asn_DEF_NamedSetOfChoice_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_NamedSetOfChoice_1,
+       1,      /* Single element */
+       &asn_SPC_NamedSetOfChoice_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SimpleChoice] >>> ***/
+
+#include <NULL.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [SimpleChoice] >>> ***/
+
+typedef enum SimpleChoice_PR {
+       SimpleChoice_PR_NOTHING,        /* No components present */
+       SimpleChoice_PR_a,
+       SimpleChoice_PR_b
+} SimpleChoice_PR;
+
+/*** <<< TYPE-DECLS [SimpleChoice] >>> ***/
+
+typedef struct SimpleChoice {
+       SimpleChoice_PR present;
+       union SimpleChoice_u {
+               NULL_t   a;
+               INTEGER_t        b;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} SimpleChoice_t;
+
+/*** <<< FUNC-DECLS [SimpleChoice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_SimpleChoice;
+extern asn_CHOICE_specifics_t asn_SPC_SimpleChoice_specs_1;
+extern asn_TYPE_member_t asn_MBR_SimpleChoice_1[2];
+
+/*** <<< STAT-DEFS [SimpleChoice] >>> ***/
+
+asn_TYPE_member_t asn_MBR_SimpleChoice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct SimpleChoice, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct SimpleChoice, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_SimpleChoice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */
+};
+asn_CHOICE_specifics_t asn_SPC_SimpleChoice_specs_1 = {
+       sizeof(struct SimpleChoice),
+       offsetof(struct SimpleChoice, _asn_ctx),
+       offsetof(struct SimpleChoice, present),
+       sizeof(((struct SimpleChoice *)0)->present),
+       .tag2el = asn_MAP_SimpleChoice_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_SimpleChoice = {
+       "SimpleChoice",
+       "SimpleChoice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_SimpleChoice_1,
+       2,      /* Elements count */
+       &asn_SPC_SimpleChoice_specs_1   /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/71-duplicate-types-SE.asn1 b/tests/tests-asn1c-compiler/71-duplicate-types-SE.asn1
new file mode 100644 (file)
index 0000000..64d340e
--- /dev/null
@@ -0,0 +1,27 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .71 1
+-- .71 2
+
+ModuleDuplicateTypes1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 71 1 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= INTEGER        -- Original type.
+
+END
+
+ModuleDuplicateTypes2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 71 2 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= INTEGER        -- A duplicate type.
+
+END
diff --git a/tests/tests-asn1c-compiler/72-same-names-OK.asn1 b/tests/tests-asn1c-compiler/72-same-names-OK.asn1
new file mode 100644 (file)
index 0000000..2ab4748
--- /dev/null
@@ -0,0 +1,46 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .72
+
+ModuleTestSameNames
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 72 }
+       DEFINITIONS ::=
+BEGIN
+
+       /*
+        * This test checks whether different top-level types containing
+        * similarly named inner types may be compiled by the target language
+        * compiler successfully. This was not the case before asn1c-0.9.11.
+        */
+
+       Type ::= SET OF SEQUENCE {
+                       t1      Type1,
+                       t2      Type2
+               }
+
+       Type1 ::= SEQUENCE {
+               one-name CHOICE {
+                       another-name SEQUENCE { a INTEGER, b INTEGER }
+               }
+       }
+
+       Type2 ::= CHOICE {
+               one-name SEQUENCE {
+                       another-name SEQUENCE {
+                               a BIT STRING { one(0) } (SIZE(2)),
+                               b INTEGER
+                       }
+               },
+               two-name SET {
+                       another-name SEQUENCE {
+                               a BIT STRING { one(0) } (SIZE(2)),
+                               b INTEGER
+                       }
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..7f53a51
--- /dev/null
@@ -0,0 +1,684 @@
+
+/*** <<< INCLUDES [Type] >>> ***/
+
+#include <asn_SET_OF.h>
+#include "Type1.h"
+#include "Type2.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DEFS [Type] >>> ***/
+
+typedef struct Member {
+       Type1_t  t1;
+       Type2_t  t2;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Member;
+
+/*** <<< TYPE-DECLS [Type] >>> ***/
+
+typedef struct Type {
+       A_SET_OF(Member) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type_t;
+
+/*** <<< FUNC-DECLS [Type] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type;
+
+/*** <<< STAT-DEFS [Type] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Member, t1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Type1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Member, t2),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_Type2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "t2"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 1 }, /* t1 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, -1, 0 }, /* one-name */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 } /* two-name */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+       sizeof(struct Member),
+       offsetof(struct Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_2,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_2,
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       asn_DEF_Member_tags_2,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_2,
+       2,      /* Elements count */
+       &asn_SPC_Member_specs_2 /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Type_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Type_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_Type_specs_1 = {
+       sizeof(struct Type),
+       offsetof(struct Type, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Type = {
+       "Type",
+       "Type",
+       &asn_OP_SET_OF,
+       asn_DEF_Type_tags_1,
+       sizeof(asn_DEF_Type_tags_1)
+               /sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
+       asn_DEF_Type_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Type_tags_1)
+               /sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Type_1,
+       1,      /* Single element */
+       &asn_SPC_Type_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Type1] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Type1] >>> ***/
+
+typedef enum one_name_PR {
+       one_name_PR_NOTHING,    /* No components present */
+       one_name_PR_another_name
+} one_name_PR;
+
+/*** <<< TYPE-DECLS [Type1] >>> ***/
+
+typedef struct Type1 {
+       struct one_name {
+               one_name_PR present;
+               union Type1__one_name_u {
+                       struct another_name {
+                               INTEGER_t        a;
+                               INTEGER_t        b;
+                               
+                               /* Context for parsing across buffer boundaries */
+                               asn_struct_ctx_t _asn_ctx;
+                       } another_name;
+               } choice;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } one_name;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type1_t;
+
+/*** <<< FUNC-DECLS [Type1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type1;
+extern asn_SEQUENCE_specifics_t asn_SPC_Type1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Type1_1[1];
+
+/*** <<< STAT-DEFS [Type1] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_another_name_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_another_name_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_another_name_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* a */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 } /* b */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_another_name_specs_3 = {
+       sizeof(struct another_name),
+       offsetof(struct another_name, _asn_ctx),
+       .tag2el = asn_MAP_another_name_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_another_name_3 = {
+       "another-name",
+       "another-name",
+       &asn_OP_SEQUENCE,
+       asn_DEF_another_name_tags_3,
+       sizeof(asn_DEF_another_name_tags_3)
+               /sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
+       asn_DEF_another_name_tags_3,    /* Same as above */
+       sizeof(asn_DEF_another_name_tags_3)
+               /sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_another_name_3,
+       2,      /* Elements count */
+       &asn_SPC_another_name_specs_3   /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_one_name_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct one_name, choice.another_name),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_another_name_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "another-name"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_one_name_tag2el_2[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* another-name */
+};
+static asn_CHOICE_specifics_t asn_SPC_one_name_specs_2 = {
+       sizeof(struct one_name),
+       offsetof(struct one_name, _asn_ctx),
+       offsetof(struct one_name, present),
+       sizeof(((struct one_name *)0)->present),
+       .tag2el = asn_MAP_one_name_tag2el_2,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_one_name_2 = {
+       "one-name",
+       "one-name",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_one_name_2,
+       1,      /* Elements count */
+       &asn_SPC_one_name_specs_2       /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Type1_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type1, one_name),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_one_name_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "one-name"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Type1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Type1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* another-name */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Type1_specs_1 = {
+       sizeof(struct Type1),
+       offsetof(struct Type1, _asn_ctx),
+       .tag2el = asn_MAP_Type1_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Type1 = {
+       "Type1",
+       "Type1",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Type1_tags_1,
+       sizeof(asn_DEF_Type1_tags_1)
+               /sizeof(asn_DEF_Type1_tags_1[0]), /* 1 */
+       asn_DEF_Type1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Type1_tags_1)
+               /sizeof(asn_DEF_Type1_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Type1_1,
+       1,      /* Elements count */
+       &asn_SPC_Type1_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Type2] >>> ***/
+
+#include <BIT_STRING.h>
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SET.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Type2] >>> ***/
+
+typedef enum Type2_PR {
+       Type2_PR_NOTHING,       /* No components present */
+       Type2_PR_one_name,
+       Type2_PR_two_name
+} Type2_PR;
+typedef enum a {
+       a_one   = 0
+} e_a;
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum two_name_PR {
+       two_name_PR_another_name,       /* Member another_name is present */
+} two_name_PR;
+typedef enum a {
+       a_one   = 0
+} e_a;
+
+/*** <<< TYPE-DECLS [Type2] >>> ***/
+
+typedef struct Type2 {
+       Type2_PR present;
+       union Type2_u {
+               struct one_name {
+                       struct another_name {
+                               BIT_STRING_t     a;
+                               INTEGER_t        b;
+                               
+                               /* Context for parsing across buffer boundaries */
+                               asn_struct_ctx_t _asn_ctx;
+                       } another_name;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } one_name;
+               struct two_name {
+                       struct another_name {
+                               BIT_STRING_t     a;
+                               INTEGER_t        b;
+                               
+                               /* Context for parsing across buffer boundaries */
+                               asn_struct_ctx_t _asn_ctx;
+                       } another_name;
+                       
+                       /* Presence bitmask: ASN_SET_ISPRESENT(ptwo_name, two_name_PR_x) */
+                       unsigned int _presence_map
+                               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } two_name;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type2_t;
+
+/*** <<< FUNC-DECLS [Type2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type2;
+extern asn_CHOICE_specifics_t asn_SPC_Type2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Type2_1[2];
+
+/*** <<< CODE [Type2] >>> ***/
+
+static int
+memb_a_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(st->size > 0) {
+               /* Size in bits */
+               size = 8 * st->size - (st->bits_unused & 0x07);
+       } else {
+               size = 0;
+       }
+       
+       if((size == 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_a_constraint_8(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
+       size_t size;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(st->size > 0) {
+               /* Size in bits */
+               size = 8 * st->size - (st->bits_unused & 0x07);
+       } else {
+               size = 0;
+       }
+       
+       if((size == 2)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Type2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_another_name_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_a_constraint_3 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_another_name_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_another_name_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* a */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_another_name_specs_3 = {
+       sizeof(struct another_name),
+       offsetof(struct another_name, _asn_ctx),
+       .tag2el = asn_MAP_another_name_tag2el_3,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_another_name_3 = {
+       "another-name",
+       "another-name",
+       &asn_OP_SEQUENCE,
+       asn_DEF_another_name_tags_3,
+       sizeof(asn_DEF_another_name_tags_3)
+               /sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
+       asn_DEF_another_name_tags_3,    /* Same as above */
+       sizeof(asn_DEF_another_name_tags_3)
+               /sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_another_name_3,
+       2,      /* Elements count */
+       &asn_SPC_another_name_specs_3   /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_one_name_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct one_name, another_name),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_another_name_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "another-name"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_one_name_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_one_name_tag2el_2[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* another-name */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_one_name_specs_2 = {
+       sizeof(struct one_name),
+       offsetof(struct one_name, _asn_ctx),
+       .tag2el = asn_MAP_one_name_tag2el_2,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_one_name_2 = {
+       "one-name",
+       "one-name",
+       &asn_OP_SEQUENCE,
+       asn_DEF_one_name_tags_2,
+       sizeof(asn_DEF_one_name_tags_2)
+               /sizeof(asn_DEF_one_name_tags_2[0]), /* 1 */
+       asn_DEF_one_name_tags_2,        /* Same as above */
+       sizeof(asn_DEF_one_name_tags_2)
+               /sizeof(asn_DEF_one_name_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_one_name_2,
+       1,      /* Elements count */
+       &asn_SPC_one_name_specs_2       /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_another_name_8[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, a),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_a_constraint_8 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct another_name, b),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_another_name_tags_8[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_another_name_tag2el_8[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* a */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_another_name_specs_8 = {
+       sizeof(struct another_name),
+       offsetof(struct another_name, _asn_ctx),
+       .tag2el = asn_MAP_another_name_tag2el_8,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_another_name_8 = {
+       "another-name",
+       "another-name",
+       &asn_OP_SEQUENCE,
+       asn_DEF_another_name_tags_8,
+       sizeof(asn_DEF_another_name_tags_8)
+               /sizeof(asn_DEF_another_name_tags_8[0]), /* 1 */
+       asn_DEF_another_name_tags_8,    /* Same as above */
+       sizeof(asn_DEF_another_name_tags_8)
+               /sizeof(asn_DEF_another_name_tags_8[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_another_name_8,
+       2,      /* Elements count */
+       &asn_SPC_another_name_specs_8   /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_two_name_7[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct two_name, another_name),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_another_name_8,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "another-name"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_two_name_tags_7[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_two_name_tag2el_7[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* another-name */
+};
+static const uint8_t asn_MAP_two_name_mmap_7[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+static 
+asn_SET_specifics_t asn_SPC_two_name_specs_7 = {
+       sizeof(struct two_name),
+       offsetof(struct two_name, _asn_ctx),
+       offsetof(struct two_name, _presence_map),
+       .tag2el = asn_MAP_two_name_tag2el_7,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_two_name_tag2el_7,      /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_two_name_mmap_7   /* Mandatory elements map */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_two_name_7 = {
+       "two-name",
+       "two-name",
+       &asn_OP_SET,
+       asn_DEF_two_name_tags_7,
+       sizeof(asn_DEF_two_name_tags_7)
+               /sizeof(asn_DEF_two_name_tags_7[0]), /* 1 */
+       asn_DEF_two_name_tags_7,        /* Same as above */
+       sizeof(asn_DEF_two_name_tags_7)
+               /sizeof(asn_DEF_two_name_tags_7[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_two_name_7,
+       1,      /* Elements count */
+       &asn_SPC_two_name_specs_7       /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Type2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type2, choice.one_name),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_one_name_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "one-name"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Type2, choice.two_name),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_two_name_7,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "two-name"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Type2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* one-name */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 } /* two-name */
+};
+asn_CHOICE_specifics_t asn_SPC_Type2_specs_1 = {
+       sizeof(struct Type2),
+       offsetof(struct Type2, _asn_ctx),
+       offsetof(struct Type2, present),
+       sizeof(((struct Type2 *)0)->present),
+       .tag2el = asn_MAP_Type2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Type2 = {
+       "Type2",
+       "Type2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Type2_1,
+       2,      /* Elements count */
+       &asn_SPC_Type2_specs_1  /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/73-circular-OK.asn1 b/tests/tests-asn1c-compiler/73-circular-OK.asn1
new file mode 100644 (file)
index 0000000..c4d1ea5
--- /dev/null
@@ -0,0 +1,36 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .73
+
+ModuleTestCircularReferences
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 73 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               data SEQUENCE OF EpytRef
+       }
+
+       EpytRef ::= Epyt
+
+       Epyt ::= SEQUENCE {
+               stype   SET OF Type,
+               type    Type OPTIONAL,
+               ypet    Ypet OPTIONAL
+       }
+
+       Ypet ::= SET {
+               epyt    Epyt,
+               plain   INTEGER DEFAULT 7,
+               senums  SET OF EnumType,
+               patest1 [1] IA5String (FROM("A".."Z")),
+               patest2 [2] IA5String (FROM("a".."z"))
+       }
+
+       EnumType ::= ENUMERATED { one, two }
+
+END
diff --git a/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..c29bdff
--- /dev/null
@@ -0,0 +1,662 @@
+
+/*** <<< INCLUDES [Type] >>> ***/
+
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Type] >>> ***/
+
+struct EpytRef;
+
+/*** <<< TYPE-DECLS [Type] >>> ***/
+
+typedef struct Type {
+       struct data {
+               A_SEQUENCE_OF(struct EpytRef) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } data;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Type_t;
+
+/*** <<< FUNC-DECLS [Type] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Type;
+extern asn_SEQUENCE_specifics_t asn_SPC_Type_specs_1;
+extern asn_TYPE_member_t asn_MBR_Type_1[1];
+
+/*** <<< POST-INCLUDE [Type] >>> ***/
+
+#include "EpytRef.h"
+
+/*** <<< STAT-DEFS [Type] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_data_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_EpytRef,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_data_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_data_specs_2 = {
+       sizeof(struct data),
+       offsetof(struct data, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_data_2 = {
+       "data",
+       "data",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_data_tags_2,
+       sizeof(asn_DEF_data_tags_2)
+               /sizeof(asn_DEF_data_tags_2[0]), /* 1 */
+       asn_DEF_data_tags_2,    /* Same as above */
+       sizeof(asn_DEF_data_tags_2)
+               /sizeof(asn_DEF_data_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_data_2,
+       1,      /* Single element */
+       &asn_SPC_data_specs_2   /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Type_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Type, data),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_data_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "data"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Type_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Type_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* data */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Type_specs_1 = {
+       sizeof(struct Type),
+       offsetof(struct Type, _asn_ctx),
+       .tag2el = asn_MAP_Type_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Type = {
+       "Type",
+       "Type",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Type_tags_1,
+       sizeof(asn_DEF_Type_tags_1)
+               /sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
+       asn_DEF_Type_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Type_tags_1)
+               /sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Type_1,
+       1,      /* Elements count */
+       &asn_SPC_Type_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [EpytRef] >>> ***/
+
+#include "Epyt.h"
+
+/*** <<< TYPE-DECLS [EpytRef] >>> ***/
+
+typedef Epyt_t  EpytRef_t;
+
+/*** <<< FUNC-DECLS [EpytRef] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EpytRef;
+asn_struct_free_f EpytRef_free;
+asn_struct_print_f EpytRef_print;
+asn_constr_check_f EpytRef_constraint;
+ber_type_decoder_f EpytRef_decode_ber;
+der_type_encoder_f EpytRef_encode_der;
+xer_type_decoder_f EpytRef_decode_xer;
+xer_type_encoder_f EpytRef_encode_xer;
+
+/*** <<< CODE [EpytRef] >>> ***/
+
+/*
+ * This type is implemented using Epyt,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [EpytRef] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_EpytRef_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EpytRef = {
+       "EpytRef",
+       "EpytRef",
+       &asn_OP_SEQUENCE,
+       asn_DEF_EpytRef_tags_1,
+       sizeof(asn_DEF_EpytRef_tags_1)
+               /sizeof(asn_DEF_EpytRef_tags_1[0]), /* 1 */
+       asn_DEF_EpytRef_tags_1, /* Same as above */
+       sizeof(asn_DEF_EpytRef_tags_1)
+               /sizeof(asn_DEF_EpytRef_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Epyt_1,
+       3,      /* Elements count */
+       &asn_SPC_Epyt_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Epyt] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Epyt] >>> ***/
+
+struct Type;
+struct Ypet;
+
+/*** <<< TYPE-DECLS [Epyt] >>> ***/
+
+typedef struct Epyt {
+       struct stype {
+               A_SET_OF(struct Type) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } stype;
+       struct Type     *type;  /* OPTIONAL */
+       struct Ypet     *ypet;  /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Epyt_t;
+
+/*** <<< FUNC-DECLS [Epyt] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Epyt;
+extern asn_SEQUENCE_specifics_t asn_SPC_Epyt_specs_1;
+extern asn_TYPE_member_t asn_MBR_Epyt_1[3];
+
+/*** <<< POST-INCLUDE [Epyt] >>> ***/
+
+#include "Type.h"
+#include "Ypet.h"
+
+/*** <<< STAT-DEFS [Epyt] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_stype_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Type,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_stype_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_stype_specs_2 = {
+       sizeof(struct stype),
+       offsetof(struct stype, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_stype_2 = {
+       "stype",
+       "stype",
+       &asn_OP_SET_OF,
+       asn_DEF_stype_tags_2,
+       sizeof(asn_DEF_stype_tags_2)
+               /sizeof(asn_DEF_stype_tags_2[0]), /* 1 */
+       asn_DEF_stype_tags_2,   /* Same as above */
+       sizeof(asn_DEF_stype_tags_2)
+               /sizeof(asn_DEF_stype_tags_2[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_stype_2,
+       1,      /* Single element */
+       &asn_SPC_stype_specs_2  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Epyt_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Epyt, stype),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_stype_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "stype"
+               },
+       { ATF_POINTER, 2, offsetof(struct Epyt, type),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Type,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "type"
+               },
+       { ATF_POINTER, 1, offsetof(struct Epyt, ypet),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Ypet,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ypet"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Epyt_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Epyt_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 0 }, /* type */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 1 }, /* stype */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 2, -1, 0 } /* ypet */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Epyt_specs_1 = {
+       sizeof(struct Epyt),
+       offsetof(struct Epyt, _asn_ctx),
+       .tag2el = asn_MAP_Epyt_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Epyt = {
+       "Epyt",
+       "Epyt",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Epyt_tags_1,
+       sizeof(asn_DEF_Epyt_tags_1)
+               /sizeof(asn_DEF_Epyt_tags_1[0]), /* 1 */
+       asn_DEF_Epyt_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Epyt_tags_1)
+               /sizeof(asn_DEF_Epyt_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Epyt_1,
+       3,      /* Elements count */
+       &asn_SPC_Epyt_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Ypet] >>> ***/
+
+#include <INTEGER.h>
+#include <IA5String.h>
+#include "EnumType.h"
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Ypet] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Ypet_PR {
+       Ypet_PR_epyt,   /* Member epyt is present */
+       Ypet_PR_plain,  /* Member plain is present */
+       Ypet_PR_senums, /* Member senums is present */
+       Ypet_PR_patest1,        /* Member patest1 is present */
+       Ypet_PR_patest2,        /* Member patest2 is present */
+} Ypet_PR;
+
+/*** <<< FWD-DECLS [Ypet] >>> ***/
+
+struct Epyt;
+
+/*** <<< TYPE-DECLS [Ypet] >>> ***/
+
+typedef struct Ypet {
+       struct Epyt     *epyt;
+       INTEGER_t       *plain; /* DEFAULT 7 */
+       struct senums {
+               A_SET_OF(EnumType_t) list;
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } senums;
+       IA5String_t      patest1;
+       IA5String_t      patest2;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pYpet, Ypet_PR_x) */
+       unsigned int _presence_map
+               [((5+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Ypet_t;
+
+/*** <<< FUNC-DECLS [Ypet] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Ypet;
+extern asn_SET_specifics_t asn_SPC_Ypet_specs_1;
+extern asn_TYPE_member_t asn_MBR_Ypet_1[5];
+
+/*** <<< POST-INCLUDE [Ypet] >>> ***/
+
+#include "Epyt.h"
+
+/*** <<< CTABLES [Ypet] >>> ***/
+
+static int check_permitted_alphabet_6(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 65 && cv <= 90)) return -1;
+       }
+       return 0;
+}
+
+static int check_permitted_alphabet_7(const void *sptr) {
+       /* The underlying type is IA5String */
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       const uint8_t *ch = st->buf;
+       const uint8_t *end = ch + st->size;
+       
+       for(; ch < end; ch++) {
+               uint8_t cv = *ch;
+               if(!(cv >= 97 && cv <= 122)) return -1;
+       }
+       return 0;
+}
+
+
+/*** <<< CODE [Ypet] >>> ***/
+
+static int
+memb_patest1_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_6(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_patest2_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const IA5String_t *st = (const IA5String_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(!check_permitted_alphabet_7(st)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [Ypet] >>> ***/
+
+static int asn_DFL_3_cmp_7(const void *sptr) {
+       const INTEGER_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 7 */
+       long value;
+       if(asn_INTEGER2long(st, &value))
+               return -1;
+       return (value != 7);
+}
+static int asn_DFL_3_set_7(void **sptr) {
+       INTEGER_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 7 */
+       return asn_long2INTEGER(st, 7);
+}
+static asn_TYPE_member_t asn_MBR_senums_4[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_EnumType,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_senums_tags_4[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_senums_specs_4 = {
+       sizeof(struct senums),
+       offsetof(struct senums, _asn_ctx),
+       1,      /* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_senums_4 = {
+       "senums",
+       "senums",
+       &asn_OP_SET_OF,
+       asn_DEF_senums_tags_4,
+       sizeof(asn_DEF_senums_tags_4)
+               /sizeof(asn_DEF_senums_tags_4[0]), /* 1 */
+       asn_DEF_senums_tags_4,  /* Same as above */
+       sizeof(asn_DEF_senums_tags_4)
+               /sizeof(asn_DEF_senums_tags_4[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_senums_4,
+       1,      /* Single element */
+       &asn_SPC_senums_specs_4 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Ypet_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Ypet, epyt),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Epyt,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "epyt"
+               },
+       { ATF_POINTER, 1, offsetof(struct Ypet, plain),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_3_cmp_7,  /* Compare DEFAULT 7 */
+               .default_value_set = &asn_DFL_3_set_7,  /* Set DEFAULT 7 */
+               .name = "plain"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Ypet, senums),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_senums_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "senums"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Ypet, patest1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_patest1_constraint_1 },
+               0, 0, /* No default value */
+               .name = "patest1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Ypet, patest2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_patest2_constraint_1 },
+               0, 0, /* No default value */
+               .name = "patest2"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Ypet_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Ypet_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* plain */
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* epyt */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 2, 0, 0 }, /* senums */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 3, 0, 0 }, /* patest1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 4, 0, 0 } /* patest2 */
+};
+static const uint8_t asn_MAP_Ypet_mmap_1[(5 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (0 << 6) | (1 << 5) | (1 << 4) | (1 << 3)
+};
+asn_SET_specifics_t asn_SPC_Ypet_specs_1 = {
+       sizeof(struct Ypet),
+       offsetof(struct Ypet, _asn_ctx),
+       offsetof(struct Ypet, _presence_map),
+       .tag2el = asn_MAP_Ypet_tag2el_1,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       asn_MAP_Ypet_tag2el_1,  /* Same as above */
+       5,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Ypet_mmap_1       /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Ypet = {
+       "Ypet",
+       "Ypet",
+       &asn_OP_SET,
+       asn_DEF_Ypet_tags_1,
+       sizeof(asn_DEF_Ypet_tags_1)
+               /sizeof(asn_DEF_Ypet_tags_1[0]), /* 1 */
+       asn_DEF_Ypet_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Ypet_tags_1)
+               /sizeof(asn_DEF_Ypet_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Ypet_1,
+       5,      /* Elements count */
+       &asn_SPC_Ypet_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [EnumType] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [EnumType] >>> ***/
+
+typedef enum EnumType {
+       EnumType_one    = 0,
+       EnumType_two    = 1
+} e_EnumType;
+
+/*** <<< TYPE-DECLS [EnumType] >>> ***/
+
+typedef ENUMERATED_t    EnumType_t;
+
+/*** <<< FUNC-DECLS [EnumType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_EnumType;
+extern const asn_INTEGER_specifics_t asn_SPC_EnumType_specs_1;
+asn_struct_free_f EnumType_free;
+asn_struct_print_f EnumType_print;
+asn_constr_check_f EnumType_constraint;
+ber_type_decoder_f EnumType_decode_ber;
+der_type_encoder_f EnumType_encode_der;
+xer_type_decoder_f EnumType_decode_xer;
+xer_type_encoder_f EnumType_encode_xer;
+
+/*** <<< CODE [EnumType] >>> ***/
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [EnumType] >>> ***/
+
+static const asn_INTEGER_enum_map_t asn_MAP_EnumType_value2enum_1[] = {
+       { 0,    3,      "one" },
+       { 1,    3,      "two" }
+};
+static const unsigned int asn_MAP_EnumType_enum2value_1[] = {
+       0,      /* one(0) */
+       1       /* two(1) */
+};
+const asn_INTEGER_specifics_t asn_SPC_EnumType_specs_1 = {
+       asn_MAP_EnumType_value2enum_1,  /* "tag" => N; sorted by tag */
+       asn_MAP_EnumType_enum2value_1,  /* N => "tag"; sorted by N */
+       2,      /* Number of elements in the maps */
+       0,      /* Enumeration is not extensible */
+       1,      /* Strict enumeration */
+       0,      /* Native long size */
+       0
+};
+static const ber_tlv_tag_t asn_DEF_EnumType_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_EnumType = {
+       "EnumType",
+       "EnumType",
+       &asn_OP_ENUMERATED,
+       asn_DEF_EnumType_tags_1,
+       sizeof(asn_DEF_EnumType_tags_1)
+               /sizeof(asn_DEF_EnumType_tags_1[0]), /* 1 */
+       asn_DEF_EnumType_tags_1,        /* Same as above */
+       sizeof(asn_DEF_EnumType_tags_1)
+               /sizeof(asn_DEF_EnumType_tags_1[0]), /* 1 */
+       { 0, 0, ENUMERATED_constraint },
+       0, 0,   /* Defined elsewhere */
+       &asn_SPC_EnumType_specs_1       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1 b/tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1
new file mode 100644 (file)
index 0000000..9697788
--- /dev/null
@@ -0,0 +1,22 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .74
+
+ModuleTestIntegerAndEnumeratedConstraints
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 74 }
+       DEFINITIONS ::=
+BEGIN
+
+       -- Enumeration constrained by the second choice.
+       Enum ::= ENUMERATED { one, two } (two|one)
+
+       -- Integer constrained by the only choice.
+       Int ::= INTEGER { v1-0(123) } (v1-0)
+
+       EnumRef ::= Enum (two)
+
+END
diff --git a/tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/74-int-enum-constraints-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..23d44de
--- /dev/null
@@ -0,0 +1,42 @@
+ModuleTestIntegerAndEnumeratedConstraints { iso org(3) dod(6) internet(1)
+       private(4) enterprise(1) spelio(9363) software(1) asn1c(5) test(1)
+       74 }
+DEFINITIONS ::=
+BEGIN
+
+Enum ::= ENUMERATED {
+    one(0)
+-- Practical constraints (one):   
+-- OER-visible constraints (one):   
+-- PER-visible constraints (one):   
+,
+    two(1)
+-- Practical constraints (two):   
+-- OER-visible constraints (two):   
+-- PER-visible constraints (two):   
+
+} (1 | 0)
+-- Combined constraints: (1 | 0)
+-- Practical constraints (Enum): (0..1)  
+-- OER-visible constraints (Enum): (0..1)  
+-- PER-visible constraints (Enum): (0..1)  
+
+Int ::= INTEGER {
+    v1-0(123)
+-- Practical constraints (v1-0):   
+-- OER-visible constraints (v1-0):   
+-- PER-visible constraints (v1-0):   
+
+} (123)
+-- Combined constraints: (123)
+-- Practical constraints (Int): (123)  
+-- OER-visible constraints (Int): (123)  
+-- PER-visible constraints (Int): (123)  
+
+EnumRef ::= Enum (1)
+-- Combined constraints: (1 | 0) (1)
+-- Practical constraints (Enum): (1)  
+-- OER-visible constraints (Enum): (1)  
+-- PER-visible constraints (Enum): (1)  
+
+END
diff --git a/tests/tests-asn1c-compiler/75-duplicate-modules-SE.asn1 b/tests/tests-asn1c-compiler/75-duplicate-modules-SE.asn1
new file mode 100644 (file)
index 0000000..a17189f
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .75 1
+-- .75 1
+
+ModuleDuplicateModuleName
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 75 1 }
+       DEFINITIONS ::=
+BEGIN
+
+END
+
+ModuleDuplicateModuleName
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 75 1 }
+       DEFINITIONS ::=
+BEGIN
+
+END
diff --git a/tests/tests-asn1c-compiler/76-duplicate-modules-SW.asn1 b/tests/tests-asn1c-compiler/76-duplicate-modules-SW.asn1
new file mode 100644 (file)
index 0000000..d7d254b
--- /dev/null
@@ -0,0 +1,23 @@
+
+-- SW: Semantically suspicious
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .76 1
+-- .76 2
+
+ModuleDuplicateModuleName
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 76 1 }
+       DEFINITIONS ::=
+BEGIN
+
+END
+
+ModuleDuplicateModuleName
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 76 2 }
+       DEFINITIONS ::=
+BEGIN
+
+END
diff --git a/tests/tests-asn1c-compiler/77-str-default-OK.asn1 b/tests/tests-asn1c-compiler/77-str-default-OK.asn1
new file mode 100644 (file)
index 0000000..64c9137
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .77
+
+ModuleTestStringDefault1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 77 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               cntry  PRString DEFAULT country1,
+               cntry1 PrintableString DEFAULT country1,
+               cntry2 UniversalString DEFAULT country2,
+               ...
+       }
+
+       country1 PrintableString ::= "Rwanda"
+       country2 PRString ::= "United Kingdom"
+
+       PRString ::= PrintableString
+
+END
diff --git a/tests/tests-asn1c-compiler/78-str-default-SE.asn1 b/tests/tests-asn1c-compiler/78-str-default-SE.asn1
new file mode 100644 (file)
index 0000000..787d61f
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .78
+
+ModuleTestStringDefault2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 78 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               country  UTF8String DEFAULT country1,
+               ...
+       }
+
+       country1 GeneralString ::= "Cyprus"
+
+END
diff --git a/tests/tests-asn1c-compiler/79-constrained-by-OK.asn1 b/tests/tests-asn1c-compiler/79-constrained-by-OK.asn1
new file mode 100644 (file)
index 0000000..abbcae5
--- /dev/null
@@ -0,0 +1,19 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .79
+
+ModuleTestConstrainedBy
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 79 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               int     INTEGER,
+               ...
+       } (CONSTRAINED BY { -- nothing -- })
+
+END
diff --git a/tests/tests-asn1c-compiler/79-constrained-by-OK.asn1.-EF b/tests/tests-asn1c-compiler/79-constrained-by-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..f462be0
--- /dev/null
@@ -0,0 +1,11 @@
+ModuleTestConstrainedBy { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 79 }
+DEFINITIONS ::=
+BEGIN
+
+Type ::= SEQUENCE {
+    int         INTEGER,
+    ...
+} (CONSTRAINED BY { -- nothing -- })
+
+END
diff --git a/tests/tests-asn1c-compiler/80-chardefs-OK.asn1 b/tests/tests-asn1c-compiler/80-chardefs-OK.asn1
new file mode 100644 (file)
index 0000000..52b0eda
--- /dev/null
@@ -0,0 +1,25 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .80
+
+ModuleCharacterDefinitions
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 80 }
+       DEFINITIONS ::=
+BEGIN
+       -- Elements taken from ASN1-CHARACTER-MODULE (X.680:07/2002)
+       -- { joint-iso-itu-t asn1(1) specification(0) modules(0) iso10646(0) }
+       nul IA5String ::= {0, 0}
+       null BMPString ::= {0, 0, 0, 0}
+       space BMPString ::= {0, 0, 0, 32}
+       tilde BMPString ::= {0, 0, 0, 126}
+
+       BasicLatin ::= BMPString(FROM (space..tilde))
+       BasicGreek ::= BMPString(FROM ({0, 0, 3, 112}..{0, 0, 3, 207}))
+
+       NotSpace ::= BMPString (FROM(ALL EXCEPT space))
+
+END
diff --git a/tests/tests-asn1c-compiler/81-type-default-OK.asn1 b/tests/tests-asn1c-compiler/81-type-default-OK.asn1
new file mode 100644 (file)
index 0000000..e1fe6a1
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .81
+
+ModuleTestTypeDefault1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 81 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type ::= SEQUENCE {
+               other   SEQUENCE {
+                       member-1 INTEGER
+               } DEFAULT { member-1 5 }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/82-with-comps-OK.asn1 b/tests/tests-asn1c-compiler/82-with-comps-OK.asn1
new file mode 100644 (file)
index 0000000..adb44e0
--- /dev/null
@@ -0,0 +1,21 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .82
+
+ModuleTestWithComponents
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 82 }
+       DEFINITIONS ::=
+BEGIN
+
+       BunchOfStrings ::= SEQUENCE OF VisibleString
+       Address ::= BunchOfStrings (SIZE (1..6)) (WITH COMPONENT (SIZE (1..32)))
+
+       Type ::= SEQUENCE {
+               one INTEGER DEFAULT 1
+       } (WITH COMPONENTS { ..., one (1) PRESENT })
+
+END
diff --git a/tests/tests-asn1c-compiler/82-with-comps-OK.asn1.-EF b/tests/tests-asn1c-compiler/82-with-comps-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..4d353b8
--- /dev/null
@@ -0,0 +1,14 @@
+ModuleTestWithComponents { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 82 }
+DEFINITIONS ::=
+BEGIN
+
+BunchOfStrings ::= SEQUENCE OF VisibleString
+
+Address ::= BunchOfStrings (SIZE(1..6)) (WITH COMPONENT (SIZE(1..32)))
+
+Type ::= SEQUENCE {
+    one         INTEGER DEFAULT 1
+} (WITH COMPONENTS { ..., one (1) PRESENT })
+
+END
diff --git a/tests/tests-asn1c-compiler/83-with-comps-OK.asn1 b/tests/tests-asn1c-compiler/83-with-comps-OK.asn1
new file mode 100644 (file)
index 0000000..9837255
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .83
+
+ModuleTestWithComponents2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 83 }
+       DEFINITIONS ::=
+BEGIN
+
+       Type1 ::= SET { foo INTEGER OPTIONAL }
+
+       Type2 ::= SET {
+               COMPONENTS OF Type1 (WITH COMPONENTS { ..., foo ABSENT })
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/84-param-tags-OK.asn1 b/tests/tests-asn1c-compiler/84-param-tags-OK.asn1
new file mode 100644 (file)
index 0000000..cddf846
--- /dev/null
@@ -0,0 +1,41 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .84 1
+-- .84 2
+
+ModuleTestParameterizationTags1
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 84 1 }
+       DEFINITIONS ::=
+BEGIN
+
+       TestType {Parameter} ::= SEQUENCE { 
+               common  Parameter       DEFAULT 0
+       } 
+
+       TestChoice ::= CHOICE { 
+               type1 TestType {INTEGER (1..10)},
+               type2 [0] IMPLICIT TestType {BOOLEAN} 
+       } 
+
+END
+
+ModuleTestParameterizationTagsAuto2
+       { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 84 2 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       AutoType {Parameter} ::= SEQUENCE { 
+               common Parameter (0)
+       } 
+
+       AutoChoice ::= CHOICE { 
+               type1 AutoType {INTEGER (0..1)},
+               type2 AutoType {BOOLEAN}
+       } 
+
+END
diff --git a/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-EF b/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..a307434
--- /dev/null
@@ -0,0 +1,31 @@
+ModuleTestParameterizationTags1 { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 84 1 }
+DEFINITIONS ::=
+BEGIN
+
+TestType{Parameter} ::= SEQUENCE {
+    common      Parameter DEFAULT 0
+}
+
+TestChoice ::= CHOICE {
+    type1       TestType{ INTEGER (1..10)},
+    type2       [0] IMPLICIT TestType{ BOOLEAN}
+}
+
+END
+
+ModuleTestParameterizationTagsAuto2 { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 84 2 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+AutoType{Parameter} ::= SEQUENCE {
+    common      Parameter (0)
+}
+
+AutoChoice ::= CHOICE {
+    type1       [0] IMPLICIT AutoType{ INTEGER (0..1)},
+    type2       [1] IMPLICIT AutoType{ BOOLEAN}
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..e1d5721
--- /dev/null
@@ -0,0 +1,519 @@
+
+/*** <<< INCLUDES [TestType] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <BOOLEAN.h>
+
+/*** <<< TYPE-DECLS [TestType] >>> ***/
+
+typedef struct TestType_16P0 {
+       long     common;        /* DEFAULT 0 */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TestType_16P0_t;
+typedef struct TestType_16P1 {
+       BOOLEAN_t        common;        /* DEFAULT 0 */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TestType_16P1_t;
+
+/*** <<< FUNC-DECLS [TestType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TestType_16P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_TestType_16P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_TestType_16P0_1[1];
+extern asn_TYPE_descriptor_t asn_DEF_TestType_16P1;
+extern asn_SEQUENCE_specifics_t asn_SPC_TestType_16P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_TestType_16P1_3[1];
+
+/*** <<< CODE [TestType] >>> ***/
+
+static int
+memb_common_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= 1 && value <= 10)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [TestType] >>> ***/
+
+static int asn_DFL_2_cmp_0(const void *sptr) {
+       const long *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 0 */
+       return (*st != 0);
+}
+static int asn_DFL_2_set_0(void **sptr) {
+       long *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 0 */
+       *st = 0;
+       return 0;
+}
+asn_TYPE_member_t asn_MBR_TestType_16P0_1[] = {
+       { ATF_NOFLAGS, 1, offsetof(struct TestType_16P0, common),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_common_constraint_1 },
+               .default_value_cmp = &asn_DFL_2_cmp_0,  /* Compare DEFAULT 0 */
+               .default_value_set = &asn_DFL_2_set_0,  /* Set DEFAULT 0 */
+               .name = "common"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TestType_16P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TestType_16P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 } /* common */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TestType_16P0_specs_1 = {
+       sizeof(struct TestType_16P0),
+       offsetof(struct TestType_16P0, _asn_ctx),
+       .tag2el = asn_MAP_TestType_16P0_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_TestType_16P0 = {
+       "TestType",
+       "TestType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_TestType_16P0_tags_1,
+       sizeof(asn_DEF_TestType_16P0_tags_1)
+               /sizeof(asn_DEF_TestType_16P0_tags_1[0]), /* 1 */
+       asn_DEF_TestType_16P0_tags_1,   /* Same as above */
+       sizeof(asn_DEF_TestType_16P0_tags_1)
+               /sizeof(asn_DEF_TestType_16P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_TestType_16P0_1,
+       1,      /* Elements count */
+       &asn_SPC_TestType_16P0_specs_1  /* Additional specs */
+};
+
+static int asn_DFL_4_cmp_0(const void *sptr) {
+       const BOOLEAN_t *st = sptr;
+       
+       if(!st) {
+               return -1; /* No value is not a default value */
+       }
+       
+       /* Test default value 0 */
+       return (*st != 0);
+}
+static int asn_DFL_4_set_0(void **sptr) {
+       BOOLEAN_t *st = *sptr;
+       
+       if(!st) {
+               st = (*sptr = CALLOC(1, sizeof(*st)));
+               if(!st) return -1;
+       }
+       
+       /* Install default value 0 */
+       *st = 0;
+       return 0;
+}
+asn_TYPE_member_t asn_MBR_TestType_16P1_3[] = {
+       { ATF_NOFLAGS, 1, offsetof(struct TestType_16P1, common),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               .default_value_cmp = &asn_DFL_4_cmp_0,  /* Compare DEFAULT 0 */
+               .default_value_set = &asn_DFL_4_set_0,  /* Set DEFAULT 0 */
+               .name = "common"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TestType_16P1_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TestType_16P1_tag2el_3[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 } /* common */
+};
+asn_SEQUENCE_specifics_t asn_SPC_TestType_16P1_specs_3 = {
+       sizeof(struct TestType_16P1),
+       offsetof(struct TestType_16P1, _asn_ctx),
+       .tag2el = asn_MAP_TestType_16P1_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_TestType_16P1 = {
+       "TestType",
+       "TestType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_TestType_16P1_tags_3,
+       sizeof(asn_DEF_TestType_16P1_tags_3)
+               /sizeof(asn_DEF_TestType_16P1_tags_3[0]), /* 1 */
+       asn_DEF_TestType_16P1_tags_3,   /* Same as above */
+       sizeof(asn_DEF_TestType_16P1_tags_3)
+               /sizeof(asn_DEF_TestType_16P1_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_TestType_16P1_3,
+       1,      /* Elements count */
+       &asn_SPC_TestType_16P1_specs_3  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [TestChoice] >>> ***/
+
+#include "TestType.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [TestChoice] >>> ***/
+
+typedef enum TestChoice_PR {
+       TestChoice_PR_NOTHING,  /* No components present */
+       TestChoice_PR_type1,
+       TestChoice_PR_type2
+} TestChoice_PR;
+
+/*** <<< TYPE-DECLS [TestChoice] >>> ***/
+
+typedef struct TestChoice {
+       TestChoice_PR present;
+       union TestChoice_u {
+               TestType_16P0_t  type1;
+               TestType_16P1_t  type2;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TestChoice_t;
+
+/*** <<< FUNC-DECLS [TestChoice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TestChoice;
+
+/*** <<< STAT-DEFS [TestChoice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_TestChoice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct TestChoice, choice.type1),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_TestType_16P0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "type1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestChoice, choice.type2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TestType_16P1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "type2"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_TestChoice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 }, /* type1 */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 1, 0, 0 } /* type2 */
+};
+static asn_CHOICE_specifics_t asn_SPC_TestChoice_specs_1 = {
+       sizeof(struct TestChoice),
+       offsetof(struct TestChoice, _asn_ctx),
+       offsetof(struct TestChoice, present),
+       sizeof(((struct TestChoice *)0)->present),
+       .tag2el = asn_MAP_TestChoice_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_TestChoice = {
+       "TestChoice",
+       "TestChoice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_TestChoice_1,
+       2,      /* Elements count */
+       &asn_SPC_TestChoice_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [AutoType] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <BOOLEAN.h>
+
+/*** <<< TYPE-DECLS [AutoType] >>> ***/
+
+typedef struct AutoType_34P0 {
+       long     common;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} AutoType_34P0_t;
+typedef struct AutoType_34P1 {
+       BOOLEAN_t        common;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} AutoType_34P1_t;
+
+/*** <<< FUNC-DECLS [AutoType] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_AutoType_34P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_AutoType_34P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_AutoType_34P0_1[1];
+extern asn_TYPE_descriptor_t asn_DEF_AutoType_34P1;
+extern asn_SEQUENCE_specifics_t asn_SPC_AutoType_34P1_specs_3;
+extern asn_TYPE_member_t asn_MBR_AutoType_34P1_3[1];
+
+/*** <<< CODE [AutoType] >>> ***/
+
+static int
+memb_common_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value == 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+static int
+memb_common_constraint_3(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       BOOLEAN_t value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = (*(const long *)sptr) ? 1 : 0;
+       
+       if((value <= 0)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+
+/*** <<< STAT-DEFS [AutoType] >>> ***/
+
+asn_TYPE_member_t asn_MBR_AutoType_34P0_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct AutoType_34P0, common),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_common_constraint_1 },
+               0, 0, /* No default value */
+               .name = "common"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_AutoType_34P0_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_AutoType_34P0_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* common */
+};
+asn_SEQUENCE_specifics_t asn_SPC_AutoType_34P0_specs_1 = {
+       sizeof(struct AutoType_34P0),
+       offsetof(struct AutoType_34P0, _asn_ctx),
+       .tag2el = asn_MAP_AutoType_34P0_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_AutoType_34P0 = {
+       "AutoType",
+       "AutoType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_AutoType_34P0_tags_1,
+       sizeof(asn_DEF_AutoType_34P0_tags_1)
+               /sizeof(asn_DEF_AutoType_34P0_tags_1[0]), /* 1 */
+       asn_DEF_AutoType_34P0_tags_1,   /* Same as above */
+       sizeof(asn_DEF_AutoType_34P0_tags_1)
+               /sizeof(asn_DEF_AutoType_34P0_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_AutoType_34P0_1,
+       1,      /* Elements count */
+       &asn_SPC_AutoType_34P0_specs_1  /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_AutoType_34P1_3[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct AutoType_34P1, common),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_common_constraint_3 },
+               0, 0, /* No default value */
+               .name = "common"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_AutoType_34P1_tags_3[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_AutoType_34P1_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* common */
+};
+asn_SEQUENCE_specifics_t asn_SPC_AutoType_34P1_specs_3 = {
+       sizeof(struct AutoType_34P1),
+       offsetof(struct AutoType_34P1, _asn_ctx),
+       .tag2el = asn_MAP_AutoType_34P1_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_AutoType_34P1 = {
+       "AutoType",
+       "AutoType",
+       &asn_OP_SEQUENCE,
+       asn_DEF_AutoType_34P1_tags_3,
+       sizeof(asn_DEF_AutoType_34P1_tags_3)
+               /sizeof(asn_DEF_AutoType_34P1_tags_3[0]), /* 1 */
+       asn_DEF_AutoType_34P1_tags_3,   /* Same as above */
+       sizeof(asn_DEF_AutoType_34P1_tags_3)
+               /sizeof(asn_DEF_AutoType_34P1_tags_3[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_AutoType_34P1_3,
+       1,      /* Elements count */
+       &asn_SPC_AutoType_34P1_specs_3  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [AutoChoice] >>> ***/
+
+#include "AutoType.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [AutoChoice] >>> ***/
+
+typedef enum AutoChoice_PR {
+       AutoChoice_PR_NOTHING,  /* No components present */
+       AutoChoice_PR_type1,
+       AutoChoice_PR_type2
+} AutoChoice_PR;
+
+/*** <<< TYPE-DECLS [AutoChoice] >>> ***/
+
+typedef struct AutoChoice {
+       AutoChoice_PR present;
+       union AutoChoice_u {
+               AutoType_34P0_t  type1;
+               AutoType_34P1_t  type2;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} AutoChoice_t;
+
+/*** <<< FUNC-DECLS [AutoChoice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_AutoChoice;
+
+/*** <<< STAT-DEFS [AutoChoice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_AutoChoice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct AutoChoice, choice.type1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_AutoType_34P0,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "type1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct AutoChoice, choice.type2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_AutoType_34P1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "type2"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_AutoChoice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* type1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* type2 */
+};
+static asn_CHOICE_specifics_t asn_SPC_AutoChoice_specs_1 = {
+       sizeof(struct AutoChoice),
+       offsetof(struct AutoChoice, _asn_ctx),
+       offsetof(struct AutoChoice, present),
+       sizeof(((struct AutoChoice *)0)->present),
+       .tag2el = asn_MAP_AutoChoice_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_AutoChoice = {
+       "AutoChoice",
+       "AutoChoice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_AutoChoice_1,
+       2,      /* Elements count */
+       &asn_SPC_AutoChoice_specs_1     /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/85-comments-OK.asn1 b/tests/tests-asn1c-compiler/85-comments-OK.asn1
new file mode 100644 (file)
index 0000000..f1f4a8c
--- /dev/null
@@ -0,0 +1,26 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .85
+
+ModuleTestComments
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 85 }
+       DEFINITIONS ::=
+BEGIN
+
+       T1 ::= SEQUENCE--comment-- { ... }
+       T2 ::= SEQUENCE-- comment-- { ... }
+       T3 ::= SEQUENCE--- comment --- { ... }
+       T4 ::= SEQUENCE----comment---- { ... }
+       T5 ::= SEQUENCE---- comment ---- { ... }
+
+       ----- Another ambiguous comment ---
+
+       -- Immediately terminating ambiguous comment ----
+       -------------
+       -- cmt1 ---- cmt2 ----
+
+END
diff --git a/tests/tests-asn1c-compiler/86-atags-OK.asn1 b/tests/tests-asn1c-compiler/86-atags-OK.asn1
new file mode 100644 (file)
index 0000000..afd0585
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .86
+
+ModuleAutoTags
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 86 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       A ::= SEQUENCE { a INTEGER }
+       B ::= SEQUENCE { a [0] INTEGER }
+       C ::= SEQUENCE { a [0] IMPLICIT INTEGER }
+       D ::= SEQUENCE { a [0] EXPLICIT INTEGER }
+       E ::= SEQUENCE { a [0] CHOICE { b INTEGER } }
+
+END
diff --git a/tests/tests-asn1c-compiler/86-atags-OK.asn1.-EF b/tests/tests-asn1c-compiler/86-atags-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..ebadd3a
--- /dev/null
@@ -0,0 +1,28 @@
+ModuleAutoTags { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 86 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+A ::= SEQUENCE {
+    a   [0] IMPLICIT INTEGER
+}
+
+B ::= SEQUENCE {
+    a   [0] IMPLICIT INTEGER
+}
+
+C ::= SEQUENCE {
+    a   [0] IMPLICIT INTEGER
+}
+
+D ::= SEQUENCE {
+    a   [0] EXPLICIT INTEGER
+}
+
+E ::= SEQUENCE {
+    a   [0] EXPLICIT CHOICE {
+        b       [0] IMPLICIT INTEGER
+    }
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/87-old-syntax-OK.asn1 b/tests/tests-asn1c-compiler/87-old-syntax-OK.asn1
new file mode 100644 (file)
index 0000000..58e1a0c
--- /dev/null
@@ -0,0 +1,29 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .87
+
+ModuleObsoleteSyntax
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 87 }
+DEFINITIONS ::=
+BEGIN
+
+       Tc ::= CHOICE {
+               INTEGER,
+               BOOLEAN
+       }
+
+       Ts ::= SET {
+               INTEGER,
+               BOOLEAN,
+               SEQUENCE {
+                       OBJECT IDENTIFIER,
+                       RELATIVE-OID,
+                       Tc
+               }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1 b/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1
new file mode 100644 (file)
index 0000000..3753fa0
--- /dev/null
@@ -0,0 +1,16 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .88
+
+ModuleIntegerEnumeration
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 88 }
+DEFINITIONS ::=
+BEGIN
+
+       T ::= INTEGER { a(1), b(2) }
+
+END
diff --git a/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..805be08
--- /dev/null
@@ -0,0 +1,54 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T {
+       T_a     = 1,
+       T_b     = 2
+} e_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef INTEGER_t       T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+asn_struct_free_f T_free;
+asn_struct_print_f T_print;
+asn_constr_check_f T_constraint;
+ber_type_decoder_f T_decode_ber;
+der_type_encoder_f T_encode_der;
+xer_type_decoder_f T_decode_xer;
+xer_type_encoder_f T_encode_xer;
+
+/*** <<< CODE [T] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_T_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_INTEGER,
+       asn_DEF_T_tags_1,
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       asn_DEF_T_tags_1,       /* Same as above */
+       sizeof(asn_DEF_T_tags_1)
+               /sizeof(asn_DEF_T_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1 b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1
new file mode 100644 (file)
index 0000000..615525c
--- /dev/null
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .89
+
+ModuleBitStringEnumeration
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 89 }
+DEFINITIONS ::=
+BEGIN
+
+       T ::= CHOICE {
+               bs      BIT STRING { a(1), b(2) }
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names
new file mode 100644 (file)
index 0000000..bce1e67
--- /dev/null
@@ -0,0 +1,73 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T_PR {
+       T_PR_NOTHING,   /* No components present */
+       T_PR_bs
+} T_PR;
+typedef enum T__bs {
+       T__bs_a = 1,
+       T__bs_b = 2
+} e_T__bs;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       T_PR present;
+       union T_u {
+               BIT_STRING_t     bs;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.bs),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bs"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* bs */
+};
+static asn_CHOICE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       offsetof(struct T, present),
+       sizeof(((struct T *)0)->present),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_T_1,
+       1,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..b239e7f
--- /dev/null
@@ -0,0 +1,73 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <BIT_STRING.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+typedef enum T_PR {
+       T_PR_NOTHING,   /* No components present */
+       T_PR_bs
+} T_PR;
+typedef enum bs {
+       bs_a    = 1,
+       bs_b    = 2
+} e_bs;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+typedef struct T {
+       T_PR present;
+       union T_u {
+               BIT_STRING_t     bs;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< FUNC-DECLS [T] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct T, choice.bs),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bs"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_T_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 } /* bs */
+};
+static asn_CHOICE_specifics_t asn_SPC_T_specs_1 = {
+       sizeof(struct T),
+       offsetof(struct T, _asn_ctx),
+       offsetof(struct T, present),
+       sizeof(((struct T *)0)->present),
+       .tag2el = asn_MAP_T_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+       "T",
+       "T",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_T_1,
+       1,      /* Elements count */
+       &asn_SPC_T_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1 b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1
new file mode 100644 (file)
index 0000000..46d9dbd
--- /dev/null
@@ -0,0 +1,33 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .90
+
+ModuleConditionalIntegerType
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 90 }
+DEFINITIONS ::=
+BEGIN
+
+       CN-IntegerUnlimited     ::= INTEGER
+       CN-IntegerMinMax        ::= INTEGER (MIN..MAX)
+       CN-IntegerMinLow        ::= INTEGER (MIN..1)
+       NO-IntegerMinHigh       ::= INTEGER (MIN..3000000000)
+       NO-IntegerLowHigh       ::= INTEGER (1..3000000000)
+       CN-IntegerLowMax        ::= INTEGER (1..MAX)
+       NO-IntegerHighMax       ::= INTEGER (3000000000..MAX)
+       NO-IntegerLowestMax     ::= INTEGER (-3000000000..MAX)
+       NO-IntegerOutRange      ::= INTEGER (3000000000..3000000001)
+       NO-IntegerOutValue      ::= INTEGER (3000000000)
+       OK-IntegerInRange1      ::= INTEGER (-100..100)
+       OK-IntegerInRange2      ::= INTEGER (-100|100)
+       OK-IntegerInRange3      ::= INTEGER (-2147483648..2147483647)
+       OK-IntegerInRange4      ::= INTEGER (-2147483648|2147483647)
+       OK-IntegerInRange5      ::= INTEGER (-2147483648|2147483647,...)
+       NO-IntegerInRange6      ::= INTEGER (0..4294967295)
+       CN-IntegerEnumerated1   ::= INTEGER { a(1), b(2) }
+       NO-IntegerEnumerated2   ::= INTEGER { a(1), b(3000000000) }
+
+END
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-EFprint-constraints b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-EFprint-constraints
new file mode 100644 (file)
index 0000000..7ebee1d
--- /dev/null
@@ -0,0 +1,133 @@
+ModuleConditionalIntegerType { iso org(3) dod(6) internet(1) private(4)
+       enterprise(1) spelio(9363) software(1) asn1c(5) test(1) 90 }
+DEFINITIONS ::=
+BEGIN
+
+CN-IntegerUnlimited ::= INTEGER
+-- Practical constraints (CN-IntegerUnlimited): (MIN..MAX)  
+-- OER-visible constraints (CN-IntegerUnlimited): (MIN..MAX)  
+-- PER-visible constraints (CN-IntegerUnlimited): (MIN..MAX)  
+
+CN-IntegerMinMax ::= INTEGER (MIN..MAX)
+-- Combined constraints: (MIN..MAX)
+-- Practical constraints (CN-IntegerMinMax): (MIN..MAX)  
+-- OER-visible constraints (CN-IntegerMinMax): (MIN..MAX)  
+-- PER-visible constraints (CN-IntegerMinMax): (MIN..MAX)  
+
+CN-IntegerMinLow ::= INTEGER (MIN..1)
+-- Combined constraints: (MIN..1)
+-- Practical constraints (CN-IntegerMinLow): (MIN..1)  
+-- OER-visible constraints (CN-IntegerMinLow): (MIN..1)  
+-- PER-visible constraints (CN-IntegerMinLow): (MIN..1)  
+
+NO-IntegerMinHigh ::= INTEGER (MIN..3000000000)
+-- Combined constraints: (MIN..3000000000)
+-- Practical constraints (NO-IntegerMinHigh): (MIN..3000000000)  
+-- OER-visible constraints (NO-IntegerMinHigh): (MIN..3000000000)  
+-- PER-visible constraints (NO-IntegerMinHigh): (MIN..3000000000)  
+
+NO-IntegerLowHigh ::= INTEGER (1..3000000000)
+-- Combined constraints: (1..3000000000)
+-- Practical constraints (NO-IntegerLowHigh): (1..3000000000)  
+-- OER-visible constraints (NO-IntegerLowHigh): (1..3000000000)  
+-- PER-visible constraints (NO-IntegerLowHigh): (1..3000000000)  
+
+CN-IntegerLowMax ::= INTEGER (1..MAX)
+-- Combined constraints: (1..MAX)
+-- Practical constraints (CN-IntegerLowMax): (1..MAX)  
+-- OER-visible constraints (CN-IntegerLowMax): (1..MAX)  
+-- PER-visible constraints (CN-IntegerLowMax): (1..MAX)  
+
+NO-IntegerHighMax ::= INTEGER (3000000000..MAX)
+-- Combined constraints: (3000000000..MAX)
+-- Practical constraints (NO-IntegerHighMax): (3000000000..MAX)  
+-- OER-visible constraints (NO-IntegerHighMax): (3000000000..MAX)  
+-- PER-visible constraints (NO-IntegerHighMax): (3000000000..MAX)  
+
+NO-IntegerLowestMax ::= INTEGER (-3000000000..MAX)
+-- Combined constraints: (-3000000000..MAX)
+-- Practical constraints (NO-IntegerLowestMax): (-3000000000..MAX)  
+-- OER-visible constraints (NO-IntegerLowestMax): (-3000000000..MAX)  
+-- PER-visible constraints (NO-IntegerLowestMax): (-3000000000..MAX)  
+
+NO-IntegerOutRange ::= INTEGER (3000000000..3000000001)
+-- Combined constraints: (3000000000..3000000001)
+-- Practical constraints (NO-IntegerOutRange): (3000000000..3000000001)  
+-- OER-visible constraints (NO-IntegerOutRange): (3000000000..3000000001)  
+-- PER-visible constraints (NO-IntegerOutRange): (3000000000..3000000001)  
+
+NO-IntegerOutValue ::= INTEGER (3000000000)
+-- Combined constraints: (3000000000)
+-- Practical constraints (NO-IntegerOutValue): (3000000000)  
+-- OER-visible constraints (NO-IntegerOutValue): (3000000000)  
+-- PER-visible constraints (NO-IntegerOutValue): (3000000000)  
+
+OK-IntegerInRange1 ::= INTEGER (-100..100)
+-- Combined constraints: (-100..100)
+-- Practical constraints (OK-IntegerInRange1): (-100..100)  
+-- OER-visible constraints (OK-IntegerInRange1): (-100..100)  
+-- PER-visible constraints (OK-IntegerInRange1): (-100..100)  
+
+OK-IntegerInRange2 ::= INTEGER (-100 | 100)
+-- Combined constraints: (-100 | 100)
+-- Practical constraints (OK-IntegerInRange2): (-100 | 100)  
+-- OER-visible constraints (OK-IntegerInRange2): (-100 | 100)  
+-- PER-visible constraints (OK-IntegerInRange2): (-100 | 100)  
+
+OK-IntegerInRange3 ::= INTEGER (-2147483648..2147483647)
+-- Combined constraints: (-2147483648..2147483647)
+-- Practical constraints (OK-IntegerInRange3): (-2147483648..2147483647)  
+-- OER-visible constraints (OK-IntegerInRange3): (-2147483648..2147483647)  
+-- PER-visible constraints (OK-IntegerInRange3): (-2147483648..2147483647)  
+
+OK-IntegerInRange4 ::= INTEGER (-2147483648 | 2147483647)
+-- Combined constraints: (-2147483648 | 2147483647)
+-- Practical constraints (OK-IntegerInRange4): (-2147483648 | 2147483647)  
+-- OER-visible constraints (OK-IntegerInRange4): (-2147483648 | 2147483647)  
+-- PER-visible constraints (OK-IntegerInRange4): (-2147483648 | 2147483647)  
+
+OK-IntegerInRange5 ::= INTEGER (-2147483648 | 2147483647,...)
+-- Combined constraints: (-2147483648 | 2147483647,...)
+-- Practical constraints (OK-IntegerInRange5): (-2147483648 | 2147483647,...)  
+-- OER-visible constraints (OK-IntegerInRange5): (MIN..MAX)  
+-- PER-visible constraints (OK-IntegerInRange5): (-2147483648 | 2147483647,...)  
+
+NO-IntegerInRange6 ::= INTEGER (0..4294967295)
+-- Combined constraints: (0..4294967295)
+-- Practical constraints (NO-IntegerInRange6): (0..4294967295)  
+-- OER-visible constraints (NO-IntegerInRange6): (0..4294967295)  
+-- PER-visible constraints (NO-IntegerInRange6): (0..4294967295)  
+
+CN-IntegerEnumerated1 ::= INTEGER {
+    a(1)
+-- Practical constraints (a):   
+-- OER-visible constraints (a):   
+-- PER-visible constraints (a):   
+,
+    b(2)
+-- Practical constraints (b):   
+-- OER-visible constraints (b):   
+-- PER-visible constraints (b):   
+
+}
+-- Practical constraints (CN-IntegerEnumerated1): (MIN..MAX)  
+-- OER-visible constraints (CN-IntegerEnumerated1): (MIN..MAX)  
+-- PER-visible constraints (CN-IntegerEnumerated1): (MIN..MAX)  
+
+NO-IntegerEnumerated2 ::= INTEGER {
+    a(1)
+-- Practical constraints (a):   
+-- OER-visible constraints (a):   
+-- PER-visible constraints (a):   
+,
+    b(3000000000)
+-- Practical constraints (b):   
+-- OER-visible constraints (b):   
+-- PER-visible constraints (b):   
+
+}
+-- Practical constraints (NO-IntegerEnumerated2): (MIN..MAX)  
+-- OER-visible constraints (NO-IntegerEnumerated2): (MIN..MAX)  
+-- PER-visible constraints (NO-IntegerEnumerated2): (MIN..MAX)  
+
+END
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P
new file mode 100644 (file)
index 0000000..61b7d4c
--- /dev/null
@@ -0,0 +1,1263 @@
+
+/*** <<< INCLUDES [CN-IntegerUnlimited] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerUnlimited] >>> ***/
+
+typedef long    CN_IntegerUnlimited_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerUnlimited] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited;
+asn_struct_free_f CN_IntegerUnlimited_free;
+asn_struct_print_f CN_IntegerUnlimited_print;
+asn_constr_check_f CN_IntegerUnlimited_constraint;
+ber_type_decoder_f CN_IntegerUnlimited_decode_ber;
+der_type_encoder_f CN_IntegerUnlimited_encode_der;
+xer_type_decoder_f CN_IntegerUnlimited_decode_xer;
+xer_type_encoder_f CN_IntegerUnlimited_encode_xer;
+
+/*** <<< CODE [CN-IntegerUnlimited] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerUnlimited] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerUnlimited_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
+       "CN-IntegerUnlimited",
+       "CN-IntegerUnlimited",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerUnlimited_tags_1,
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerUnlimited_tags_1,     /* Same as above */
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinMax] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinMax] >>> ***/
+
+typedef long    CN_IntegerMinMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax;
+asn_struct_free_f CN_IntegerMinMax_free;
+asn_struct_print_f CN_IntegerMinMax_print;
+asn_constr_check_f CN_IntegerMinMax_constraint;
+ber_type_decoder_f CN_IntegerMinMax_decode_ber;
+der_type_encoder_f CN_IntegerMinMax_encode_der;
+xer_type_decoder_f CN_IntegerMinMax_decode_xer;
+xer_type_encoder_f CN_IntegerMinMax_encode_xer;
+
+/*** <<< CODE [CN-IntegerMinMax] >>> ***/
+
+int
+CN_IntegerMinMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerMinMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
+       "CN-IntegerMinMax",
+       "CN-IntegerMinMax",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerMinMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerMinMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinLow] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinLow] >>> ***/
+
+typedef long    CN_IntegerMinLow_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinLow] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow;
+asn_struct_free_f CN_IntegerMinLow_free;
+asn_struct_print_f CN_IntegerMinLow_print;
+asn_constr_check_f CN_IntegerMinLow_constraint;
+ber_type_decoder_f CN_IntegerMinLow_decode_ber;
+der_type_encoder_f CN_IntegerMinLow_encode_der;
+xer_type_decoder_f CN_IntegerMinLow_decode_xer;
+xer_type_encoder_f CN_IntegerMinLow_encode_xer;
+
+/*** <<< CODE [CN-IntegerMinLow] >>> ***/
+
+int
+CN_IntegerMinLow_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value <= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerMinLow] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinLow_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
+       "CN-IntegerMinLow",
+       "CN-IntegerMinLow",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerMinLow_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinLow_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerMinLow_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerMinHigh] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerMinHigh] >>> ***/
+
+typedef INTEGER_t       NO_IntegerMinHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerMinHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh;
+asn_struct_free_f NO_IntegerMinHigh_free;
+asn_struct_print_f NO_IntegerMinHigh_print;
+asn_constr_check_f NO_IntegerMinHigh_constraint;
+ber_type_decoder_f NO_IntegerMinHigh_decode_ber;
+der_type_encoder_f NO_IntegerMinHigh_encode_der;
+xer_type_decoder_f NO_IntegerMinHigh_decode_xer;
+xer_type_encoder_f NO_IntegerMinHigh_encode_xer;
+
+/*** <<< CODE [NO-IntegerMinHigh] >>> ***/
+
+int
+NO_IntegerMinHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerMinHigh] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerMinHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
+       "NO-IntegerMinHigh",
+       "NO-IntegerMinHigh",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerMinHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerMinHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerMinHigh_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowHigh] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowHigh] >>> ***/
+
+typedef unsigned long   NO_IntegerLowHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh;
+asn_struct_free_f NO_IntegerLowHigh_free;
+asn_struct_print_f NO_IntegerLowHigh_print;
+asn_constr_check_f NO_IntegerLowHigh_constraint;
+ber_type_decoder_f NO_IntegerLowHigh_decode_ber;
+der_type_encoder_f NO_IntegerLowHigh_encode_der;
+xer_type_decoder_f NO_IntegerLowHigh_decode_xer;
+xer_type_encoder_f NO_IntegerLowHigh_encode_xer;
+
+/*** <<< CODE [NO-IntegerLowHigh] >>> ***/
+
+int
+NO_IntegerLowHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 1 && value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerLowHigh] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerLowHigh_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
+       "NO-IntegerLowHigh",
+       "NO-IntegerLowHigh",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerLowHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerLowHigh_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerLowHigh_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerLowMax] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerLowMax] >>> ***/
+
+typedef unsigned long   CN_IntegerLowMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerLowMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax;
+asn_struct_free_f CN_IntegerLowMax_free;
+asn_struct_print_f CN_IntegerLowMax_print;
+asn_constr_check_f CN_IntegerLowMax_constraint;
+ber_type_decoder_f CN_IntegerLowMax_decode_ber;
+der_type_encoder_f CN_IntegerLowMax_encode_der;
+xer_type_decoder_f CN_IntegerLowMax_decode_xer;
+xer_type_encoder_f CN_IntegerLowMax_encode_xer;
+
+/*** <<< CODE [CN-IntegerLowMax] >>> ***/
+
+int
+CN_IntegerLowMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerLowMax] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_CN_IntegerLowMax_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_CN_IntegerLowMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
+       "CN-IntegerLowMax",
+       "CN-IntegerLowMax",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerLowMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerLowMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerLowMax_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_CN_IntegerLowMax_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerHighMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerHighMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerHighMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerHighMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax;
+asn_struct_free_f NO_IntegerHighMax_free;
+asn_struct_print_f NO_IntegerHighMax_print;
+asn_constr_check_f NO_IntegerHighMax_constraint;
+ber_type_decoder_f NO_IntegerHighMax_decode_ber;
+der_type_encoder_f NO_IntegerHighMax_encode_der;
+xer_type_decoder_f NO_IntegerHighMax_decode_xer;
+xer_type_encoder_f NO_IntegerHighMax_encode_xer;
+
+/*** <<< CODE [NO-IntegerHighMax] >>> ***/
+
+int
+NO_IntegerHighMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerHighMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerHighMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
+       "NO-IntegerHighMax",
+       "NO-IntegerHighMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerHighMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerHighMax_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerHighMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowestMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowestMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerLowestMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowestMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax;
+asn_struct_free_f NO_IntegerLowestMax_free;
+asn_struct_print_f NO_IntegerLowestMax_print;
+asn_constr_check_f NO_IntegerLowestMax_constraint;
+ber_type_decoder_f NO_IntegerLowestMax_decode_ber;
+der_type_encoder_f NO_IntegerLowestMax_encode_der;
+xer_type_decoder_f NO_IntegerLowestMax_decode_xer;
+xer_type_encoder_f NO_IntegerLowestMax_encode_xer;
+
+/*** <<< CODE [NO-IntegerLowestMax] >>> ***/
+
+int
+NO_IntegerLowestMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerLowestMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowestMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
+       "NO-IntegerLowestMax",
+       "NO-IntegerLowestMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerLowestMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowestMax_tags_1,     /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerLowestMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutRange] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutRange] >>> ***/
+
+typedef unsigned long   NO_IntegerOutRange_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutRange] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange;
+asn_struct_free_f NO_IntegerOutRange_free;
+asn_struct_print_f NO_IntegerOutRange_print;
+asn_constr_check_f NO_IntegerOutRange_constraint;
+ber_type_decoder_f NO_IntegerOutRange_decode_ber;
+der_type_encoder_f NO_IntegerOutRange_encode_der;
+xer_type_decoder_f NO_IntegerOutRange_decode_xer;
+xer_type_encoder_f NO_IntegerOutRange_encode_xer;
+
+/*** <<< CODE [NO-IntegerOutRange] >>> ***/
+
+int
+NO_IntegerOutRange_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 3000000000 && value <= 3000000001)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerOutRange] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutRange_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutRange_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
+       "NO-IntegerOutRange",
+       "NO-IntegerOutRange",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutRange_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutRange_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerOutRange_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutRange_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutValue] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutValue] >>> ***/
+
+typedef unsigned long   NO_IntegerOutValue_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutValue] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue;
+asn_struct_free_f NO_IntegerOutValue_free;
+asn_struct_print_f NO_IntegerOutValue_print;
+asn_constr_check_f NO_IntegerOutValue_constraint;
+ber_type_decoder_f NO_IntegerOutValue_decode_ber;
+der_type_encoder_f NO_IntegerOutValue_encode_der;
+xer_type_decoder_f NO_IntegerOutValue_decode_xer;
+xer_type_encoder_f NO_IntegerOutValue_encode_xer;
+
+/*** <<< CODE [NO-IntegerOutValue] >>> ***/
+
+int
+NO_IntegerOutValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value == 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerOutValue] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutValue_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutValue_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
+       "NO-IntegerOutValue",
+       "NO-IntegerOutValue",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutValue_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutValue_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerOutValue_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutValue_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange1] >>> ***/
+
+typedef long    OK_IntegerInRange1_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1;
+asn_struct_free_f OK_IntegerInRange1_free;
+asn_struct_print_f OK_IntegerInRange1_print;
+asn_constr_check_f OK_IntegerInRange1_constraint;
+ber_type_decoder_f OK_IntegerInRange1_decode_ber;
+der_type_encoder_f OK_IntegerInRange1_encode_der;
+xer_type_decoder_f OK_IntegerInRange1_decode_xer;
+xer_type_encoder_f OK_IntegerInRange1_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange1] >>> ***/
+
+int
+OK_IntegerInRange1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -100 && value <= 100)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
+       "OK-IntegerInRange1",
+       "OK-IntegerInRange1",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange1_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange2] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange2] >>> ***/
+
+typedef long    OK_IntegerInRange2_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2;
+asn_struct_free_f OK_IntegerInRange2_free;
+asn_struct_print_f OK_IntegerInRange2_print;
+asn_constr_check_f OK_IntegerInRange2_constraint;
+ber_type_decoder_f OK_IntegerInRange2_decode_ber;
+der_type_encoder_f OK_IntegerInRange2_encode_der;
+xer_type_decoder_f OK_IntegerInRange2_decode_xer;
+xer_type_encoder_f OK_IntegerInRange2_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange2] >>> ***/
+
+int
+OK_IntegerInRange2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == -100) || (value == 100))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
+       "OK-IntegerInRange2",
+       "OK-IntegerInRange2",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange2_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange3] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange3] >>> ***/
+
+typedef long    OK_IntegerInRange3_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3;
+asn_struct_free_f OK_IntegerInRange3_free;
+asn_struct_print_f OK_IntegerInRange3_print;
+asn_constr_check_f OK_IntegerInRange3_constraint;
+ber_type_decoder_f OK_IntegerInRange3_decode_ber;
+der_type_encoder_f OK_IntegerInRange3_encode_der;
+xer_type_decoder_f OK_IntegerInRange3_decode_xer;
+xer_type_encoder_f OK_IntegerInRange3_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange3] >>> ***/
+
+int
+OK_IntegerInRange3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= (-2147483647L - 1) && value <= 2147483647)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
+       "OK-IntegerInRange3",
+       "OK-IntegerInRange3",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange3_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange3_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange4] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange4] >>> ***/
+
+typedef long    OK_IntegerInRange4_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4;
+asn_struct_free_f OK_IntegerInRange4_free;
+asn_struct_print_f OK_IntegerInRange4_print;
+asn_constr_check_f OK_IntegerInRange4_constraint;
+ber_type_decoder_f OK_IntegerInRange4_decode_ber;
+der_type_encoder_f OK_IntegerInRange4_encode_der;
+xer_type_decoder_f OK_IntegerInRange4_decode_xer;
+xer_type_encoder_f OK_IntegerInRange4_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange4] >>> ***/
+
+int
+OK_IntegerInRange4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
+       "OK-IntegerInRange4",
+       "OK-IntegerInRange4",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange4_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange4_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange5] >>> ***/
+
+typedef long    OK_IntegerInRange5_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5;
+asn_struct_free_f OK_IntegerInRange5_free;
+asn_struct_print_f OK_IntegerInRange5_print;
+asn_constr_check_f OK_IntegerInRange5_constraint;
+ber_type_decoder_f OK_IntegerInRange5_decode_ber;
+der_type_encoder_f OK_IntegerInRange5_encode_der;
+xer_type_decoder_f OK_IntegerInRange5_decode_xer;
+xer_type_encoder_f OK_IntegerInRange5_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange5] >>> ***/
+
+int
+OK_IntegerInRange5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
+       "OK-IntegerInRange5",
+       "OK-IntegerInRange5",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange5_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange5_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerInRange6] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerInRange6] >>> ***/
+
+typedef unsigned long   NO_IntegerInRange6_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerInRange6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6;
+asn_struct_free_f NO_IntegerInRange6_free;
+asn_struct_print_f NO_IntegerInRange6_print;
+asn_constr_check_f NO_IntegerInRange6_constraint;
+ber_type_decoder_f NO_IntegerInRange6_decode_ber;
+der_type_encoder_f NO_IntegerInRange6_encode_der;
+xer_type_decoder_f NO_IntegerInRange6_decode_xer;
+xer_type_encoder_f NO_IntegerInRange6_encode_xer;
+
+/*** <<< CODE [NO-IntegerInRange6] >>> ***/
+
+int
+NO_IntegerInRange6_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       /* Constraint check succeeded */
+       return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerInRange6] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerInRange6_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerInRange6_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
+       "NO-IntegerInRange6",
+       "NO-IntegerInRange6",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerInRange6_tags_1,
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerInRange6_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerInRange6_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerInRange6_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerEnumerated1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< DEPS [CN-IntegerEnumerated1] >>> ***/
+
+typedef enum CN_IntegerEnumerated1 {
+       CN_IntegerEnumerated1_a = 1,
+       CN_IntegerEnumerated1_b = 2
+} e_CN_IntegerEnumerated1;
+
+/*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+typedef long    CN_IntegerEnumerated1_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1;
+asn_struct_free_f CN_IntegerEnumerated1_free;
+asn_struct_print_f CN_IntegerEnumerated1_print;
+asn_constr_check_f CN_IntegerEnumerated1_constraint;
+ber_type_decoder_f CN_IntegerEnumerated1_decode_ber;
+der_type_encoder_f CN_IntegerEnumerated1_encode_der;
+xer_type_decoder_f CN_IntegerEnumerated1_decode_xer;
+xer_type_encoder_f CN_IntegerEnumerated1_encode_xer;
+
+/*** <<< CODE [CN-IntegerEnumerated1] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerEnumerated1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerEnumerated1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
+       "CN-IntegerEnumerated1",
+       "CN-IntegerEnumerated1",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerEnumerated1_tags_1,
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerEnumerated1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerEnumerated2] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< DEPS [NO-IntegerEnumerated2] >>> ***/
+
+typedef enum NO_IntegerEnumerated2 {
+       NO_IntegerEnumerated2_a = 1,
+       NO_IntegerEnumerated2_b = 3000000000
+} e_NO_IntegerEnumerated2;
+
+/*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+typedef INTEGER_t       NO_IntegerEnumerated2_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2;
+asn_struct_free_f NO_IntegerEnumerated2_free;
+asn_struct_print_f NO_IntegerEnumerated2_print;
+asn_constr_check_f NO_IntegerEnumerated2_constraint;
+ber_type_decoder_f NO_IntegerEnumerated2_decode_ber;
+der_type_encoder_f NO_IntegerEnumerated2_encode_der;
+xer_type_decoder_f NO_IntegerEnumerated2_decode_xer;
+xer_type_encoder_f NO_IntegerEnumerated2_encode_xer;
+
+/*** <<< CODE [NO-IntegerEnumerated2] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerEnumerated2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerEnumerated2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
+       "NO-IntegerEnumerated2",
+       "NO-IntegerEnumerated2",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerEnumerated2_tags_1,
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerEnumerated2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..f3facef
--- /dev/null
@@ -0,0 +1,1278 @@
+
+/*** <<< INCLUDES [CN-IntegerUnlimited] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerUnlimited] >>> ***/
+
+typedef INTEGER_t       CN_IntegerUnlimited_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerUnlimited] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited;
+asn_struct_free_f CN_IntegerUnlimited_free;
+asn_struct_print_f CN_IntegerUnlimited_print;
+asn_constr_check_f CN_IntegerUnlimited_constraint;
+ber_type_decoder_f CN_IntegerUnlimited_decode_ber;
+der_type_encoder_f CN_IntegerUnlimited_encode_der;
+xer_type_decoder_f CN_IntegerUnlimited_decode_xer;
+xer_type_encoder_f CN_IntegerUnlimited_encode_xer;
+
+/*** <<< CODE [CN-IntegerUnlimited] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerUnlimited] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerUnlimited_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
+       "CN-IntegerUnlimited",
+       "CN-IntegerUnlimited",
+       &asn_OP_INTEGER,
+       asn_DEF_CN_IntegerUnlimited_tags_1,
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerUnlimited_tags_1,     /* Same as above */
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinMax] >>> ***/
+
+typedef INTEGER_t       CN_IntegerMinMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax;
+asn_struct_free_f CN_IntegerMinMax_free;
+asn_struct_print_f CN_IntegerMinMax_print;
+asn_constr_check_f CN_IntegerMinMax_constraint;
+ber_type_decoder_f CN_IntegerMinMax_decode_ber;
+der_type_encoder_f CN_IntegerMinMax_encode_der;
+xer_type_decoder_f CN_IntegerMinMax_decode_xer;
+xer_type_encoder_f CN_IntegerMinMax_encode_xer;
+
+/*** <<< CODE [CN-IntegerMinMax] >>> ***/
+
+int
+CN_IntegerMinMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               (void)st; /* Unused variable */
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerMinMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
+       "CN-IntegerMinMax",
+       "CN-IntegerMinMax",
+       &asn_OP_INTEGER,
+       asn_DEF_CN_IntegerMinMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerMinMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinLow] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinLow] >>> ***/
+
+typedef INTEGER_t       CN_IntegerMinLow_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinLow] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow;
+asn_struct_free_f CN_IntegerMinLow_free;
+asn_struct_print_f CN_IntegerMinLow_print;
+asn_constr_check_f CN_IntegerMinLow_constraint;
+ber_type_decoder_f CN_IntegerMinLow_decode_ber;
+der_type_encoder_f CN_IntegerMinLow_encode_der;
+xer_type_decoder_f CN_IntegerMinLow_decode_xer;
+xer_type_encoder_f CN_IntegerMinLow_encode_xer;
+
+/*** <<< CODE [CN-IntegerMinLow] >>> ***/
+
+int
+CN_IntegerMinLow_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value <= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerMinLow] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinLow_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
+       "CN-IntegerMinLow",
+       "CN-IntegerMinLow",
+       &asn_OP_INTEGER,
+       asn_DEF_CN_IntegerMinLow_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinLow_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerMinLow_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerMinHigh] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerMinHigh] >>> ***/
+
+typedef INTEGER_t       NO_IntegerMinHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerMinHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh;
+asn_struct_free_f NO_IntegerMinHigh_free;
+asn_struct_print_f NO_IntegerMinHigh_print;
+asn_constr_check_f NO_IntegerMinHigh_constraint;
+ber_type_decoder_f NO_IntegerMinHigh_decode_ber;
+der_type_encoder_f NO_IntegerMinHigh_encode_der;
+xer_type_decoder_f NO_IntegerMinHigh_decode_xer;
+xer_type_encoder_f NO_IntegerMinHigh_encode_xer;
+
+/*** <<< CODE [NO-IntegerMinHigh] >>> ***/
+
+int
+NO_IntegerMinHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerMinHigh] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerMinHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
+       "NO-IntegerMinHigh",
+       "NO-IntegerMinHigh",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerMinHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerMinHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerMinHigh_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowHigh] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowHigh] >>> ***/
+
+typedef unsigned long   NO_IntegerLowHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh;
+asn_struct_free_f NO_IntegerLowHigh_free;
+asn_struct_print_f NO_IntegerLowHigh_print;
+asn_constr_check_f NO_IntegerLowHigh_constraint;
+ber_type_decoder_f NO_IntegerLowHigh_decode_ber;
+der_type_encoder_f NO_IntegerLowHigh_encode_der;
+xer_type_decoder_f NO_IntegerLowHigh_decode_xer;
+xer_type_encoder_f NO_IntegerLowHigh_encode_xer;
+
+/*** <<< CODE [NO-IntegerLowHigh] >>> ***/
+
+int
+NO_IntegerLowHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 1 && value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerLowHigh] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerLowHigh_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
+       "NO-IntegerLowHigh",
+       "NO-IntegerLowHigh",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerLowHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerLowHigh_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerLowHigh_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerLowMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerLowMax] >>> ***/
+
+typedef INTEGER_t       CN_IntegerLowMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerLowMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax;
+asn_struct_free_f CN_IntegerLowMax_free;
+asn_struct_print_f CN_IntegerLowMax_print;
+asn_constr_check_f CN_IntegerLowMax_constraint;
+ber_type_decoder_f CN_IntegerLowMax_decode_ber;
+der_type_encoder_f CN_IntegerLowMax_encode_der;
+xer_type_decoder_f CN_IntegerLowMax_decode_xer;
+xer_type_encoder_f CN_IntegerLowMax_encode_xer;
+
+/*** <<< CODE [CN-IntegerLowMax] >>> ***/
+
+int
+CN_IntegerLowMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerLowMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerLowMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
+       "CN-IntegerLowMax",
+       "CN-IntegerLowMax",
+       &asn_OP_INTEGER,
+       asn_DEF_CN_IntegerLowMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerLowMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       { 0, 0, CN_IntegerLowMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerHighMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerHighMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerHighMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerHighMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax;
+asn_struct_free_f NO_IntegerHighMax_free;
+asn_struct_print_f NO_IntegerHighMax_print;
+asn_constr_check_f NO_IntegerHighMax_constraint;
+ber_type_decoder_f NO_IntegerHighMax_decode_ber;
+der_type_encoder_f NO_IntegerHighMax_encode_der;
+xer_type_decoder_f NO_IntegerHighMax_decode_xer;
+xer_type_encoder_f NO_IntegerHighMax_encode_xer;
+
+/*** <<< CODE [NO-IntegerHighMax] >>> ***/
+
+int
+NO_IntegerHighMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerHighMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerHighMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
+       "NO-IntegerHighMax",
+       "NO-IntegerHighMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerHighMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerHighMax_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerHighMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowestMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowestMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerLowestMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowestMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax;
+asn_struct_free_f NO_IntegerLowestMax_free;
+asn_struct_print_f NO_IntegerLowestMax_print;
+asn_constr_check_f NO_IntegerLowestMax_constraint;
+ber_type_decoder_f NO_IntegerLowestMax_decode_ber;
+der_type_encoder_f NO_IntegerLowestMax_encode_der;
+xer_type_decoder_f NO_IntegerLowestMax_decode_xer;
+xer_type_encoder_f NO_IntegerLowestMax_encode_xer;
+
+/*** <<< CODE [NO-IntegerLowestMax] >>> ***/
+
+int
+NO_IntegerLowestMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerLowestMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowestMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
+       "NO-IntegerLowestMax",
+       "NO-IntegerLowestMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerLowestMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowestMax_tags_1,     /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerLowestMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutRange] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutRange] >>> ***/
+
+typedef unsigned long   NO_IntegerOutRange_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutRange] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange;
+asn_struct_free_f NO_IntegerOutRange_free;
+asn_struct_print_f NO_IntegerOutRange_print;
+asn_constr_check_f NO_IntegerOutRange_constraint;
+ber_type_decoder_f NO_IntegerOutRange_decode_ber;
+der_type_encoder_f NO_IntegerOutRange_encode_der;
+xer_type_decoder_f NO_IntegerOutRange_decode_xer;
+xer_type_encoder_f NO_IntegerOutRange_encode_xer;
+
+/*** <<< CODE [NO-IntegerOutRange] >>> ***/
+
+int
+NO_IntegerOutRange_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 3000000000 && value <= 3000000001)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerOutRange] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutRange_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutRange_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
+       "NO-IntegerOutRange",
+       "NO-IntegerOutRange",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutRange_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutRange_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerOutRange_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutRange_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutValue] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutValue] >>> ***/
+
+typedef unsigned long   NO_IntegerOutValue_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutValue] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue;
+asn_struct_free_f NO_IntegerOutValue_free;
+asn_struct_print_f NO_IntegerOutValue_print;
+asn_constr_check_f NO_IntegerOutValue_constraint;
+ber_type_decoder_f NO_IntegerOutValue_decode_ber;
+der_type_encoder_f NO_IntegerOutValue_encode_der;
+xer_type_decoder_f NO_IntegerOutValue_decode_xer;
+xer_type_encoder_f NO_IntegerOutValue_encode_xer;
+
+/*** <<< CODE [NO-IntegerOutValue] >>> ***/
+
+int
+NO_IntegerOutValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value == 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerOutValue] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutValue_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutValue_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
+       "NO-IntegerOutValue",
+       "NO-IntegerOutValue",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutValue_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutValue_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerOutValue_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutValue_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange1] >>> ***/
+
+typedef long    OK_IntegerInRange1_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1;
+asn_struct_free_f OK_IntegerInRange1_free;
+asn_struct_print_f OK_IntegerInRange1_print;
+asn_constr_check_f OK_IntegerInRange1_constraint;
+ber_type_decoder_f OK_IntegerInRange1_decode_ber;
+der_type_encoder_f OK_IntegerInRange1_encode_der;
+xer_type_decoder_f OK_IntegerInRange1_decode_xer;
+xer_type_encoder_f OK_IntegerInRange1_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange1] >>> ***/
+
+int
+OK_IntegerInRange1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -100 && value <= 100)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
+       "OK-IntegerInRange1",
+       "OK-IntegerInRange1",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange1_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange2] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange2] >>> ***/
+
+typedef long    OK_IntegerInRange2_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2;
+asn_struct_free_f OK_IntegerInRange2_free;
+asn_struct_print_f OK_IntegerInRange2_print;
+asn_constr_check_f OK_IntegerInRange2_constraint;
+ber_type_decoder_f OK_IntegerInRange2_decode_ber;
+der_type_encoder_f OK_IntegerInRange2_encode_der;
+xer_type_decoder_f OK_IntegerInRange2_decode_xer;
+xer_type_encoder_f OK_IntegerInRange2_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange2] >>> ***/
+
+int
+OK_IntegerInRange2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == -100) || (value == 100))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
+       "OK-IntegerInRange2",
+       "OK-IntegerInRange2",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange2_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange3] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange3] >>> ***/
+
+typedef long    OK_IntegerInRange3_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3;
+asn_struct_free_f OK_IntegerInRange3_free;
+asn_struct_print_f OK_IntegerInRange3_print;
+asn_constr_check_f OK_IntegerInRange3_constraint;
+ber_type_decoder_f OK_IntegerInRange3_decode_ber;
+der_type_encoder_f OK_IntegerInRange3_encode_der;
+xer_type_decoder_f OK_IntegerInRange3_decode_xer;
+xer_type_encoder_f OK_IntegerInRange3_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange3] >>> ***/
+
+int
+OK_IntegerInRange3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= (-2147483647L - 1) && value <= 2147483647)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
+       "OK-IntegerInRange3",
+       "OK-IntegerInRange3",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange3_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange3_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange4] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange4] >>> ***/
+
+typedef long    OK_IntegerInRange4_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4;
+asn_struct_free_f OK_IntegerInRange4_free;
+asn_struct_print_f OK_IntegerInRange4_print;
+asn_constr_check_f OK_IntegerInRange4_constraint;
+ber_type_decoder_f OK_IntegerInRange4_decode_ber;
+der_type_encoder_f OK_IntegerInRange4_encode_der;
+xer_type_decoder_f OK_IntegerInRange4_decode_xer;
+xer_type_encoder_f OK_IntegerInRange4_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange4] >>> ***/
+
+int
+OK_IntegerInRange4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
+       "OK-IntegerInRange4",
+       "OK-IntegerInRange4",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange4_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange4_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange5] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange5] >>> ***/
+
+typedef INTEGER_t       OK_IntegerInRange5_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5;
+asn_struct_free_f OK_IntegerInRange5_free;
+asn_struct_print_f OK_IntegerInRange5_print;
+asn_constr_check_f OK_IntegerInRange5_constraint;
+ber_type_decoder_f OK_IntegerInRange5_decode_ber;
+der_type_encoder_f OK_IntegerInRange5_encode_der;
+xer_type_decoder_f OK_IntegerInRange5_decode_xer;
+xer_type_encoder_f OK_IntegerInRange5_encode_xer;
+
+/*** <<< CODE [OK-IntegerInRange5] >>> ***/
+
+int
+OK_IntegerInRange5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-IntegerInRange5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
+       "OK-IntegerInRange5",
+       "OK-IntegerInRange5",
+       &asn_OP_INTEGER,
+       asn_DEF_OK_IntegerInRange5_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange5_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       { 0, 0, OK_IntegerInRange5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerInRange6] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerInRange6] >>> ***/
+
+typedef unsigned long   NO_IntegerInRange6_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerInRange6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6;
+asn_struct_free_f NO_IntegerInRange6_free;
+asn_struct_print_f NO_IntegerInRange6_print;
+asn_constr_check_f NO_IntegerInRange6_constraint;
+ber_type_decoder_f NO_IntegerInRange6_decode_ber;
+der_type_encoder_f NO_IntegerInRange6_encode_der;
+xer_type_decoder_f NO_IntegerInRange6_decode_xer;
+xer_type_encoder_f NO_IntegerInRange6_encode_xer;
+
+/*** <<< CODE [NO-IntegerInRange6] >>> ***/
+
+int
+NO_IntegerInRange6_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       /* Constraint check succeeded */
+       return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerInRange6] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerInRange6_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerInRange6_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
+       "NO-IntegerInRange6",
+       "NO-IntegerInRange6",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerInRange6_tags_1,
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerInRange6_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       { 0, 0, NO_IntegerInRange6_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerInRange6_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerEnumerated1] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< DEPS [CN-IntegerEnumerated1] >>> ***/
+
+typedef enum CN_IntegerEnumerated1 {
+       CN_IntegerEnumerated1_a = 1,
+       CN_IntegerEnumerated1_b = 2
+} e_CN_IntegerEnumerated1;
+
+/*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+typedef INTEGER_t       CN_IntegerEnumerated1_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1;
+asn_struct_free_f CN_IntegerEnumerated1_free;
+asn_struct_print_f CN_IntegerEnumerated1_print;
+asn_constr_check_f CN_IntegerEnumerated1_constraint;
+ber_type_decoder_f CN_IntegerEnumerated1_decode_ber;
+der_type_encoder_f CN_IntegerEnumerated1_encode_der;
+xer_type_decoder_f CN_IntegerEnumerated1_decode_xer;
+xer_type_encoder_f CN_IntegerEnumerated1_encode_xer;
+
+/*** <<< CODE [CN-IntegerEnumerated1] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerEnumerated1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerEnumerated1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
+       "CN-IntegerEnumerated1",
+       "CN-IntegerEnumerated1",
+       &asn_OP_INTEGER,
+       asn_DEF_CN_IntegerEnumerated1_tags_1,
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerEnumerated1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerEnumerated2] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< DEPS [NO-IntegerEnumerated2] >>> ***/
+
+typedef enum NO_IntegerEnumerated2 {
+       NO_IntegerEnumerated2_a = 1,
+       NO_IntegerEnumerated2_b = 3000000000
+} e_NO_IntegerEnumerated2;
+
+/*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+typedef INTEGER_t       NO_IntegerEnumerated2_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2;
+asn_struct_free_f NO_IntegerEnumerated2_free;
+asn_struct_print_f NO_IntegerEnumerated2_print;
+asn_constr_check_f NO_IntegerEnumerated2_constraint;
+ber_type_decoder_f NO_IntegerEnumerated2_decode_ber;
+der_type_encoder_f NO_IntegerEnumerated2_encode_der;
+xer_type_decoder_f NO_IntegerEnumerated2_decode_xer;
+xer_type_encoder_f NO_IntegerEnumerated2_encode_xer;
+
+/*** <<< CODE [NO-IntegerEnumerated2] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerEnumerated2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerEnumerated2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
+       "NO-IntegerEnumerated2",
+       "NO-IntegerEnumerated2",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerEnumerated2_tags_1,
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerEnumerated2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..2a5fb36
--- /dev/null
@@ -0,0 +1,1455 @@
+
+/*** <<< INCLUDES [CN-IntegerUnlimited] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerUnlimited] >>> ***/
+
+typedef long    CN_IntegerUnlimited_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerUnlimited] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited;
+asn_struct_free_f CN_IntegerUnlimited_free;
+asn_struct_print_f CN_IntegerUnlimited_print;
+asn_constr_check_f CN_IntegerUnlimited_constraint;
+ber_type_decoder_f CN_IntegerUnlimited_decode_ber;
+der_type_encoder_f CN_IntegerUnlimited_encode_der;
+xer_type_decoder_f CN_IntegerUnlimited_decode_xer;
+xer_type_encoder_f CN_IntegerUnlimited_encode_xer;
+per_type_decoder_f CN_IntegerUnlimited_decode_uper;
+per_type_encoder_f CN_IntegerUnlimited_encode_uper;
+per_type_decoder_f CN_IntegerUnlimited_decode_aper;
+per_type_encoder_f CN_IntegerUnlimited_encode_aper;
+
+/*** <<< CODE [CN-IntegerUnlimited] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerUnlimited] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerUnlimited_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
+       "CN-IntegerUnlimited",
+       "CN-IntegerUnlimited",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerUnlimited_tags_1,
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerUnlimited_tags_1,     /* Same as above */
+       sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
+               /sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinMax] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinMax] >>> ***/
+
+typedef long    CN_IntegerMinMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax;
+asn_struct_free_f CN_IntegerMinMax_free;
+asn_struct_print_f CN_IntegerMinMax_print;
+asn_constr_check_f CN_IntegerMinMax_constraint;
+ber_type_decoder_f CN_IntegerMinMax_decode_ber;
+der_type_encoder_f CN_IntegerMinMax_encode_der;
+xer_type_decoder_f CN_IntegerMinMax_decode_xer;
+xer_type_encoder_f CN_IntegerMinMax_encode_xer;
+per_type_decoder_f CN_IntegerMinMax_decode_uper;
+per_type_encoder_f CN_IntegerMinMax_encode_uper;
+per_type_decoder_f CN_IntegerMinMax_decode_aper;
+per_type_encoder_f CN_IntegerMinMax_encode_aper;
+
+/*** <<< CODE [CN-IntegerMinMax] >>> ***/
+
+int
+CN_IntegerMinMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [CN-IntegerMinMax] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_CN_IntegerMinMax_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [CN-IntegerMinMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
+       "CN-IntegerMinMax",
+       "CN-IntegerMinMax",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerMinMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_CN_IntegerMinMax_constr_1, CN_IntegerMinMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerMinLow] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerMinLow] >>> ***/
+
+typedef long    CN_IntegerMinLow_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerMinLow] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow;
+asn_struct_free_f CN_IntegerMinLow_free;
+asn_struct_print_f CN_IntegerMinLow_print;
+asn_constr_check_f CN_IntegerMinLow_constraint;
+ber_type_decoder_f CN_IntegerMinLow_decode_ber;
+der_type_encoder_f CN_IntegerMinLow_encode_der;
+xer_type_decoder_f CN_IntegerMinLow_decode_xer;
+xer_type_encoder_f CN_IntegerMinLow_encode_xer;
+per_type_decoder_f CN_IntegerMinLow_decode_uper;
+per_type_encoder_f CN_IntegerMinLow_encode_uper;
+per_type_decoder_f CN_IntegerMinLow_decode_aper;
+per_type_encoder_f CN_IntegerMinLow_encode_aper;
+
+/*** <<< CODE [CN-IntegerMinLow] >>> ***/
+
+int
+CN_IntegerMinLow_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value <= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [CN-IntegerMinLow] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_CN_IntegerMinLow_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 }        /* (MIN..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [CN-IntegerMinLow] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerMinLow_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
+       "CN-IntegerMinLow",
+       "CN-IntegerMinLow",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerMinLow_tags_1,
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerMinLow_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
+               /sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_CN_IntegerMinLow_constr_1, CN_IntegerMinLow_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerMinHigh] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerMinHigh] >>> ***/
+
+typedef INTEGER_t       NO_IntegerMinHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerMinHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh;
+asn_struct_free_f NO_IntegerMinHigh_free;
+asn_struct_print_f NO_IntegerMinHigh_print;
+asn_constr_check_f NO_IntegerMinHigh_constraint;
+ber_type_decoder_f NO_IntegerMinHigh_decode_ber;
+der_type_encoder_f NO_IntegerMinHigh_encode_der;
+xer_type_decoder_f NO_IntegerMinHigh_decode_xer;
+xer_type_encoder_f NO_IntegerMinHigh_encode_xer;
+per_type_decoder_f NO_IntegerMinHigh_decode_uper;
+per_type_encoder_f NO_IntegerMinHigh_encode_uper;
+per_type_decoder_f NO_IntegerMinHigh_decode_aper;
+per_type_encoder_f NO_IntegerMinHigh_encode_aper;
+
+/*** <<< CODE [NO-IntegerMinHigh] >>> ***/
+
+int
+NO_IntegerMinHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerMinHigh] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerMinHigh_constr_1 CC_NOTUSED = {
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 }        /* (MIN..3000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerMinHigh] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerMinHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
+       "NO-IntegerMinHigh",
+       "NO-IntegerMinHigh",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerMinHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerMinHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerMinHigh_constr_1, NO_IntegerMinHigh_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowHigh] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowHigh] >>> ***/
+
+typedef unsigned long   NO_IntegerLowHigh_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowHigh] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh;
+asn_struct_free_f NO_IntegerLowHigh_free;
+asn_struct_print_f NO_IntegerLowHigh_print;
+asn_constr_check_f NO_IntegerLowHigh_constraint;
+ber_type_decoder_f NO_IntegerLowHigh_decode_ber;
+der_type_encoder_f NO_IntegerLowHigh_encode_der;
+xer_type_decoder_f NO_IntegerLowHigh_decode_xer;
+xer_type_encoder_f NO_IntegerLowHigh_encode_xer;
+per_type_decoder_f NO_IntegerLowHigh_decode_uper;
+per_type_encoder_f NO_IntegerLowHigh_encode_uper;
+per_type_decoder_f NO_IntegerLowHigh_decode_aper;
+per_type_encoder_f NO_IntegerLowHigh_encode_aper;
+
+/*** <<< CODE [NO-IntegerLowHigh] >>> ***/
+
+int
+NO_IntegerLowHigh_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 1 && value <= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerLowHigh] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerLowHigh_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  1,  3000000000 }      /* (1..3000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerLowHigh] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerLowHigh_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowHigh_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
+       "NO-IntegerLowHigh",
+       "NO-IntegerLowHigh",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerLowHigh_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowHigh_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerLowHigh_constr_1, NO_IntegerLowHigh_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerLowHigh_specs_1      /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerLowMax] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [CN-IntegerLowMax] >>> ***/
+
+typedef unsigned long   CN_IntegerLowMax_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerLowMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax;
+asn_struct_free_f CN_IntegerLowMax_free;
+asn_struct_print_f CN_IntegerLowMax_print;
+asn_constr_check_f CN_IntegerLowMax_constraint;
+ber_type_decoder_f CN_IntegerLowMax_decode_ber;
+der_type_encoder_f CN_IntegerLowMax_encode_der;
+xer_type_decoder_f CN_IntegerLowMax_decode_xer;
+xer_type_encoder_f CN_IntegerLowMax_encode_xer;
+per_type_decoder_f CN_IntegerLowMax_decode_uper;
+per_type_encoder_f CN_IntegerLowMax_encode_uper;
+per_type_decoder_f CN_IntegerLowMax_decode_aper;
+per_type_encoder_f CN_IntegerLowMax_encode_aper;
+
+/*** <<< CODE [CN-IntegerLowMax] >>> ***/
+
+int
+CN_IntegerLowMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 1)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [CN-IntegerLowMax] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_CN_IntegerLowMax_constr_1 CC_NOTUSED = {
+       { APC_SEMI_CONSTRAINED, -1, -1,  1,  0 }        /* (1..MAX) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [CN-IntegerLowMax] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_CN_IntegerLowMax_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_CN_IntegerLowMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
+       "CN-IntegerLowMax",
+       "CN-IntegerLowMax",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerLowMax_tags_1,
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerLowMax_tags_1,        /* Same as above */
+       sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
+               /sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_CN_IntegerLowMax_constr_1, CN_IntegerLowMax_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_CN_IntegerLowMax_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerHighMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerHighMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerHighMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerHighMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax;
+asn_struct_free_f NO_IntegerHighMax_free;
+asn_struct_print_f NO_IntegerHighMax_print;
+asn_constr_check_f NO_IntegerHighMax_constraint;
+ber_type_decoder_f NO_IntegerHighMax_decode_ber;
+der_type_encoder_f NO_IntegerHighMax_encode_der;
+xer_type_decoder_f NO_IntegerHighMax_decode_xer;
+xer_type_encoder_f NO_IntegerHighMax_encode_xer;
+per_type_decoder_f NO_IntegerHighMax_decode_uper;
+per_type_encoder_f NO_IntegerHighMax_encode_uper;
+per_type_decoder_f NO_IntegerHighMax_decode_aper;
+per_type_encoder_f NO_IntegerHighMax_encode_aper;
+
+/*** <<< CODE [NO-IntegerHighMax] >>> ***/
+
+int
+NO_IntegerHighMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerHighMax] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerHighMax_constr_1 CC_NOTUSED = {
+       { APC_SEMI_CONSTRAINED, -1, -1,  3000000000,  0 }       /* (3000000000..MAX) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerHighMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerHighMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
+       "NO-IntegerHighMax",
+       "NO-IntegerHighMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerHighMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerHighMax_tags_1,       /* Same as above */
+       sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerHighMax_constr_1, NO_IntegerHighMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerLowestMax] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerLowestMax] >>> ***/
+
+typedef INTEGER_t       NO_IntegerLowestMax_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerLowestMax] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax;
+asn_struct_free_f NO_IntegerLowestMax_free;
+asn_struct_print_f NO_IntegerLowestMax_print;
+asn_constr_check_f NO_IntegerLowestMax_constraint;
+ber_type_decoder_f NO_IntegerLowestMax_decode_ber;
+der_type_encoder_f NO_IntegerLowestMax_encode_der;
+xer_type_decoder_f NO_IntegerLowestMax_decode_xer;
+xer_type_encoder_f NO_IntegerLowestMax_encode_xer;
+per_type_decoder_f NO_IntegerLowestMax_decode_uper;
+per_type_encoder_f NO_IntegerLowestMax_encode_uper;
+per_type_decoder_f NO_IntegerLowestMax_decode_aper;
+per_type_encoder_f NO_IntegerLowestMax_encode_aper;
+
+/*** <<< CODE [NO-IntegerLowestMax] >>> ***/
+
+int
+NO_IntegerLowestMax_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       const INTEGER_t *st = (const INTEGER_t *)sptr;
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if(asn_INTEGER2long(st, &value)) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value too large (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       if((value >= -3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerLowestMax] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerLowestMax_constr_1 CC_NOTUSED = {
+       { APC_SEMI_CONSTRAINED, -1, -1, -3000000000,  0 }       /* (-3000000000..MAX) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerLowestMax] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerLowestMax_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
+       "NO-IntegerLowestMax",
+       "NO-IntegerLowestMax",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerLowestMax_tags_1,
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerLowestMax_tags_1,     /* Same as above */
+       sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
+               /sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerLowestMax_constr_1, NO_IntegerLowestMax_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutRange] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutRange] >>> ***/
+
+typedef unsigned long   NO_IntegerOutRange_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutRange] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange;
+asn_struct_free_f NO_IntegerOutRange_free;
+asn_struct_print_f NO_IntegerOutRange_print;
+asn_constr_check_f NO_IntegerOutRange_constraint;
+ber_type_decoder_f NO_IntegerOutRange_decode_ber;
+der_type_encoder_f NO_IntegerOutRange_encode_der;
+xer_type_decoder_f NO_IntegerOutRange_decode_xer;
+xer_type_encoder_f NO_IntegerOutRange_encode_xer;
+per_type_decoder_f NO_IntegerOutRange_decode_uper;
+per_type_encoder_f NO_IntegerOutRange_encode_uper;
+per_type_decoder_f NO_IntegerOutRange_decode_aper;
+per_type_encoder_f NO_IntegerOutRange_encode_aper;
+
+/*** <<< CODE [NO-IntegerOutRange] >>> ***/
+
+int
+NO_IntegerOutRange_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value >= 3000000000 && value <= 3000000001)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerOutRange] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerOutRange_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1, -1,  3000000000,  3000000001 }      /* (3000000000..3000000001) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerOutRange] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutRange_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutRange_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
+       "NO-IntegerOutRange",
+       "NO-IntegerOutRange",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutRange_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutRange_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerOutRange_constr_1, NO_IntegerOutRange_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutRange_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerOutValue] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerOutValue] >>> ***/
+
+typedef unsigned long   NO_IntegerOutValue_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerOutValue] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue;
+asn_struct_free_f NO_IntegerOutValue_free;
+asn_struct_print_f NO_IntegerOutValue_print;
+asn_constr_check_f NO_IntegerOutValue_constraint;
+ber_type_decoder_f NO_IntegerOutValue_decode_ber;
+der_type_encoder_f NO_IntegerOutValue_encode_der;
+xer_type_decoder_f NO_IntegerOutValue_decode_xer;
+xer_type_encoder_f NO_IntegerOutValue_encode_xer;
+per_type_decoder_f NO_IntegerOutValue_decode_uper;
+per_type_encoder_f NO_IntegerOutValue_encode_uper;
+per_type_decoder_f NO_IntegerOutValue_decode_aper;
+per_type_encoder_f NO_IntegerOutValue_encode_aper;
+
+/*** <<< CODE [NO-IntegerOutValue] >>> ***/
+
+int
+NO_IntegerOutValue_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       unsigned long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const unsigned long *)sptr;
+       
+       if((value == 3000000000)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerOutValue] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerOutValue_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       0, -1,  3000000000,  3000000000 }      /* (3000000000..3000000000) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerOutValue] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerOutValue_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerOutValue_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
+       "NO-IntegerOutValue",
+       "NO-IntegerOutValue",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerOutValue_tags_1,
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerOutValue_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
+               /sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerOutValue_constr_1, NO_IntegerOutValue_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerOutValue_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange1] >>> ***/
+
+typedef long    OK_IntegerInRange1_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1;
+asn_struct_free_f OK_IntegerInRange1_free;
+asn_struct_print_f OK_IntegerInRange1_print;
+asn_constr_check_f OK_IntegerInRange1_constraint;
+ber_type_decoder_f OK_IntegerInRange1_decode_ber;
+der_type_encoder_f OK_IntegerInRange1_encode_der;
+xer_type_decoder_f OK_IntegerInRange1_decode_xer;
+xer_type_encoder_f OK_IntegerInRange1_encode_xer;
+per_type_decoder_f OK_IntegerInRange1_decode_uper;
+per_type_encoder_f OK_IntegerInRange1_encode_uper;
+per_type_decoder_f OK_IntegerInRange1_decode_aper;
+per_type_encoder_f OK_IntegerInRange1_encode_aper;
+
+/*** <<< CODE [OK-IntegerInRange1] >>> ***/
+
+int
+OK_IntegerInRange1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= -100 && value <= 100)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [OK-IntegerInRange1] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_OK_IntegerInRange1_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       8,  8, -100,  100 }    /* (-100..100) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [OK-IntegerInRange1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
+       "OK-IntegerInRange1",
+       "OK-IntegerInRange1",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange1_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange1_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_OK_IntegerInRange1_constr_1, OK_IntegerInRange1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange2] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange2] >>> ***/
+
+typedef long    OK_IntegerInRange2_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2;
+asn_struct_free_f OK_IntegerInRange2_free;
+asn_struct_print_f OK_IntegerInRange2_print;
+asn_constr_check_f OK_IntegerInRange2_constraint;
+ber_type_decoder_f OK_IntegerInRange2_decode_ber;
+der_type_encoder_f OK_IntegerInRange2_encode_der;
+xer_type_decoder_f OK_IntegerInRange2_decode_xer;
+xer_type_encoder_f OK_IntegerInRange2_encode_xer;
+per_type_decoder_f OK_IntegerInRange2_decode_uper;
+per_type_encoder_f OK_IntegerInRange2_encode_uper;
+per_type_decoder_f OK_IntegerInRange2_decode_aper;
+per_type_encoder_f OK_IntegerInRange2_encode_aper;
+
+/*** <<< CODE [OK-IntegerInRange2] >>> ***/
+
+int
+OK_IntegerInRange2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == -100) || (value == 100))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [OK-IntegerInRange2] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_OK_IntegerInRange2_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       8,  8, -100,  100 }    /* (-100..100) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [OK-IntegerInRange2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
+       "OK-IntegerInRange2",
+       "OK-IntegerInRange2",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange2_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange2_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_OK_IntegerInRange2_constr_1, OK_IntegerInRange2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange3] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange3] >>> ***/
+
+typedef long    OK_IntegerInRange3_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3;
+asn_struct_free_f OK_IntegerInRange3_free;
+asn_struct_print_f OK_IntegerInRange3_print;
+asn_constr_check_f OK_IntegerInRange3_constraint;
+ber_type_decoder_f OK_IntegerInRange3_decode_ber;
+der_type_encoder_f OK_IntegerInRange3_encode_der;
+xer_type_decoder_f OK_IntegerInRange3_decode_xer;
+xer_type_encoder_f OK_IntegerInRange3_encode_xer;
+per_type_decoder_f OK_IntegerInRange3_decode_uper;
+per_type_encoder_f OK_IntegerInRange3_encode_uper;
+per_type_decoder_f OK_IntegerInRange3_decode_aper;
+per_type_encoder_f OK_IntegerInRange3_encode_aper;
+
+/*** <<< CODE [OK-IntegerInRange3] >>> ***/
+
+int
+OK_IntegerInRange3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if((value >= (-2147483647L - 1) && value <= 2147483647)) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [OK-IntegerInRange3] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_OK_IntegerInRange3_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1, (-2147483647L - 1),  2147483647 }      /* (-2147483648..2147483647) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [OK-IntegerInRange3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
+       "OK-IntegerInRange3",
+       "OK-IntegerInRange3",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange3_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange3_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_OK_IntegerInRange3_constr_1, OK_IntegerInRange3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange4] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange4] >>> ***/
+
+typedef long    OK_IntegerInRange4_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4;
+asn_struct_free_f OK_IntegerInRange4_free;
+asn_struct_print_f OK_IntegerInRange4_print;
+asn_constr_check_f OK_IntegerInRange4_constraint;
+ber_type_decoder_f OK_IntegerInRange4_decode_ber;
+der_type_encoder_f OK_IntegerInRange4_encode_der;
+xer_type_decoder_f OK_IntegerInRange4_decode_xer;
+xer_type_encoder_f OK_IntegerInRange4_encode_xer;
+per_type_decoder_f OK_IntegerInRange4_decode_uper;
+per_type_encoder_f OK_IntegerInRange4_encode_uper;
+per_type_decoder_f OK_IntegerInRange4_decode_aper;
+per_type_encoder_f OK_IntegerInRange4_encode_aper;
+
+/*** <<< CODE [OK-IntegerInRange4] >>> ***/
+
+int
+OK_IntegerInRange4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [OK-IntegerInRange4] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_OK_IntegerInRange4_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1, (-2147483647L - 1),  2147483647 }      /* (-2147483648..2147483647) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [OK-IntegerInRange4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
+       "OK-IntegerInRange4",
+       "OK-IntegerInRange4",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange4_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange4_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_OK_IntegerInRange4_constr_1, OK_IntegerInRange4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-IntegerInRange5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-IntegerInRange5] >>> ***/
+
+typedef long    OK_IntegerInRange5_t;
+
+/*** <<< FUNC-DECLS [OK-IntegerInRange5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5;
+asn_struct_free_f OK_IntegerInRange5_free;
+asn_struct_print_f OK_IntegerInRange5_print;
+asn_constr_check_f OK_IntegerInRange5_constraint;
+ber_type_decoder_f OK_IntegerInRange5_decode_ber;
+der_type_encoder_f OK_IntegerInRange5_encode_der;
+xer_type_decoder_f OK_IntegerInRange5_decode_xer;
+xer_type_encoder_f OK_IntegerInRange5_encode_xer;
+per_type_decoder_f OK_IntegerInRange5_decode_uper;
+per_type_encoder_f OK_IntegerInRange5_encode_uper;
+per_type_decoder_f OK_IntegerInRange5_decode_aper;
+per_type_encoder_f OK_IntegerInRange5_encode_aper;
+
+/*** <<< CODE [OK-IntegerInRange5] >>> ***/
+
+int
+OK_IntegerInRange5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       long value;
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       value = *(const long *)sptr;
+       
+       if(((value == (-2147483647L - 1)) || (value == 2147483647))) {
+               /* Constraint check succeeded */
+               return 0;
+       } else {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: constraint failed (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [OK-IntegerInRange5] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_OK_IntegerInRange5_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  32, -1, (-2147483647L - 1),  2147483647 }  /* (-2147483648..2147483647,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [OK-IntegerInRange5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_IntegerInRange5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
+       "OK-IntegerInRange5",
+       "OK-IntegerInRange5",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_IntegerInRange5_tags_1,
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       asn_DEF_OK_IntegerInRange5_tags_1,      /* Same as above */
+       sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
+               /sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_OK_IntegerInRange5_constr_1, OK_IntegerInRange5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerInRange6] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-IntegerInRange6] >>> ***/
+
+typedef unsigned long   NO_IntegerInRange6_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerInRange6] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6;
+asn_struct_free_f NO_IntegerInRange6_free;
+asn_struct_print_f NO_IntegerInRange6_print;
+asn_constr_check_f NO_IntegerInRange6_constraint;
+ber_type_decoder_f NO_IntegerInRange6_decode_ber;
+der_type_encoder_f NO_IntegerInRange6_encode_der;
+xer_type_decoder_f NO_IntegerInRange6_decode_xer;
+xer_type_encoder_f NO_IntegerInRange6_encode_xer;
+per_type_decoder_f NO_IntegerInRange6_decode_uper;
+per_type_encoder_f NO_IntegerInRange6_encode_uper;
+per_type_decoder_f NO_IntegerInRange6_decode_aper;
+per_type_encoder_f NO_IntegerInRange6_encode_aper;
+
+/*** <<< CODE [NO-IntegerInRange6] >>> ***/
+
+int
+NO_IntegerInRange6_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       /* Constraint check succeeded */
+       return 0;
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< CTDEFS [NO-IntegerInRange6] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_NO_IntegerInRange6_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       32, -1,  0,  4294967295 }      /* (0..4294967295) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [NO-IntegerInRange6] >>> ***/
+
+static const asn_INTEGER_specifics_t asn_SPC_NO_IntegerInRange6_specs_1 = {
+       0,      0,      0,      0,      0,
+       0,      /* Native long size */
+       1       /* Unsigned representation */
+};
+static const ber_tlv_tag_t asn_DEF_NO_IntegerInRange6_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
+       "NO-IntegerInRange6",
+       "NO-IntegerInRange6",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_IntegerInRange6_tags_1,
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerInRange6_tags_1,      /* Same as above */
+       sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
+               /sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
+       { 0, &asn_PER_type_NO_IntegerInRange6_constr_1, NO_IntegerInRange6_constraint },
+       0, 0,   /* No members */
+       &asn_SPC_NO_IntegerInRange6_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [CN-IntegerEnumerated1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< DEPS [CN-IntegerEnumerated1] >>> ***/
+
+typedef enum CN_IntegerEnumerated1 {
+       CN_IntegerEnumerated1_a = 1,
+       CN_IntegerEnumerated1_b = 2
+} e_CN_IntegerEnumerated1;
+
+/*** <<< TYPE-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+typedef long    CN_IntegerEnumerated1_t;
+
+/*** <<< FUNC-DECLS [CN-IntegerEnumerated1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1;
+asn_struct_free_f CN_IntegerEnumerated1_free;
+asn_struct_print_f CN_IntegerEnumerated1_print;
+asn_constr_check_f CN_IntegerEnumerated1_constraint;
+ber_type_decoder_f CN_IntegerEnumerated1_decode_ber;
+der_type_encoder_f CN_IntegerEnumerated1_encode_der;
+xer_type_decoder_f CN_IntegerEnumerated1_decode_xer;
+xer_type_encoder_f CN_IntegerEnumerated1_encode_xer;
+per_type_decoder_f CN_IntegerEnumerated1_decode_uper;
+per_type_encoder_f CN_IntegerEnumerated1_encode_uper;
+per_type_decoder_f CN_IntegerEnumerated1_decode_aper;
+per_type_encoder_f CN_IntegerEnumerated1_encode_aper;
+
+/*** <<< CODE [CN-IntegerEnumerated1] >>> ***/
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [CN-IntegerEnumerated1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_CN_IntegerEnumerated1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
+       "CN-IntegerEnumerated1",
+       "CN-IntegerEnumerated1",
+       &asn_OP_NativeInteger,
+       asn_DEF_CN_IntegerEnumerated1_tags_1,
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       asn_DEF_CN_IntegerEnumerated1_tags_1,   /* Same as above */
+       sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
+               /sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
+       { 0, 0, NativeInteger_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-IntegerEnumerated2] >>> ***/
+
+#include <INTEGER.h>
+
+/*** <<< DEPS [NO-IntegerEnumerated2] >>> ***/
+
+typedef enum NO_IntegerEnumerated2 {
+       NO_IntegerEnumerated2_a = 1,
+       NO_IntegerEnumerated2_b = 3000000000
+} e_NO_IntegerEnumerated2;
+
+/*** <<< TYPE-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+typedef INTEGER_t       NO_IntegerEnumerated2_t;
+
+/*** <<< FUNC-DECLS [NO-IntegerEnumerated2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2;
+asn_struct_free_f NO_IntegerEnumerated2_free;
+asn_struct_print_f NO_IntegerEnumerated2_print;
+asn_constr_check_f NO_IntegerEnumerated2_constraint;
+ber_type_decoder_f NO_IntegerEnumerated2_decode_ber;
+der_type_encoder_f NO_IntegerEnumerated2_encode_der;
+xer_type_decoder_f NO_IntegerEnumerated2_decode_xer;
+xer_type_encoder_f NO_IntegerEnumerated2_encode_xer;
+per_type_decoder_f NO_IntegerEnumerated2_decode_uper;
+per_type_encoder_f NO_IntegerEnumerated2_encode_uper;
+per_type_decoder_f NO_IntegerEnumerated2_decode_aper;
+per_type_encoder_f NO_IntegerEnumerated2_encode_aper;
+
+/*** <<< CODE [NO-IntegerEnumerated2] >>> ***/
+
+/*
+ * This type is implemented using INTEGER,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-IntegerEnumerated2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_IntegerEnumerated2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
+       "NO-IntegerEnumerated2",
+       "NO-IntegerEnumerated2",
+       &asn_OP_INTEGER,
+       asn_DEF_NO_IntegerEnumerated2_tags_1,
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       asn_DEF_NO_IntegerEnumerated2_tags_1,   /* Same as above */
+       sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
+               /sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
+       { 0, 0, INTEGER_constraint },
+       0, 0,   /* Defined elsewhere */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1 b/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1
new file mode 100644 (file)
index 0000000..0a8e543
--- /dev/null
@@ -0,0 +1,20 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .91
+
+ModuleConditionalIntegerType-with-fblessSIZE
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 91 }
+DEFINITIONS ::=
+BEGIN
+
+       OK-Integer1 ::= INTEGER (SIZE(1))
+       OK-Integer2 ::= INTEGER (SIZE(2))
+       OK-Integer3 ::= INTEGER (SIZE(3))
+       OK-Integer4 ::= INTEGER (SIZE(4))
+       NO-Integer5 ::= INTEGER (SIZE(5))
+
+END
diff --git a/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE b/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE
new file mode 100644 (file)
index 0000000..8205746
--- /dev/null
@@ -0,0 +1,330 @@
+
+/*** <<< INCLUDES [OK-Integer1] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-Integer1] >>> ***/
+
+typedef long    OK_Integer1_t;
+
+/*** <<< FUNC-DECLS [OK-Integer1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_Integer1;
+asn_struct_free_f OK_Integer1_free;
+asn_struct_print_f OK_Integer1_print;
+asn_constr_check_f OK_Integer1_constraint;
+ber_type_decoder_f OK_Integer1_decode_ber;
+der_type_encoder_f OK_Integer1_encode_der;
+xer_type_decoder_f OK_Integer1_decode_xer;
+xer_type_encoder_f OK_Integer1_encode_xer;
+
+/*** <<< CODE [OK-Integer1] >>> ***/
+
+int
+OK_Integer1_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-Integer1] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_Integer1_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_Integer1 = {
+       "OK-Integer1",
+       "OK-Integer1",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_Integer1_tags_1,
+       sizeof(asn_DEF_OK_Integer1_tags_1)
+               /sizeof(asn_DEF_OK_Integer1_tags_1[0]), /* 1 */
+       asn_DEF_OK_Integer1_tags_1,     /* Same as above */
+       sizeof(asn_DEF_OK_Integer1_tags_1)
+               /sizeof(asn_DEF_OK_Integer1_tags_1[0]), /* 1 */
+       { 0, 0, OK_Integer1_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-Integer2] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-Integer2] >>> ***/
+
+typedef long    OK_Integer2_t;
+
+/*** <<< FUNC-DECLS [OK-Integer2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_Integer2;
+asn_struct_free_f OK_Integer2_free;
+asn_struct_print_f OK_Integer2_print;
+asn_constr_check_f OK_Integer2_constraint;
+ber_type_decoder_f OK_Integer2_decode_ber;
+der_type_encoder_f OK_Integer2_encode_der;
+xer_type_decoder_f OK_Integer2_decode_xer;
+xer_type_encoder_f OK_Integer2_encode_xer;
+
+/*** <<< CODE [OK-Integer2] >>> ***/
+
+int
+OK_Integer2_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-Integer2] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_Integer2_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_Integer2 = {
+       "OK-Integer2",
+       "OK-Integer2",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_Integer2_tags_1,
+       sizeof(asn_DEF_OK_Integer2_tags_1)
+               /sizeof(asn_DEF_OK_Integer2_tags_1[0]), /* 1 */
+       asn_DEF_OK_Integer2_tags_1,     /* Same as above */
+       sizeof(asn_DEF_OK_Integer2_tags_1)
+               /sizeof(asn_DEF_OK_Integer2_tags_1[0]), /* 1 */
+       { 0, 0, OK_Integer2_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-Integer3] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-Integer3] >>> ***/
+
+typedef long    OK_Integer3_t;
+
+/*** <<< FUNC-DECLS [OK-Integer3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_Integer3;
+asn_struct_free_f OK_Integer3_free;
+asn_struct_print_f OK_Integer3_print;
+asn_constr_check_f OK_Integer3_constraint;
+ber_type_decoder_f OK_Integer3_decode_ber;
+der_type_encoder_f OK_Integer3_encode_der;
+xer_type_decoder_f OK_Integer3_decode_xer;
+xer_type_encoder_f OK_Integer3_encode_xer;
+
+/*** <<< CODE [OK-Integer3] >>> ***/
+
+int
+OK_Integer3_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-Integer3] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_Integer3_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_Integer3 = {
+       "OK-Integer3",
+       "OK-Integer3",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_Integer3_tags_1,
+       sizeof(asn_DEF_OK_Integer3_tags_1)
+               /sizeof(asn_DEF_OK_Integer3_tags_1[0]), /* 1 */
+       asn_DEF_OK_Integer3_tags_1,     /* Same as above */
+       sizeof(asn_DEF_OK_Integer3_tags_1)
+               /sizeof(asn_DEF_OK_Integer3_tags_1[0]), /* 1 */
+       { 0, 0, OK_Integer3_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [OK-Integer4] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [OK-Integer4] >>> ***/
+
+typedef long    OK_Integer4_t;
+
+/*** <<< FUNC-DECLS [OK-Integer4] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OK_Integer4;
+asn_struct_free_f OK_Integer4_free;
+asn_struct_print_f OK_Integer4_print;
+asn_constr_check_f OK_Integer4_constraint;
+ber_type_decoder_f OK_Integer4_decode_ber;
+der_type_encoder_f OK_Integer4_encode_der;
+xer_type_decoder_f OK_Integer4_decode_xer;
+xer_type_encoder_f OK_Integer4_encode_xer;
+
+/*** <<< CODE [OK-Integer4] >>> ***/
+
+int
+OK_Integer4_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [OK-Integer4] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_OK_Integer4_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_OK_Integer4 = {
+       "OK-Integer4",
+       "OK-Integer4",
+       &asn_OP_NativeInteger,
+       asn_DEF_OK_Integer4_tags_1,
+       sizeof(asn_DEF_OK_Integer4_tags_1)
+               /sizeof(asn_DEF_OK_Integer4_tags_1[0]), /* 1 */
+       asn_DEF_OK_Integer4_tags_1,     /* Same as above */
+       sizeof(asn_DEF_OK_Integer4_tags_1)
+               /sizeof(asn_DEF_OK_Integer4_tags_1[0]), /* 1 */
+       { 0, 0, OK_Integer4_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
+
+/*** <<< INCLUDES [NO-Integer5] >>> ***/
+
+#include <NativeInteger.h>
+
+/*** <<< TYPE-DECLS [NO-Integer5] >>> ***/
+
+typedef long    NO_Integer5_t;
+
+/*** <<< FUNC-DECLS [NO-Integer5] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_NO_Integer5;
+asn_struct_free_f NO_Integer5_free;
+asn_struct_print_f NO_Integer5_print;
+asn_constr_check_f NO_Integer5_constraint;
+ber_type_decoder_f NO_Integer5_decode_ber;
+der_type_encoder_f NO_Integer5_encode_der;
+xer_type_decoder_f NO_Integer5_decode_xer;
+xer_type_encoder_f NO_Integer5_encode_xer;
+
+/*** <<< CODE [NO-Integer5] >>> ***/
+
+int
+NO_Integer5_constraint(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using NativeInteger,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [NO-Integer5] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_NO_Integer5_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (2 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_NO_Integer5 = {
+       "NO-Integer5",
+       "NO-Integer5",
+       &asn_OP_NativeInteger,
+       asn_DEF_NO_Integer5_tags_1,
+       sizeof(asn_DEF_NO_Integer5_tags_1)
+               /sizeof(asn_DEF_NO_Integer5_tags_1[0]), /* 1 */
+       asn_DEF_NO_Integer5_tags_1,     /* Same as above */
+       sizeof(asn_DEF_NO_Integer5_tags_1)
+               /sizeof(asn_DEF_NO_Integer5_tags_1[0]), /* 1 */
+       { 0, 0, NO_Integer5_constraint },
+       0, 0,   /* No members */
+       0       /* No specifics */
+};
+
diff --git a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1 b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1
new file mode 100644 (file)
index 0000000..e57312d
--- /dev/null
@@ -0,0 +1,90 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .92
+
+ModuleCircularReferences
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 92 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Everything ::= SEQUENCE {
+               ch1     Choice1,
+               ch2     Choice2,
+               ch3     Choice3,
+               set     Set,
+               a       Alpha,
+               b       Beta,
+               g       Gamma,
+               ot      OneTwo,
+               tt      TwoThree,
+               to      ThreeOne
+       }
+
+       -- This type refers to the type directly containing itself.
+       Choice1 ::= CHOICE {
+               something Everything,
+               ...,
+               some2   Everything
+       }
+
+       Choice2 ::= CHOICE {
+               typeref TypeRef,
+               ...,
+               some3   Everything
+       }
+
+       Choice3 ::= CHOICE {
+                       a SEQUENCE {
+                               aa Everything
+                       },
+                       b  Everything,
+                       c SEQUENCE OF Choice3
+               }
+
+       Set ::= SET OF SEQUENCE {
+                       int     INTEGER,
+                       set     Set,
+                       seq     Sequence,
+                       set2    Set OPTIONAL,
+                       ...,
+                       set3    Set
+               }
+
+       Sequence ::= SEQUENCE {
+                       a       INTEGER,
+                       seq     Sequence OPTIONAL,
+                       ...,
+                       b       INTEGER,
+                       set     Set OPTIONAL
+               }
+
+       TypeRef ::= Sequence
+
+       Alpha ::= SEQUENCE {
+                       a Beta,
+                       b SEQUENCE {
+                               b Beta OPTIONAL
+                       }
+               }
+
+       Beta ::= SEQUENCE {
+                       b Alpha OPTIONAL,
+                       g Gamma OPTIONAL
+               }
+
+       Gamma ::= SEQUENCE {
+                       o TwoThree,
+                       a Alpha,        -- expected inline
+                       b Beta          -- expected inline
+               }
+
+       -- This is a true superdependency.
+       OneTwo ::= SET { m12 TwoThree }
+       TwoThree ::= SET { m23 ThreeOne }
+       ThreeOne ::= SET { m31 OneTwo, g Gamma }
+
+END
diff --git a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice
new file mode 100644 (file)
index 0000000..bd88d83
--- /dev/null
@@ -0,0 +1,1496 @@
+
+/*** <<< INCLUDES [Everything] >>> ***/
+
+#include "Set.h"
+#include "Alpha.h"
+#include "Beta.h"
+#include "Gamma.h"
+#include "OneTwo.h"
+#include "TwoThree.h"
+#include "ThreeOne.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Everything] >>> ***/
+
+struct Choice1;
+struct Choice2;
+struct Choice3;
+
+/*** <<< TYPE-DECLS [Everything] >>> ***/
+
+typedef struct Everything {
+       struct Choice1  *ch1;
+       struct Choice2  *ch2;
+       struct Choice3  *ch3;
+       Set_t    set;
+       Alpha_t  a;
+       Beta_t   b;
+       Gamma_t  g;
+       OneTwo_t         ot;
+       TwoThree_t       tt;
+       ThreeOne_t       to;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Everything_t;
+
+/*** <<< FUNC-DECLS [Everything] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Everything;
+extern asn_SEQUENCE_specifics_t asn_SPC_Everything_specs_1;
+extern asn_TYPE_member_t asn_MBR_Everything_1[10];
+
+/*** <<< POST-INCLUDE [Everything] >>> ***/
+
+#include "Choice1.h"
+#include "Choice2.h"
+#include "Choice3.h"
+
+/*** <<< STAT-DEFS [Everything] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Everything_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Everything, ch1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch1"
+               },
+       { ATF_POINTER, 0, offsetof(struct Everything, ch2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch2"
+               },
+       { ATF_POINTER, 0, offsetof(struct Everything, ch3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch3"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, ot),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OneTwo,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ot"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, tt),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "tt"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, to),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ThreeOne,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "to"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Everything_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Everything_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ch1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ch2 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ch3 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* set */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* g */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ot */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* tt */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* to */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Everything_specs_1 = {
+       sizeof(struct Everything),
+       offsetof(struct Everything, _asn_ctx),
+       .tag2el = asn_MAP_Everything_tag2el_1,
+       .tag2el_count = 10,     /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Everything = {
+       "Everything",
+       "Everything",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Everything_tags_1,
+       sizeof(asn_DEF_Everything_tags_1)
+               /sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
+       asn_DEF_Everything_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Everything_tags_1)
+               /sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Everything_1,
+       10,     /* Elements count */
+       &asn_SPC_Everything_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice1] >>> ***/
+
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice1] >>> ***/
+
+typedef enum Choice1_PR {
+       Choice1_PR_NOTHING,     /* No components present */
+       Choice1_PR_something,
+       /* Extensions may appear below */
+       Choice1_PR_some2
+} Choice1_PR;
+
+/*** <<< FWD-DECLS [Choice1] >>> ***/
+
+struct Everything;
+
+/*** <<< TYPE-DECLS [Choice1] >>> ***/
+
+typedef struct Choice1 {
+       Choice1_PR present;
+       union Choice1_u {
+               struct Everything       *something;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               struct Everything       *some2;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice1_t;
+
+/*** <<< FUNC-DECLS [Choice1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice1;
+extern asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice1_1[2];
+
+/*** <<< POST-INCLUDE [Choice1] >>> ***/
+
+#include "Everything.h"
+
+/*** <<< STAT-DEFS [Choice1] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice1_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice1, choice.something),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "something"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice1, choice.some2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "some2"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* something */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* some2 */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1 = {
+       sizeof(struct Choice1),
+       offsetof(struct Choice1, _asn_ctx),
+       offsetof(struct Choice1, present),
+       sizeof(((struct Choice1 *)0)->present),
+       .tag2el = asn_MAP_Choice1_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice1 = {
+       "Choice1",
+       "Choice1",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice1_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice1_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_typeref,
+       /* Extensions may appear below */
+       Choice2_PR_some3
+} Choice2_PR;
+
+/*** <<< FWD-DECLS [Choice2] >>> ***/
+
+struct TypeRef;
+struct Everything;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               struct TypeRef  *typeref;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               struct Everything       *some3;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+extern asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice2_1[2];
+
+/*** <<< POST-INCLUDE [Choice2] >>> ***/
+
+#include "TypeRef.h"
+#include "Everything.h"
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice2, choice.typeref),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TypeRef,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "typeref"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice2, choice.some3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "some3"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* typeref */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* some3 */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice3] >>> ***/
+
+#include <constr_SEQUENCE.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice3] >>> ***/
+
+typedef enum Choice3_PR {
+       Choice3_PR_NOTHING,     /* No components present */
+       Choice3_PR_a,
+       Choice3_PR_b,
+       Choice3_PR_c
+} Choice3_PR;
+
+/*** <<< FWD-DECLS [Choice3] >>> ***/
+
+struct Everything;
+struct Choice3;
+
+/*** <<< TYPE-DECLS [Choice3] >>> ***/
+
+typedef struct Choice3 {
+       Choice3_PR present;
+       union Choice3_u {
+               struct a {
+                       struct Everything       *aa;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } *a;
+               struct Everything       *b;
+               struct c {
+                       A_SEQUENCE_OF(struct Choice3) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } *c;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice3_t;
+
+/*** <<< FUNC-DECLS [Choice3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice3;
+extern asn_CHOICE_specifics_t asn_SPC_Choice3_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice3_1[3];
+
+/*** <<< POST-INCLUDE [Choice3] >>> ***/
+
+#include "Everything.h"
+#include "Choice3.h"
+
+/*** <<< STAT-DEFS [Choice3] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_a_2[] = {
+       { ATF_POINTER, 0, offsetof(struct a, aa),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "aa"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_a_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_a_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* aa */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_a_specs_2 = {
+       sizeof(struct a),
+       offsetof(struct a, _asn_ctx),
+       .tag2el = asn_MAP_a_tag2el_2,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_a_2 = {
+       "a",
+       "a",
+       &asn_OP_SEQUENCE,
+       asn_DEF_a_tags_2,
+       sizeof(asn_DEF_a_tags_2)
+               /sizeof(asn_DEF_a_tags_2[0]) - 1, /* 1 */
+       asn_DEF_a_tags_2,       /* Same as above */
+       sizeof(asn_DEF_a_tags_2)
+               /sizeof(asn_DEF_a_tags_2[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_a_2,
+       1,      /* Elements count */
+       &asn_SPC_a_specs_2      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_c_5[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_Choice3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_c_tags_5[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_c_specs_5 = {
+       sizeof(struct c),
+       offsetof(struct c, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_c_5 = {
+       "c",
+       "c",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_c_tags_5,
+       sizeof(asn_DEF_c_tags_5)
+               /sizeof(asn_DEF_c_tags_5[0]) - 1, /* 1 */
+       asn_DEF_c_tags_5,       /* Same as above */
+       sizeof(asn_DEF_c_tags_5)
+               /sizeof(asn_DEF_c_tags_5[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_c_5,
+       1,      /* Single element */
+       &asn_SPC_c_specs_5      /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Choice3_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice3, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_a_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice3, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice3, choice.c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_c_5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice3_specs_1 = {
+       sizeof(struct Choice3),
+       offsetof(struct Choice3, _asn_ctx),
+       offsetof(struct Choice3, present),
+       sizeof(((struct Choice3 *)0)->present),
+       .tag2el = asn_MAP_Choice3_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice3 = {
+       "Choice3",
+       "Choice3",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice3_1,
+       3,      /* Elements count */
+       &asn_SPC_Choice3_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Set] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [Set] >>> ***/
+
+struct Set;
+struct Sequence;
+
+/*** <<< FWD-DEFS [Set] >>> ***/
+
+typedef struct Member {
+       long     Int;
+       struct Set      *set;
+       struct Sequence *seq;
+       struct Set      *set2;  /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       struct Set      *set3;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Member;
+
+/*** <<< TYPE-DECLS [Set] >>> ***/
+
+typedef struct Set {
+       A_SET_OF(Member) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Set_t;
+
+/*** <<< FUNC-DECLS [Set] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Set;
+extern asn_SET_OF_specifics_t asn_SPC_Set_specs_1;
+extern asn_TYPE_member_t asn_MBR_Set_1[1];
+
+/*** <<< POST-INCLUDE [Set] >>> ***/
+
+#include "Set.h"
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [Set] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Member, Int),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+       { ATF_POINTER, 0, offsetof(struct Member, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+       { ATF_POINTER, 0, offsetof(struct Member, seq),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seq"
+               },
+       { ATF_POINTER, 2, offsetof(struct Member, set2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set2"
+               },
+       { ATF_POINTER, 1, offsetof(struct Member, set3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set3"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* set */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seq */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* set2 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* set3 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+       sizeof(struct Member),
+       offsetof(struct Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_2,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       4,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_2,
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       asn_DEF_Member_tags_2,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_2,
+       5,      /* Elements count */
+       &asn_SPC_Member_specs_2 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Set_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Set_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Set_specs_1 = {
+       sizeof(struct Set),
+       offsetof(struct Set, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Set = {
+       "Set",
+       "Set",
+       &asn_OP_SET_OF,
+       asn_DEF_Set_tags_1,
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       asn_DEF_Set_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Set_1,
+       1,      /* Single element */
+       &asn_SPC_Set_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include <NativeInteger.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Sequence] >>> ***/
+
+struct Sequence;
+struct Set;
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       long     a;
+       struct Sequence *seq;   /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       long    *b;
+       struct Set      *set;   /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[4];
+
+/*** <<< POST-INCLUDE [Sequence] >>> ***/
+
+#include "Sequence.h"
+#include "Set.h"
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 3, offsetof(struct Sequence, seq),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seq"
+               },
+       { ATF_POINTER, 2, offsetof(struct Sequence, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seq */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* set */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       4,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [TypeRef] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< TYPE-DECLS [TypeRef] >>> ***/
+
+typedef Sequence_t      TypeRef_t;
+
+/*** <<< FUNC-DECLS [TypeRef] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TypeRef;
+asn_struct_free_f TypeRef_free;
+asn_struct_print_f TypeRef_print;
+asn_constr_check_f TypeRef_constraint;
+ber_type_decoder_f TypeRef_decode_ber;
+der_type_encoder_f TypeRef_encode_der;
+xer_type_decoder_f TypeRef_decode_xer;
+xer_type_encoder_f TypeRef_encode_xer;
+
+/*** <<< CODE [TypeRef] >>> ***/
+
+/*
+ * This type is implemented using Sequence,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [TypeRef] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_TypeRef_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_TypeRef = {
+       "TypeRef",
+       "TypeRef",
+       &asn_OP_SEQUENCE,
+       asn_DEF_TypeRef_tags_1,
+       sizeof(asn_DEF_TypeRef_tags_1)
+               /sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
+       asn_DEF_TypeRef_tags_1, /* Same as above */
+       sizeof(asn_DEF_TypeRef_tags_1)
+               /sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       4,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Alpha] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Alpha] >>> ***/
+
+struct Beta;
+
+/*** <<< TYPE-DECLS [Alpha] >>> ***/
+
+typedef struct Alpha {
+       struct Beta     *a;
+       struct b {
+               struct Beta     *b;     /* OPTIONAL */
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } b;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Alpha_t;
+
+/*** <<< FUNC-DECLS [Alpha] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Alpha;
+extern asn_SEQUENCE_specifics_t asn_SPC_Alpha_specs_1;
+extern asn_TYPE_member_t asn_MBR_Alpha_1[2];
+
+/*** <<< POST-INCLUDE [Alpha] >>> ***/
+
+#include "Beta.h"
+
+/*** <<< STAT-DEFS [Alpha] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_b_3[] = {
+       { ATF_POINTER, 1, offsetof(struct b, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_b_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_b_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* b */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_b_specs_3 = {
+       sizeof(struct b),
+       offsetof(struct b, _asn_ctx),
+       .tag2el = asn_MAP_b_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_b_3 = {
+       "b",
+       "b",
+       &asn_OP_SEQUENCE,
+       asn_DEF_b_tags_3,
+       sizeof(asn_DEF_b_tags_3)
+               /sizeof(asn_DEF_b_tags_3[0]) - 1, /* 1 */
+       asn_DEF_b_tags_3,       /* Same as above */
+       sizeof(asn_DEF_b_tags_3)
+               /sizeof(asn_DEF_b_tags_3[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_b_3,
+       1,      /* Elements count */
+       &asn_SPC_b_specs_3      /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Alpha_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Alpha, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Alpha, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_b_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Alpha_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Alpha_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Alpha_specs_1 = {
+       sizeof(struct Alpha),
+       offsetof(struct Alpha, _asn_ctx),
+       .tag2el = asn_MAP_Alpha_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Alpha = {
+       "Alpha",
+       "Alpha",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Alpha_tags_1,
+       sizeof(asn_DEF_Alpha_tags_1)
+               /sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
+       asn_DEF_Alpha_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Alpha_tags_1)
+               /sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Alpha_1,
+       2,      /* Elements count */
+       &asn_SPC_Alpha_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Beta] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Beta] >>> ***/
+
+struct Alpha;
+struct Gamma;
+
+/*** <<< TYPE-DECLS [Beta] >>> ***/
+
+typedef struct Beta {
+       struct Alpha    *b;     /* OPTIONAL */
+       struct Gamma    *g;     /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Beta_t;
+
+/*** <<< FUNC-DECLS [Beta] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Beta;
+extern asn_SEQUENCE_specifics_t asn_SPC_Beta_specs_1;
+extern asn_TYPE_member_t asn_MBR_Beta_1[2];
+
+/*** <<< POST-INCLUDE [Beta] >>> ***/
+
+#include "Alpha.h"
+#include "Gamma.h"
+
+/*** <<< STAT-DEFS [Beta] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Beta_1[] = {
+       { ATF_POINTER, 2, offsetof(struct Beta, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 1, offsetof(struct Beta, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Beta_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Beta_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* g */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Beta_specs_1 = {
+       sizeof(struct Beta),
+       offsetof(struct Beta, _asn_ctx),
+       .tag2el = asn_MAP_Beta_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Beta = {
+       "Beta",
+       "Beta",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Beta_tags_1,
+       sizeof(asn_DEF_Beta_tags_1)
+               /sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
+       asn_DEF_Beta_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Beta_tags_1)
+               /sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Beta_1,
+       2,      /* Elements count */
+       &asn_SPC_Beta_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Gamma] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Gamma] >>> ***/
+
+struct TwoThree;
+struct Alpha;
+struct Beta;
+
+/*** <<< TYPE-DECLS [Gamma] >>> ***/
+
+typedef struct Gamma {
+       struct TwoThree *o;
+       struct Alpha    *a;
+       struct Beta     *b;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Gamma_t;
+
+/*** <<< FUNC-DECLS [Gamma] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Gamma;
+extern asn_SEQUENCE_specifics_t asn_SPC_Gamma_specs_1;
+extern asn_TYPE_member_t asn_MBR_Gamma_1[3];
+
+/*** <<< POST-INCLUDE [Gamma] >>> ***/
+
+#include "TwoThree.h"
+#include "Alpha.h"
+#include "Beta.h"
+
+/*** <<< STAT-DEFS [Gamma] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Gamma_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Gamma, o),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "o"
+               },
+       { ATF_POINTER, 0, offsetof(struct Gamma, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 0, offsetof(struct Gamma, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Gamma_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Gamma_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* o */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* b */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Gamma_specs_1 = {
+       sizeof(struct Gamma),
+       offsetof(struct Gamma, _asn_ctx),
+       .tag2el = asn_MAP_Gamma_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Gamma = {
+       "Gamma",
+       "Gamma",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Gamma_tags_1,
+       sizeof(asn_DEF_Gamma_tags_1)
+               /sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
+       asn_DEF_Gamma_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Gamma_tags_1)
+               /sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Gamma_1,
+       3,      /* Elements count */
+       &asn_SPC_Gamma_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [OneTwo] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [OneTwo] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum OneTwo_PR {
+       OneTwo_PR_m12,  /* Member m12 is present */
+} OneTwo_PR;
+
+/*** <<< FWD-DECLS [OneTwo] >>> ***/
+
+struct TwoThree;
+
+/*** <<< TYPE-DECLS [OneTwo] >>> ***/
+
+typedef struct OneTwo {
+       struct TwoThree *m12;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pOneTwo, OneTwo_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} OneTwo_t;
+
+/*** <<< FUNC-DECLS [OneTwo] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OneTwo;
+extern asn_SET_specifics_t asn_SPC_OneTwo_specs_1;
+extern asn_TYPE_member_t asn_MBR_OneTwo_1[1];
+
+/*** <<< POST-INCLUDE [OneTwo] >>> ***/
+
+#include "TwoThree.h"
+
+/*** <<< STAT-DEFS [OneTwo] >>> ***/
+
+asn_TYPE_member_t asn_MBR_OneTwo_1[] = {
+       { ATF_POINTER, 0, offsetof(struct OneTwo, m12),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m12"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_OneTwo_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_OneTwo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* m12 */
+};
+static const uint8_t asn_MAP_OneTwo_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+asn_SET_specifics_t asn_SPC_OneTwo_specs_1 = {
+       sizeof(struct OneTwo),
+       offsetof(struct OneTwo, _asn_ctx),
+       offsetof(struct OneTwo, _presence_map),
+       .tag2el = asn_MAP_OneTwo_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_OneTwo_tag2el_1,        /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_OneTwo_mmap_1     /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_OneTwo = {
+       "OneTwo",
+       "OneTwo",
+       &asn_OP_SET,
+       asn_DEF_OneTwo_tags_1,
+       sizeof(asn_DEF_OneTwo_tags_1)
+               /sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
+       asn_DEF_OneTwo_tags_1,  /* Same as above */
+       sizeof(asn_DEF_OneTwo_tags_1)
+               /sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_OneTwo_1,
+       1,      /* Elements count */
+       &asn_SPC_OneTwo_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [TwoThree] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [TwoThree] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum TwoThree_PR {
+       TwoThree_PR_m23,        /* Member m23 is present */
+} TwoThree_PR;
+
+/*** <<< FWD-DECLS [TwoThree] >>> ***/
+
+struct ThreeOne;
+
+/*** <<< TYPE-DECLS [TwoThree] >>> ***/
+
+typedef struct TwoThree {
+       struct ThreeOne *m23;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pTwoThree, TwoThree_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TwoThree_t;
+
+/*** <<< FUNC-DECLS [TwoThree] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TwoThree;
+extern asn_SET_specifics_t asn_SPC_TwoThree_specs_1;
+extern asn_TYPE_member_t asn_MBR_TwoThree_1[1];
+
+/*** <<< POST-INCLUDE [TwoThree] >>> ***/
+
+#include "ThreeOne.h"
+
+/*** <<< STAT-DEFS [TwoThree] >>> ***/
+
+asn_TYPE_member_t asn_MBR_TwoThree_1[] = {
+       { ATF_POINTER, 0, offsetof(struct TwoThree, m23),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ThreeOne,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m23"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TwoThree_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TwoThree_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* m23 */
+};
+static const uint8_t asn_MAP_TwoThree_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+asn_SET_specifics_t asn_SPC_TwoThree_specs_1 = {
+       sizeof(struct TwoThree),
+       offsetof(struct TwoThree, _asn_ctx),
+       offsetof(struct TwoThree, _presence_map),
+       .tag2el = asn_MAP_TwoThree_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_TwoThree_tag2el_1,      /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_TwoThree_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_TwoThree = {
+       "TwoThree",
+       "TwoThree",
+       &asn_OP_SET,
+       asn_DEF_TwoThree_tags_1,
+       sizeof(asn_DEF_TwoThree_tags_1)
+               /sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
+       asn_DEF_TwoThree_tags_1,        /* Same as above */
+       sizeof(asn_DEF_TwoThree_tags_1)
+               /sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_TwoThree_1,
+       1,      /* Elements count */
+       &asn_SPC_TwoThree_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ThreeOne] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [ThreeOne] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum ThreeOne_PR {
+       ThreeOne_PR_m31,        /* Member m31 is present */
+       ThreeOne_PR_g,  /* Member g is present */
+} ThreeOne_PR;
+
+/*** <<< FWD-DECLS [ThreeOne] >>> ***/
+
+struct OneTwo;
+struct Gamma;
+
+/*** <<< TYPE-DECLS [ThreeOne] >>> ***/
+
+typedef struct ThreeOne {
+       struct OneTwo   *m31;
+       struct Gamma    *g;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pThreeOne, ThreeOne_PR_x) */
+       unsigned int _presence_map
+               [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ThreeOne_t;
+
+/*** <<< FUNC-DECLS [ThreeOne] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ThreeOne;
+extern asn_SET_specifics_t asn_SPC_ThreeOne_specs_1;
+extern asn_TYPE_member_t asn_MBR_ThreeOne_1[2];
+
+/*** <<< POST-INCLUDE [ThreeOne] >>> ***/
+
+#include "OneTwo.h"
+#include "Gamma.h"
+
+/*** <<< STAT-DEFS [ThreeOne] >>> ***/
+
+asn_TYPE_member_t asn_MBR_ThreeOne_1[] = {
+       { ATF_POINTER, 0, offsetof(struct ThreeOne, m31),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OneTwo,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m31"
+               },
+       { ATF_POINTER, 0, offsetof(struct ThreeOne, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ThreeOne_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ThreeOne_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m31 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* g */
+};
+static const uint8_t asn_MAP_ThreeOne_mmap_1[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (1 << 6)
+};
+asn_SET_specifics_t asn_SPC_ThreeOne_specs_1 = {
+       sizeof(struct ThreeOne),
+       offsetof(struct ThreeOne, _asn_ctx),
+       offsetof(struct ThreeOne, _presence_map),
+       .tag2el = asn_MAP_ThreeOne_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       asn_MAP_ThreeOne_tag2el_1,      /* Same as above */
+       2,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_ThreeOne_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_ThreeOne = {
+       "ThreeOne",
+       "ThreeOne",
+       &asn_OP_SET,
+       asn_DEF_ThreeOne_tags_1,
+       sizeof(asn_DEF_ThreeOne_tags_1)
+               /sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
+       asn_DEF_ThreeOne_tags_1,        /* Same as above */
+       sizeof(asn_DEF_ThreeOne_tags_1)
+               /sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_ThreeOne_1,
+       2,      /* Elements count */
+       &asn_SPC_ThreeOne_specs_1       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..86eafc7
--- /dev/null
@@ -0,0 +1,1495 @@
+
+/*** <<< INCLUDES [Everything] >>> ***/
+
+#include "Set.h"
+#include "Alpha.h"
+#include "Beta.h"
+#include "Gamma.h"
+#include "OneTwo.h"
+#include "TwoThree.h"
+#include "ThreeOne.h"
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Everything] >>> ***/
+
+struct Choice1;
+struct Choice2;
+struct Choice3;
+
+/*** <<< TYPE-DECLS [Everything] >>> ***/
+
+typedef struct Everything {
+       struct Choice1  *ch1;
+       struct Choice2  *ch2;
+       struct Choice3  *ch3;
+       Set_t    set;
+       Alpha_t  a;
+       Beta_t   b;
+       Gamma_t  g;
+       OneTwo_t         ot;
+       TwoThree_t       tt;
+       ThreeOne_t       to;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Everything_t;
+
+/*** <<< FUNC-DECLS [Everything] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Everything;
+extern asn_SEQUENCE_specifics_t asn_SPC_Everything_specs_1;
+extern asn_TYPE_member_t asn_MBR_Everything_1[10];
+
+/*** <<< POST-INCLUDE [Everything] >>> ***/
+
+#include "Choice1.h"
+#include "Choice2.h"
+#include "Choice3.h"
+
+/*** <<< STAT-DEFS [Everything] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Everything_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Everything, ch1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice1,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch1"
+               },
+       { ATF_POINTER, 0, offsetof(struct Everything, ch2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch2"
+               },
+       { ATF_POINTER, 0, offsetof(struct Everything, ch3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_Choice3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch3"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, ot),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OneTwo,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ot"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, tt),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "tt"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Everything, to),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ThreeOne,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "to"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Everything_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Everything_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ch1 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ch2 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ch3 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* set */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* g */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ot */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* tt */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* to */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Everything_specs_1 = {
+       sizeof(struct Everything),
+       offsetof(struct Everything, _asn_ctx),
+       .tag2el = asn_MAP_Everything_tag2el_1,
+       .tag2el_count = 10,     /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Everything = {
+       "Everything",
+       "Everything",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Everything_tags_1,
+       sizeof(asn_DEF_Everything_tags_1)
+               /sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
+       asn_DEF_Everything_tags_1,      /* Same as above */
+       sizeof(asn_DEF_Everything_tags_1)
+               /sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Everything_1,
+       10,     /* Elements count */
+       &asn_SPC_Everything_specs_1     /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice1] >>> ***/
+
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice1] >>> ***/
+
+typedef enum Choice1_PR {
+       Choice1_PR_NOTHING,     /* No components present */
+       Choice1_PR_something,
+       /* Extensions may appear below */
+       Choice1_PR_some2
+} Choice1_PR;
+
+/*** <<< FWD-DECLS [Choice1] >>> ***/
+
+struct Everything;
+
+/*** <<< TYPE-DECLS [Choice1] >>> ***/
+
+typedef struct Choice1 {
+       Choice1_PR present;
+       union Choice1_u {
+               struct Everything       *something;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               struct Everything       *some2;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice1_t;
+
+/*** <<< FUNC-DECLS [Choice1] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice1;
+extern asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice1_1[2];
+
+/*** <<< POST-INCLUDE [Choice1] >>> ***/
+
+#include "Everything.h"
+
+/*** <<< STAT-DEFS [Choice1] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice1_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice1, choice.something),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "something"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice1, choice.some2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "some2"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice1_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* something */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* some2 */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice1_specs_1 = {
+       sizeof(struct Choice1),
+       offsetof(struct Choice1, _asn_ctx),
+       offsetof(struct Choice1, present),
+       sizeof(((struct Choice1 *)0)->present),
+       .tag2el = asn_MAP_Choice1_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice1 = {
+       "Choice1",
+       "Choice1",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice1_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice1_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include "TypeRef.h"
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_typeref,
+       /* Extensions may appear below */
+       Choice2_PR_some3
+} Choice2_PR;
+
+/*** <<< FWD-DECLS [Choice2] >>> ***/
+
+struct Everything;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               TypeRef_t        typeref;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               struct Everything       *some3;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+extern asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice2_1[2];
+
+/*** <<< POST-INCLUDE [Choice2] >>> ***/
+
+#include "Everything.h"
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.typeref),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TypeRef,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "typeref"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice2, choice.some3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "some3"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* typeref */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* some3 */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 1    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice3] >>> ***/
+
+#include <constr_SEQUENCE.h>
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice3] >>> ***/
+
+typedef enum Choice3_PR {
+       Choice3_PR_NOTHING,     /* No components present */
+       Choice3_PR_a,
+       Choice3_PR_b,
+       Choice3_PR_c
+} Choice3_PR;
+
+/*** <<< FWD-DECLS [Choice3] >>> ***/
+
+struct Everything;
+struct Choice3;
+
+/*** <<< TYPE-DECLS [Choice3] >>> ***/
+
+typedef struct Choice3 {
+       Choice3_PR present;
+       union Choice3_u {
+               struct a {
+                       struct Everything       *aa;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } a;
+               struct Everything       *b;
+               struct c {
+                       A_SEQUENCE_OF(struct Choice3) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } c;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice3_t;
+
+/*** <<< FUNC-DECLS [Choice3] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice3;
+extern asn_CHOICE_specifics_t asn_SPC_Choice3_specs_1;
+extern asn_TYPE_member_t asn_MBR_Choice3_1[3];
+
+/*** <<< POST-INCLUDE [Choice3] >>> ***/
+
+#include "Everything.h"
+#include "Choice3.h"
+
+/*** <<< STAT-DEFS [Choice3] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_a_2[] = {
+       { ATF_POINTER, 0, offsetof(struct a, aa),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "aa"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_a_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_a_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* aa */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_a_specs_2 = {
+       sizeof(struct a),
+       offsetof(struct a, _asn_ctx),
+       .tag2el = asn_MAP_a_tag2el_2,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_a_2 = {
+       "a",
+       "a",
+       &asn_OP_SEQUENCE,
+       asn_DEF_a_tags_2,
+       sizeof(asn_DEF_a_tags_2)
+               /sizeof(asn_DEF_a_tags_2[0]) - 1, /* 1 */
+       asn_DEF_a_tags_2,       /* Same as above */
+       sizeof(asn_DEF_a_tags_2)
+               /sizeof(asn_DEF_a_tags_2[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_a_2,
+       1,      /* Elements count */
+       &asn_SPC_a_specs_2      /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_c_5[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_Choice3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_c_tags_5[] = {
+       (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_c_specs_5 = {
+       sizeof(struct c),
+       offsetof(struct c, _asn_ctx),
+       2,      /* XER encoding is XMLValueList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_c_5 = {
+       "c",
+       "c",
+       &asn_OP_SEQUENCE_OF,
+       asn_DEF_c_tags_5,
+       sizeof(asn_DEF_c_tags_5)
+               /sizeof(asn_DEF_c_tags_5[0]) - 1, /* 1 */
+       asn_DEF_c_tags_5,       /* Same as above */
+       sizeof(asn_DEF_c_tags_5)
+               /sizeof(asn_DEF_c_tags_5[0]), /* 2 */
+       { 0, 0, SEQUENCE_OF_constraint },
+       asn_MBR_c_5,
+       1,      /* Single element */
+       &asn_SPC_c_specs_5      /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Choice3_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice3, choice.a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_a_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice3, choice.b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Everything,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice3, choice.c),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_c_5,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "c"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice3_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c */
+};
+asn_CHOICE_specifics_t asn_SPC_Choice3_specs_1 = {
+       sizeof(struct Choice3),
+       offsetof(struct Choice3, _asn_ctx),
+       offsetof(struct Choice3, present),
+       sizeof(((struct Choice3 *)0)->present),
+       .tag2el = asn_MAP_Choice3_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice3 = {
+       "Choice3",
+       "Choice3",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice3_1,
+       3,      /* Elements count */
+       &asn_SPC_Choice3_specs_1        /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Set] >>> ***/
+
+#include <asn_SET_OF.h>
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SET_OF.h>
+
+/*** <<< FWD-DECLS [Set] >>> ***/
+
+struct Set;
+struct Sequence;
+
+/*** <<< FWD-DEFS [Set] >>> ***/
+
+typedef struct Member {
+       INTEGER_t        Int;
+       struct Set      *set;
+       struct Sequence *seq;
+       struct Set      *set2;  /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       struct Set      *set3;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Member;
+
+/*** <<< TYPE-DECLS [Set] >>> ***/
+
+typedef struct Set {
+       A_SET_OF(Member) list;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Set_t;
+
+/*** <<< FUNC-DECLS [Set] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Set;
+extern asn_SET_OF_specifics_t asn_SPC_Set_specs_1;
+extern asn_TYPE_member_t asn_MBR_Set_1[1];
+
+/*** <<< POST-INCLUDE [Set] >>> ***/
+
+#include "Set.h"
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [Set] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Member_2[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Member, Int),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+       { ATF_POINTER, 0, offsetof(struct Member, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+       { ATF_POINTER, 0, offsetof(struct Member, seq),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seq"
+               },
+       { ATF_POINTER, 2, offsetof(struct Member, set2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set2"
+               },
+       { ATF_POINTER, 1, offsetof(struct Member, set3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set3"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* set */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* seq */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* set2 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* set3 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
+       sizeof(struct Member),
+       offsetof(struct Member, _asn_ctx),
+       .tag2el = asn_MAP_Member_tag2el_2,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       4,      /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+       "SEQUENCE",
+       "SEQUENCE",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Member_tags_2,
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       asn_DEF_Member_tags_2,  /* Same as above */
+       sizeof(asn_DEF_Member_tags_2)
+               /sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Member_2,
+       5,      /* Elements count */
+       &asn_SPC_Member_specs_2 /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Set_1[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_Member_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Set_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+asn_SET_OF_specifics_t asn_SPC_Set_specs_1 = {
+       sizeof(struct Set),
+       offsetof(struct Set, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_Set = {
+       "Set",
+       "Set",
+       &asn_OP_SET_OF,
+       asn_DEF_Set_tags_1,
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       asn_DEF_Set_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_Set_1,
+       1,      /* Single element */
+       &asn_SPC_Set_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Sequence] >>> ***/
+
+struct Sequence;
+struct Set;
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       INTEGER_t        a;
+       struct Sequence *seq;   /* OPTIONAL */
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       INTEGER_t       *b;
+       struct Set      *set;   /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[4];
+
+/*** <<< POST-INCLUDE [Sequence] >>> ***/
+
+#include "Sequence.h"
+#include "Set.h"
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 3, offsetof(struct Sequence, seq),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "seq"
+               },
+       { ATF_POINTER, 2, offsetof(struct Sequence, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 1, offsetof(struct Sequence, set),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Set,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "set"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* seq */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* set */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 4,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       2,      /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       4,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [TypeRef] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< TYPE-DECLS [TypeRef] >>> ***/
+
+typedef Sequence_t      TypeRef_t;
+
+/*** <<< FUNC-DECLS [TypeRef] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TypeRef;
+asn_struct_free_f TypeRef_free;
+asn_struct_print_f TypeRef_print;
+asn_constr_check_f TypeRef_constraint;
+ber_type_decoder_f TypeRef_decode_ber;
+der_type_encoder_f TypeRef_encode_der;
+xer_type_decoder_f TypeRef_decode_xer;
+xer_type_encoder_f TypeRef_encode_xer;
+
+/*** <<< CODE [TypeRef] >>> ***/
+
+/*
+ * This type is implemented using Sequence,
+ * so here we adjust the DEF accordingly.
+ */
+
+/*** <<< STAT-DEFS [TypeRef] >>> ***/
+
+static const ber_tlv_tag_t asn_DEF_TypeRef_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+asn_TYPE_descriptor_t asn_DEF_TypeRef = {
+       "TypeRef",
+       "TypeRef",
+       &asn_OP_SEQUENCE,
+       asn_DEF_TypeRef_tags_1,
+       sizeof(asn_DEF_TypeRef_tags_1)
+               /sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
+       asn_DEF_TypeRef_tags_1, /* Same as above */
+       sizeof(asn_DEF_TypeRef_tags_1)
+               /sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       4,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Alpha] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Alpha] >>> ***/
+
+struct Beta;
+
+/*** <<< TYPE-DECLS [Alpha] >>> ***/
+
+typedef struct Alpha {
+       struct Beta     *a;
+       struct b {
+               struct Beta     *b;     /* OPTIONAL */
+               
+               /* Context for parsing across buffer boundaries */
+               asn_struct_ctx_t _asn_ctx;
+       } b;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Alpha_t;
+
+/*** <<< FUNC-DECLS [Alpha] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Alpha;
+extern asn_SEQUENCE_specifics_t asn_SPC_Alpha_specs_1;
+extern asn_TYPE_member_t asn_MBR_Alpha_1[2];
+
+/*** <<< POST-INCLUDE [Alpha] >>> ***/
+
+#include "Beta.h"
+
+/*** <<< STAT-DEFS [Alpha] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_b_3[] = {
+       { ATF_POINTER, 1, offsetof(struct b, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_b_tags_3[] = {
+       (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_b_tag2el_3[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* b */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_b_specs_3 = {
+       sizeof(struct b),
+       offsetof(struct b, _asn_ctx),
+       .tag2el = asn_MAP_b_tag2el_3,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_b_3 = {
+       "b",
+       "b",
+       &asn_OP_SEQUENCE,
+       asn_DEF_b_tags_3,
+       sizeof(asn_DEF_b_tags_3)
+               /sizeof(asn_DEF_b_tags_3[0]) - 1, /* 1 */
+       asn_DEF_b_tags_3,       /* Same as above */
+       sizeof(asn_DEF_b_tags_3)
+               /sizeof(asn_DEF_b_tags_3[0]), /* 2 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_b_3,
+       1,      /* Elements count */
+       &asn_SPC_b_specs_3      /* Additional specs */
+};
+
+asn_TYPE_member_t asn_MBR_Alpha_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Alpha, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Alpha, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_b_3,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Alpha_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Alpha_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Alpha_specs_1 = {
+       sizeof(struct Alpha),
+       offsetof(struct Alpha, _asn_ctx),
+       .tag2el = asn_MAP_Alpha_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Alpha = {
+       "Alpha",
+       "Alpha",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Alpha_tags_1,
+       sizeof(asn_DEF_Alpha_tags_1)
+               /sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
+       asn_DEF_Alpha_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Alpha_tags_1)
+               /sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Alpha_1,
+       2,      /* Elements count */
+       &asn_SPC_Alpha_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Beta] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Beta] >>> ***/
+
+struct Alpha;
+struct Gamma;
+
+/*** <<< TYPE-DECLS [Beta] >>> ***/
+
+typedef struct Beta {
+       struct Alpha    *b;     /* OPTIONAL */
+       struct Gamma    *g;     /* OPTIONAL */
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Beta_t;
+
+/*** <<< FUNC-DECLS [Beta] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Beta;
+extern asn_SEQUENCE_specifics_t asn_SPC_Beta_specs_1;
+extern asn_TYPE_member_t asn_MBR_Beta_1[2];
+
+/*** <<< POST-INCLUDE [Beta] >>> ***/
+
+#include "Alpha.h"
+#include "Gamma.h"
+
+/*** <<< STAT-DEFS [Beta] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Beta_1[] = {
+       { ATF_POINTER, 2, offsetof(struct Beta, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+       { ATF_POINTER, 1, offsetof(struct Beta, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Beta_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Beta_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* b */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* g */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Beta_specs_1 = {
+       sizeof(struct Beta),
+       offsetof(struct Beta, _asn_ctx),
+       .tag2el = asn_MAP_Beta_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Beta = {
+       "Beta",
+       "Beta",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Beta_tags_1,
+       sizeof(asn_DEF_Beta_tags_1)
+               /sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
+       asn_DEF_Beta_tags_1,    /* Same as above */
+       sizeof(asn_DEF_Beta_tags_1)
+               /sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Beta_1,
+       2,      /* Elements count */
+       &asn_SPC_Beta_specs_1   /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Gamma] >>> ***/
+
+#include <constr_SEQUENCE.h>
+
+/*** <<< FWD-DECLS [Gamma] >>> ***/
+
+struct TwoThree;
+struct Alpha;
+struct Beta;
+
+/*** <<< TYPE-DECLS [Gamma] >>> ***/
+
+typedef struct Gamma {
+       struct TwoThree *o;
+       struct Alpha    *a;
+       struct Beta     *b;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Gamma_t;
+
+/*** <<< FUNC-DECLS [Gamma] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Gamma;
+extern asn_SEQUENCE_specifics_t asn_SPC_Gamma_specs_1;
+extern asn_TYPE_member_t asn_MBR_Gamma_1[3];
+
+/*** <<< POST-INCLUDE [Gamma] >>> ***/
+
+#include "TwoThree.h"
+#include "Alpha.h"
+#include "Beta.h"
+
+/*** <<< STAT-DEFS [Gamma] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Gamma_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Gamma, o),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "o"
+               },
+       { ATF_POINTER, 0, offsetof(struct Gamma, a),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Alpha,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "a"
+               },
+       { ATF_POINTER, 0, offsetof(struct Gamma, b),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Beta,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "b"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Gamma_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Gamma_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* o */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* a */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* b */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Gamma_specs_1 = {
+       sizeof(struct Gamma),
+       offsetof(struct Gamma, _asn_ctx),
+       .tag2el = asn_MAP_Gamma_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Gamma = {
+       "Gamma",
+       "Gamma",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Gamma_tags_1,
+       sizeof(asn_DEF_Gamma_tags_1)
+               /sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
+       asn_DEF_Gamma_tags_1,   /* Same as above */
+       sizeof(asn_DEF_Gamma_tags_1)
+               /sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Gamma_1,
+       3,      /* Elements count */
+       &asn_SPC_Gamma_specs_1  /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [OneTwo] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [OneTwo] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum OneTwo_PR {
+       OneTwo_PR_m12,  /* Member m12 is present */
+} OneTwo_PR;
+
+/*** <<< FWD-DECLS [OneTwo] >>> ***/
+
+struct TwoThree;
+
+/*** <<< TYPE-DECLS [OneTwo] >>> ***/
+
+typedef struct OneTwo {
+       struct TwoThree *m12;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pOneTwo, OneTwo_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} OneTwo_t;
+
+/*** <<< FUNC-DECLS [OneTwo] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_OneTwo;
+extern asn_SET_specifics_t asn_SPC_OneTwo_specs_1;
+extern asn_TYPE_member_t asn_MBR_OneTwo_1[1];
+
+/*** <<< POST-INCLUDE [OneTwo] >>> ***/
+
+#include "TwoThree.h"
+
+/*** <<< STAT-DEFS [OneTwo] >>> ***/
+
+asn_TYPE_member_t asn_MBR_OneTwo_1[] = {
+       { ATF_POINTER, 0, offsetof(struct OneTwo, m12),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_TwoThree,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m12"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_OneTwo_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_OneTwo_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* m12 */
+};
+static const uint8_t asn_MAP_OneTwo_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+asn_SET_specifics_t asn_SPC_OneTwo_specs_1 = {
+       sizeof(struct OneTwo),
+       offsetof(struct OneTwo, _asn_ctx),
+       offsetof(struct OneTwo, _presence_map),
+       .tag2el = asn_MAP_OneTwo_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_OneTwo_tag2el_1,        /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_OneTwo_mmap_1     /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_OneTwo = {
+       "OneTwo",
+       "OneTwo",
+       &asn_OP_SET,
+       asn_DEF_OneTwo_tags_1,
+       sizeof(asn_DEF_OneTwo_tags_1)
+               /sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
+       asn_DEF_OneTwo_tags_1,  /* Same as above */
+       sizeof(asn_DEF_OneTwo_tags_1)
+               /sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_OneTwo_1,
+       1,      /* Elements count */
+       &asn_SPC_OneTwo_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [TwoThree] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [TwoThree] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum TwoThree_PR {
+       TwoThree_PR_m23,        /* Member m23 is present */
+} TwoThree_PR;
+
+/*** <<< FWD-DECLS [TwoThree] >>> ***/
+
+struct ThreeOne;
+
+/*** <<< TYPE-DECLS [TwoThree] >>> ***/
+
+typedef struct TwoThree {
+       struct ThreeOne *m23;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pTwoThree, TwoThree_PR_x) */
+       unsigned int _presence_map
+               [((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TwoThree_t;
+
+/*** <<< FUNC-DECLS [TwoThree] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TwoThree;
+extern asn_SET_specifics_t asn_SPC_TwoThree_specs_1;
+extern asn_TYPE_member_t asn_MBR_TwoThree_1[1];
+
+/*** <<< POST-INCLUDE [TwoThree] >>> ***/
+
+#include "ThreeOne.h"
+
+/*** <<< STAT-DEFS [TwoThree] >>> ***/
+
+asn_TYPE_member_t asn_MBR_TwoThree_1[] = {
+       { ATF_POINTER, 0, offsetof(struct TwoThree, m23),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_ThreeOne,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m23"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TwoThree_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TwoThree_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* m23 */
+};
+static const uint8_t asn_MAP_TwoThree_mmap_1[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7)
+};
+asn_SET_specifics_t asn_SPC_TwoThree_specs_1 = {
+       sizeof(struct TwoThree),
+       offsetof(struct TwoThree, _asn_ctx),
+       offsetof(struct TwoThree, _presence_map),
+       .tag2el = asn_MAP_TwoThree_tag2el_1,
+       .tag2el_count = 1,      /* Count of tags in the map */
+       asn_MAP_TwoThree_tag2el_1,      /* Same as above */
+       1,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_TwoThree_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_TwoThree = {
+       "TwoThree",
+       "TwoThree",
+       &asn_OP_SET,
+       asn_DEF_TwoThree_tags_1,
+       sizeof(asn_DEF_TwoThree_tags_1)
+               /sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
+       asn_DEF_TwoThree_tags_1,        /* Same as above */
+       sizeof(asn_DEF_TwoThree_tags_1)
+               /sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_TwoThree_1,
+       1,      /* Elements count */
+       &asn_SPC_TwoThree_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [ThreeOne] >>> ***/
+
+#include <constr_SET.h>
+
+/*** <<< DEPS [ThreeOne] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum ThreeOne_PR {
+       ThreeOne_PR_m31,        /* Member m31 is present */
+       ThreeOne_PR_g,  /* Member g is present */
+} ThreeOne_PR;
+
+/*** <<< FWD-DECLS [ThreeOne] >>> ***/
+
+struct OneTwo;
+struct Gamma;
+
+/*** <<< TYPE-DECLS [ThreeOne] >>> ***/
+
+typedef struct ThreeOne {
+       struct OneTwo   *m31;
+       struct Gamma    *g;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pThreeOne, ThreeOne_PR_x) */
+       unsigned int _presence_map
+               [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} ThreeOne_t;
+
+/*** <<< FUNC-DECLS [ThreeOne] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_ThreeOne;
+extern asn_SET_specifics_t asn_SPC_ThreeOne_specs_1;
+extern asn_TYPE_member_t asn_MBR_ThreeOne_1[2];
+
+/*** <<< POST-INCLUDE [ThreeOne] >>> ***/
+
+#include "OneTwo.h"
+#include "Gamma.h"
+
+/*** <<< STAT-DEFS [ThreeOne] >>> ***/
+
+asn_TYPE_member_t asn_MBR_ThreeOne_1[] = {
+       { ATF_POINTER, 0, offsetof(struct ThreeOne, m31),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_OneTwo,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m31"
+               },
+       { ATF_POINTER, 0, offsetof(struct ThreeOne, g),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Gamma,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "g"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_ThreeOne_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_ThreeOne_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m31 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* g */
+};
+static const uint8_t asn_MAP_ThreeOne_mmap_1[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (1 << 6)
+};
+asn_SET_specifics_t asn_SPC_ThreeOne_specs_1 = {
+       sizeof(struct ThreeOne),
+       offsetof(struct ThreeOne, _asn_ctx),
+       offsetof(struct ThreeOne, _presence_map),
+       .tag2el = asn_MAP_ThreeOne_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       asn_MAP_ThreeOne_tag2el_1,      /* Same as above */
+       2,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_ThreeOne_mmap_1   /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_ThreeOne = {
+       "ThreeOne",
+       "ThreeOne",
+       &asn_OP_SET,
+       asn_DEF_ThreeOne_tags_1,
+       sizeof(asn_DEF_ThreeOne_tags_1)
+               /sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
+       asn_DEF_ThreeOne_tags_1,        /* Same as above */
+       sizeof(asn_DEF_ThreeOne_tags_1)
+               /sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_ThreeOne_1,
+       2,      /* Elements count */
+       &asn_SPC_ThreeOne_specs_1       /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1 b/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1
new file mode 100644 (file)
index 0000000..b1fb585
--- /dev/null
@@ -0,0 +1,34 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .93
+
+Module-asn1c-controls
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 93 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       Sequence ::= SEQUENCE {
+               ainl INTEGER,
+               --<ASN1C.RepresentAsPointer>--
+               aptr INTEGER
+       }
+
+       Set ::= SET {
+               ainl Sequence,
+               --<ASN1C.RepresentAsPointer>--
+               aptr Sequence
+       }
+
+       Choice ::= CHOICE {
+               --<ASN1C.RepresentAsPointer>--
+               setof SET OF INTEGER,
+               --<ASN1C.RepresentAsPointer>--
+               aptr Sequence,
+               ainl Sequence
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-EF b/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..5288379
--- /dev/null
@@ -0,0 +1,26 @@
+Module-asn1c-controls { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 93 }
+DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+Sequence ::= SEQUENCE {
+    ainl        [0] IMPLICIT INTEGER,
+    --<ASN1C.RepresentAsPointer>--
+    aptr        [1] IMPLICIT INTEGER
+}
+
+Set ::= SET {
+    ainl        [0] IMPLICIT Sequence,
+    --<ASN1C.RepresentAsPointer>--
+    aptr        [1] IMPLICIT Sequence
+}
+
+Choice ::= CHOICE {
+    --<ASN1C.RepresentAsPointer>--
+    setof       [0] IMPLICIT SET OF INTEGER,
+    --<ASN1C.RepresentAsPointer>--
+    aptr        [1] IMPLICIT Sequence,
+    ainl        [2] IMPLICIT Sequence
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..f02a3aa
--- /dev/null
@@ -0,0 +1,324 @@
+
+/*** <<< INCLUDES [Sequence] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Sequence] >>> ***/
+
+typedef struct Sequence {
+       INTEGER_t        ainl;
+       INTEGER_t       *aptr;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Sequence_t;
+
+/*** <<< FUNC-DECLS [Sequence] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Sequence;
+extern asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1;
+extern asn_TYPE_member_t asn_MBR_Sequence_1[2];
+
+/*** <<< STAT-DEFS [Sequence] >>> ***/
+
+asn_TYPE_member_t asn_MBR_Sequence_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Sequence, ainl),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ainl"
+               },
+       { ATF_POINTER, 0, offsetof(struct Sequence, aptr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "aptr"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Sequence_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Sequence_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ainl */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* aptr */
+};
+asn_SEQUENCE_specifics_t asn_SPC_Sequence_specs_1 = {
+       sizeof(struct Sequence),
+       offsetof(struct Sequence, _asn_ctx),
+       .tag2el = asn_MAP_Sequence_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Sequence = {
+       "Sequence",
+       "Sequence",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Sequence_tags_1,
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       asn_DEF_Sequence_tags_1,        /* Same as above */
+       sizeof(asn_DEF_Sequence_tags_1)
+               /sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Sequence_1,
+       2,      /* Elements count */
+       &asn_SPC_Sequence_specs_1       /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Set] >>> ***/
+
+#include "Sequence.h"
+#include <constr_SET.h>
+
+/*** <<< DEPS [Set] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Set_PR {
+       Set_PR_ainl,    /* Member ainl is present */
+       Set_PR_aptr,    /* Member aptr is present */
+} Set_PR;
+
+/*** <<< FWD-DECLS [Set] >>> ***/
+
+struct Sequence;
+
+/*** <<< TYPE-DECLS [Set] >>> ***/
+
+typedef struct Set {
+       Sequence_t       ainl;
+       struct Sequence *aptr;
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pSet, Set_PR_x) */
+       unsigned int _presence_map
+               [((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Set_t;
+
+/*** <<< FUNC-DECLS [Set] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Set;
+
+/*** <<< POST-INCLUDE [Set] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [Set] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Set_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Set, ainl),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ainl"
+               },
+       { ATF_POINTER, 0, offsetof(struct Set, aptr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "aptr"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Set_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Set_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ainl */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* aptr */
+};
+static const uint8_t asn_MAP_Set_mmap_1[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (1 << 6)
+};
+static 
+asn_SET_specifics_t asn_SPC_Set_specs_1 = {
+       sizeof(struct Set),
+       offsetof(struct Set, _asn_ctx),
+       offsetof(struct Set, _presence_map),
+       .tag2el = asn_MAP_Set_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       asn_MAP_Set_tag2el_1,   /* Same as above */
+       2,      /* Count of tags in the CXER map */
+       0,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_Set_mmap_1        /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Set = {
+       "Set",
+       "Set",
+       &asn_OP_SET,
+       asn_DEF_Set_tags_1,
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       asn_DEF_Set_tags_1,     /* Same as above */
+       sizeof(asn_DEF_Set_tags_1)
+               /sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_Set_1,
+       2,      /* Elements count */
+       &asn_SPC_Set_specs_1    /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice] >>> ***/
+
+#include "Sequence.h"
+#include <INTEGER.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice] >>> ***/
+
+typedef enum Choice_PR {
+       Choice_PR_NOTHING,      /* No components present */
+       Choice_PR_setof,
+       Choice_PR_aptr,
+       Choice_PR_ainl
+} Choice_PR;
+
+/*** <<< FWD-DECLS [Choice] >>> ***/
+
+struct Sequence;
+
+/*** <<< TYPE-DECLS [Choice] >>> ***/
+
+typedef struct Choice {
+       Choice_PR present;
+       union Choice_u {
+               struct setof {
+                       A_SET_OF(INTEGER_t) list;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } *setof;
+               struct Sequence *aptr;
+               Sequence_t       ainl;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_t;
+
+/*** <<< FUNC-DECLS [Choice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice;
+
+/*** <<< POST-INCLUDE [Choice] >>> ***/
+
+#include "Sequence.h"
+
+/*** <<< STAT-DEFS [Choice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_setof_2[] = {
+       { ATF_POINTER, 0, 0,
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = ""
+               },
+};
+static const ber_tlv_tag_t asn_DEF_setof_tags_2[] = {
+       (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_setof_specs_2 = {
+       sizeof(struct setof),
+       offsetof(struct setof, _asn_ctx),
+       0,      /* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_setof_2 = {
+       "setof",
+       "setof",
+       &asn_OP_SET_OF,
+       asn_DEF_setof_tags_2,
+       sizeof(asn_DEF_setof_tags_2)
+               /sizeof(asn_DEF_setof_tags_2[0]) - 1, /* 1 */
+       asn_DEF_setof_tags_2,   /* Same as above */
+       sizeof(asn_DEF_setof_tags_2)
+               /sizeof(asn_DEF_setof_tags_2[0]), /* 2 */
+       { 0, 0, SET_OF_constraint },
+       asn_MBR_setof_2,
+       1,      /* Single element */
+       &asn_SPC_setof_specs_2  /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Choice_1[] = {
+       { ATF_POINTER, 0, offsetof(struct Choice, choice.setof),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_setof_2,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "setof"
+               },
+       { ATF_POINTER, 0, offsetof(struct Choice, choice.aptr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "aptr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.ainl),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_Sequence,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ainl"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* setof */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* aptr */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ainl */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice_specs_1 = {
+       sizeof(struct Choice),
+       offsetof(struct Choice, _asn_ctx),
+       offsetof(struct Choice, present),
+       sizeof(((struct Choice *)0)->present),
+       .tag2el = asn_MAP_Choice_tag2el_1,
+       .tag2el_count = 3,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice = {
+       "Choice",
+       "Choice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice_1,
+       3,      /* Elements count */
+       &asn_SPC_Choice_specs_1 /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1 b/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1
new file mode 100644 (file)
index 0000000..665f5e6
--- /dev/null
@@ -0,0 +1,28 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .94
+
+ModuleSetOptionals
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 94 }
+       DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+       TestSet ::= SET {
+               m0 [0] IMPLICIT VisibleString,
+               m1 [1] IMPLICIT VisibleString OPTIONAL,
+               m2 [2] IMPLICIT VisibleString,
+               m3 [3] IMPLICIT VisibleString,
+               m4 [4] IMPLICIT VisibleString OPTIONAL,
+               m5 [5] IMPLICIT VisibleString,
+               m6 [6] IMPLICIT VisibleString,
+               m7 [7] IMPLICIT VisibleString,
+               m8 [8] IMPLICIT VisibleString OPTIONAL,
+               m9 [9] IMPLICIT VisibleString,
+               ...
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P b/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P
new file mode 100644 (file)
index 0000000..2ee17ef
--- /dev/null
@@ -0,0 +1,196 @@
+
+/*** <<< INCLUDES [TestSet] >>> ***/
+
+#include <VisibleString.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [TestSet] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum TestSet_PR {
+       TestSet_PR_m0,  /* Member m0 is present */
+       TestSet_PR_m1,  /* Member m1 is present */
+       TestSet_PR_m2,  /* Member m2 is present */
+       TestSet_PR_m3,  /* Member m3 is present */
+       TestSet_PR_m4,  /* Member m4 is present */
+       TestSet_PR_m5,  /* Member m5 is present */
+       TestSet_PR_m6,  /* Member m6 is present */
+       TestSet_PR_m7,  /* Member m7 is present */
+       TestSet_PR_m8,  /* Member m8 is present */
+       TestSet_PR_m9,  /* Member m9 is present */
+} TestSet_PR;
+
+/*** <<< TYPE-DECLS [TestSet] >>> ***/
+
+typedef struct TestSet {
+       VisibleString_t  m0;
+       VisibleString_t *m1;    /* OPTIONAL */
+       VisibleString_t  m2;
+       VisibleString_t  m3;
+       VisibleString_t *m4;    /* OPTIONAL */
+       VisibleString_t  m5;
+       VisibleString_t  m6;
+       VisibleString_t  m7;
+       VisibleString_t *m8;    /* OPTIONAL */
+       VisibleString_t  m9;
+       /*
+        * This type is extensible,
+        * possible extensions are below.
+        */
+       
+       /* Presence bitmask: ASN_SET_ISPRESENT(pTestSet, TestSet_PR_x) */
+       unsigned int _presence_map
+               [((10+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} TestSet_t;
+
+/*** <<< FUNC-DECLS [TestSet] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_TestSet;
+
+/*** <<< STAT-DEFS [TestSet] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_TestSet_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m0),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m0"
+               },
+       { ATF_POINTER, 1, offsetof(struct TestSet, m1),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m1"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m2),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m2"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m3),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m3"
+               },
+       { ATF_POINTER, 1, offsetof(struct TestSet, m4),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m4"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m5),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m5"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m6),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (6 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m6"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m7),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (7 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m7"
+               },
+       { ATF_POINTER, 1, offsetof(struct TestSet, m8),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (8 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m8"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct TestSet, m9),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (9 << 2)),
+               .tag_mode = -1, /* IMPLICIT tag at current level */
+               .type = &asn_DEF_VisibleString,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "m9"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_TestSet_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_TestSet_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* m0 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* m1 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* m2 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* m3 */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* m4 */
+    { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* m5 */
+    { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* m6 */
+    { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* m7 */
+    { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* m8 */
+    { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* m9 */
+};
+static const uint8_t asn_MAP_TestSet_mmap_1[(10 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+       (1 << 7) | (0 << 6) | (1 << 5) | (1 << 4) | (0 << 3) | (1 << 2) | (1 << 1) | (1 << 0),
+       (0 << 7) | (1 << 6)
+};
+static 
+asn_SET_specifics_t asn_SPC_TestSet_specs_1 = {
+       sizeof(struct TestSet),
+       offsetof(struct TestSet, _asn_ctx),
+       offsetof(struct TestSet, _presence_map),
+       .tag2el = asn_MAP_TestSet_tag2el_1,
+       .tag2el_count = 10,     /* Count of tags in the map */
+       asn_MAP_TestSet_tag2el_1,       /* Same as above */
+       10,     /* Count of tags in the CXER map */
+       1,      /* Whether extensible */
+       (const unsigned int *)asn_MAP_TestSet_mmap_1    /* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_TestSet = {
+       "TestSet",
+       "TestSet",
+       &asn_OP_SET,
+       asn_DEF_TestSet_tags_1,
+       sizeof(asn_DEF_TestSet_tags_1)
+               /sizeof(asn_DEF_TestSet_tags_1[0]), /* 1 */
+       asn_DEF_TestSet_tags_1, /* Same as above */
+       sizeof(asn_DEF_TestSet_tags_1)
+               /sizeof(asn_DEF_TestSet_tags_1[0]), /* 1 */
+       { 0, 0, SET_constraint },
+       asn_MBR_TestSet_1,
+       10,     /* Elements count */
+       &asn_SPC_TestSet_specs_1        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1 b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1
new file mode 100644 (file)
index 0000000..2aeb4f7
--- /dev/null
@@ -0,0 +1,30 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .95
+
+ModuleCHOICE-PER-Ordering
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 95 }
+       DEFINITIONS ::=
+BEGIN
+
+       Choice ::= CHOICE {
+               roid    RELATIVE-OID,
+               bitstr  BIT STRING,
+               ch      CHOICE {
+                               null    NULL,
+                               int     INTEGER
+                       },
+               ...,
+               bool    BOOLEAN
+       }
+
+       Choice2 ::= CHOICE {
+               bitstr  [0] BIT STRING,
+               roid    [1] RELATIVE-OID
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types
new file mode 100644 (file)
index 0000000..c5682cd
--- /dev/null
@@ -0,0 +1,260 @@
+
+/*** <<< INCLUDES [Choice] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <BIT_STRING.h>
+#include <BOOLEAN.h>
+#include <NULL.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice] >>> ***/
+
+typedef enum Choice_PR {
+       Choice_PR_NOTHING,      /* No components present */
+       Choice_PR_roid,
+       Choice_PR_bitstr,
+       Choice_PR_ch,
+       /* Extensions may appear below */
+       Choice_PR_bool
+} Choice_PR;
+typedef enum ch_PR {
+       ch_PR_NOTHING,  /* No components present */
+       ch_PR_null,
+       ch_PR_int
+} ch_PR;
+
+/*** <<< TYPE-DECLS [Choice] >>> ***/
+
+typedef struct Choice {
+       Choice_PR present;
+       union Choice_u {
+               RELATIVE_OID_t   roid;
+               BIT_STRING_t     bitstr;
+               struct ch {
+                       ch_PR present;
+                       union Choice__ch_u {
+                               NULL_t   null;
+                               INTEGER_t        Int;
+                       } choice;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } ch;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               BOOLEAN_t        Bool;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_t;
+
+/*** <<< FUNC-DECLS [Choice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice;
+
+/*** <<< STAT-DEFS [Choice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_ch_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.null),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "null"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.Int),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_INTEGER,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_ch_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 0, 0, 0 } /* null */
+};
+static asn_CHOICE_specifics_t asn_SPC_ch_specs_4 = {
+       sizeof(struct ch),
+       offsetof(struct ch, _asn_ctx),
+       offsetof(struct ch, present),
+       sizeof(((struct ch *)0)->present),
+       .tag2el = asn_MAP_ch_tag2el_4,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ch_4 = {
+       "ch",
+       "ch",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_ch_4,
+       2,      /* Elements count */
+       &asn_SPC_ch_specs_4     /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Choice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.roid),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.ch),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ch_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.Bool),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bool"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, 0, 0 }, /* bool */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 1, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 2, 0, 0 }, /* null */
+    { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice_specs_1 = {
+       sizeof(struct Choice),
+       offsetof(struct Choice, _asn_ctx),
+       offsetof(struct Choice, present),
+       sizeof(((struct Choice *)0)->present),
+       .tag2el = asn_MAP_Choice_tag2el_1,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = 3    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice = {
+       "Choice",
+       "Choice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include <BIT_STRING.h>
+#include <RELATIVE-OID.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_bitstr,
+       Choice2_PR_roid
+} Choice2_PR;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               BIT_STRING_t     bitstr;
+               RELATIVE_OID_t   roid;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.roid),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, 0, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER
new file mode 100644 (file)
index 0000000..ae45367
--- /dev/null
@@ -0,0 +1,287 @@
+
+/*** <<< INCLUDES [Choice] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <BIT_STRING.h>
+#include <BOOLEAN.h>
+#include <NULL.h>
+#include <NativeInteger.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice] >>> ***/
+
+typedef enum Choice_PR {
+       Choice_PR_NOTHING,      /* No components present */
+       Choice_PR_roid,
+       Choice_PR_bitstr,
+       Choice_PR_ch,
+       /* Extensions may appear below */
+       Choice_PR_bool
+} Choice_PR;
+typedef enum ch_PR {
+       ch_PR_NOTHING,  /* No components present */
+       ch_PR_null,
+       ch_PR_int
+} ch_PR;
+
+/*** <<< TYPE-DECLS [Choice] >>> ***/
+
+typedef struct Choice {
+       Choice_PR present;
+       union Choice_u {
+               RELATIVE_OID_t   roid;
+               BIT_STRING_t     bitstr;
+               struct ch {
+                       ch_PR present;
+                       union Choice__ch_u {
+                               NULL_t   null;
+                               long     Int;
+                       } choice;
+                       
+                       /* Context for parsing across buffer boundaries */
+                       asn_struct_ctx_t _asn_ctx;
+               } ch;
+               /*
+                * This type is extensible,
+                * possible extensions are below.
+                */
+               BOOLEAN_t        Bool;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice_t;
+
+/*** <<< FUNC-DECLS [Choice] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice;
+
+/*** <<< CTDEFS [Choice] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_ch_constr_4 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  0,  1 }        /* (0..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+static asn_per_constraints_t asn_PER_type_Choice_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED | APC_EXTENSIBLE,  2,  2,  0,  2 }    /* (0..2,...) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Choice] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_ch_4[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.null),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NULL,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "null"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct ch, choice.Int),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_NativeInteger,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "int"
+               },
+};
+static const unsigned asn_MAP_ch_to_canonical_4[] = { 1, 0 };
+static const unsigned asn_MAP_ch_from_canonical_4[] = { 1, 0 };
+static const asn_TYPE_tag2member_t asn_MAP_ch_tag2el_4[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 0, 0, 0 } /* null */
+};
+static asn_CHOICE_specifics_t asn_SPC_ch_specs_4 = {
+       sizeof(struct ch),
+       offsetof(struct ch, _asn_ctx),
+       offsetof(struct ch, present),
+       sizeof(((struct ch *)0)->present),
+       .tag2el = asn_MAP_ch_tag2el_4,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_ch_to_canonical_4,
+       .from_canonical_order = asn_MAP_ch_from_canonical_4,
+       .first_extension = -1   /* Extensions start */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_ch_4 = {
+       "ch",
+       "ch",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, &asn_PER_type_ch_constr_4, CHOICE_constraint },
+       asn_MBR_ch_4,
+       2,      /* Elements count */
+       &asn_SPC_ch_specs_4     /* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Choice_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.roid),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.ch),
+               .tag = -1 /* Ambiguous tag (CHOICE?) */,
+               .tag_mode = 0,
+               .type = &asn_DEF_ch_4,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "ch"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice, choice.Bool),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_BOOLEAN,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bool"
+               },
+};
+static const unsigned asn_MAP_Choice_to_canonical_1[] = { 2, 1, 0, 3 };
+static const unsigned asn_MAP_Choice_from_canonical_1[] = { 2, 1, 0, 3 };
+static const asn_TYPE_tag2member_t asn_MAP_Choice_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 3, 0, 0 }, /* bool */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 2, 0, 0 }, /* int */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 1, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)), 2, 0, 0 }, /* null */
+    { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice_specs_1 = {
+       sizeof(struct Choice),
+       offsetof(struct Choice, _asn_ctx),
+       offsetof(struct Choice, present),
+       sizeof(((struct Choice *)0)->present),
+       .tag2el = asn_MAP_Choice_tag2el_1,
+       .tag2el_count = 5,      /* Count of tags in the map */
+       .to_canonical_order = asn_MAP_Choice_to_canonical_1,
+       .from_canonical_order = asn_MAP_Choice_from_canonical_1,
+       .first_extension = 3    /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice = {
+       "Choice",
+       "Choice",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, &asn_PER_type_Choice_constr_1, CHOICE_constraint },
+       asn_MBR_Choice_1,
+       4,      /* Elements count */
+       &asn_SPC_Choice_specs_1 /* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Choice2] >>> ***/
+
+#include <BIT_STRING.h>
+#include <RELATIVE-OID.h>
+#include <constr_CHOICE.h>
+
+/*** <<< DEPS [Choice2] >>> ***/
+
+typedef enum Choice2_PR {
+       Choice2_PR_NOTHING,     /* No components present */
+       Choice2_PR_bitstr,
+       Choice2_PR_roid
+} Choice2_PR;
+
+/*** <<< TYPE-DECLS [Choice2] >>> ***/
+
+typedef struct Choice2 {
+       Choice2_PR present;
+       union Choice2_u {
+               BIT_STRING_t     bitstr;
+               RELATIVE_OID_t   roid;
+       } choice;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Choice2_t;
+
+/*** <<< FUNC-DECLS [Choice2] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Choice2;
+
+/*** <<< CTDEFS [Choice2] >>> ***/
+
+static asn_per_constraints_t asn_PER_type_Choice2_constr_1 CC_NOTUSED = {
+       { APC_CONSTRAINED,       1,  1,  0,  1 }        /* (0..1) */,
+       { APC_UNCONSTRAINED,    -1, -1,  0,  0 },
+       0, 0    /* No PER value map */
+};
+
+/*** <<< STAT-DEFS [Choice2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Choice2_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.bitstr),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_BIT_STRING,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "bitstr"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Choice2, choice.roid),
+               .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+               .tag_mode = +1, /* EXPLICIT tag at current level */
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "roid"
+               },
+};
+static const asn_TYPE_tag2member_t asn_MAP_Choice2_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bitstr */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* roid */
+};
+static asn_CHOICE_specifics_t asn_SPC_Choice2_specs_1 = {
+       sizeof(struct Choice2),
+       offsetof(struct Choice2, _asn_ctx),
+       offsetof(struct Choice2, present),
+       sizeof(((struct Choice2 *)0)->present),
+       .tag2el = asn_MAP_Choice2_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0,
+       .first_extension = -1   /* Extensions start */
+};
+asn_TYPE_descriptor_t asn_DEF_Choice2 = {
+       "Choice2",
+       "Choice2",
+       &asn_OP_CHOICE,
+       0,      /* No effective tags (pointer) */
+       0,      /* No effective tags (count) */
+       0,      /* No tags (pointer) */
+       0,      /* No tags (count) */
+       { 0, &asn_PER_type_Choice2_constr_1, CHOICE_constraint },
+       asn_MBR_Choice2_1,
+       2,      /* Elements count */
+       &asn_SPC_Choice2_specs_1        /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/96-type-identifier-OK.asn1 b/tests/tests-asn1c-compiler/96-type-identifier-OK.asn1
new file mode 100644 (file)
index 0000000..17ce5d3
--- /dev/null
@@ -0,0 +1,22 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .96
+
+ModuleTypeIdentifier
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 96 }
+       DEFINITIONS ::=
+BEGIN
+
+       /*
+        * TYPE-IDENTIFIER shall be automatically available.
+        */
+       T ::= SEQUENCE {
+               id      TYPE-IDENTIFIER.&id,
+               type    TYPE-IDENTIFIER.&Type
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/97-type-identifier-SW.asn1 b/tests/tests-asn1c-compiler/97-type-identifier-SW.asn1
new file mode 100644 (file)
index 0000000..a956e01
--- /dev/null
@@ -0,0 +1,43 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .97
+
+ModuleTypeIdentifier1
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 97 1 }
+       DEFINITIONS ::=
+BEGIN
+
+       /*
+        * TYPE-IDENTIFIER is resolved to a clause below.
+        */
+       T1 ::= SEQUENCE {
+               id      TYPE-IDENTIFIER.&id2,
+               type    TYPE-IDENTIFIER.&Type
+       }
+
+       TYPE-IDENTIFIER ::= CLASS {
+               &id2    OBJECT IDENTIFIER UNIQUE,
+               &Type
+       } WITH SYNTAX { [ &Type -- comment --] IDENTIFIED BY &id2 }
+
+END
+
+ModuleTypeIdentifier2
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 97 2 }
+       DEFINITIONS ::=
+BEGIN
+
+       /*
+        * TYPE-IDENTIFIER is resolved to a default TYPE-IDENTIFIER class.
+        */
+       T2 ::= SEQUENCE {
+               id      TYPE-IDENTIFIER.&id,
+               type    TYPE-IDENTIFIER.&Type
+       }
+
+END
diff --git a/tests/tests-asn1c-compiler/97-type-identifier-SW.asn1.-EF b/tests/tests-asn1c-compiler/97-type-identifier-SW.asn1.-EF
new file mode 100644 (file)
index 0000000..71743b7
--- /dev/null
@@ -0,0 +1,29 @@
+ModuleTypeIdentifier1 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 97 1 }
+DEFINITIONS ::=
+BEGIN
+
+T1 ::= SEQUENCE {
+    id  TYPE-IDENTIFIER.&id2,
+    type        TYPE-IDENTIFIER.&Type
+}
+
+TYPE-IDENTIFIER ::= CLASS {
+    &id2        OBJECT IDENTIFIER UNIQUE,
+    &Type       ANY
+} WITH SYNTAX { [ &Type ] IDENTIFIED BY &id2 }
+
+
+END
+
+ModuleTypeIdentifier2 { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 97 2 }
+DEFINITIONS ::=
+BEGIN
+
+T2 ::= SEQUENCE {
+    id  TYPE-IDENTIFIER.&id,
+    type        TYPE-IDENTIFIER.&Type
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1 b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1
new file mode 100644 (file)
index 0000000..211401a
--- /dev/null
@@ -0,0 +1,31 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .98
+
+ModuleAttributeClass
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 98 }
+       DEFINITIONS ::=
+BEGIN
+
+       ATTRIBUTE ::= CLASS { 
+               &id RELATIVE-OID UNIQUE
+       } WITH SYNTAX { ID &id }
+
+       Attribute ::= SEQUENCE {
+               identifier ATTRIBUTE.&id ({Attributes}),
+               siAttributeValue IA5String
+       }
+
+       Attributes ATTRIBUTE ::= { rafService | rcfService }
+
+       rafService ATTRIBUTE ::= { ID raf }
+       rcfService ATTRIBUTE ::= { ID rcf }
+
+       raf RELATIVE-OID ::= {3 2 1}
+       rcf RELATIVE-OID ::= {3 2 2}
+
+END
diff --git a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EF b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EF
new file mode 100644 (file)
index 0000000..e810e48
--- /dev/null
@@ -0,0 +1,26 @@
+ModuleAttributeClass { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 98 }
+DEFINITIONS ::=
+BEGIN
+
+ATTRIBUTE ::= CLASS {
+    &id         RELATIVE-OID UNIQUE
+} WITH SYNTAX { ID &id }
+
+
+Attribute ::= SEQUENCE {
+    identifier  ATTRIBUTE.&id ({Attributes}),
+    siAttributeValue    IA5String
+}
+
+Attributes ATTRIBUTE ::= {{ ID raf } | { ID rcf }}
+
+rafService ATTRIBUTE ::= { ID raf }
+
+rcfService ATTRIBUTE ::= { ID rcf }
+
+raf RELATIVE-OID ::= {3 2 1}
+
+rcf RELATIVE-OID ::= {3 2 2}
+
+END
diff --git a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..718a946
--- /dev/null
@@ -0,0 +1,44 @@
+ModuleAttributeClass { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 98 }
+DEFINITIONS ::=
+BEGIN
+
+ATTRIBUTE ::= CLASS {
+    &id         RELATIVE-OID UNIQUE
+} WITH SYNTAX { ID &id }
+
+-- Information Object Set has 2 entries:
+--    [&id]
+-- [1] raf 
+-- [2] rcf 
+
+
+Attribute ::= SEQUENCE {
+    identifier  ATTRIBUTE.&id ({Attributes}),
+    siAttributeValue    IA5String
+}
+
+Attributes ATTRIBUTE ::= {{ ID raf } | { ID rcf }}
+-- Information Object Set has 2 entries:
+--    [&id]
+-- [1] raf 
+-- [2] rcf 
+
+
+rafService ATTRIBUTE ::= { ID raf }
+-- Information Object Set has 1 entry:
+--    [&id]
+-- [1] raf 
+
+
+rcfService ATTRIBUTE ::= { ID rcf }
+-- Information Object Set has 1 entry:
+--    [&id]
+-- [1] rcf 
+
+
+raf RELATIVE-OID ::= {3 2 1}
+
+rcf RELATIVE-OID ::= {3 2 2}
+
+END
diff --git a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P
new file mode 100644 (file)
index 0000000..edd341d
--- /dev/null
@@ -0,0 +1,109 @@
+
+/*** <<< INCLUDES [Attribute] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <IA5String.h>
+#include <asn_ioc.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Attribute] >>> ***/
+
+typedef struct Attribute {
+       RELATIVE_OID_t   identifier;
+       IA5String_t      siAttributeValue;
+       
+       /* Context for parsing across buffer boundaries */
+       asn_struct_ctx_t _asn_ctx;
+} Attribute_t;
+
+/*** <<< FUNC-DECLS [Attribute] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Attribute;
+
+/*** <<< IOC-TABLES [Attribute] >>> ***/
+
+static const RELATIVE_OID_t asn_VAL_1_raf = { "not supported", 0 };
+static const RELATIVE_OID_t asn_VAL_2_rcf = { "not supported", 0 };
+static const asn_ioc_cell_t asn_IOS_Attributes_1_rows[] = {
+       { "&id", aioc__value, &asn_DEF_RELATIVE_OID, &asn_VAL_1_raf },
+       { "&id", aioc__value, &asn_DEF_RELATIVE_OID, &asn_VAL_2_rcf }
+};
+static const asn_ioc_set_t asn_IOS_Attributes_1[] = {
+       { 2, 1, asn_IOS_Attributes_1_rows }
+};
+
+/*** <<< CODE [Attribute] >>> ***/
+
+static int
+memb_identifier_constraint_1(const asn_TYPE_descriptor_t *td, const void *sptr,
+                       asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+       
+       if(!sptr) {
+               ASN__CTFAIL(app_key, td, sptr,
+                       "%s: value not given (%s:%d)",
+                       td->name, __FILE__, __LINE__);
+               return -1;
+       }
+       
+       
+       if(1 /* No applicable constraints whatsoever */) {
+               /* Nothing is here. See below */
+       }
+       
+       return td->encoding_constraints.general_constraints(td, sptr, ctfailcb, app_key);
+}
+
+
+/*** <<< STAT-DEFS [Attribute] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Attribute_1[] = {
+       { ATF_NOFLAGS, 0, offsetof(struct Attribute, identifier),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_RELATIVE_OID,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints =  memb_identifier_constraint_1 },
+               0, 0, /* No default value */
+               .name = "identifier"
+               },
+       { ATF_NOFLAGS, 0, offsetof(struct Attribute, siAttributeValue),
+               .tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+               .tag_mode = 0,
+               .type = &asn_DEF_IA5String,
+               .type_selector = 0,
+               { .oer_constraints = 0, .per_constraints = 0, .general_constraints = 0 },
+               0, 0, /* No default value */
+               .name = "siAttributeValue"
+               },
+};
+static const ber_tlv_tag_t asn_DEF_Attribute_tags_1[] = {
+       (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_Attribute_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 }, /* identifier */
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 } /* siAttributeValue */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Attribute_specs_1 = {
+       sizeof(struct Attribute),
+       offsetof(struct Attribute, _asn_ctx),
+       .tag2el = asn_MAP_Attribute_tag2el_1,
+       .tag2el_count = 2,      /* Count of tags in the map */
+       0, 0, 0,        /* Optional elements (not needed) */
+       -1,     /* First extension addition */
+};
+asn_TYPE_descriptor_t asn_DEF_Attribute = {
+       "Attribute",
+       "Attribute",
+       &asn_OP_SEQUENCE,
+       asn_DEF_Attribute_tags_1,
+       sizeof(asn_DEF_Attribute_tags_1)
+               /sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */
+       asn_DEF_Attribute_tags_1,       /* Same as above */
+       sizeof(asn_DEF_Attribute_tags_1)
+               /sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */
+       { 0, 0, SEQUENCE_constraint },
+       asn_MBR_Attribute_1,
+       2,      /* Elements count */
+       &asn_SPC_Attribute_specs_1      /* Additional specs */
+};
+
diff --git a/tests/tests-asn1c-compiler/99-class-sample-OK.asn1 b/tests/tests-asn1c-compiler/99-class-sample-OK.asn1
new file mode 100644 (file)
index 0000000..28e222f
--- /dev/null
@@ -0,0 +1,45 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .99
+
+ModuleClassSample
+       { iso org(3) dod(6) internet (1) private(4) enterprise(1)
+               spelio(9363) software(1) asn1c(5) test(1) 99 }
+       DEFINITIONS ::=
+BEGIN
+
+       SAMPLE-CLASS ::= CLASS {
+               &id     RELATIVE-OID UNIQUE,
+               &code   ENUMERATED { request, response, status }
+                               DEFAULT request,
+               &Type   OPTIONAL
+       } WITH SYNTAX { [TYPE &Type] [WITH CODE &code] IDENTIFIED BY &id }
+
+       SampleClassObjectSet SAMPLE-CLASS ::= {
+         request-Whatever | respond-Stuff | request-Status | request-Salt
+       }
+
+       request-Whatever SAMPLE-CLASS
+               ::= { IDENTIFIED BY request-whatever }
+
+       respond-Stuff SAMPLE-CLASS
+               ::= { WITH CODE 1 IDENTIFIED BY response-stuff }
+
+       request-Status SAMPLE-CLASS
+               ::= { TYPE SampleType WITH CODE 2 IDENTIFIED BY request-id }
+
+       request-Salt SAMPLE-CLASS
+               ::= { TYPE Salt IDENTIFIED BY request-salt }
+
+       request-id RELATIVE-OID ::= { 1 1 1 }
+       request-salt RELATIVE-OID ::= { 1 1 1 }
+       request-whatever RELATIVE-OID ::= { 1 1 5 }
+       response-stuff RELATIVE-OID ::= { 2 0 1 }
+
+       SampleType ::= SEQUENCE { ... }
+       Salt ::= SET { ... }
+
+END
diff --git a/tests/tests-asn1c-compiler/99-class-sample-OK.asn1.-EFprint-class-matrix b/tests/tests-asn1c-compiler/99-class-sample-OK.asn1.-EFprint-class-matrix
new file mode 100644 (file)
index 0000000..c806916
--- /dev/null
@@ -0,0 +1,73 @@
+ModuleClassSample { iso org(3) dod(6) internet(1) private(4) enterprise(1)
+       spelio(9363) software(1) asn1c(5) test(1) 99 }
+DEFINITIONS ::=
+BEGIN
+
+SAMPLE-CLASS ::= CLASS {
+    &id         RELATIVE-OID UNIQUE,
+    &code       ENUMERATED {
+            request(0),        
+            response(1),        
+            status(2)
+        } DEFAULT 0,
+    &Type       OPTIONAL
+} WITH SYNTAX { [TYPE &Type] [WITH CODE &code] IDENTIFIED BY &id }
+
+-- Information Object Set has 4 entries:
+--    [             &id][           &code][           &Type]
+-- [1] request-whatever        <no entry>        <no entry> 
+-- [2]   response-stuff                 1        <no entry> 
+-- [3]       request-id                 2        SampleType 
+-- [4]     request-salt        <no entry>              Salt 
+
+
+SampleClassObjectSet SAMPLE-CLASS ::= {{ IDENTIFIED BY request-whatever } | { WITH CODE 1 IDENTIFIED BY response-stuff } | { TYPE SampleType WITH CODE 2 IDENTIFIED BY request-id } | { TYPE Salt IDENTIFIED BY request-salt }}
+-- Information Object Set has 4 entries:
+--    [             &id][           &code][           &Type]
+-- [1] request-whatever        <no entry>        <no entry> 
+-- [2]   response-stuff                 1        <no entry> 
+-- [3]       request-id                 2        SampleType 
+-- [4]     request-salt        <no entry>              Salt 
+
+
+request-Whatever SAMPLE-CLASS ::= { IDENTIFIED BY request-whatever }
+-- Information Object Set has 1 entry:
+--    [             &id][           &code][           &Type]
+-- [1] request-whatever        <no entry>        <no entry> 
+
+
+respond-Stuff SAMPLE-CLASS ::= { WITH CODE 1 IDENTIFIED BY response-stuff }
+-- Information Object Set has 1 entry:
+--    [           &id][         &code][         &Type]
+-- [1] response-stuff               1      <no entry> 
+
+
+request-Status SAMPLE-CLASS ::= { TYPE SampleType WITH CODE 2 IDENTIFIED BY request-id }
+-- Information Object Set has 1 entry:
+--    [       &id][     &code][     &Type]
+-- [1] request-id           2  SampleType 
+
+
+request-Salt SAMPLE-CLASS ::= { TYPE Salt IDENTIFIED BY request-salt }
+-- Information Object Set has 1 entry:
+--    [         &id][       &code][       &Type]
+-- [1] request-salt    <no entry>          Salt 
+
+
+request-id RELATIVE-OID ::= { 1 1 1 }
+
+request-salt RELATIVE-OID ::= { 1 1 1 }
+
+request-whatever RELATIVE-OID ::= { 1 1 5 }
+
+response-stuff RELATIVE-OID ::= { 2 0 1 }
+
+SampleType ::= SEQUENCE {
+    ...
+}
+
+Salt ::= SET {
+    ...
+}
+
+END
diff --git a/tests/tests-asn1c-compiler/Makefile b/tests/tests-asn1c-compiler/Makefile
new file mode 100644 (file)
index 0000000..c13e246
--- /dev/null
@@ -0,0 +1,847 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-asn1c-compiler/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = tests/tests-asn1c-compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-asn1c-compiler
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-asn1c-compiler
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+dist_check_SCRIPTS = check-parsing.sh
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir} top_builddir=${top_builddir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-parsing.*.tmp
+EXTRA_DIST = README $(srcdir)/*asn1*
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-asn1c-compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-asn1c-compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-parsing.sh.log: check-parsing.sh
+       @p='check-parsing.sh'; \
+       b='check-parsing.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \
+       uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-asn1c-compiler/Makefile.am b/tests/tests-asn1c-compiler/Makefile.am
new file mode 100644 (file)
index 0000000..7f549fc
--- /dev/null
@@ -0,0 +1,7 @@
+
+dist_check_SCRIPTS = check-parsing.sh
+TESTS_ENVIRONMENT= top_srcdir=${top_srcdir} top_builddir=${top_builddir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-parsing.*.tmp
+
+EXTRA_DIST = README $(srcdir)/*asn1*
diff --git a/tests/tests-asn1c-compiler/Makefile.in b/tests/tests-asn1c-compiler/Makefile.in
new file mode 100644 (file)
index 0000000..9d77e28
--- /dev/null
@@ -0,0 +1,847 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = tests/tests-asn1c-compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_check_SCRIPTS = check-parsing.sh
+TESTS_ENVIRONMENT = top_srcdir=${top_srcdir} top_builddir=${top_builddir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = .check-parsing.*.tmp
+EXTRA_DIST = README $(srcdir)/*asn1*
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-asn1c-compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-asn1c-compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-parsing.sh.log: check-parsing.sh
+       @p='check-parsing.sh'; \
+       b='check-parsing.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \
+       uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-asn1c-compiler/README b/tests/tests-asn1c-compiler/README
new file mode 100644 (file)
index 0000000..5d1212e
--- /dev/null
@@ -0,0 +1,25 @@
+
+This is a collection of various little ASN.1 modules, used independently
+by several different testing engines below the main tree (i.e. libasn1fix)
+for stressing various aspects of compiler operation.
+
+The files follow certain naming conventions:
+
+Source file:
+       <Index>-<arbitrary-name>-{OK|SE|NP}.asn1
+
+Regenerator test file:
+       <Index>-<arbitrary-name>-{OK|SE|NP}.asn1.[<compiler-flags>]
+
+Where
+       <Index> is arbitrary number (digits)
+       <arbitrary-name> is arbitrary string, without dots
+       OK      file syntax and semantics are absolutely correct
+       SE      file semantics is wrong
+       SW      file semantics is suspicious (warning)
+       NP      file syntax is incorrect, file not parseable
+       <compiler-flags>        command-line flags for compiler
+
+Example:
+       07-int-OK.asn1          # Correct ASN.1 file
+       07-int-OK.asn1.-EF      # Test of file regeneration with -E -F flags.
diff --git a/tests/tests-asn1c-compiler/check-parsing-log2diff.pl b/tests/tests-asn1c-compiler/check-parsing-log2diff.pl
new file mode 100755 (executable)
index 0000000..fca9626
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/env perl
+#
+# Convert check-parsing.sh's log to diff format.
+#
+
+if(-t STDIN && $#ARGV == -1) {
+       print STDERR "Usage: check-parsing-log2diff.pl < check-parsing.sh.log > diff.patch\n";
+       exit(1);
+}
+
+$state = 0;
+while(<>) {
+       if ($state == 0) {
+               if (/^Checking\s*(.+?)\s*against\s*(.+?)$/) {
+                       $source = $1;
+                       $target = $2;
+               } elsif (/^\-\-\-\s(.+?)\s.*/) {
+                       print "--- a/dev/null " . "\n";
+               } elsif (/^\+\+\+\s(.+?)\s.*/) {
+                       print "+++ b" . $target . "\n";
+                       $state = 1;
+               }
+       } else {
+               if (/^Checking\s*(.+?)\s*against\s*(.+?)$/) {
+                       $source = $1;
+                       $target = $2;
+                       $state = 0;
+               } else {
+                       print $_;
+               }
+       }
+}
diff --git a/tests/tests-asn1c-compiler/check-parsing.sh b/tests/tests-asn1c-compiler/check-parsing.sh
new file mode 100755 (executable)
index 0000000..8526235
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# Test diff(1) capabilities
+diff -a . . 2>/dev/null && diffArgs="-a"               # Assume text files
+diff -u . . 2>/dev/null && diffArgs="$diffArgs -u"     # Unified diff output
+
+ec=0
+
+if [ "$1" != "regenerate" ]; then
+    set -e
+fi
+
+PROCESSING=""
+print_status() {
+    echo "Error while processing $PROCESSING"
+}
+
+trap print_status EXIT
+
+top_srcdir="${top_srcdir:-../..}"
+top_builddir="${top_builddir:-../..}"
+
+for ref in ${top_srcdir}/tests/tests-asn1c-compiler/*.asn1.-*; do
+       # Figure out the initial source file used to generate this output.
+       src=$(echo "$ref" | sed -e 's/\.-[-a-zA-Z0-9=]*$//')
+       # Figure out compiler flags used to create the file.
+       flags=$(echo "$ref" | sed -e 's/.*\.-//')
+       echo "Checking $src against $ref"
+       template=.tmp.check-parsing.$$
+       oldversion=${template}.old
+       newversion=${template}.new
+       PROCESSING="$ref (from $src)"
+       LANG=C sed -e 's/^found in .*/found in .../' < "$ref" > "$oldversion"
+       (${top_builddir}/asn1c/asn1c -S ${top_srcdir}/skeletons -no-gen-OER -no-gen-PER "-$flags" "$src" | LANG=C sed -e 's/^found in .*/found in .../' > "$newversion") || ec=$?
+       if [ $? = 0 ]; then
+               diff $diffArgs "$oldversion" "$newversion" || ec=$?
+       fi
+       rm -f $oldversion $newversion
+       if [ "$1" = "regenerate" ]; then
+               ${top_builddir}/asn1c/asn1c -S ${top_srcdir}/skeletons -no-gen-OER -no-gen-PER "-$flags" "$src" > "$ref"
+       fi
+done
+
+if [ $ec = 0 ]; then
+    trap '' EXIT
+fi
+
+exit $ec
diff --git a/tests/tests-asn1c-smoke/Makefile b/tests/tests-asn1c-smoke/Makefile
new file mode 100644 (file)
index 0000000..5d5122f
--- /dev/null
@@ -0,0 +1,850 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-asn1c-smoke/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = tests/tests-asn1c-smoke
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-asn1c-smoke
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-asn1c-smoke
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+dist_check_SCRIPTS = check-asn1c-smoke.sh
+TESTS_ENVIRONMENT = MAKE=${MAKE}                     \
+                    top_builddir=${top_builddir}    \
+                    top_srcdir=${top_srcdir}
+
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = Makefile.am.* test* *.[acho]
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-asn1c-smoke/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-asn1c-smoke/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-asn1c-smoke.sh.log: check-asn1c-smoke.sh
+       @p='check-asn1c-smoke.sh'; \
+       b='check-asn1c-smoke.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \
+       uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-asn1c-smoke/Makefile.am b/tests/tests-asn1c-smoke/Makefile.am
new file mode 100644 (file)
index 0000000..eae3322
--- /dev/null
@@ -0,0 +1,9 @@
+
+dist_check_SCRIPTS = check-asn1c-smoke.sh
+TESTS_ENVIRONMENT= MAKE=${MAKE}                     \
+                    top_builddir=${top_builddir}    \
+                    top_srcdir=${top_srcdir}
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = Makefile.am.* test* *.[acho]
+
+EXTRA_DIST = README
diff --git a/tests/tests-asn1c-smoke/Makefile.in b/tests/tests-asn1c-smoke/Makefile.in
new file mode 100644 (file)
index 0000000..7c6f3ca
--- /dev/null
@@ -0,0 +1,850 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = tests/tests-asn1c-smoke
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_check_SCRIPTS = check-asn1c-smoke.sh
+TESTS_ENVIRONMENT = MAKE=${MAKE}                     \
+                    top_builddir=${top_builddir}    \
+                    top_srcdir=${top_srcdir}
+
+TESTS = $(dist_check_SCRIPTS)
+CLEANFILES = Makefile.am.* test* *.[acho]
+EXTRA_DIST = README
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-asn1c-smoke/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-asn1c-smoke/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-asn1c-smoke.sh.log: check-asn1c-smoke.sh
+       @p='check-asn1c-smoke.sh'; \
+       b='check-asn1c-smoke.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \
+       uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-asn1c-smoke/README b/tests/tests-asn1c-smoke/README
new file mode 100644 (file)
index 0000000..57467e3
--- /dev/null
@@ -0,0 +1,2 @@
+Test that asn1c compiler produces compilable code for basic ASN.1 types,
+while trying to disable different codecs and vary other compiler flags.
diff --git a/tests/tests-asn1c-smoke/check-asn1c-smoke.sh b/tests/tests-asn1c-smoke/check-asn1c-smoke.sh
new file mode 100755 (executable)
index 0000000..831be1a
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+
+set -x
+set -e
+set -o pipefail
+
+top_builddir=${top_builddir:-../..}
+top_srcdir=${top_srcdir:-../..}
+
+cleanup() {
+    rm -rf *.[acho] Makefile.am.* *.mk *.txt *.asn
+    rm -f converter-example
+}
+
+print_state() {
+    local err=$?
+    set +x
+    set +e
+    trap "" EXIT ERR
+    echo "Error $err while processing:"
+    cat test.asn
+    cat status.txt
+    echo "FAILED"
+    exit $err
+}
+
+verify() {
+    local type="$1"
+    local flags="$2"
+
+    cleanup
+
+    asncmd="${top_builddir}/asn1c/asn1c -Wdebug-compiler -flink-skeletons -S ${top_srcdir}/skeletons $flags test.asn"
+
+    {
+    echo "$asncmd"
+    echo "${MAKE:-make} -f converter-example.mk"
+    } > status.txt
+
+    echo "Module DEFINITIONS::=BEGIN T::=$type END" > test.asn
+    $asncmd
+    CFLAGS=-O0 ${MAKE:-make} -f converter-example.mk | tail -10
+}
+
+verify_type_with_variants() {
+    local type="$1"
+    for flags in "-no-gen-PER" "-no-gen-OER" "-no-gen-PER -no-gen-OER" ""; do
+        for native in "" "-fwide-types"; do
+            verify "$type" "$flags $native"
+        done
+    done
+}
+
+verify_compile_and_link_variants() {
+    for type in INTEGER "INTEGER(0..1)" "ENUMERATED{foo}" NULL BOOLEAN \
+                "BIT STRING" \
+                "OBJECT IDENTIFIER" "RELATIVE-OID" \
+                "SEQUENCE{f INTEGER}" \
+                "CHOICE{f INTEGER}" \
+                "OCTET STRING" IA5String "IA5String(SIZE(1))" UTF8String \
+                REAL "SET OF INTEGER" "SEQUENCE OF INTEGER"; do
+        verify_type_with_variants "$type"
+    done
+}
+
+trap print_state EXIT ERR
+if [ "x$*" = "x" ]; then
+    verify_compile_and_link_variants
+else
+    for type in "$@"; do
+        verify_type_with_variants "$type"
+    done
+fi
+set +x
+trap '' EXIT ERR
+
+cleanup
+echo "OK"
diff --git a/tests/tests-c-compiler/Makefile b/tests/tests-c-compiler/Makefile
new file mode 100644 (file)
index 0000000..9019b77
--- /dev/null
@@ -0,0 +1,1452 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-c-compiler/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+am__append_1 = check-src/check64-134.-gen-PER.c \
+       check-src/check64-136.-gen-OER.c
+subdir = tests/tests-c-compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99)
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-c-compiler
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-c-compiler
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+SUBDIRS = check-src
+dist_check_SCRIPTS = check-assembly.sh
+TESTS_ENVIRONMENT = \
+                                  CC="${CC}" \
+                                  CXX="${CXX}" \
+                                  CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}" \
+                                  CXXFLAGS="${CXXFLAGS}" \
+                                  LDFLAGS="${LDFLAGS}" \
+                                  LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}" \
+                                  ASAN_ENV_FLAGS=" ASAN_OPTIONS=detect_leaks=1"       \
+                                  srcdir=${srcdir} \
+                                  abs_top_srcdir=${abs_top_srcdir} \
+                                  abs_top_builddir=${abs_top_builddir} \
+                                  ${srcdir}/check-assembly.sh
+
+TESTS = check-src/check-03.-fwide-types.c \
+       check-src/check-119.-fwide-types.-gen-PER.c \
+       check-src/check-119.-gen-PER.c check-src/check-126.-gen-PER.c \
+       check-src/check-127.-gen-PER.c check-src/check-131.-gen-PER.c \
+       check-src/check-132.-gen-PER.c check-src/check-133.-gen-PER.c \
+       check-src/check-135.-gen-OER.c check-src/check-148.c \
+       check-src/check-19.c check-src/check-22.-fwide-types.c \
+       check-src/check-24.-fwide-types.c \
+       check-src/check-25.-fwide-types.c \
+       check-src/check-30.-fwide-types.c \
+       check-src/check-31.-fwide-types.c check-src/check-32.c \
+       check-src/check-33.c check-src/check-35.c check-src/check-39.c \
+       check-src/check-41.-fwide-types.c check-src/check-41.c \
+       check-src/check-42.c check-src/check-43.c check-src/check-44.c \
+       check-src/check-46.c check-src/check-48.c check-src/check-50.c \
+       check-src/check-59.c check-src/check-60.c check-src/check-62.c \
+       check-src/check-65.c check-src/check-70.-fwide-types.c \
+       check-src/check-70.c check-src/check-72.-fcompound-names.c \
+       check-src/check-73.c check-src/check-92.-findirect-choice.c \
+       check-src/check-92.c check-src/check-158.-fcompound-names.c \
+       $(am__append_1)
+XFAIL_TESTS = check-src/check-158.-fcompound-names.c
+EXTRA_DIST = \
+    data-62     \
+    data-70     \
+    data-119    \
+    data-126    \
+    check-src/check64-134.-gen-PER.c    \
+    check-src/check64-136.-gen-OER.c
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-c-compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-c-compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-src/check-03.-fwide-types.c.log: check-src/check-03.-fwide-types.c
+       @p='check-src/check-03.-fwide-types.c'; \
+       b='check-src/check-03.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-119.-fwide-types.-gen-PER.c.log: check-src/check-119.-fwide-types.-gen-PER.c
+       @p='check-src/check-119.-fwide-types.-gen-PER.c'; \
+       b='check-src/check-119.-fwide-types.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-119.-gen-PER.c.log: check-src/check-119.-gen-PER.c
+       @p='check-src/check-119.-gen-PER.c'; \
+       b='check-src/check-119.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-126.-gen-PER.c.log: check-src/check-126.-gen-PER.c
+       @p='check-src/check-126.-gen-PER.c'; \
+       b='check-src/check-126.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-127.-gen-PER.c.log: check-src/check-127.-gen-PER.c
+       @p='check-src/check-127.-gen-PER.c'; \
+       b='check-src/check-127.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-131.-gen-PER.c.log: check-src/check-131.-gen-PER.c
+       @p='check-src/check-131.-gen-PER.c'; \
+       b='check-src/check-131.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-132.-gen-PER.c.log: check-src/check-132.-gen-PER.c
+       @p='check-src/check-132.-gen-PER.c'; \
+       b='check-src/check-132.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-133.-gen-PER.c.log: check-src/check-133.-gen-PER.c
+       @p='check-src/check-133.-gen-PER.c'; \
+       b='check-src/check-133.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-135.-gen-OER.c.log: check-src/check-135.-gen-OER.c
+       @p='check-src/check-135.-gen-OER.c'; \
+       b='check-src/check-135.-gen-OER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-148.c.log: check-src/check-148.c
+       @p='check-src/check-148.c'; \
+       b='check-src/check-148.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-19.c.log: check-src/check-19.c
+       @p='check-src/check-19.c'; \
+       b='check-src/check-19.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-22.-fwide-types.c.log: check-src/check-22.-fwide-types.c
+       @p='check-src/check-22.-fwide-types.c'; \
+       b='check-src/check-22.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-24.-fwide-types.c.log: check-src/check-24.-fwide-types.c
+       @p='check-src/check-24.-fwide-types.c'; \
+       b='check-src/check-24.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-25.-fwide-types.c.log: check-src/check-25.-fwide-types.c
+       @p='check-src/check-25.-fwide-types.c'; \
+       b='check-src/check-25.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-30.-fwide-types.c.log: check-src/check-30.-fwide-types.c
+       @p='check-src/check-30.-fwide-types.c'; \
+       b='check-src/check-30.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-31.-fwide-types.c.log: check-src/check-31.-fwide-types.c
+       @p='check-src/check-31.-fwide-types.c'; \
+       b='check-src/check-31.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-32.c.log: check-src/check-32.c
+       @p='check-src/check-32.c'; \
+       b='check-src/check-32.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-33.c.log: check-src/check-33.c
+       @p='check-src/check-33.c'; \
+       b='check-src/check-33.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-35.c.log: check-src/check-35.c
+       @p='check-src/check-35.c'; \
+       b='check-src/check-35.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-39.c.log: check-src/check-39.c
+       @p='check-src/check-39.c'; \
+       b='check-src/check-39.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-41.-fwide-types.c.log: check-src/check-41.-fwide-types.c
+       @p='check-src/check-41.-fwide-types.c'; \
+       b='check-src/check-41.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-41.c.log: check-src/check-41.c
+       @p='check-src/check-41.c'; \
+       b='check-src/check-41.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-42.c.log: check-src/check-42.c
+       @p='check-src/check-42.c'; \
+       b='check-src/check-42.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-43.c.log: check-src/check-43.c
+       @p='check-src/check-43.c'; \
+       b='check-src/check-43.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-44.c.log: check-src/check-44.c
+       @p='check-src/check-44.c'; \
+       b='check-src/check-44.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-46.c.log: check-src/check-46.c
+       @p='check-src/check-46.c'; \
+       b='check-src/check-46.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-48.c.log: check-src/check-48.c
+       @p='check-src/check-48.c'; \
+       b='check-src/check-48.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-50.c.log: check-src/check-50.c
+       @p='check-src/check-50.c'; \
+       b='check-src/check-50.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-59.c.log: check-src/check-59.c
+       @p='check-src/check-59.c'; \
+       b='check-src/check-59.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-60.c.log: check-src/check-60.c
+       @p='check-src/check-60.c'; \
+       b='check-src/check-60.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-62.c.log: check-src/check-62.c
+       @p='check-src/check-62.c'; \
+       b='check-src/check-62.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-65.c.log: check-src/check-65.c
+       @p='check-src/check-65.c'; \
+       b='check-src/check-65.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-70.-fwide-types.c.log: check-src/check-70.-fwide-types.c
+       @p='check-src/check-70.-fwide-types.c'; \
+       b='check-src/check-70.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-70.c.log: check-src/check-70.c
+       @p='check-src/check-70.c'; \
+       b='check-src/check-70.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-72.-fcompound-names.c.log: check-src/check-72.-fcompound-names.c
+       @p='check-src/check-72.-fcompound-names.c'; \
+       b='check-src/check-72.-fcompound-names.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-73.c.log: check-src/check-73.c
+       @p='check-src/check-73.c'; \
+       b='check-src/check-73.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-92.-findirect-choice.c.log: check-src/check-92.-findirect-choice.c
+       @p='check-src/check-92.-findirect-choice.c'; \
+       b='check-src/check-92.-findirect-choice.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-92.c.log: check-src/check-92.c
+       @p='check-src/check-92.c'; \
+       b='check-src/check-92.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-158.-fcompound-names.c.log: check-src/check-158.-fcompound-names.c
+       @p='check-src/check-158.-fcompound-names.c'; \
+       b='check-src/check-158.-fcompound-names.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check64-134.-gen-PER.c.log: check-src/check64-134.-gen-PER.c
+       @p='check-src/check64-134.-gen-PER.c'; \
+       b='check-src/check64-134.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check64-136.-gen-OER.c.log: check-src/check64-136.-gen-OER.c
+       @p='check-src/check64-136.-gen-OER.c'; \
+       b='check-src/check64-136.-gen-OER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-TESTS check-am clean clean-generic clean-libtool \
+       clean-local cscopelist-am ctags ctags-am distclean \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+clean-local:
+       rm -rf test-*
+
+# 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:
diff --git a/tests/tests-c-compiler/Makefile.am b/tests/tests-c-compiler/Makefile.am
new file mode 100644 (file)
index 0000000..19d5915
--- /dev/null
@@ -0,0 +1,82 @@
+@CODE_COVERAGE_RULES@
+
+SUBDIRS = check-src
+
+dist_check_SCRIPTS = check-assembly.sh
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+
+TESTS_ENVIRONMENT= \
+                                  CC="${CC}" \
+                                  CXX="${CXX}" \
+                                  CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}" \
+                                  CXXFLAGS="${CXXFLAGS}" \
+                                  LDFLAGS="${LDFLAGS}" \
+                                  LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}" \
+                                  ASAN_ENV_FLAGS="@ASAN_ENV_FLAGS@"       \
+                                  srcdir=${srcdir} \
+                                  abs_top_srcdir=${abs_top_srcdir} \
+                                  abs_top_builddir=${abs_top_builddir} \
+                                  ${srcdir}/check-assembly.sh
+
+TESTS = 
+TESTS += check-src/check-03.-fwide-types.c
+TESTS += check-src/check-119.-fwide-types.-gen-PER.c
+TESTS += check-src/check-119.-gen-PER.c
+TESTS += check-src/check-126.-gen-PER.c
+TESTS += check-src/check-127.-gen-PER.c
+TESTS += check-src/check-131.-gen-PER.c
+TESTS += check-src/check-132.-gen-PER.c
+TESTS += check-src/check-133.-gen-PER.c
+TESTS += check-src/check-135.-gen-OER.c
+TESTS += check-src/check-148.c
+TESTS += check-src/check-19.c
+TESTS += check-src/check-22.-fwide-types.c
+TESTS += check-src/check-24.-fwide-types.c
+TESTS += check-src/check-25.-fwide-types.c
+TESTS += check-src/check-30.-fwide-types.c
+TESTS += check-src/check-31.-fwide-types.c
+TESTS += check-src/check-32.c
+TESTS += check-src/check-33.c
+TESTS += check-src/check-35.c
+TESTS += check-src/check-39.c
+TESTS += check-src/check-41.-fwide-types.c
+TESTS += check-src/check-41.c
+TESTS += check-src/check-42.c
+TESTS += check-src/check-43.c
+TESTS += check-src/check-44.c
+TESTS += check-src/check-46.c
+TESTS += check-src/check-48.c
+TESTS += check-src/check-50.c
+TESTS += check-src/check-59.c
+TESTS += check-src/check-60.c
+TESTS += check-src/check-62.c
+TESTS += check-src/check-65.c
+TESTS += check-src/check-70.-fwide-types.c
+TESTS += check-src/check-70.c
+TESTS += check-src/check-72.-fcompound-names.c
+TESTS += check-src/check-73.c
+TESTS += check-src/check-92.-findirect-choice.c
+TESTS += check-src/check-92.c
+TESTS += check-src/check-158.-fcompound-names.c
+
+if TEST_64BIT
+TESTS += check-src/check64-134.-gen-PER.c
+TESTS += check-src/check64-136.-gen-OER.c
+endif
+
+XFAIL_TESTS =
+XFAIL_TESTS += check-src/check-158.-fcompound-names.c
+
+EXTRA_DIST =    \
+    data-62     \
+    data-70     \
+    data-119    \
+    data-126    \
+    check-src/check64-134.-gen-PER.c    \
+    check-src/check64-136.-gen-OER.c
+
+clean-local:
+       rm -rf test-*
diff --git a/tests/tests-c-compiler/Makefile.in b/tests/tests-c-compiler/Makefile.in
new file mode 100644 (file)
index 0000000..5701c7d
--- /dev/null
@@ -0,0 +1,1354 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+@TEST_64BIT_TRUE@am__append_1 = check-src/check64-134.-gen-PER.c \
+@TEST_64BIT_TRUE@      check-src/check64-136.-gen-OER.c
+subdir = tests/tests-c-compiler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       check recheck distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/config/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+SUBDIRS = check-src
+dist_check_SCRIPTS = check-assembly.sh
+TESTS_ENVIRONMENT = \
+                                  CC="${CC}" \
+                                  CXX="${CXX}" \
+                                  CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}" \
+                                  CXXFLAGS="${CXXFLAGS}" \
+                                  LDFLAGS="${LDFLAGS}" \
+                                  LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}" \
+                                  ASAN_ENV_FLAGS="@ASAN_ENV_FLAGS@"       \
+                                  srcdir=${srcdir} \
+                                  abs_top_srcdir=${abs_top_srcdir} \
+                                  abs_top_builddir=${abs_top_builddir} \
+                                  ${srcdir}/check-assembly.sh
+
+TESTS = check-src/check-03.-fwide-types.c \
+       check-src/check-119.-fwide-types.-gen-PER.c \
+       check-src/check-119.-gen-PER.c check-src/check-126.-gen-PER.c \
+       check-src/check-127.-gen-PER.c check-src/check-131.-gen-PER.c \
+       check-src/check-132.-gen-PER.c check-src/check-133.-gen-PER.c \
+       check-src/check-135.-gen-OER.c check-src/check-148.c \
+       check-src/check-19.c check-src/check-22.-fwide-types.c \
+       check-src/check-24.-fwide-types.c \
+       check-src/check-25.-fwide-types.c \
+       check-src/check-30.-fwide-types.c \
+       check-src/check-31.-fwide-types.c check-src/check-32.c \
+       check-src/check-33.c check-src/check-35.c check-src/check-39.c \
+       check-src/check-41.-fwide-types.c check-src/check-41.c \
+       check-src/check-42.c check-src/check-43.c check-src/check-44.c \
+       check-src/check-46.c check-src/check-48.c check-src/check-50.c \
+       check-src/check-59.c check-src/check-60.c check-src/check-62.c \
+       check-src/check-65.c check-src/check-70.-fwide-types.c \
+       check-src/check-70.c check-src/check-72.-fcompound-names.c \
+       check-src/check-73.c check-src/check-92.-findirect-choice.c \
+       check-src/check-92.c check-src/check-158.-fcompound-names.c \
+       $(am__append_1)
+XFAIL_TESTS = check-src/check-158.-fcompound-names.c
+EXTRA_DIST = \
+    data-62     \
+    data-70     \
+    data-119    \
+    data-126    \
+    check-src/check64-134.-gen-PER.c    \
+    check-src/check64-136.-gen-OER.c
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .log .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-c-compiler/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-c-compiler/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       $(am__define_uniq_tagged_files); \
+       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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-src/check-03.-fwide-types.c.log: check-src/check-03.-fwide-types.c
+       @p='check-src/check-03.-fwide-types.c'; \
+       b='check-src/check-03.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-119.-fwide-types.-gen-PER.c.log: check-src/check-119.-fwide-types.-gen-PER.c
+       @p='check-src/check-119.-fwide-types.-gen-PER.c'; \
+       b='check-src/check-119.-fwide-types.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-119.-gen-PER.c.log: check-src/check-119.-gen-PER.c
+       @p='check-src/check-119.-gen-PER.c'; \
+       b='check-src/check-119.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-126.-gen-PER.c.log: check-src/check-126.-gen-PER.c
+       @p='check-src/check-126.-gen-PER.c'; \
+       b='check-src/check-126.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-127.-gen-PER.c.log: check-src/check-127.-gen-PER.c
+       @p='check-src/check-127.-gen-PER.c'; \
+       b='check-src/check-127.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-131.-gen-PER.c.log: check-src/check-131.-gen-PER.c
+       @p='check-src/check-131.-gen-PER.c'; \
+       b='check-src/check-131.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-132.-gen-PER.c.log: check-src/check-132.-gen-PER.c
+       @p='check-src/check-132.-gen-PER.c'; \
+       b='check-src/check-132.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-133.-gen-PER.c.log: check-src/check-133.-gen-PER.c
+       @p='check-src/check-133.-gen-PER.c'; \
+       b='check-src/check-133.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-135.-gen-OER.c.log: check-src/check-135.-gen-OER.c
+       @p='check-src/check-135.-gen-OER.c'; \
+       b='check-src/check-135.-gen-OER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-148.c.log: check-src/check-148.c
+       @p='check-src/check-148.c'; \
+       b='check-src/check-148.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-19.c.log: check-src/check-19.c
+       @p='check-src/check-19.c'; \
+       b='check-src/check-19.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-22.-fwide-types.c.log: check-src/check-22.-fwide-types.c
+       @p='check-src/check-22.-fwide-types.c'; \
+       b='check-src/check-22.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-24.-fwide-types.c.log: check-src/check-24.-fwide-types.c
+       @p='check-src/check-24.-fwide-types.c'; \
+       b='check-src/check-24.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-25.-fwide-types.c.log: check-src/check-25.-fwide-types.c
+       @p='check-src/check-25.-fwide-types.c'; \
+       b='check-src/check-25.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-30.-fwide-types.c.log: check-src/check-30.-fwide-types.c
+       @p='check-src/check-30.-fwide-types.c'; \
+       b='check-src/check-30.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-31.-fwide-types.c.log: check-src/check-31.-fwide-types.c
+       @p='check-src/check-31.-fwide-types.c'; \
+       b='check-src/check-31.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-32.c.log: check-src/check-32.c
+       @p='check-src/check-32.c'; \
+       b='check-src/check-32.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-33.c.log: check-src/check-33.c
+       @p='check-src/check-33.c'; \
+       b='check-src/check-33.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-35.c.log: check-src/check-35.c
+       @p='check-src/check-35.c'; \
+       b='check-src/check-35.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-39.c.log: check-src/check-39.c
+       @p='check-src/check-39.c'; \
+       b='check-src/check-39.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-41.-fwide-types.c.log: check-src/check-41.-fwide-types.c
+       @p='check-src/check-41.-fwide-types.c'; \
+       b='check-src/check-41.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-41.c.log: check-src/check-41.c
+       @p='check-src/check-41.c'; \
+       b='check-src/check-41.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-42.c.log: check-src/check-42.c
+       @p='check-src/check-42.c'; \
+       b='check-src/check-42.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-43.c.log: check-src/check-43.c
+       @p='check-src/check-43.c'; \
+       b='check-src/check-43.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-44.c.log: check-src/check-44.c
+       @p='check-src/check-44.c'; \
+       b='check-src/check-44.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-46.c.log: check-src/check-46.c
+       @p='check-src/check-46.c'; \
+       b='check-src/check-46.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-48.c.log: check-src/check-48.c
+       @p='check-src/check-48.c'; \
+       b='check-src/check-48.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-50.c.log: check-src/check-50.c
+       @p='check-src/check-50.c'; \
+       b='check-src/check-50.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-59.c.log: check-src/check-59.c
+       @p='check-src/check-59.c'; \
+       b='check-src/check-59.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-60.c.log: check-src/check-60.c
+       @p='check-src/check-60.c'; \
+       b='check-src/check-60.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-62.c.log: check-src/check-62.c
+       @p='check-src/check-62.c'; \
+       b='check-src/check-62.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-65.c.log: check-src/check-65.c
+       @p='check-src/check-65.c'; \
+       b='check-src/check-65.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-70.-fwide-types.c.log: check-src/check-70.-fwide-types.c
+       @p='check-src/check-70.-fwide-types.c'; \
+       b='check-src/check-70.-fwide-types.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-70.c.log: check-src/check-70.c
+       @p='check-src/check-70.c'; \
+       b='check-src/check-70.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-72.-fcompound-names.c.log: check-src/check-72.-fcompound-names.c
+       @p='check-src/check-72.-fcompound-names.c'; \
+       b='check-src/check-72.-fcompound-names.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-73.c.log: check-src/check-73.c
+       @p='check-src/check-73.c'; \
+       b='check-src/check-73.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-92.-findirect-choice.c.log: check-src/check-92.-findirect-choice.c
+       @p='check-src/check-92.-findirect-choice.c'; \
+       b='check-src/check-92.-findirect-choice.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-92.c.log: check-src/check-92.c
+       @p='check-src/check-92.c'; \
+       b='check-src/check-92.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check-158.-fcompound-names.c.log: check-src/check-158.-fcompound-names.c
+       @p='check-src/check-158.-fcompound-names.c'; \
+       b='check-src/check-158.-fcompound-names.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check64-134.-gen-PER.c.log: check-src/check64-134.-gen-PER.c
+       @p='check-src/check64-134.-gen-PER.c'; \
+       b='check-src/check64-134.-gen-PER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-src/check64-136.-gen-OER.c.log: check-src/check64-136.-gen-OER.c
+       @p='check-src/check64-136.-gen-OER.c'; \
+       b='check-src/check64-136.-gen-OER.c'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
+           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+           $(am__relativize); \
+           new_distdir=$$reldir; \
+           dir1=$$subdir; dir2="$(top_distdir)"; \
+           $(am__relativize); \
+           new_top_distdir=$$reldir; \
+           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+           ($(am__cd) $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$new_top_distdir" \
+               distdir="$$new_distdir" \
+               am__remove_distdir=: \
+               am__skip_length_check=: \
+               am__skip_mode_fix=: \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-TESTS check-am clean clean-generic clean-libtool \
+       clean-local cscopelist-am ctags ctags-am distclean \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+clean-local:
+       rm -rf test-*
+
+# 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:
diff --git a/tests/tests-c-compiler/README b/tests/tests-c-compiler/README
new file mode 100644 (file)
index 0000000..ec9783a
--- /dev/null
@@ -0,0 +1,9 @@
+
+The name of the check-N.c file is used as a pointer to the file
+../../tests/N-*.asn1. That ASN.1 file is compiled together with check-N.c
+in a temporary directory. The check-N.c file contains the test engine.
+
+For manual execution of a specific test case:
+
+       ./check-assembly.sh check-<NN>.c
+
diff --git a/tests/tests-c-compiler/check-assembly.sh b/tests/tests-c-compiler/check-assembly.sh
new file mode 100755 (executable)
index 0000000..68f06e3
--- /dev/null
@@ -0,0 +1,142 @@
+#!/bin/sh
+
+#
+# This script is designed to quickly create lots of files in underlying
+# test-* directories, do lots of other magic stuff and exit cleanly.
+#
+
+set -e
+
+if [ "x$1" = "x" ]; then
+       echo "Usage: $0 check-src/<check-NN.c>"
+       exit 1
+fi
+
+srcdir="${srcdir:-.}"
+abs_top_srcdir="${abs_top_srcdir:-$(pwd)/../../}"
+abs_top_builddir="${abs_top_builddir:-$(pwd)/../../}"
+
+if echo "$*" | grep -q -- -- ; then
+    TEST_DRIVER=$(echo "$*"  | sed -e 's/ -- .*/ -- /g')
+    source_full=$(echo "$*"  | sed -e 's/.* //g')
+else
+    TEST_DRIVER=""
+    source_full="$1"
+fi
+
+# Compute the .asn1 spec name by the given file name.
+source_short=$(echo "$source_full" | sed -e 's/.*\///')
+testno=$(echo "$source_short" | cut -f2 -d'-' | cut -f1 -d'.')
+
+args=$(echo "$source_short" | sed -E -e 's/\.c+$//')
+source_obj=$(echo "$source_short" | sed -E -e 's/\.c+$/.o/')
+ext=$(echo "$source_short" | sed -E -e 's/.*\.(c+)$/\1/')
+
+OFS=$IFS
+IFS="."
+set $args
+data_dir=$(echo "$1" | sed -e s/check-/data-/)
+shift
+IFS=$OFS
+AFLAGS="$*"
+
+if [ -d ${data_dir} ]; then
+    OPT_DATA_DIR="../${data_dir}"
+else
+    OPT_DATA_DIR=""
+fi
+
+if test "${LIBFUZZER_CFLAGS}" && grep LLVMFuzzer ${source_full} > /dev/null;
+then
+    MAKE_FUZZER=yes
+else
+    MAKE_FUZZER=no
+fi
+
+# Assume the test fails. Will be removed when it passes well.
+testdir=test-${args}
+if [ -f "${testdir}-FAILED" ]; then
+    rm -rf "${testdir}"
+fi
+touch "${testdir}-FAILED"
+
+mkdir -p "${testdir}"
+ln -fns "../${source_full}" "${testdir}"
+
+asn_module=$(echo "${abs_top_srcdir}/tests/tests-asn1c-compiler/${testno}"-*.asn1)
+
+AUTOGENERATED="# This file is autogenerated by $0 ${source_full} ${AFLAGS}"
+
+# Create a common Makefile for the project
+cat <<END_MAKEFILE > "${testdir}/Makefile"
+${AUTOGENERATED}
+COMMON_FLAGS= -I.
+CFLAGS = \${COMMON_FLAGS} ${CFLAGS:-} -g -O1
+CFLAGS += -DSRCDIR=../${srcdir}
+CXXFLAGS = \${CFLAGS} ${CXXFLAGS}
+LIBFUZZER_CFLAGS = ${LIBFUZZER_CFLAGS}
+LDFLAGS = ${LDFLAGS:-}
+ASAN_ENV_FLAGS = ${ASAN_ENV_FLAGS:-}
+
+ASN_PROGRAM = check-program
+ASN_PROGRAM_SRCS = ${source_short}
+
+CC ?= ${CC}
+CXX ?= ${CXX}
+
+-include converter-example.mk
+
+all: compiled-module
+       \$(MAKE) check-program
+
+# Compile the corresponding .asn1 spec.
+compiled-module: ${asn_module} ${abs_top_builddir}/asn1c/asn1c
+       ${abs_top_builddir}/asn1c/asn1c         \\
+               -S ${abs_top_srcdir}/skeletons  \\
+               -flink-skeletons                \\
+               -Wdebug-compiler                \\
+               ${AFLAGS} ${asn_module}
+       rm -f converter-example.c
+       @touch compiled-module
+
+END_MAKEFILE
+
+
+if [ "${MAKE_FUZZER}" != "yes" ]; then
+    CHECK_FUZZER="@echo \"No fuzzer defined, skipping.\""
+cat <<END_MAKEFILE >> "${testdir}/Makefile"
+.PHONY: check-fuzzer
+check-fuzzer:
+END_MAKEFILE
+else
+    CHECK_FUZZER="ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1 ./check-fuzzer -timeout=3 -max_total_time=60 -max_len=512 ${OPT_DATA_DIR}"
+cat <<END_MAKEFILE >> "${testdir}/Makefile"
+check-fuzzer: ${source_short} \$(ASN_LIBRARY)
+       ${CC} \$(CFLAGS) \$(LIBFUZZER_CFLAGS) \$(LDFLAGS) -o check-fuzzer \$^
+END_MAKEFILE
+fi
+
+cat <<END_MAKEFILE >> "${testdir}/Makefile"
+
+check-succeeded: compiled-module \$(ASN_LIBRARY) ${source_short}
+       \$(MAKE) check-program
+       \$(MAKE) check-fuzzer
+       @rm -f check-succeeded
+       \${ASAN_ENV_FLAGS} ./check-program
+       \$(MAKE) fuzz
+       @touch check-succeeded
+       @echo "OK: ${source_full}"
+
+.PHONY: fuzz
+fuzz:
+       ${CHECK_FUZZER}
+
+check: check-succeeded
+
+END_MAKEFILE
+
+# Perform building and checking
+${TEST_DRIVER} ${MAKE:-make} -C "${testdir}" check
+
+# Make sure the test is not marked as failed any longer.
+rm -f "${testdir}-FAILED"
diff --git a/tests/tests-c-compiler/check-src/Makefile b/tests/tests-c-compiler/check-src/Makefile
new file mode 100644 (file)
index 0000000..d65cbc9
--- /dev/null
@@ -0,0 +1,466 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-c-compiler/check-src/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+subdir = tests/tests-c-compiler/check-src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-c-compiler/check-src
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-c-compiler/check-src
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../../
+top_builddir = ../../..
+top_srcdir = ../../..
+EXTRA_DIST = $(srcdir)/check-*.c
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-c-compiler/check-src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-c-compiler/check-src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-c-compiler/check-src/Makefile.am b/tests/tests-c-compiler/check-src/Makefile.am
new file mode 100644 (file)
index 0000000..90023b3
--- /dev/null
@@ -0,0 +1,3 @@
+
+EXTRA_DIST = $(srcdir)/check-*.c
+
diff --git a/tests/tests-c-compiler/check-src/Makefile.in b/tests/tests-c-compiler/check-src/Makefile.in
new file mode 100644 (file)
index 0000000..132ae3d
--- /dev/null
@@ -0,0 +1,466 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+subdir = tests/tests-c-compiler/check-src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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 = $(srcdir)/check-*.c
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-c-compiler/check-src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-c-compiler/check-src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+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:
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# 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:
diff --git a/tests/tests-c-compiler/check-src/check-03.-fwide-types.c b/tests/tests-c-compiler/check-src/check-03.-fwide-types.c
new file mode 100644 (file)
index 0000000..8af08fb
--- /dev/null
@@ -0,0 +1,61 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include "Enum2.h"
+#include "xer_decoder.h"
+
+static char buf[4096];
+static int buf_offset;
+
+static int
+buf_writer(const void *buffer, size_t size, void *app_key) {
+        (void)app_key;
+        assert(buf_offset + size < sizeof(buf));
+        memcpy(buf + buf_offset, buffer, size);
+        buf_offset += size;
+        return 0;
+}
+
+static void
+check_xer(e_Enum2 eval, char *xer_string) {
+       asn_dec_rval_t rv;
+       char buf2[128];
+       Enum2_t *e = 0;
+       long val;
+
+       rv = xer_decode(0, &asn_DEF_Enum2, (void **)&e,
+               xer_string, strlen(xer_string));
+       assert(rv.code == RC_OK);
+       assert(rv.consumed == strlen(xer_string));
+
+       asn_INTEGER2long(e, &val);
+       printf("%s -> %ld == %d\n", xer_string, val, eval);
+       assert(val == eval);
+
+       buf_offset = 0;
+       xer_encode(&asn_DEF_Enum2, e, XER_F_CANONICAL, buf_writer, 0);
+       buf[buf_offset] = 0;
+       sprintf(buf2, "<Enum2>%s</Enum2>", xer_string);
+       printf("%d -> %s == %s\n", eval, buf, buf2);
+       assert(0 == strcmp(buf, buf2));
+
+       ASN_STRUCT_FREE(asn_DEF_Enum2, e);
+}
+
+int
+main() {
+
+       check_xer(Enum2_red, "<red/>");
+       check_xer(Enum2_green, "<green/>");
+       check_xer(Enum2_blue, "<blue/>");
+       check_xer(Enum2_orange, "<orange/>");
+       check_xer(Enum2_alpha, "<alpha/>");
+       check_xer(Enum2_beta, "<beta/>");
+       check_xer(Enum2_gamma, "<gamma/>");
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c b/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c
new file mode 100644 (file)
index 0000000..3cd316f
--- /dev/null
@@ -0,0 +1,377 @@
+/*
+ * Mode of operation:
+ * Each of the *.in files is XER-decoded, then converted into PER,
+ * then decoded back from PER, then encoded into XER again,
+ * and finally compared to the original encoding.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2) */
+#include <string.h>
+#include <dirent.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <PDU.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+enum expectation {
+       EXP_OK,         /* Encoding/decoding must succeed */
+       EXP_CXER_EXACT, /* Encoding/decoding using CXER must be exact */
+       EXP_CXER_DIFF,  /* Encoding/decoding using CXER must be different */
+       EXP_BROKEN,     /* Decoding must fail */
+       EXP_DIFFERENT,  /* Reconstruction will yield different encoding */
+       EXP_PER_NOCOMP, /* Not PER compatible */
+};
+
+static unsigned char buf[4096];
+static size_t buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+#ifdef ASN_EMIT_DEBUG
+       unsigned char *b, *bend;
+       b = buf + buf_offset;
+       bend = b + size;
+       fprintf(stderr, "=> [");
+       for(; b < bend; b++) {
+               if(*b >= 32 && *b < 127 && *b != '%')
+                       fprintf(stderr, "%c", *b);
+               else
+                       fprintf(stderr, "%%%02x", *b);
+       }
+       fprintf(stderr, "]:%zd\n", size);
+#endif
+       buf_offset += size;
+       return 0;
+}
+
+enum enctype {
+       AS_PER,
+       AS_DER,
+       AS_XER,
+       AS_CXER,
+};
+
+static void
+save_object_as(PDU_t *st, enum expectation exp, enum enctype how) {
+       asn_enc_rval_t rval; /* Return value */
+
+       buf_offset = 0;
+
+       /*
+        * Save object using specified method.
+        */
+       switch(how) {
+       case AS_PER:
+               rval = uper_encode(&asn_DEF_PDU, 0, st,
+                       _buf_writer, 0);
+               if(exp == EXP_PER_NOCOMP)
+                       assert(rval.encoded == -1);
+               else
+                       assert(rval.encoded > 0);
+               fprintf(stderr, "SAVED OBJECT IN SIZE %zd\n", buf_offset);
+               return;
+       case AS_DER:
+               rval = der_encode(&asn_DEF_PDU, st,
+                       _buf_writer, 0);
+               break;
+       case AS_XER:
+               rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
+                       _buf_writer, 0);
+               break;
+       case AS_CXER:
+               rval = xer_encode(&asn_DEF_PDU, st, XER_F_CANONICAL,
+                       _buf_writer, 0);
+               break;
+    default:
+        assert(!"Unreachable");
+       }
+
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return;
+       }
+
+       fprintf(stderr, "SAVED OBJECT IN SIZE %zd\n", buf_offset);
+}
+
+static PDU_t *
+load_object_from(const char *fname, enum expectation expectation, unsigned char *fbuf, size_t size, enum enctype how) {
+       asn_dec_rval_t rval;
+       PDU_t *st = 0;
+       size_t csize = 1;
+
+       if(getenv("INITIAL_CHUNK_SIZE"))
+               csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               fprintf(stderr, "LOADING OBJECT OF SIZE %zd FROM [%s] as %s,"
+                       " chunks %zd\n",
+                       size, fname, how==AS_PER?"PER":"XER", csize);
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               st = 0;
+
+               do {
+                       ASN_DEBUG("Decoding bytes %d..%d (left %d)",
+                               fbuf_offset,
+                                       fbuf_chunk < fbuf_left
+                                               ? fbuf_chunk : fbuf_left,
+                                       fbuf_left);
+#ifdef  ASN_EMIT_DEBUG
+                       if(st) {
+                               fprintf(stderr, "=== currently ===\n");
+                               asn_fprint(stderr, &asn_DEF_PDU, st);
+                               fprintf(stderr, "=== end ===\n");
+                       }
+#endif
+                       switch(how) {
+                       case AS_XER:
+                               rval = xer_decode(0, &asn_DEF_PDU, (void **)&st,
+                                       fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left);
+                               break;
+                       case AS_PER:
+                               rval = uper_decode(0, &asn_DEF_PDU,
+                                       (void **)&st, fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left, 0, 0);
+                               if(rval.code == RC_WMORE) {
+                                       rval.consumed = 0; /* Not restartable */
+                                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                                       st = 0;
+                                       ASN_DEBUG("-> PER wants more");
+                               } else {
+                                       ASN_DEBUG("-> PER ret %d/%ld",
+                                               rval.code, rval.consumed);
+                                       /* uper_decode() returns _bits_ */
+                                       rval.consumed += 7;
+                                       rval.consumed /= 8;
+                               }
+                               break;
+            case AS_DER:
+            case AS_CXER:
+                assert(!"DER or CXER not supported for load");
+            default:
+                assert(!"Unreachable");
+                       }
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               if(expectation != EXP_BROKEN) {
+                       assert(rval.code == RC_OK);
+                       if(how == AS_PER) {
+                               fprintf(stderr, "[left %d, off %d, size %zd]\n",
+                                       fbuf_left, fbuf_offset, size);
+                               assert(fbuf_offset == (ssize_t)size);
+                       } else {
+                               assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
+                                       && fbuf[size - 1] == '\n')
+                               || (fbuf_offset + 2 /* "\r\n" */  == (ssize_t)size
+                                       && fbuf[size - 2] == '\r'
+                                       && fbuf[size - 1] == '\n')
+                               );
+                       }
+               } else {
+                       assert(rval.code != RC_OK);
+                       fprintf(stderr, "Failed, but this was expected\n");
+                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                       st = 0; /* ignore leak for now */
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_PDU, st);
+       return st;
+}
+
+static int
+xer_encoding_equal(char *obuf, size_t osize, char *nbuf, size_t nsize) {
+       char *oend = obuf + osize;
+       char *nend = nbuf + nsize;
+
+       if((osize && !nsize) || (!osize && nsize))
+               return 0;       /* not equal apriori */
+
+       while(1) {
+               while(obuf < oend && isspace(*obuf)) obuf++;
+               while(nbuf < nend && isspace(*nbuf)) nbuf++;
+
+               if(obuf == oend || nbuf == nend) {
+                       if(obuf == oend && nbuf == nend)
+                               break;
+                       fprintf(stderr, "%s data in reconstructed encoding\n",
+                               (obuf == oend) ? "More" : "Less");
+                       return 0;
+               }
+
+               if(*obuf != *nbuf) {
+                       printf("%c%c != %c%c\n",
+                               obuf[0], obuf[1],
+                               nbuf[0], nbuf[1]);
+                       return 0;
+               }
+               obuf++, nbuf++;
+       }
+
+       return 1;
+}
+
+static void
+process_XER_data(const char *fname, enum expectation expectation, unsigned char *fbuf, size_t size) {
+       PDU_t *st;
+
+       st = load_object_from(fname, expectation, fbuf, size, AS_XER);
+       if(!st) return;
+
+       /* Save and re-load as PER */
+       save_object_as(st, expectation, AS_PER);
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+       if(expectation == EXP_PER_NOCOMP)
+               return; /* Already checked */
+       st = load_object_from("buffer", expectation, buf, buf_offset, AS_PER);
+       assert(st);
+
+       save_object_as(st,
+                       expectation,
+                       (expectation == EXP_CXER_EXACT
+                       || expectation == EXP_CXER_DIFF)
+                       ? AS_CXER : AS_XER);
+       fprintf(stderr, "=== original ===\n");
+       fwrite(fbuf, 1, size, stderr);
+       fprintf(stderr, "=== re-encoded ===\n");
+       fwrite(buf, 1, buf_offset, stderr);
+       fprintf(stderr, "=== end ===\n");
+
+       switch(expectation) {
+       case EXP_DIFFERENT:
+               assert(!xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
+               break;
+       case EXP_BROKEN:
+               assert(!xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
+               break;
+       case EXP_CXER_EXACT:
+               buf[buf_offset++] = '\n';
+               assert(size == buf_offset);
+               assert(memcmp(fbuf, buf, size) == 0);
+               break;
+       case EXP_CXER_DIFF:
+               buf[buf_offset++] = '\n';
+               assert(size != buf_offset
+                       || memcmp(fbuf, buf, size));
+               break;
+       case EXP_OK:
+       case EXP_PER_NOCOMP:
+               assert(xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
+               break;
+       }
+
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       unsigned char fbuf[4096];
+       char *ext = strrchr(fname, '.');
+       enum expectation expectation;
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".in"))
+               return 0;
+
+       switch(ext[-1]) {
+       case 'B':       /* The file is intentionally broken */
+               expectation = EXP_BROKEN; break;
+       case 'D':       /* Reconstructing should yield different data */
+               expectation = EXP_DIFFERENT; break;
+       case 'E':       /* Byte to byte exact reconstruction */
+               expectation = EXP_CXER_EXACT; break;
+       case 'X':       /* Should fail byte-to-byte comparison */
+               expectation = EXP_CXER_DIFF; break;
+       case 'P':       /* Incompatible with PER */
+               expectation = EXP_PER_NOCOMP; break;
+       default:
+               expectation = EXP_OK; break;
+       }
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       snprintf((char *)fbuf, sizeof(fbuf), SRCDIR_S "/data-119/%s", fname);
+       fp = fopen((char *)fbuf, "r");
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert(rd < (ssize_t)sizeof(fbuf));     /* expect small files */
+
+       process_XER_data(fname, expectation, fbuf, rd);
+
+       fprintf(stderr, "Finished [%s]\n", fname);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       /* Process a specific test file */
+       str = getenv("DATA_119_FILE");
+       if(str && strncmp(str, "data-119-", 9) == 0) {
+               process(str);
+               return 0;
+       }
+
+       dir = opendir(SRCDIR_S "/data-119");
+       assert(dir);
+
+       /*
+        * Process each file in that directory.
+        */
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-119-", 9) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-119.-gen-PER.c b/tests/tests-c-compiler/check-src/check-119.-gen-PER.c
new file mode 100644 (file)
index 0000000..028183d
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * Mode of operation:
+ * Each of the *.in files is XER-decoded, then converted into PER,
+ * then decoded back from PER, then encoded into XER again,
+ * and finally compared to the original encoding.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2) */
+#include <string.h>
+#include <dirent.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <PDU.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+enum expectation {
+       EXP_OK,         /* Encoding/decoding must succeed */
+       EXP_CXER_EXACT, /* Encoding/decoding using CXER must be exact */
+       EXP_CXER_DIFF,  /* Encoding/decoding using CXER must be different */
+       EXP_BROKEN,     /* Decoding must fail */
+       EXP_DIFFERENT,  /* Reconstruction will yield different encoding */
+       EXP_PER_NOCOMP, /* Not PER compatible */
+};
+
+static unsigned char buf[4096];
+static size_t buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+#ifdef ASN_EMIT_DEBUG
+       unsigned char *b, *bend;
+       b = buf + buf_offset;
+       bend = b + size;
+       fprintf(stderr, "=> [");
+       for(; b < bend; b++) {
+               if(*b >= 32 && *b < 127 && *b != '%')
+                       fprintf(stderr, "%c", *b);
+               else
+                       fprintf(stderr, "%%%02x", *b);
+       }
+       fprintf(stderr, "]:%zd\n", size);
+#endif
+       buf_offset += size;
+       return 0;
+}
+
+enum enctype {
+       AS_PER,
+       AS_DER,
+       AS_XER,
+       AS_CXER,
+};
+
+static void
+save_object_as(PDU_t *st, enum expectation exp, enum enctype how) {
+       asn_enc_rval_t rval; /* Return value */
+
+       buf_offset = 0;
+
+       /*
+        * Save object using specified method.
+        */
+       switch(how) {
+       case AS_PER:
+               rval = uper_encode(&asn_DEF_PDU, 0, st,
+                       _buf_writer, 0);
+               if(exp == EXP_PER_NOCOMP)
+                       assert(rval.encoded == -1);
+               else
+                       assert(rval.encoded > 0);
+               fprintf(stderr, "SAVED OBJECT IN SIZE %zd\n", buf_offset);
+               return;
+       case AS_DER:
+               rval = der_encode(&asn_DEF_PDU, st,
+                       _buf_writer, 0);
+               break;
+       case AS_XER:
+               rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
+                       _buf_writer, 0);
+               break;
+       case AS_CXER:
+               rval = xer_encode(&asn_DEF_PDU, st, XER_F_CANONICAL,
+                       _buf_writer, 0);
+               break;
+    default:
+        assert(!"Unreachable");
+       }
+
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return;
+       }
+
+       fprintf(stderr, "SAVED OBJECT IN SIZE %zd\n", buf_offset);
+}
+
+static PDU_t *
+load_object_from(const char *fname, enum expectation expectation, unsigned char *fbuf, size_t size, enum enctype how) {
+       asn_dec_rval_t rval;
+       PDU_t *st = 0;
+       size_t csize = 1;
+
+       if(getenv("INITIAL_CHUNK_SIZE"))
+               csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               fprintf(stderr, "LOADING OBJECT OF SIZE %zd FROM [%s] as %s,"
+                       " chunks %zd\n",
+                       size, fname, how==AS_PER?"PER":"XER", csize);
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               st = 0;
+
+               do {
+                       ASN_DEBUG("Decoding bytes %d..%d (left %d)",
+                               fbuf_offset,
+                                       fbuf_chunk < fbuf_left
+                                               ? fbuf_chunk : fbuf_left,
+                                       fbuf_left);
+#ifdef  ASN_EMIT_DEBUG
+                       if(st) {
+                               fprintf(stderr, "=== currently ===\n");
+                               asn_fprint(stderr, &asn_DEF_PDU, st);
+                               fprintf(stderr, "=== end ===\n");
+                       }
+#endif
+                       switch(how) {
+                       case AS_XER:
+                               rval = xer_decode(0, &asn_DEF_PDU, (void **)&st,
+                                       fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left);
+                               break;
+                       case AS_PER:
+                               rval = uper_decode(0, &asn_DEF_PDU,
+                                       (void **)&st, fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left, 0, 0);
+                               if(rval.code == RC_WMORE) {
+                                       rval.consumed = 0; /* Not restartable */
+                                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                                       st = 0;
+                                       ASN_DEBUG("-> PER wants more");
+                               } else {
+                                       ASN_DEBUG("-> PER ret %d/%zd",
+                                               rval.code, rval.consumed);
+                                       /* uper_decode() returns _bits_ */
+                                       rval.consumed += 7;
+                                       rval.consumed /= 8;
+                               }
+                               break;
+            case AS_DER:
+            case AS_CXER:
+                assert(!"Unexpected DER or CXER load request");
+            default:
+                assert(!"Unreachable");
+                       }
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               if(expectation != EXP_BROKEN) {
+                       assert(rval.code == RC_OK);
+                       if(how == AS_PER) {
+                               fprintf(stderr, "[left %d, off %d, size %zd]\n",
+                                       fbuf_left, fbuf_offset, size);
+                               assert(fbuf_offset == (ssize_t)size);
+                       } else {
+                               assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
+                                       && fbuf[size - 1] == '\n')
+                               || (fbuf_offset + 2 /* "\r\n" */  == (ssize_t)size
+                                       && fbuf[size - 2] == '\r'
+                                       && fbuf[size - 1] == '\n')
+                               );
+                       }
+               } else {
+                       assert(rval.code != RC_OK);
+                       fprintf(stderr, "Failed, but this was expected\n");
+                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                       st = 0; /* ignore leak for now */
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_PDU, st);
+       return st;
+}
+
+static int
+xer_encoding_equal(void *obufp, size_t osize, void *nbufp, size_t nsize) {
+    char *obuf = obufp;
+    char *nbuf = nbufp;
+       char *oend = obuf + osize;
+       char *nend = nbuf + nsize;
+
+       if((osize && !nsize) || (!osize && nsize))
+               return 0;       /* not equal apriori */
+
+       while(1) {
+               while(obuf < oend && isspace(*obuf)) obuf++;
+               while(nbuf < nend && isspace(*nbuf)) nbuf++;
+
+               if(obuf == oend || nbuf == nend) {
+                       if(obuf == oend && nbuf == nend)
+                               break;
+                       fprintf(stderr, "%s data in reconstructed encoding\n",
+                               (obuf == oend) ? "More" : "Less");
+                       return 0;
+               }
+
+               if(*obuf != *nbuf) {
+                       printf("%c%c != %c%c\n",
+                               obuf[0], obuf[1],
+                               nbuf[0], nbuf[1]);
+                       return 0;
+               }
+               obuf++, nbuf++;
+       }
+
+       return 1;
+}
+
+static void
+process_XER_data(const char *fname, enum expectation expectation, unsigned char *fbuf, ssize_t size) {
+       PDU_t *st;
+
+       st = load_object_from(fname, expectation, fbuf, size, AS_XER);
+       if(!st) return;
+
+       /* Save and re-load as PER */
+       save_object_as(st, expectation, AS_PER);
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+
+       if(expectation == EXP_PER_NOCOMP)
+               return; /* Already checked */
+       st = load_object_from("buffer", expectation, buf, buf_offset, AS_PER);
+       assert(st);
+
+       save_object_as(st,
+                       expectation,
+                       (expectation == EXP_CXER_EXACT
+                       || expectation == EXP_CXER_DIFF)
+                       ? AS_CXER : AS_XER);
+       fprintf(stderr, "=== original ===\n");
+       fwrite(fbuf, 1, size, stderr);
+       fprintf(stderr, "=== re-encoded ===\n");
+       fwrite(buf, 1, buf_offset, stderr);
+       fprintf(stderr, "=== end ===\n");
+
+       switch(expectation) {
+       case EXP_DIFFERENT:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_BROKEN:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_CXER_EXACT:
+               buf[buf_offset++] = '\n';
+               assert((ssize_t)size == (ssize_t)buf_offset);
+               assert(memcmp(fbuf, buf, size) == 0);
+               break;
+       case EXP_CXER_DIFF:
+               buf[buf_offset++] = '\n';
+               assert((ssize_t)size != (ssize_t)buf_offset
+                       || memcmp(fbuf, buf, size));
+               break;
+       case EXP_OK:
+       case EXP_PER_NOCOMP:
+               assert(xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       }
+
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       unsigned char fbuf[4096];
+       char *ext = strrchr(fname, '.');
+       enum expectation expectation;
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".in"))
+               return 0;
+
+       switch(ext[-1]) {
+       case 'B':       /* The file is intentionally broken */
+               expectation = EXP_BROKEN; break;
+       case 'D':       /* Reconstructing should yield different data */
+               expectation = EXP_DIFFERENT; break;
+       case 'E':       /* Byte to byte exact reconstruction */
+               expectation = EXP_CXER_EXACT; break;
+       case 'X':       /* Should fail byte-to-byte comparison */
+               expectation = EXP_CXER_DIFF; break;
+       case 'P':       /* Incompatible with PER */
+               expectation = EXP_PER_NOCOMP; break;
+       default:
+               expectation = EXP_OK; break;
+       }
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       snprintf((char *)fbuf, sizeof(fbuf), SRCDIR_S "/data-119/%s", fname);
+       fp = fopen((char *)fbuf, "r");
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert(rd < (ssize_t)sizeof(fbuf));     /* expect small files */
+
+       process_XER_data(fname, expectation, fbuf, rd);
+
+       fprintf(stderr, "Finished [%s]\n", fname);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       /* Process a specific test file */
+       str = getenv("DATA_119_FILE");
+       if(str && strncmp(str, "data-119-", 9) == 0) {
+               process(str);
+               return 0;
+       }
+
+       dir = opendir(SRCDIR_S "/data-119");
+       assert(dir);
+
+       /*
+        * Process each file in that directory.
+        */
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-119-", 9) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-126.-gen-PER.c b/tests/tests-c-compiler/check-src/check-126.-gen-PER.c
new file mode 100644 (file)
index 0000000..299bca4
--- /dev/null
@@ -0,0 +1,384 @@
+/*
+ * Mode of operation:
+ * Each of the *.in files is XER-decoded, then converted into PER,
+ * compared with *.out file, then decoded and compared with the original.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2) */
+#include <string.h>
+#include <dirent.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <PDU.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+#ifdef ASN_EMIT_DEBUG
+       unsigned char *b, *bend;
+       b = buf + buf_offset;
+       bend = b + size;
+       fprintf(stderr, "=> [");
+       for(; b < bend; b++) {
+               if(*b >= 32 && *b < 127 && *b != '%')
+                       fprintf(stderr, "%c", *b);
+               else
+                       fprintf(stderr, "%%%02x", *b);
+       }
+       fprintf(stderr, "]:%zd\n", size);
+#endif
+       buf_offset += size;
+       return 0;
+}
+
+enum enctype {
+       AS_PER,
+       AS_DER,
+       AS_XER,
+};
+
+static void
+save_object_as(PDU_t *st, enum enctype how) {
+       asn_enc_rval_t rval; /* Return value */
+
+       buf_offset = 0;
+
+       /*
+        * Save object using specified method.
+        */
+       switch(how) {
+       case AS_PER:
+               rval = uper_encode(&asn_DEF_PDU, 0, st, _buf_writer, 0);
+               assert(rval.encoded > 0);
+               fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+               return;
+       case AS_DER:
+               rval = der_encode(&asn_DEF_PDU, st,
+                       _buf_writer, 0);
+               break;
+       case AS_XER:
+               rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
+                       _buf_writer, 0);
+               break;
+    default:
+        assert(!"Unreachable");
+       }
+
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return;
+       }
+
+       fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+}
+
+static PDU_t *
+load_object_from(const char *fname, unsigned char *fbuf, size_t size, enum enctype how, int mustfail) {
+       asn_dec_rval_t rval;
+       PDU_t *st = 0;
+       ssize_t csize = 1;
+
+       if(getenv("INITIAL_CHUNK_SIZE"))
+               csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               fprintf(stderr, "LOADING OBJECT OF SIZE %zd FROM [%s] as %s,"
+                       " chunks %zd\n",
+                       size, fname, how==AS_PER?"PER":"XER", csize);
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               st = 0;
+
+               do {
+                       ASN_DEBUG("\nDecoding bytes %d..%d (left %d) [%s]",
+                               fbuf_offset,
+                                       fbuf_chunk < fbuf_left
+                                               ? fbuf_chunk : fbuf_left,
+                                       fbuf_left,
+                               fname);
+#ifdef  ASN_EMIT_DEBUG
+                       if(st) {
+                               fprintf(stderr, "=== currently ===\n");
+                               asn_fprint(stderr, &asn_DEF_PDU, st);
+                               fprintf(stderr, "=== end ===\n");
+                       }
+#endif
+                       switch(how) {
+                       case AS_XER:
+                               rval = xer_decode(0, &asn_DEF_PDU, (void **)&st,
+                                       fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left);
+                               break;
+                       case AS_DER:
+                               assert(0);
+                               break;
+                       case AS_PER:
+                               rval = uper_decode(0, &asn_DEF_PDU,
+                                       (void **)&st, fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left, 0, 0);
+                               if(rval.code == RC_WMORE) {
+                                       if(fbuf_chunk == fbuf_left) {
+                                               fprintf(stderr, "-> PER decode error (%zd bits of %zd bytes (c=%d,l=%d)) \n", rval.consumed, size, fbuf_chunk, fbuf_left);
+                                               rval.code = RC_FAIL;
+                                               rval.consumed += 7;
+                                               rval.consumed /= 8;
+                                               if(mustfail) {
+                                                       fprintf(stderr, "-> (this was expected failure)\n");
+                                                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                                                       return 0;
+                                               }
+                                       } else {
+                                               rval.consumed = 0; /* Not restartable */
+                                               ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                                               st = 0;
+                                               ASN_DEBUG("-> PER wants more");
+                                       }
+                               } else {
+                                       ASN_DEBUG("-> PER ret %d/%zd mf=%d",
+                                               rval.code, rval.consumed, mustfail);
+                                       /* uper_decode() returns _bits_ */
+                                       rval.consumed += 7;
+                                       rval.consumed /= 8;
+                                       if((mustfail?1:0) == (rval.code == RC_FAIL)) {
+                                               if(mustfail) {
+                                                       fprintf(stderr, "-> (this was expected failure)\n");
+                                                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                                                       return 0;
+                                               }
+                                       } else {
+                                               fprintf(stderr, "-> (unexpected %s)\n", mustfail ? "success" : "failure");
+                                               rval.code = RC_FAIL;
+                                       }
+                               }
+                               break;
+            default:
+                assert(!"Unreachable");
+                       }
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               assert(rval.code == RC_OK);
+               if(how == AS_PER) {
+                       fprintf(stderr, "[left %d, off %d, size %zd]\n",
+                               fbuf_left, fbuf_offset, size);
+                       assert(fbuf_offset == (ssize_t)size);
+               } else {
+                       assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
+                               && fbuf[size - 1] == '\n')
+                       || (fbuf_offset + 2 /* "\r\n" */  == (ssize_t)size
+                               && fbuf[size - 2] == '\r'
+                               && fbuf[size - 1] == '\n')
+                       );
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_PDU, st);
+       return st;
+}
+
+static int
+xer_encoding_equal(void *obufp, size_t osize, void *nbufp, size_t nsize) {
+    char *obuf = obufp;
+    char *nbuf = nbufp;
+       char *oend = obuf + osize;
+       char *nend = nbuf + nsize;
+
+       if((osize && !nsize) || (!osize && nsize))
+               return 0;       /* not equal apriori */
+
+       while(1) {
+               while(obuf < oend && isspace(*obuf)) obuf++;
+               while(nbuf < nend && isspace(*nbuf)) nbuf++;
+
+               if(obuf == oend || nbuf == nend) {
+                       if(obuf == oend && nbuf == nend)
+                               break;
+                       fprintf(stderr, "%s data in reconstructed encoding\n",
+                               (obuf == oend) ? "More" : "Less");
+                       return 0;
+               }
+
+               if(*obuf != *nbuf) {
+                       printf("%c%c != %c%c\n",
+                               obuf[0], obuf[1],
+                               nbuf[0], nbuf[1]);
+                       return 0;
+               }
+               obuf++, nbuf++;
+       }
+
+       return 1;
+}
+
+static void
+compare_with_data_out(const char *fname, void *datap, size_t size) {
+    char *data = datap;
+       char outName[sizeof(SRCDIR_S) + 256];
+       unsigned char fbuf[1024];
+       size_t rd;
+       FILE *f;
+       char lastChar;
+       int mustfail, compare;
+       PDU_t *st;
+
+       sprintf(outName, SRCDIR_S "/data-126/%s", fname);
+       strcpy(outName + strlen(outName) - 3, ".out");
+
+       fprintf(stderr, "Comparing PER output with [%s]\n", outName);
+
+       lastChar = outName[strlen(outName)-5];
+       mustfail = lastChar == 'P';
+       compare = lastChar != 'C';
+
+       if((compare && !mustfail) && getenv("REGENERATE")) {
+               f = fopen(outName, "w");
+               fwrite(data, 1, size, f);
+               fclose(f);
+       } else {
+               f = fopen(outName, "r");
+               assert(f);
+               rd = fread(fbuf, 1, sizeof(fbuf), f);
+               assert(rd);
+               fclose(f);
+
+               fprintf(stderr, "Trying to decode [%s]\n", outName);
+               st = load_object_from(outName, fbuf, rd, AS_PER, mustfail);
+               ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               if(mustfail) return;
+
+               if(compare) {
+                       assert(rd == (size_t)size);
+                       assert(memcmp(fbuf, data, rd) == 0);
+                       fprintf(stderr, "XER->PER recoding .in->.out match.\n");
+               } else {
+                       assert(rd != (size_t)size || memcmp(fbuf, data, rd));
+                       fprintf(stderr, "XER->PER recoding .in->.out diverge.\n");
+               }
+       }
+}
+
+static void
+process_XER_data(const char *fname, unsigned char *fbuf, size_t size) {
+       PDU_t *st;
+
+       st = load_object_from(fname, fbuf, size, AS_XER, 0);
+       if(!st) return;
+
+       /* Save and re-load as PER */
+       save_object_as(st, AS_PER);
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+       compare_with_data_out(fname, buf, buf_offset);
+       st = load_object_from("buffer", buf, buf_offset, AS_PER, 0);
+       assert(st);
+
+       save_object_as(st, AS_XER);
+       fprintf(stderr, "=== original ===\n");
+       fwrite(fbuf, 1, size, stderr);
+       fprintf(stderr, "=== re-encoded ===\n");
+       fwrite(buf, 1, buf_offset, stderr);
+       fprintf(stderr, "=== end ===\n");
+
+       if(fname[strlen(fname) - 4] == 'X')
+               assert(!xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
+       else
+               assert(xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
+
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       unsigned char fbuf[sizeof(SRCDIR_S) + 4096];
+       char *ext = strrchr(fname, '.');
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".in"))
+               return 0;
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       snprintf((char *)fbuf, sizeof(fbuf), SRCDIR_S "/data-126/%s", fname);
+       fp = fopen((char *)fbuf, "r");
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert((size_t)rd < sizeof(fbuf));      /* expect small files */
+
+       process_XER_data(fname, fbuf, rd);
+
+       fprintf(stderr, "Finished [%s]\n", fname);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       /* Process a specific test file */
+       str = getenv("DATA_126_FILE");
+       if(str && strncmp(str, "data-126-", 9) == 0) {
+               process(str);
+               return 0;
+       }
+
+       dir = opendir(SRCDIR_S "/data-126");
+       assert(dir);
+
+       /*
+        * Process each file in that directory.
+        */
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-126-", 9) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-127.-gen-PER.c b/tests/tests-c-compiler/check-src/check-127.-gen-PER.c
new file mode 100644 (file)
index 0000000..eca680b
--- /dev/null
@@ -0,0 +1,89 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+static void
+verify(int testNo, T_t *ti) {
+       asn_enc_rval_t er;
+       asn_dec_rval_t rv;
+       unsigned char buf[16];
+       T_t *to = 0;
+
+       fprintf(stderr, "%d IN: { %ld, %ld, %lu, %lu }\n", testNo,
+               ti->small32range, ti->full32range,
+               ti->unsigned32, ti->unsplit32);
+
+       er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
+       assert(er.encoded == 8 * sizeof(buf));
+
+       rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0);
+       assert(rv.code == RC_OK);
+
+       fprintf(stderr, "%d ENC: %2x%2x%2x%2x %2x%2x%2x%2x\n", testNo,
+               buf[0], buf[1], buf[2], buf[3],
+               buf[4], buf[5], buf[6], buf[7]);
+       fprintf(stderr, "%d OUT: { %ld, %ld, %lu, %lu } vs { %ld, %ld, %lu, %lu }\n",
+               testNo,
+               ti->small32range, ti->full32range,
+                       ti->unsigned32, ti->unsplit32,
+               to->small32range, to->full32range,
+                       to->unsigned32, to->unsplit32);
+       assert(ti->small32range == to->small32range);
+       assert(ti->full32range == to->full32range);
+       assert(ti->unsigned32 == to->unsigned32);
+       assert(ti->unsplit32 == to->unsplit32);
+
+       xer_fprint(stderr, &asn_DEF_T, ti);
+       xer_fprint(stderr, &asn_DEF_T, to);
+
+       ASN_STRUCT_FREE(asn_DEF_T, to);
+}
+
+int main() {
+       T_t ti;
+
+       ti.small32range = 0;
+       ti.full32range = 0;
+       ti.unsigned32 = 0;
+       ti.unsplit32 = 5;
+       verify(1, &ti);
+
+       ti.small32range = -1;
+       ti.full32range = -1;
+       ti.unsigned32 = 1;
+       ti.unsplit32 = 300;
+       verify(2, &ti);
+
+       ti.small32range = -2000000000;
+       ti.full32range = (-2147483647L - 1);
+       ti.unsigned32 = 4000000000;
+       ti.unsplit32 = 500;
+       verify(3, &ti);
+
+       ti.small32range = -1999999999;
+       ti.full32range = (-2147483647L);
+       ti.unsigned32 = 4294967295UL;
+       ti.unsplit32 = 600;
+       verify(4, &ti);
+
+       ti.small32range = 2000000000;
+       ti.full32range = 2147483647;
+       ti.unsigned32 = 4294967295UL - 100;
+       ti.unsplit32 = 4294967290UL;
+       verify(5, &ti);
+
+       ti.small32range = 1999999999;
+       ti.full32range = 2147483647 - 1;
+       ti.unsigned32 = 4294967295UL - 1;
+       ti.unsplit32 = 4294967290UL - 1;
+       verify(6, &ti);
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-131.-gen-PER.c b/tests/tests-c-compiler/check-src/check-131.-gen-PER.c
new file mode 100644 (file)
index 0000000..0b8fcd6
--- /dev/null
@@ -0,0 +1,60 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include "T.h"
+#include "per_opentype.h"
+
+int
+main() {
+       asn_per_data_t pd;
+       asn_per_outp_t po;
+       asn_dec_rval_t rv;
+       T_t t;
+       T_t *t2 = 0;
+       size_t i;
+
+       memset(&po, 0, sizeof po);
+       po.buffer = po.tmpspace;
+       po.nbits = sizeof(po.tmpspace) * 8;
+
+       memset(&t, 0, sizeof t);
+
+       printf("Checking uper_open_type_put():\n");
+       assert(0 == uper_open_type_put(&asn_DEF_T, 0, &t, &po));
+       assert(po.nbits == (-1 + (int)sizeof(po.tmpspace)) * 8);
+       printf("po{nboff=%zd; nbits=%zd; buffer=%p; tmpspace=%p}\n",
+               po.nboff, po.nbits, po.buffer, po.tmpspace);
+       /* One byte length and one byte 0x00 */
+       assert(    (po.nboff == 8 && po.buffer == &po.tmpspace[1])
+               || (po.nboff == 0 && po.buffer == &po.tmpspace[2]));
+       assert(po.tmpspace[0] == 0x01);
+       assert(po.tmpspace[1] == 0x00);
+
+       printf("\nChecking uper_open_type_get():\n");
+       for(i = 0; i < 16; i++) {
+               FREEMEM(t2); t2 = 0;
+               memset(&pd, 0, sizeof pd);
+               pd.buffer = po.tmpspace;
+               pd.nboff = 0;
+               pd.nbits = i;
+               rv = uper_open_type_get(0, &asn_DEF_T, 0, (void **)&t2, &pd);
+               assert(rv.code == RC_WMORE);
+       }
+
+       memset(&pd, 0, sizeof pd);
+       pd.buffer = po.tmpspace;
+       pd.nboff = 0;
+       pd.nbits = 16;
+       rv = uper_open_type_get(0, &asn_DEF_T, 0, (void **)&t2, &pd);
+       assert(rv.code == RC_OK);
+       assert(    (pd.nboff == 8 && pd.buffer == &po.tmpspace[1])
+               || (pd.nboff == 16 && pd.buffer == &po.tmpspace[0]));
+       assert(pd.nboff + pd.nbits == 16);
+
+       ASN_STRUCT_FREE(asn_DEF_T, t2);
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-132.-gen-PER.c b/tests/tests-c-compiler/check-src/check-132.-gen-PER.c
new file mode 100644 (file)
index 0000000..893b162
--- /dev/null
@@ -0,0 +1,64 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+static void
+verify(int testNo, T_t *ti) {
+       asn_enc_rval_t er;
+       asn_dec_rval_t rv;
+       unsigned char buf[2];
+       T_t *to = 0;
+
+       er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
+       fprintf(stderr, "%d IN: %d => %zd\n", testNo, ti->present, er.encoded);
+       assert(er.encoded >= 1 && er.encoded <= (ssize_t)(8 * sizeof(buf)));
+
+       rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0);
+       assert(rv.code == RC_OK);
+
+       fprintf(stderr, "%d ENC: %2x%2x\n", testNo,
+               buf[0], buf[1]);
+       fprintf(stderr, "%d OUT: %d\n", testNo, ti->present);
+       assert(ti->present == to->present);
+       if(ti->present == T_PR_second) {
+               assert(ti->choice.second == to->choice.second);
+       } else {
+               assert(ti->choice.first.present == to->choice.first.present);
+               assert(ti->choice.first.choice.nothing == to->choice.first.choice.nothing);
+       }
+
+       xer_fprint(stderr, &asn_DEF_T, ti);
+       xer_fprint(stderr, &asn_DEF_T, to);
+
+       ASN_STRUCT_FREE(asn_DEF_T, to);
+}
+
+int main() {
+       T_t t;
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_first;
+       t.choice.first.present = first_PR_nothing;
+       t.choice.first.choice.nothing = 5;
+       verify(0, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_first;
+       t.choice.first.present = first_PR_nothing;
+       t.choice.first.choice.nothing = 6;
+       verify(1, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_second;
+       t.choice.second = 7;
+       verify(2, &t);
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-133.-gen-PER.c b/tests/tests-c-compiler/check-src/check-133.-gen-PER.c
new file mode 100644 (file)
index 0000000..f7a770e
--- /dev/null
@@ -0,0 +1,83 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+static void
+verify(int testNo, T_t *ti) {
+       asn_enc_rval_t er;
+       asn_dec_rval_t rv;
+       unsigned char buf[8];
+       T_t *to = 0;
+
+       er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
+       fprintf(stderr, "%d IN: %d => %zd\n", testNo, ti->present, er.encoded);
+       assert(er.encoded >= 1);
+       assert(er.encoded <= (ssize_t)(8 * sizeof(buf)));
+
+       rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0);
+       assert(rv.code == RC_OK);
+
+       fprintf(stderr, "%d ENC: %2x%2x\n", testNo,
+               buf[0], buf[1]);
+       fprintf(stderr, "%d OUT: %d\n", testNo, ti->present);
+       assert(ti->present == to->present);
+       switch(ti->present) {
+       case T_PR_NOTHING:
+               assert(ti->present != T_PR_NOTHING);
+               break;
+       case T_PR_first:
+               assert(ti->choice.first.present == to->choice.first.present);
+               assert(ti->choice.first.choice.nothing == to->choice.first.choice.nothing);
+               break;
+       case T_PR_second:
+               assert(ti->choice.second == to->choice.second);
+               break;
+       case T_PR_third:
+               assert(ti->choice.third == to->choice.third);
+               break;
+       }
+
+       xer_fprint(stderr, &asn_DEF_T, ti);
+       xer_fprint(stderr, &asn_DEF_T, to);
+}
+
+int main() {
+       T_t t;
+
+       return 0;       // this test fails, but not important atm.
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_first;
+       t.choice.first.present = first_PR_nothing;
+       t.choice.first.choice.nothing = 5;
+       verify(0, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_second;
+       t.choice.second = -5;
+       verify(1, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_second;
+       t.choice.second = 10;
+       verify(2, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_third;
+       t.choice.third = -10;
+       verify(3, &t);
+
+       memset(&t, 0, sizeof(t));
+       t.present = T_PR_third;
+       t.choice.third = 4097;
+       verify(4, &t);
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-135.-gen-OER.c b/tests/tests-c-compiler/check-src/check-135.-gen-OER.c
new file mode 100644 (file)
index 0000000..9060a6b
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Verify OER with constrained INTEGER code gen.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+int main() {
+    uint8_t tmpbuf[128];
+    T_t source;
+    T_t *decoded = 0; /* "= 0" is important */
+
+    memset(&source, 0, sizeof(source));
+
+    asn_enc_rval_t er =
+        oer_encode_to_buffer(&asn_DEF_T, 0, &source, tmpbuf, sizeof(tmpbuf));
+    assert(er.encoded != -1);
+
+    asn_dec_rval_t dr =
+        oer_decode(0, &asn_DEF_T, (void **)&decoded, tmpbuf, er.encoded);
+
+    assert(dr.code == RC_OK);
+    if((ssize_t)dr.consumed != er.encoded) {
+        ASN_DEBUG("Consumed %zu, expected %zu", dr.consumed, er.encoded);
+        assert((ssize_t)dr.consumed == er.encoded);
+    }
+
+    if(XEQ_SUCCESS != xer_equivalent(&asn_DEF_T, &source, decoded, stderr)) {
+        return 1;
+    }
+
+    ASN_STRUCT_RESET(asn_DEF_T, &source);
+    ASN_STRUCT_FREE(asn_DEF_T, decoded);
+    return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-137.-gen-OER.c b/tests/tests-c-compiler/check-src/check-137.-gen-OER.c
new file mode 100644 (file)
index 0000000..b21b0c5
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Verify OER with constrained and unconstrained strings.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+int main() {
+    uint8_t tmpbuf[128];
+    T_t source;
+    T_t *decoded = 0; /* "= 0" is important */
+
+    memset(&source, 0, sizeof(source));
+
+    OCTET_STRING_fromBuf(&source.unconstrained.unc_ia5, "foo", 3);
+    OCTET_STRING_fromBuf(&source.unconstrained.unc_utf8, "bar-whatever", 12);
+    OCTET_STRING_fromBuf(&source.unconstrained.unc_universal,
+                         "\0\0\0b\0\0\0a\0\0\0z", 12);
+
+    OCTET_STRING_fromBuf(&source.constrained.con_ia5, "ab", 2);
+    OCTET_STRING_fromBuf(&source.constrained.con_utf8, "cd-whatever", 11);
+    OCTET_STRING_fromBuf(&source.constrained.con_universal, "\0\0\0e\0\0\0f",
+                         8);
+
+    asn_enc_rval_t er =
+        oer_encode_to_buffer(&asn_DEF_T, 0, &source, tmpbuf, sizeof(tmpbuf));
+    assert(er.encoded != -1);
+
+    asn_dec_rval_t dr =
+        oer_decode(0, &asn_DEF_T, (void **)&decoded, tmpbuf, er.encoded);
+
+    assert(dr.code == RC_OK);
+    if(dr.consumed != er.encoded) {
+        ASN_DEBUG("Consumed %zu, expected %zu", dr.consumed, er.encoded);
+        assert(dr.consumed == er.encoded);
+    }
+
+    if(XEQ_SUCCESS != xer_equivalent(&asn_DEF_T, &source, decoded, stderr)) {
+        return 1;
+    }
+
+    return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-148.c b/tests/tests-c-compiler/check-src/check-148.c
new file mode 100644 (file)
index 0000000..c6ba07a
--- /dev/null
@@ -0,0 +1,174 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <DefaultSequence.h>
+#include <DefaultSet.h>
+
+uint8_t berSeq1[] = {
+  32 | 16, /* [UNIVERSAL 16], constructed */
+  6, /* L */
+  /* aBool BOOLEAN */
+  ((2 << 6) + 0), /* [0], primitive */
+  1, /* L */
+  0, /* FALSE */
+  /* anInteger INTEGER */
+  ((2 << 6) + 1), /* [1], primitive */
+  1, /* L */
+  1
+};
+
+uint8_t derSeq1[] = {
+  32 | 16, /* [UNIVERSAL 16], constructed */
+  3, /* L */
+  /* anInteger INTEGER */
+  ((2 << 6) + 1), /* [1], primitive */
+  1, /* L */
+  1
+};
+
+uint8_t berSeq2[] = {
+  32 | 16, /* [UNIVERSAL 16], constructed */
+  3, /* L */
+  /* aBool BOOLEAN */
+  ((2 << 6) + 0), /* [0], primitive */
+  1, /* L */
+  0 /* FALSE */
+};
+
+uint8_t derSeq2[] = {
+  32 | 16, /* [UNIVERSAL 16], constructed */
+  0 /* L */
+};
+
+uint8_t berSet1[] = {
+  32 | 17, /* [UNIVERSAL 17], constructed */
+  6, /* L */
+  /* aBool BOOLEAN */
+  ((2 << 6) + 0), /* [0], primitive */
+  1, /* L */
+  0, /* FALSE */
+  /* anInteger INTEGER */
+  ((2 << 6) + 1), /* [1], primitive */
+  1, /* L */
+  1
+};
+
+uint8_t derSet1[] = {
+  32 | 17, /* [UNIVERSAL 17], constructed */
+  3, /* L */
+  /* anInteger INTEGER */
+  ((2 << 6) + 1), /* [1], primitive */
+  1, /* L */
+  1
+};
+
+uint8_t berSet2[] = {
+  32 | 17, /* [UNIVERSAL 17], constructed */
+  3, /* L */
+  /* aBool BOOLEAN */
+  ((2 << 6) + 0), /* [0], primitive */
+  1, /* L */
+  0 /* FALSE */
+};
+
+uint8_t derSet2[] = {
+  32 | 17, /* [UNIVERSAL 17], constructed */
+  0 /* L */
+};
+
+uint8_t buf2[128];
+int buf2_pos;
+
+static int
+buf2_fill(const void *buffer, size_t size, void *app_key) {
+
+       (void)app_key;
+
+       if(buf2_pos + size > sizeof(buf2))
+               return -1;
+
+       memcpy(buf2 + buf2_pos, buffer, size);
+       buf2_pos += size;
+
+       return 0;
+}
+
+static void
+compare_encoding(asn_enc_rval_t *erval, uint8_t *expected, size_t expected_size,
+                 uint8_t *actual) {
+
+  assert(erval->encoded != -1);
+  if((size_t)erval->encoded != expected_size) {
+    printf("%d != %d\n", (int)erval->encoded, (int)expected_size);
+    assert((size_t)erval->encoded == expected_size);
+  }
+  for(size_t i = 0; i < expected_size; i++) {
+      if(expected[i] != actual[i]) {
+          fprintf(stderr, "Recreated buffer content mismatch:\n");
+          fprintf(stderr, "Byte %zu, %x != %x (%d != %d)\n", i, expected[i],
+                  actual[i], expected[i], actual[i]);
+      }
+      assert(expected[i] == actual[i]);
+  }
+}
+
+static void
+check_sequence(uint8_t *in, size_t in_size, uint8_t *expected,
+               size_t expected_size) {
+  DefaultSequence_t t, *tp;
+  void *tpp = &tp;
+  asn_dec_rval_t rval;
+  asn_enc_rval_t erval;
+
+  tp = memset(&t, 0, sizeof(t));
+
+  /* Try to decode the BER encoding. */ 
+  rval = ber_decode(0, &asn_DEF_DefaultSequence, (void**)tpp, in, in_size);
+  assert(rval.code == RC_OK);
+  assert(rval.consumed == in_size);
+
+  /* Try to re-create using DER encoding. */
+  buf2_pos = 0;
+  erval = der_encode(&asn_DEF_DefaultSequence, tp, buf2_fill, 0);
+  compare_encoding(&erval, expected, expected_size, buf2);
+
+  ASN_STRUCT_RESET(asn_DEF_DefaultSequence, tp);
+}
+
+static void
+check_set(uint8_t *in, size_t in_size, uint8_t *expected,
+          size_t expected_size) {
+  DefaultSet_t t, *tp;
+  void *tpp = &tp;
+  asn_dec_rval_t rval;
+  asn_enc_rval_t erval;
+
+  tp = memset(&t, 0, sizeof(t));
+
+  /* Try to decode the BER encoding. */ 
+  rval = ber_decode(0, &asn_DEF_DefaultSet, (void**)tpp, in, in_size);
+  assert(rval.code == RC_OK);
+  assert(rval.consumed == in_size);
+
+  /* Try to re-create using DER encoding. */
+  buf2_pos = 0;
+  erval = der_encode(&asn_DEF_DefaultSet, tp, buf2_fill, 0);
+  compare_encoding(&erval, expected, expected_size, buf2);
+  ASN_STRUCT_RESET(asn_DEF_DefaultSet, tp);
+}
+
+int
+main(int ac, char **av) {
+
+  (void)ac; /* Unused argument */
+  (void)av; /* Unused argument */
+
+  check_sequence(berSeq1, sizeof(berSeq1), derSeq1, sizeof(derSeq1));
+  check_sequence(berSeq2, sizeof(berSeq2), derSeq2, sizeof(derSeq2));
+  check_set(berSet1, sizeof(berSet1), derSet1, sizeof(derSet1));
+  check_set(berSet2, sizeof(berSet2), derSet2, sizeof(derSet2));
+}
diff --git a/tests/tests-c-compiler/check-src/check-158.-fcompound-names.c b/tests/tests-c-compiler/check-src/check-158.-fcompound-names.c
new file mode 100644 (file)
index 0000000..322742d
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Type.h>
+
+int
+main(int ac, char **av) {
+       Type_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-19.c b/tests/tests-c-compiler/check-src/check-19.c
new file mode 100644 (file)
index 0000000..bb2f7f2
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Name.h>
+
+int
+main(int ac, char **av) {
+       Name_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-22.-fwide-types.c b/tests/tests-c-compiler/check-src/check-22.-fwide-types.c
new file mode 100644 (file)
index 0000000..8fe42a4
--- /dev/null
@@ -0,0 +1,153 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T1.h>
+
+uint8_t buf1[] = {
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       12,     /* L */
+       /* INTEGER a */
+       ((2 << 6) + 0),         /* [0], primitive */
+       2,      /* L */
+  150,
+  70,
+       /* b [1] EXPLICIT CHOICE */
+       32 | ((2 << 6) + 1),    /* [1] */
+       3,      /* L */
+       ((2 << 6) + 1),         /* [1] */
+       1,
+  'i',
+       /* UTF8String c */
+       ((2 << 6) + 2),         /* [2], primitive */
+       1,      /* L */
+  'x'
+};
+
+uint8_t buf2[128];
+int buf2_pos;
+
+static int
+buf2_fill(const void *buffer, size_t size, void *app_key) {
+
+       (void)app_key;
+
+       if(buf2_pos + size > sizeof(buf2))
+               return -1;
+
+       memcpy(buf2 + buf2_pos, buffer, size);
+       buf2_pos += size;
+
+       return 0;
+}
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       T1_t t, *tp;
+       void *tpp = &tp;
+       asn_dec_rval_t rval;
+       asn_enc_rval_t erval;
+       int ret;
+       int i;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_T1, (void **)tpp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %d\n",
+               (int)rval.code, (int)rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == (size_t)consumed);
+               assert(t.a.size == 2);
+               assert(t.b.present == b_PR_n);
+               assert(t.b.choice.n.size == 1);
+               assert(t.b.choice.n.buf[0] == 'i');
+               assert(t.c.size == 1);
+               assert(t.c.buf[0] == 'x');
+
+       } else {
+               if(rval.code == RC_OK) {
+                       assert(t.a.size != 2
+                               || t.b.present != b_PR_n
+                               || t.b.choice.n.size != 1
+                               || t.c.size != 1
+                       );
+               }
+               assert(rval.consumed <= (size_t)consumed);
+               ASN_STRUCT_RESET(asn_DEF_T1, tp);
+               return;
+       }
+
+       fprintf(stderr, "=> Re-creating using DER encoder <=\n");
+
+       /*
+        * Try to re-create using DER encoding.
+        */
+       buf2_pos = 0;
+       erval = der_encode(&asn_DEF_T1, tp, buf2_fill, 0);
+       assert(erval.encoded != -1);
+       if(erval.encoded != sizeof(buf1)) {
+               printf("%d != %d\n", (int)erval.encoded, (int)sizeof(buf1));
+       }
+       assert(erval.encoded == (ssize_t)sizeof(buf1));
+       for(i = 0; i < (ssize_t)sizeof(buf1); i++) {
+               if(buf1[i] != buf2[i]) {
+                       fprintf(stderr, "Recreated buffer content mismatch:\n");
+                       fprintf(stderr, "Byte %d, %x != %x (%d != %d)\n",
+                               i,
+                               buf1[i], buf2[i],
+                               buf1[i], buf2[i]
+                       );
+               }
+               assert(buf1[i] == buf2[i]);
+       }
+
+       fprintf(stderr, "=== asn_fprint() ===\n");
+       ret = asn_fprint(stderr, &asn_DEF_T1, tp);
+       assert(ret == 0);
+       fprintf(stderr, "=== xer_fprint() ===\n");
+       ret = xer_fprint(stderr, &asn_DEF_T1, tp);
+       assert(ret == 0);
+       fprintf(stderr, "=== EOF ===\n");
+
+       ASN_STRUCT_RESET(asn_DEF_T1, tp);
+}
+
+static void
+try_corrupt(uint8_t *buf, size_t size) {
+       uint8_t tmp[size];
+
+       fprintf(stderr, "\nCorrupting...\n");
+
+       for(int i = 0; i < 1000; i++) {
+               int loc;
+               memcpy(tmp, buf, size);
+
+               /* Corrupt random _non-value_ location. */
+               do { loc = random() % size; } while(tmp[loc] >= 70);
+               do { tmp[loc] ^= random(); } while(tmp[loc] == buf[loc]);
+
+               fprintf(stderr, "\nTry %d: corrupting byte %d (%d->%d)\n",
+                       i, loc, buf[loc], tmp[loc]);
+
+               check(0, tmp, size, size);
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(1, buf1, sizeof(buf1), sizeof(buf1));
+       try_corrupt(buf1, sizeof(buf1));
+       check(1, buf1, sizeof(buf1) + 10, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-24.-fwide-types.c b/tests/tests-c-compiler/check-src/check-24.-fwide-types.c
new file mode 100644 (file)
index 0000000..a885d6c
--- /dev/null
@@ -0,0 +1,96 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf1[] = {
+       32 | ((2 << 6) + 5),    /* [5], constructed */
+       17,     /* L */
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       15,     /* L */
+       /* INTEGER a */
+       2,                      /* [UNIVERSAL 2] */
+       2,      /* L */
+  150,
+  70,
+       /* INTEGER b */
+       ((2 << 6) + 0),         /* [0] */
+       1,      /* L */
+  123,
+       /* INTEGER c */
+       ((2 << 6) + 1),         /* [1] */
+       1,      /* L */
+  123,
+       /* INTEGER d */
+       32 | ((2 << 6) + 5),    /* [5], constructed */
+       3,
+       2,
+       1,      /* L */
+  123,
+};
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+       } else {
+               if(rval.code == RC_OK) {
+                       assert(t.a.size != 2
+                               || (!t.b || t.b->size != 1)
+                               || (!t.c || t.c->size != 1)
+                               || t.d.size != 1
+                       );
+               }
+               assert(rval.consumed <= consumed);
+       }
+
+       ASN_STRUCT_RESET(asn_DEF_T, tp);
+}
+
+static void
+try_corrupt(uint8_t *buf, size_t size) {
+       uint8_t tmp[size];
+
+       fprintf(stderr, "\nCorrupting...\n");
+
+       for(int i = 0; i < 1000; i++) {
+               int loc;
+               memcpy(tmp, buf, size);
+
+               /* Corrupt random _non-value_ location. */
+               do { loc = random() % size; } while(tmp[loc] >= 70);
+               do { tmp[loc] ^= random(); } while(tmp[loc] == buf[loc]);
+
+               fprintf(stderr, "\nTry %d: corrupting byte %d (%d->%d)\n",
+                       i, loc, buf[loc], tmp[loc]);
+
+               check(0, tmp, size, size);
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(1, buf1, sizeof(buf1), sizeof(buf1));
+       try_corrupt(buf1, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-25.-fwide-types.c b/tests/tests-c-compiler/check-src/check-25.-fwide-types.c
new file mode 100644 (file)
index 0000000..fda63c3
--- /dev/null
@@ -0,0 +1,257 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf1[] = {
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       128,    /* L */
+       /* a INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       2,      /* L */
+  150,
+  70,
+       /* b [2] IMPLICIT BOOLEAN */
+       128 | 2,                /* [2] */
+       1,      /* L */
+  0xff,
+       /* c NULL */
+       5,                      /* [UNIVERSAL 5] */
+       0,      /* L */
+       /* d ENUMERATED */
+       10,                     /* [UNIVERSAL 10] */
+       1,      /* L */
+  222,
+       /* e OCTET STRING */
+       4,                      /* [UNIVERSAL 4] */
+       3,      /* L */
+       'x',
+       'y',
+       'z',
+       /*
+        * X.690 specifies that inner structures must be tagged by
+        * stripping off the outer tag for each subsequent level.
+        */
+       /* f [5] IMPLICIT VisibleString */
+       128 | 32 | 5,           /* [5], constructed */
+       128,    /* L indefinite */
+               26,     /* [UNIVERSAL 26] (VisibleString), primitive */
+               2,
+  'l',
+  'o',
+               32 | 26,        /* [UNIVERSAL 26], recursively constructed */
+               128,
+                       4,      /* [UNIVERSAL 4] (OCTET STRING), primitive */
+                       1,
+  'v',
+                       4,      /* [UNIVERSAL 4], primitive */
+                       2,
+  'e',
+  '_',
+               0,
+               0,
+               26,     /* [UNIVERSAL 26], primitive */
+               2,
+  'i',
+  't',
+       0,
+       0,
+       /* g BIT STRING */
+       3,                      /* [UNIVERSAL 3], primitive */
+       3,      /* L */
+       2,      /* Skip 2 bits */
+       147,
+       150,    /* => 148 */
+       /* h [7] BIT STRING */
+       128 | 32 | 7,                   /* [7], constructed */
+       128,    /* L indefinite */
+               3,                      /* [UNIVERSAL 3], primitive */
+               3,      /* L */
+               0,      /* Skip 0 bits */
+               140,
+               141,
+               3,                      /* [UNIVERSAL 3], primitive */
+               2,      /* L */
+               1,      /* Skip 1 bit */
+               143,    /* => 142 */
+       0,      /* End of h */
+       0,
+       0,      /* End of the whole structure */
+       0,
+       /* Three bytes of planned leftover */
+       111, 222, 223
+};
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p (%zd)\n", buf, size);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd, expected %zd\n",
+               (int)rval.code, rval.consumed, consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+
+               assert(strcmp((char *)t.e->buf, "xyz") == 0);
+               assert(strcmp((char *)t.f->buf, "love_it") == 0);
+
+               assert(t.g->size == 2);
+               assert(t.g->bits_unused == 2);
+               fprintf(stderr, "%d %d\n", t.g->buf[0], t.g->buf[1]);
+               assert(t.g->buf[0] == 147);
+               assert(t.g->buf[1] != 150);
+               assert(t.g->buf[1] == 148);
+
+               assert(t.h->size == 3);
+               assert(t.h->bits_unused == 1);
+               assert(t.h->buf[0] == 140);
+               assert(t.h->buf[1] == 141);
+               assert(t.h->buf[2] == 142);
+       } else {
+               if(rval.code == RC_OK) {
+                       assert(t.a.size != 2
+                       || !t.d
+                       || t.d->size != 1
+                       || !t.e
+                       || t.e->size != 3
+                       || !t.f
+                       || t.f->size != 7
+                       || !t.g
+                       || t.g->size != 2
+                       || !t.h
+                       || t.h->size != 3
+                       );
+               }
+               fprintf(stderr, "%zd %zd\n", rval.consumed, consumed);
+               assert(rval.consumed <= consumed);
+       }
+
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+}
+
+static void
+try_corrupt(uint8_t *buf, size_t size, int allow_consume) {
+       uint8_t tmp[size];
+
+       fprintf(stderr, "\nCorrupting...\n");
+
+       for(int i = 0; i < 1000; i++) {
+               int loc;
+               memcpy(tmp, buf, size);
+
+               /* Corrupt random _non-value_ location. */
+               do { loc = random() % size; } while(
+                       loc == 44       /* bit skips */
+                       || loc == 51    /* bit skips */
+                       || loc == 56    /* bit skips */
+                       || tmp[loc] >= 70);
+               do { tmp[loc] = buf[loc] ^ random(); } while(
+                       (tmp[loc] == buf[loc])
+                       || (buf[loc] == 0 && tmp[loc] == 0x80));
+
+               fprintf(stderr, "\nTry %d: corrupting byte %d (%d->%d)\n",
+                       i, loc, buf[loc], tmp[loc]);
+
+               check(0, tmp, size, allow_consume);
+       }
+}
+
+static void
+partial_read(uint8_t *buf, size_t size) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+       uint8_t tbuf1[size];
+       uint8_t tbuf2[size];
+       uint8_t tbuf3[size];
+
+       fprintf(stderr, "\nPartial read sequence...\n");
+
+       /*
+        * Divide the space (size) into three blocks in various combinations:
+        *   |<----->i1<----->i2<----->|
+        *   ^ buf                     ^ buf+size
+        * Try to read block by block.
+        */
+       for(size_t i1 = 0; i1 < size; i1++) {
+               for(size_t i2 = i1; i2 < size; i2++) {
+                       uint8_t *chunk1 = buf;
+                       size_t size1 = i1;
+                       uint8_t *chunk2 = buf + size1;
+                       size_t size2 = i2 - i1;
+                       uint8_t *chunk3 = buf + size1 + size2;
+                       size_t size3 = size - size1 - size2;
+
+                       fprintf(stderr, "\n%d:{%d, %d, %d}...\n",
+                               (int)size, (int)size1, (int)size2, (int)size3);
+
+                       memset(tbuf1, 0, size);
+                       memset(tbuf2, 0, size);
+                       memset(tbuf3, 0, size);
+                       memcpy(tbuf1, chunk1, size1);
+                       memcpy(tbuf2, chunk2, size2);
+                       memcpy(tbuf3, chunk3, size3);
+
+                       tp = memset(&t, 0, sizeof(t));
+
+                       fprintf(stderr, "=> Chunk 1 (%d):\n", (int)size1);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               tbuf1, size1);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size1);
+                       if(rval.consumed < size1) {
+                               int leftover = size1 - rval.consumed;
+                               memcpy(tbuf2, tbuf1 + rval.consumed, leftover);
+                               memcpy(tbuf2 + leftover, chunk2, size2);
+                               size2 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 2 (%d):\n", (int)size2);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               tbuf2, size2);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size2);
+                       if(rval.consumed < size2) {
+                               int leftover = size2 - rval.consumed;
+                               memcpy(tbuf3, tbuf2 + rval.consumed, leftover);
+                               memcpy(tbuf3 + leftover, chunk3, size3);
+                               size3 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 3 (%d):\n", (int)size3);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               tbuf3, size3);
+                       assert(rval.code == RC_OK);
+                       assert(rval.consumed == size3);
+
+                       ASN_STRUCT_RESET(asn_DEF_T, &t);
+               }
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       /* Check that the full buffer may be decoded normally */
+       check(1, buf1, sizeof(buf1), sizeof(buf1) - 3);
+
+       /* Check that some types of buffer corruptions will lead to failure */
+       try_corrupt(buf1, sizeof(buf1) - 3, sizeof(buf1) - 3);
+
+       /* Split the buffer in parts and check decoder restartability */
+       partial_read(buf1, sizeof(buf1) - 3);
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-30.-fwide-types.c b/tests/tests-c-compiler/check-src/check-30.-fwide-types.c
new file mode 100644 (file)
index 0000000..3f1b1cd
--- /dev/null
@@ -0,0 +1,264 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+
+/*
+ * Test that the optional member (c) is really optional.
+ */
+uint8_t buf1[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       8,      /* L */
+
+       /* a INTEGER */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  96,
+
+       /* b IA5String */
+       22,                     /* [UNIVERSAL 22] */
+       3,      /* L */
+       'x',
+       'y',
+       'z'
+};
+
+/*
+ * This buffer aims at checking the duplication.
+ */
+uint8_t buf2[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       8,      /* L */
+
+       /* a INTEGER */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  96,
+
+       /* a INTEGER _again_ */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  97,
+};
+
+/*
+ * This buffer checks that an unexpected member may be properly ignored.
+ */
+uint8_t buf3[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       14,     /* L */
+
+       /* INTEGER */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  96,
+
+       /* IA5String */
+       22,                     /* [UNIVERSAL 22] */
+       3,      /* L */
+       'x',
+       'y',
+       'z',
+
+       /* unexpected INTEGER */
+       64 | 4,                 /* [APPLICATION 4] */
+       1,      /* L */
+  96,
+
+       /* [2] BOOLEAN */
+       ((2 << 6) + 2),                 /* [2] */
+       1,      /* L */
+       0xff
+};
+
+/*
+ * This buffer checks that an unexpected member may be properly ignored.
+ * This time, with indefinite length encoding.
+ */
+uint8_t buf4[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       16,     /* L */
+
+       /* a INTEGER */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  96,
+
+       /* b IA5String */
+       22,                     /* [UNIVERSAL 22] */
+       3,      /* L */
+       'x',
+       'y',
+       'z',
+
+       /* unexpected data structure */
+       32 | 64 | 4,                    /* [APPLICATION 4] */
+       0x80,   /* indefinite L */
+       64 | 1,                 /* [APPLICATION 1] */
+       2,      /* L */
+       'a', 'b',
+
+       0x00,
+       0x00
+};
+
+/*
+ * This buffer checks that an unexpected member may be properly ignored.
+ * This time, with indefinite length encoding at the outer level too.
+ */
+uint8_t buf5[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       0x80,   /* indefinite L */
+
+       /* INTEGER */
+       64 | 3,                 /* [APPLICATION 3] */
+       1,      /* L */
+  96,
+
+       /* IA5String */
+       22,                     /* [UNIVERSAL 22] */
+       3,      /* L */
+       'x',
+       'y',
+       'z',
+
+       /* unexpected data structure */
+       32 | 64 | 4,                    /* [APPLICATION 4] */
+       0x80,   /* indefinite L */
+       64 | 1,                 /* [APPLICATION 1] */
+       2,      /* L */
+       'a', 'b',
+
+       0x00,
+       0x00,
+
+       0x00,
+       0x00
+};
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+
+       fprintf(stderr, "\nMust %s:\n", is_ok?"suceed":"fail");
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd (out of %zd)\n",
+               (int)rval.code, rval.consumed, size);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+
+               assert(t.i.size == 1);
+               assert(t.i.buf[0] == 96);
+               assert(t.s.size == 3);
+               assert(strcmp((char *)t.s.buf, "xyz") == 0);
+               if(buf == buf3) {
+                       assert(t.b);
+               } else {
+                       assert(t.b == 0);
+               }
+       } else {
+               if(rval.code == RC_OK) {
+                       assert(t.i.size != 1
+                       || t.s.size != 3
+                       || !t.b
+                       );
+               }
+               assert(rval.consumed <= consumed);
+       }
+       ASN_STRUCT_RESET(asn_DEF_T, tp);
+}
+
+
+static char xer_buf[128];
+static int xer_off;
+
+static int
+xer_cb(const void *buffer, size_t size, void *key) {
+       (void)key;
+       assert(xer_off + size < sizeof(xer_buf));
+       memcpy(xer_buf + xer_off, buffer, size);
+       xer_off += size;
+       return 0;
+}
+
+static void
+check_xer(uint8_t *buf, uint8_t size, char *xer_sample) {
+       T_t *tp = 0;
+       asn_dec_rval_t rval;
+       asn_enc_rval_t er;
+       int xer_sample_len = strlen(xer_sample);
+
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == size);
+       assert(tp);
+
+       xer_off = 0;
+       er = xer_encode(&asn_DEF_T, tp, XER_F_CANONICAL, xer_cb, 0);
+       assert(er.encoded == xer_off);
+       assert(xer_off);
+       xer_buf[xer_off] = 0;
+       printf("[%s] vs [%s]\n", xer_buf, xer_sample);
+       assert(xer_off == xer_sample_len);
+       assert(memcmp(xer_buf, xer_sample, xer_off) == 0);
+
+       ASN_STRUCT_FREE(asn_DEF_T, tp);
+}
+
+static void
+try_corrupt(uint8_t *buf, size_t size) {
+       uint8_t tmp[size];
+
+       fprintf(stderr, "\nCorrupting...\n");
+
+       for(int i = 0; i < 1000; i++) {
+               int loc;
+               memcpy(tmp, buf, size);
+
+               /* Corrupt random _non-value_ location. */
+               do { loc = random() % size; } while(tmp[loc] >= 70);
+               do { tmp[loc] = buf[loc] ^ random(); } while(
+                       (tmp[loc] == buf[loc])
+                       || (buf[loc] == 0 && tmp[loc] == 0x80));
+
+               fprintf(stderr, "\nTry %d: corrupting byte %d (%d->%d)\n",
+                       i, loc, buf[loc], tmp[loc]);
+
+               check(0, tmp, size, size);
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(1, buf1, sizeof(buf1) + 20, sizeof(buf1));
+       check(0, buf2, sizeof(buf2) + 1, 5);
+       check(1, buf3, sizeof(buf3) + 1, sizeof(buf3));
+       check(1, buf4, sizeof(buf4), sizeof(buf4));
+       check(1, buf5, sizeof(buf5), sizeof(buf5));
+       check(1, buf5, sizeof(buf5) + 1, sizeof(buf5));
+       check(0, buf5, sizeof(buf5) - 1, sizeof(buf5));
+
+       check_xer(buf1, sizeof(buf1), "<T><s>xyz</s><i>96</i></T>");
+       check_xer(buf3, sizeof(buf3), "<T><s>xyz</s><i>96</i><b><true/></b></T>");
+
+       fprintf(stderr, "\nPseudo-random buffer corruptions must fail\n");
+       try_corrupt(buf1, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-31.-fwide-types.c b/tests/tests-c-compiler/check-src/check-31.-fwide-types.c
new file mode 100644 (file)
index 0000000..399f0da
--- /dev/null
@@ -0,0 +1,217 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Forest.h>
+
+uint8_t buf1[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       128,    /* L, indefinite */
+
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       6,      /* L */
+
+       /* height INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  100,
+       /* width INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  80,
+
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       6,      /* L */
+
+       /* height INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  110,
+       /* width INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  82,
+
+       0,      /* End of forest */
+       0
+};
+
+uint8_t buf1_reconstr[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       16,     /* L */
+
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       6,      /* L */
+
+       /* height INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  100,
+       /* width INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  80,
+
+       32 | 16,                /* [UNIVERSAL 16], constructed */
+       6,      /* L */
+
+       /* height INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  110,
+       /* width INTEGER */
+       2,                      /* [UNIVERSAL 2] */
+       1,      /* L */
+  82
+
+};
+
+size_t buf_pos;
+static int bytes_compare(const void *bufferp, size_t size, void *key) {
+       const uint8_t *buffer = bufferp;
+       assert(buf_pos + size <= sizeof(buf1_reconstr));
+
+       (void)key;      /* Unused argument */
+
+       fprintf(stderr,  "  writing %zd (%zd)\n", size, buf_pos + size);
+
+       for(; size; buf_pos++, size--, buffer++) {
+               if(buf1_reconstr[buf_pos] != *buffer) {
+                       fprintf(stderr,
+                               "Byte %zd is different: %d != %d (%x != %x)\n",
+                               buf_pos,
+                               *buffer, buf1_reconstr[buf_pos],
+                               *buffer, buf1_reconstr[buf_pos]
+                       );
+                       assert(buf1_reconstr[buf_pos] == *buffer);
+               }
+       }
+
+       return 0;
+}
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       Forest_t t, *tp;
+       asn_dec_rval_t rval;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_Forest, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %d\n",
+               (int)rval.code, (int)rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+
+               assert(t.list.count == 2);
+               assert(t.list.array[0]->height.size == 1);
+               assert(t.list.array[0]->width.size == 1);
+               assert(t.list.array[1]->height.size == 1);
+               assert(t.list.array[1]->width.size == 1);
+       } else {
+               if(rval.code == RC_OK) {
+                       assert(t.list.count != 2
+                       || t.list.array[0]->height.size != 1
+                       || t.list.array[0]->width.size != 1
+                       || t.list.array[1]->height.size != 1
+                       || t.list.array[1]->width.size != 1
+                       );
+               }
+               assert(rval.consumed <= consumed);
+               ASN_STRUCT_RESET(asn_DEF_Forest, &t);
+               return;
+       }
+
+       /*
+        * Try to re-create the buffer.
+        */
+       buf_pos = 0;
+       der_encode(&asn_DEF_Forest, &t,
+               bytes_compare, buf1_reconstr);
+       assert(buf_pos == (ssize_t)sizeof(buf1_reconstr));
+
+       asn_fprint(stderr, &asn_DEF_Forest, &t);
+       xer_fprint(stderr, &asn_DEF_Forest, &t);
+
+       ASN_STRUCT_RESET(asn_DEF_Forest, &t);
+}
+
+static char xer_buf[512];
+static int xer_off;
+
+static int
+xer_cb(const void *buffer, size_t size, void *key) {
+       (void)key;
+       assert(xer_off + size < sizeof(xer_buf));
+       memcpy(xer_buf + xer_off, buffer, size);
+       xer_off += size;
+       return 0;
+}
+
+static void
+check_xer(uint8_t *buf, uint8_t size, char *xer_sample) {
+       Forest_t *tp = 0;
+       asn_dec_rval_t rval;
+       asn_enc_rval_t er;
+       int xer_sample_len = strlen(xer_sample);
+
+       rval = ber_decode(0, &asn_DEF_Forest, (void **)&tp, buf, size);
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == size);
+       assert(tp);
+
+       xer_off = 0;
+       er = xer_encode(&asn_DEF_Forest, tp, XER_F_CANONICAL, xer_cb, 0);
+       assert(er.encoded == xer_off);
+       assert(xer_off);
+       xer_buf[xer_off] = 0;
+       printf("[%s] vs [%s]\n", xer_buf, xer_sample);
+       assert(xer_off == xer_sample_len);
+       assert(memcmp(xer_buf, xer_sample, xer_off) == 0);
+
+       ASN_STRUCT_FREE(asn_DEF_Forest, tp);
+}
+
+
+static void
+try_corrupt(uint8_t *buf, size_t size) {
+       uint8_t tmp[size];
+
+       fprintf(stderr, "\nCorrupting...\n");
+
+       for(int i = 0; i < 1000; i++) {
+               int loc;
+               memcpy(tmp, buf, size);
+
+               /* Corrupt random _non-value_ location. */
+               do { loc = random() % size; } while(tmp[loc] >= 70);
+               do { tmp[loc] = buf[loc] ^ random(); } while(
+                       (tmp[loc] == buf[loc])
+                       || (buf[loc] == 0 && tmp[loc] == 0x80));
+
+               fprintf(stderr, "\nTry %d: corrupting byte %d (%d->%d)\n",
+                       i, loc, buf[loc], tmp[loc]);
+
+               check(0, tmp, size, size);
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(1, buf1, sizeof(buf1), sizeof(buf1));
+       check_xer(buf1, sizeof(buf1), "<Forest><Tree><height>100</height><width>80</width></Tree><Tree><height>110</height><width>82</width></Tree></Forest>");
+       try_corrupt(buf1, sizeof(buf1));
+       check(1, buf1, sizeof(buf1) + 20, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-32.c b/tests/tests-c-compiler/check-src/check-32.c
new file mode 100644 (file)
index 0000000..3f8bf06
--- /dev/null
@@ -0,0 +1,90 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Programming.h>
+#include <SeqWithMandatory.h>
+#include <SeqWithOptional.h>
+
+int
+main(int ac, char **av) {
+       Programming_t p;
+       SeqWithMandatory_t swm;
+       SeqWithOptional_t *swo = 0;
+       Error_t *err;
+       asn_enc_rval_t erv;
+       asn_dec_rval_t drv;
+       char buf[128];
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       /*
+        * No plans to fill Programming_t up:
+        * just checking whether it compiles or not.
+        */
+       memset(&p, 0, sizeof(p));
+
+       /*
+        * Construct a dummy sequence:
+        * SeqWithMandatory ::= {
+        *      seqOfMan [0] EXPLICIT SEQUENCE OF Error
+        * }
+        */
+       err = calloc(1, sizeof *err);
+       memset(&swm, 0, sizeof swm);
+       OCTET_STRING_fromBuf(&swm.someString, "Oley", 4);
+       ASN_SEQUENCE_ADD(&swm.seqOfMan, err);
+
+       /*
+        * Encode the sequence.
+        */
+       erv = der_encode_to_buffer(&asn_DEF_SeqWithMandatory,
+                       &swm, buf, sizeof buf);
+       assert(erv.encoded > 0);
+       buf[erv.encoded] = '\0';
+
+       /*
+        * Try to decode it using a compatible type.
+        */
+       drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo,
+                       buf, erv.encoded);
+       assert(drv.code == RC_OK);
+       assert((ssize_t)drv.consumed == erv.encoded);
+       assert(swo->seqOfOpt != 0);
+
+       xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo);
+       void *tmp = swo->seqOfOpt;
+       swo->seqOfOpt = 0;
+
+       erv = der_encode_to_buffer(&asn_DEF_SeqWithOptional,
+                       swo, buf, sizeof buf);
+       assert(erv.encoded > 0);
+       buf[erv.encoded] = '\0';
+
+       swo->seqOfOpt = tmp;
+       ASN_STRUCT_RESET(asn_DEF_SeqWithMandatory, &swm);
+       ASN_STRUCT_FREE(asn_DEF_SeqWithOptional, swo);
+       swo = 0;
+
+       drv = ber_decode(0, &asn_DEF_SeqWithMandatory, (void **)&swo,
+                       buf, erv.encoded);
+       assert(drv.code != RC_OK);
+       ASN_STRUCT_FREE(asn_DEF_SeqWithOptional, swo);
+       swo = 0;
+       drv = ber_decode(0, &asn_DEF_SeqWithOptional, (void **)&swo,
+                       buf, erv.encoded);
+       assert(drv.code == RC_OK);
+       assert((ssize_t)drv.consumed == erv.encoded);
+       assert(swo->seqOfOpt == 0);
+
+       xer_fprint(stderr, &asn_DEF_SeqWithOptional, swo);
+       ASN_STRUCT_FREE(asn_DEF_SeqWithOptional, swo);
+
+       printf("Finished\n");
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-33.c b/tests/tests-c-compiler/check-src/check-33.c
new file mode 100644 (file)
index 0000000..6163871
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+int
+main(int ac, char **av) {
+       T_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-35.c b/tests/tests-c-compiler/check-src/check-35.c
new file mode 100644 (file)
index 0000000..6f1fcc8
--- /dev/null
@@ -0,0 +1,333 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf1[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       15,     /* L */
+
+       /* b CHOICE { b2 ObjectDescriptor }*/
+       7,                      /* [UNIVERSAL 7] */
+       1,      /* L */
+  'z',
+
+       /* c BOOLEAN */
+       1,                      /* [UNIVERSAL 1] */
+       0,      /* L */
+
+       /* a NumericString */
+       18,                     /* [UNIVERSAL 18] */
+       4,      /* L */
+  '=',
+  '<',
+  '&',
+  '>',
+
+       /* d.r-oid RELATIVE-OID */
+       13,                     /* [UNIVERSAL 13] */
+       2,      /* L */
+  85,
+  79,
+
+};
+
+uint8_t buf1_reconstr[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       16,     /* L */
+
+       /* c BOOLEAN */
+       1,                      /* [UNIVERSAL 1] */
+       1,      /* L */
+       0,
+
+       /* b CHOICE { b2 ObjectDescriptor }*/
+       7,                      /* [UNIVERSAL 7] */
+       1,      /* L */
+  'z',
+
+       /* d.r-oid RELATIVE-OID */
+       13,                     /* [UNIVERSAL 1] */
+       2,      /* L */
+  85,
+  79,
+
+       /* a NumericString */
+       18,                     /* [UNIVERSAL 18] */
+       4,      /* L */
+  '=',
+  '<',
+  '&',
+  '>',
+};
+
+uint8_t buf2[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       15,     /* L */
+
+       /* a NumericString */
+       18,                     /* [UNIVERSAL 18] */
+       4,      /* L */
+  '=',
+  '<',
+  '&',
+  '>',
+
+       /* c BOOLEAN */
+       1,                      /* [UNIVERSAL 1] */
+       1,      /* L */
+       2,      /* True */
+
+       /* b CHOICE { b1 IA5String }*/
+       22,                     /* [UNIVERSAL 22] */
+       1,      /* L */
+  'z',
+
+       /* d.oid RELATIVE-OID */
+       6,                      /* [UNIVERSAL 6] */
+       1,      /* L */
+  81,
+
+};
+
+uint8_t buf2_reconstr[] = {
+       32 | 17,                /* [UNIVERSAL 17], constructed */
+       15,     /* L */
+
+       /* c BOOLEAN */
+       1,                      /* [UNIVERSAL 1] */
+       1,      /* L */
+       0xff,   /* Canonical True */
+
+       /* d.oid RELATIVE-OID */
+       6,                      /* [UNIVERSAL 6] */
+       1,      /* L */
+  81,
+
+       /* a NumericString */
+       18,                     /* [UNIVERSAL 18] */
+       4,      /* L */
+  '=',
+  '<',
+  '&',
+  '>',
+
+       /* b CHOICE { b1 IA5String }*/
+       22,                     /* [UNIVERSAL 22] */
+       1,      /* L */
+  'z'
+};
+
+static void
+check(T_t *tp, uint8_t *buf, size_t size, size_t consumed) {
+       asn_dec_rval_t rval;
+
+       tp = memset(tp, 0, sizeof(*tp));
+
+       fprintf(stderr, "Buf %p (%zd)\n", buf, size);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == consumed);
+
+       assert(strcmp((char *)tp->a.buf, "=<&>") == 0);
+       assert(strcmp((char *)tp->b.choice.b1.buf, "z") == 0
+               && strcmp((char *)tp->b.choice.b2.buf, "z") == 0);
+
+       asn_fprint(stderr, &asn_DEF_T, tp);
+       xer_fprint(stderr, &asn_DEF_T, tp);
+}
+
+size_t buf_pos;
+size_t buf_size;
+uint8_t *buf;
+
+static int
+buf_fill(const void *buffer, size_t size, void *app_key) {
+
+       (void)app_key;
+
+       if(buf_pos + size > buf_size) {
+               fprintf(stderr, "%zd + %zd > %zd\n",
+                       buf_pos, size, buf_size);
+               return -1;
+       }
+
+       memcpy(buf + buf_pos, buffer, size);
+       buf_pos += size;
+       fprintf(stderr, "   written %zd (%zd)\n", size, buf_pos);
+
+       return 0;
+}
+
+static void
+compare(T_t *tp, uint8_t *cmp_buf, size_t cmp_buf_size) {
+       asn_enc_rval_t erval;
+       size_t i;
+
+       buf_size = cmp_buf_size + 100;
+    uint8_t scratch[buf_size];
+       buf = scratch;
+       buf_pos = 0;
+
+       /*
+        * Try to re-create using DER encoding.
+        */
+       erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
+       assert(erval.encoded != -1);
+       if(erval.encoded != (ssize_t)cmp_buf_size) {
+               printf("%zd != %zd\n", erval.encoded, cmp_buf_size);
+       }
+       assert(erval.encoded == (ssize_t)cmp_buf_size);
+       for(i = 0; i < cmp_buf_size; i++) {
+               if(buf[i] != cmp_buf[i]) {
+                       fprintf(stderr, "Recreated buffer content mismatch:\n");
+                       fprintf(stderr, "Byte %d, %x != %x (%d != %d)\n",
+                               (int)i,
+                               buf[i], cmp_buf[i],
+                               buf[i], cmp_buf[i]
+                       );
+               }
+               assert(buf[i] == cmp_buf[i]);
+       }
+}
+
+static void
+partial_read(uint8_t *data, size_t size) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+       size_t i1, i2;
+       uint8_t data1[size];
+       uint8_t data2[size];
+       uint8_t data3[size];
+
+       fprintf(stderr, "\nPartial read sequence...\n");
+
+       /*
+        * Divide the space (size) into three blocks in various combinations:
+        *   |<----->i1<----->i2<----->|
+        *   ^ data                  ^ data+size
+        * Try to read block by block.
+        */
+       for(i1 = 0; i1 < size; i1++) {
+               for(i2 = i1; i2 < size; i2++) {
+                       uint8_t *chunk1 = data;
+                       size_t size1 = i1;
+                       uint8_t *chunk2 = data + size1;
+                       size_t size2 = i2 - i1;
+                       uint8_t *chunk3 = data + size1 + size2;
+                       size_t size3 = size - size1 - size2;
+
+                       fprintf(stderr, "\n%zd:{%zd, %zd, %zd}...\n",
+                               size, size1, size2, size3);
+
+                       memset(data1, 0, size);
+                       memset(data2, 0, size);
+                       memset(data3, 0, size);
+                       memcpy(data1, chunk1, size1);
+                       memcpy(data2, chunk2, size2);
+                       memcpy(data3, chunk3, size3);
+
+                       tp = memset(&t, 0, sizeof(t));
+
+                       fprintf(stderr, "=> Chunk 1 (%zd):\n", size1);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data1, size1);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size1);
+                       if(rval.consumed < size1) {
+                               int leftover = size1 - rval.consumed;
+                               memcpy(data2, data1 + rval.consumed, leftover);
+                               memcpy(data2 + leftover, chunk2, size2);
+                               size2 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 2 (%zd):\n", size2);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data2, size2);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size2);
+                       if(rval.consumed < size2) {
+                               int leftover = size2 - rval.consumed;
+                               memcpy(data3, data2 + rval.consumed, leftover);
+                               memcpy(data3 + leftover, chunk3, size3);
+                               size3 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 3 (%zd):\n", size3);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data3, size3);
+                       assert(rval.code == RC_OK);
+                       assert(rval.consumed == size3);
+
+                       ASN_STRUCT_RESET(asn_DEF_T, &t);
+               }
+       }
+}
+
+static char xer_buf[128];
+static size_t xer_off;
+
+static int
+xer_cb(const void *buffer, size_t size, void *key) {
+       (void)key;
+       assert(xer_off + size < sizeof(xer_buf));
+       memcpy(xer_buf + xer_off, buffer, size);
+       xer_off += size;
+       return 0;
+}
+
+static void
+check_xer(uint8_t *data, uint8_t size, char *xer_sample) {
+       T_t *tp = 0;
+       asn_dec_rval_t rval;
+       asn_enc_rval_t er;
+       size_t xer_sample_len = strlen(xer_sample);
+
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, data, size);
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == size);
+       assert(tp);
+
+       xer_off = 0;
+       er = xer_encode(&asn_DEF_T, tp, XER_F_CANONICAL, xer_cb, 0);
+       assert(xer_off);
+       xer_buf[xer_off] = 0;
+       printf("[%s] (%zd/%zd) vs [%s] (%zd)\n",
+               xer_buf, er.encoded, xer_off, xer_sample, xer_sample_len);
+       assert(er.encoded == (ssize_t)xer_off);
+       assert(xer_off == xer_sample_len);
+       assert(memcmp(xer_buf, xer_sample, xer_off) == 0);
+
+       ASN_STRUCT_FREE(asn_DEF_T, tp);
+}
+
+
+int
+main(int ac, char **av) {
+       T_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
+       compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+       check_xer(buf1, sizeof(buf1), "<T><c><false/></c><b><b2>z</b2></b><a>=&lt;&amp;&gt;</a><d><r-oid>85.79</r-oid></d></T>");
+
+       check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
+       compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+       check_xer(buf2, sizeof(buf2), "<T><c><true/></c><b><b1>z</b1></b><a>=&lt;&amp;&gt;</a><d><oid>2.1</oid></d></T>");
+
+       /* Split the buffer in parts and check decoder restartability */
+       partial_read(buf1, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-39.c b/tests/tests-c-compiler/check-src/check-39.c
new file mode 100644 (file)
index 0000000..6163871
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+int
+main(int ac, char **av) {
+       T_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-41.-fwide-types.c b/tests/tests-c-compiler/check-src/check-41.-fwide-types.c
new file mode 100644 (file)
index 0000000..98741f5
--- /dev/null
@@ -0,0 +1,324 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf0[] = {
+       32 | ((2 << 6) + 1),            /* [1], constructed */
+       18,
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       16,     /* L */
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+};
+
+uint8_t buf0_reconstr[] = {
+       32 | ((2 << 6) + 1),            /* [1], constructed */
+       18,
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       16,     /* L */
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+};
+
+
+
+uint8_t buf1[] = {
+       32 | (2 << 6),          /* [0], constructed */
+       0x80 | 1,       /* L */
+       134,
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       0x80 | 1,       /* L */
+       128,
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+       /* alpha    [1] IMPLICIT INTEGER OPTIONAL */
+       (2 << 6) + 1,                   /* [1] */
+       1,      /* L */
+  75,
+};
+
+uint8_t buf1_reconstr[] = {
+        32 | (2 << 6),          /* [0], constructed */
+       0x80 | 1,       /* L */
+       134,
+
+        /* string   [0] IMPLICIT UTF8String, */
+        (2 << 6),                       /* [0] */
+        0x80 | 1,       /* L */
+        128,
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+        /* alpha    [1] IMPLICIT INTEGER OPTIONAL */
+        (2 << 6) + 1,                   /* [1] */
+        1,      /* L */
+  75,
+};
+
+uint8_t buf2[] = {
+       32 | ((2 << 6) + 1),            /* [1], constructed */
+       0x80 | 1,       /* L */
+       134,
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       0x80 | 1,       /* L */
+       128,
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+       /* beta    [2] IMPLICIT INTEGER OPTIONAL */
+       (2 << 6) + 2,                   /* [2] */
+       1,      /* L */
+  75,
+};
+
+uint8_t buf2_reconstr[] = {
+        32 | ((2 << 6) + 1),          /* [1], constructed */
+       0x80 | 1,       /* L */
+       134,
+
+        /* string   [0] IMPLICIT UTF8String, */
+        (2 << 6),                       /* [0] */
+        0x80 | 1,       /* L */
+        128,
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+        /* beta    [2] IMPLICIT INTEGER OPTIONAL */
+        (2 << 6) + 2,                   /* [2] */
+        1,      /* L */
+  75,
+};
+
+
+
+
+
+static void
+check(T_t *tp, uint8_t *buf, size_t size, size_t consumed) {
+       asn_dec_rval_t rval;
+       int ret;
+
+       tp = memset(tp, 0, sizeof(*tp));
+
+       fprintf(stderr, "Buf %p (%zd)\n", buf, size);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == consumed);
+
+       fprintf(stderr, "=== asn_fprint() ===\n");
+       ret = asn_fprint(stderr, &asn_DEF_T, tp);
+       assert(ret == 0);
+       fprintf(stderr, "=== xer_fprint() ===\n");
+       ret = xer_fprint(stderr, &asn_DEF_T, tp);
+       fprintf(stderr, "=== END ===\n");
+       assert(ret == 0);
+
+       /*
+       assert(tp->string.size == 128);
+       assert(strncmp(tp->string.buf, "zz") == 0);
+       assert(strcmp((char *)tp->b.choice.b1.buf, "z") == 0
+               && strcmp((char *)tp->b.choice.b2.buf, "z") == 0);
+       */
+}
+
+size_t buf_pos;
+size_t buf_size;
+uint8_t *buffer;
+
+static int
+buf_fill(const void *bufp, size_t size, void *app_key) {
+
+       (void)app_key;  /* Unused argument */
+
+       if(buf_pos + size > buf_size) {
+               fprintf(stderr, "%zd + %zd > %zd\n",
+                       buf_pos, size, buf_size);
+               return -1;
+       }
+
+       memcpy(buffer + buf_pos, bufp, size);
+       buf_pos += size;
+       fprintf(stderr, "   written %zd (%zd)\n", size, buf_pos);
+
+       return 0;
+}
+
+static void
+compare(T_t *tp, uint8_t *cmp_buf, size_t cmp_buf_size) {
+       asn_enc_rval_t erval;
+       size_t i;
+
+       buf_size = cmp_buf_size + 100;
+    uint8_t scratch[buf_size];
+       buffer = scratch;
+       buf_pos = 0;
+
+       /*
+        * Try to re-create using DER encoding.
+        */
+       erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
+       assert(erval.encoded != -1);
+       if(erval.encoded != (ssize_t)cmp_buf_size) {
+               printf("%zd != %zd\n", erval.encoded, cmp_buf_size);
+       }
+       assert(erval.encoded == (ssize_t)cmp_buf_size);
+       for(i = 0; i < cmp_buf_size; i++) {
+               if(buffer[i] != cmp_buf[i]) {
+                       fprintf(stderr, "Recreated buffer content mismatch:\n");
+                       fprintf(stderr, "Byte %d, %x != %x (%d != %d)\n",
+                               (int)i,
+                               buffer[i], cmp_buf[i],
+                               buffer[i], cmp_buf[i]
+                       );
+               }
+               assert(buffer[i] == cmp_buf[i]);
+       }
+
+    buffer = 0;
+}
+
+static void
+partial_read(uint8_t *data, size_t size) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+       uint8_t data1[size];
+       uint8_t data2[size];
+       uint8_t data3[size];
+
+       fprintf(stderr, "\nPartial read sequence...\n");
+
+       /*
+        * Divide the space (size) into three blocks in various combinations:
+        *   |<----->i1<----->i2<----->|
+        *   ^ data                    ^ data+size
+        * Try to read block by block.
+        */
+       for(size_t i1 = 0; i1 < size; i1++) {
+               for(size_t i2 = i1; i2 < size; i2++) {
+                       uint8_t *chunk1 = data;
+                       size_t size1 = i1;
+                       uint8_t *chunk2 = data + size1;
+                       size_t size2 = i2 - i1;
+                       uint8_t *chunk3 = data + size1 + size2;
+                       size_t size3 = size - size1 - size2;
+
+                       fprintf(stderr, "\n%zd:{%zd, %zd, %zd}...\n",
+                               size, size1, size2, size3);
+
+                       memset(data1, 0, size);
+                       memset(data2, 0, size);
+                       memset(data3, 0, size);
+                       memcpy(data1, chunk1, size1);
+                       memcpy(data2, chunk2, size2);
+                       memcpy(data3, chunk3, size3);
+
+                       tp = memset(&t, 0, sizeof(t));
+
+                       fprintf(stderr, "=> Chunk 1 (%zd):\n", size1);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data1, size1);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size1);
+                       if(rval.consumed < size1) {
+                               int leftover = size1 - rval.consumed;
+                               memcpy(data2, data1 + rval.consumed, leftover);
+                               memcpy(data2 + leftover, chunk2, size2);
+                               size2 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 2 (%zd):\n", size2);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data2, size2);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size2);
+                       if(rval.consumed < size2) {
+                               int leftover = size2 - rval.consumed;
+                               memcpy(data3, data2 + rval.consumed, leftover);
+                               memcpy(data3 + leftover, chunk3, size3);
+                               size3 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 3 (%zd):\n", size3);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               data3, size3);
+                       assert(rval.code == RC_OK);
+                       assert(rval.consumed == size3);
+
+                       ASN_STRUCT_RESET(asn_DEF_T, &t);
+               }
+       }
+}
+
+int
+main() {
+       T_t t;
+
+       /* Check exact buf0 */
+       check(&t, buf0, sizeof(buf0), sizeof(buf0));
+       compare(&t, buf0_reconstr, sizeof(buf0_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Check exact buf1 */
+       check(&t, buf1, sizeof(buf1), sizeof(buf1));
+       compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Check slightly more than buf1 */
+       check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
+       compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Check exact buf2 */
+       check(&t, buf2, sizeof(buf2), sizeof(buf2));
+       compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Check slightly more than buf2 */
+       check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
+       compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Split the buffer in parts and check decoder restartability */
+       partial_read(buf0, sizeof(buf0));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-41.c b/tests/tests-c-compiler/check-src/check-41.c
new file mode 100644 (file)
index 0000000..39bbe3c
--- /dev/null
@@ -0,0 +1,220 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+
+uint8_t buf1[] = {
+       32 | (2 << 6),          /* [0], constructed */
+       25,     /* L */
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       16,     /* L */
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+       /* beta    [2] IMPLICIT INTEGER OPTIONAL */
+       (2 << 6) + 2,                   /* [2] */
+       5,      /* L */
+  0,
+  75,
+  0x4b,
+  75,
+  75,
+};
+
+uint8_t buf1_reconstr[] = {
+       32 | (2 << 6),          /* [0], constructed */
+       24,     /* L */
+
+       /* string   [0] IMPLICIT UTF8String, */
+       (2 << 6),                       /* [0] */
+       16,     /* L */
+ 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z',
+
+       /* beta    [2] IMPLICIT INTEGER OPTIONAL */
+       (2 << 6) + 2,                   /* [2] */
+       4,      /* L */
+  75,
+  75,
+  75,
+  0x4b,
+};
+
+
+static void
+check(T_t *tp, uint8_t *buf, size_t size, size_t consumed) {
+       asn_dec_rval_t rval;
+
+       tp = memset(tp, 0, sizeof(*tp));
+
+       fprintf(stderr, "Buf %p (%zd)\n", buf, size);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == consumed);
+
+       assert(tp->choice.seq.string.size == 16);
+       assert(strcmp((char *)tp->choice.seq.string.buf, "zzzzzzzzzzzzzzzz") == 0);
+       assert(tp->choice.seq.alpha == NULL);
+       assert(tp->choice.seq.beta);
+       assert(*tp->choice.seq.beta == 0x4b4b4b4b);
+}
+
+size_t buf_pos;
+size_t buf_size;
+uint8_t *buf;
+
+static int
+buf_fill(const void *buffer, size_t size, void *app_key) {
+
+       (void)app_key;  /* Unused argument */
+
+       if(buf_pos + size > buf_size) {
+               fprintf(stderr, "%zd + %zd > %zd\n",
+                       buf_pos, size, buf_size);
+               return -1;
+       }
+
+       memcpy(buf + buf_pos, buffer, size);
+       buf_pos += size;
+       fprintf(stderr, "   written %zd (%zd)\n", size, buf_pos);
+
+       return 0;
+}
+
+static void
+compare(T_t *tp, uint8_t *cmp_buf, size_t cmp_buf_size) {
+       asn_enc_rval_t erval;
+
+       buf_size = cmp_buf_size + 100;
+    uint8_t scratch[buf_size];
+       buf = scratch;
+       buf_pos = 0;
+
+       /*
+        * Try to re-create using DER encoding.
+        */
+       erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
+       assert(erval.encoded != -1);
+       if((size_t)erval.encoded != cmp_buf_size) {
+               printf("%zd != %zd\n", erval.encoded, cmp_buf_size);
+        assert((size_t)erval.encoded == cmp_buf_size);
+    }
+       for(size_t i = 0; i < cmp_buf_size; i++) {
+               if(buf[i] != cmp_buf[i]) {
+                       fprintf(stderr, "Recreated buffer content mismatch:\n");
+                       fprintf(stderr, "Byte %zd, %x != %x (%d != %d)\n",
+                               i,
+                               buf[i], cmp_buf[i],
+                               buf[i], cmp_buf[i]
+                       );
+               }
+               assert(buf[i] == cmp_buf[i]);
+       }
+
+    buf = 0;
+}
+
+static void
+partial_read(uint8_t *buf_0, size_t size) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+       uint8_t buf_1[size];
+       uint8_t buf_2[size];
+       uint8_t buf_3[size];
+
+       fprintf(stderr, "\nPartial read sequence...\n");
+
+       /*
+        * Divide the space (size) into three blocks in various combinations:
+        *   |<----->i1<----->i2<----->|
+        *   ^ buf_0                    ^ buf_0+size
+        * Try to read block by block.
+        */
+       for(size_t i1 = 0; i1 < size; i1++) {
+               for(size_t i2 = i1; i2 < size; i2++) {
+                       uint8_t *chunk1 = buf_0;
+                       size_t size1 = i1;
+                       uint8_t *chunk2 = buf_0 + size1;
+                       size_t size2 = i2 - i1;
+                       uint8_t *chunk3 = buf_0 + size1 + size2;
+                       size_t size3 = size - size1 - size2;
+
+                       fprintf(stderr, "\n%zd:{%zd, %zd, %zd}...\n",
+                               size, size1, size2, size3);
+
+                       memset(buf_1, 0, size);
+                       memset(buf_2, 0, size);
+                       memset(buf_3, 0, size);
+                       memcpy(buf_1, chunk1, size1);
+                       memcpy(buf_2, chunk2, size2);
+                       memcpy(buf_3, chunk3, size3);
+
+                       tp = memset(&t, 0, sizeof(t));
+
+                       fprintf(stderr, "=> Chunk 1 (%zd):\n", size1);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               buf_1, size1);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size1);
+                       if(rval.consumed < size1) {
+                               int leftover = size1 - rval.consumed;
+                               memcpy(buf_2, buf_1 + rval.consumed, leftover);
+                               memcpy(buf_2 + leftover, chunk2, size2);
+                               size2 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 2 (%zd):\n", size2);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               buf_2, size2);
+                       assert(rval.code == RC_WMORE);
+                       assert(rval.consumed <= size2);
+                       if(rval.consumed < size2) {
+                               int leftover = size2 - rval.consumed;
+                               memcpy(buf_3, buf_2 + rval.consumed, leftover);
+                               memcpy(buf_3 + leftover, chunk3, size3);
+                               size3 += leftover;
+                       }
+
+                       fprintf(stderr, "=> Chunk 3 (%zd):\n", size3);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
+                               buf_3, size3);
+                       assert(rval.code == RC_OK);
+                       assert(rval.consumed == size3);
+
+                       ASN_STRUCT_RESET(asn_DEF_T, &t);
+               }
+       }
+}
+
+int
+main(int ac, char **av) {
+       T_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       /* Check exact buf1 */
+       check(&t, buf1, sizeof(buf1), sizeof(buf1));
+       compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
+       asn_fprint(stderr, &asn_DEF_T, &t);
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Check slightly more than buf1 */
+       check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
+       compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
+       asn_fprint(stderr, &asn_DEF_T, &t);
+       ASN_STRUCT_RESET(asn_DEF_T, &t);
+
+       /* Split the buffer in parts and check decoder restartability */
+       partial_read(buf1, sizeof(buf1));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-42.-fwide-types.cc b/tests/tests-c-compiler/check-src/check-42.-fwide-types.cc
new file mode 100644 (file)
index 0000000..c2ec29b
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * This file checks that the output may be compiled by the C++ compiler.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <VariablePart.h>
+
+int
+main() {
+       VariablePart_t t;
+
+       t.present = VariablePart_PR_vrange;
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-42.c b/tests/tests-c-compiler/check-src/check-42.c
new file mode 100644 (file)
index 0000000..4f11f61
--- /dev/null
@@ -0,0 +1,156 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <LogLine.h>
+
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+       LogLine_t *lp = 0;
+       (void)ber_decode(0, &asn_DEF_LogLine, (void **)&lp, Data, Size);
+    ASN_STRUCT_FREE(asn_DEF_LogLine, lp);
+    return 0;
+}
+
+#else
+
+uint8_t buf0[] = {
+       48,     /* LogLine SEQUENCE */
+       24,     /* L */
+       22,     /* IA5String */
+       4,      /* L */
+       /* "zzz\007" */
+  122, 122, 122, 7,
+       48,     /* varsets SEQUENCE OF VariablePartSet */
+       16,     /* L */
+       48,     /* VariablePart */
+       14,     /* L */
+       48,     /* vparts SEQUENCE OF VariablePart */
+       7,      /* L */
+       49,     /* VariablePart */
+       5,
+       26,     /* VisibleString */
+       3,
+       49, 50, 51,     /* 1 2 3 */
+       48,     /* ActionItem SEQUENCE */
+       3,      /* L */
+       10,     /* accept-as ENUMERATED */
+       1,      /* L */
+       0,
+};
+
+uint8_t buf1[] = {
+       48,     /* LogLine SEQUENCE */
+       19,     /* L */
+       22,     /* IA5String */
+       6,      /* L */
+       /* "static" */
+  115, 116, 97, 116, 105, 99,
+       48,     /* varsets SEQUENCE OF VariablePartSet */
+       9,      /* L */
+       48,     /* VariablePart */
+       7,      /* L */
+       48,     /* vparts SEQUENCE OF VariablePart */
+       0,      /* L */
+       48,     /* ActionItem SEQUENCE */
+       3,      /* L */
+       10,     /* accept-as ENUMERATED */
+       1,      /* L */
+       0,
+};
+
+static void
+check(LogLine_t *tp, uint8_t *ptr, size_t size, size_t consumed) {
+       asn_dec_rval_t rval;
+
+       tp = memset(tp, 0, sizeof(*tp));
+
+       fprintf(stderr, "Buf %p (%zd)\n", ptr, size);
+       rval = ber_decode(0, &asn_DEF_LogLine, (void **)&tp, ptr, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == consumed);
+       asn_fprint(stderr, &asn_DEF_LogLine, tp);
+       ASN_STRUCT_RESET(asn_DEF_LogLine, tp);
+}
+
+uint8_t *buf;
+uint8_t buf_size;
+uint8_t buf_pos;
+
+
+static int
+buf_fill(const void *buffer, size_t size, void *app_key) {
+
+       (void)app_key;  /* Unused argument */
+
+       assert(buf_pos + size <= buf_size);
+
+       memcpy(buf + buf_pos, buffer, size);
+       buf_pos += size;
+
+       return 0;
+}
+
+static void
+check_serialize() {
+       LogLine_t ll;
+       VariablePartSet_t *vps;
+       VariablePart_t *vp;
+       VisibleString_t *vpart;
+       asn_enc_rval_t erval;
+       int i;
+
+       memset(&ll, 0, sizeof(ll));
+       vps = calloc(1, sizeof(*vps));
+       vp = calloc(1, sizeof(*vp));
+       vpart = OCTET_STRING_new_fromBuf(&asn_DEF_VisibleString, "123", 3);
+
+       vp->present = VariablePart_PR_vset;
+       ASN_SET_ADD(&vp->choice.vset, vpart);
+       vps->resolution.accept_as = accept_as_unknown;
+       ASN_SEQUENCE_ADD(&vps->vparts, vp);
+       ASN_SEQUENCE_ADD(&ll.varsets, vps);
+       OCTET_STRING_fromBuf(&ll.line_digest, "zzz\007", 4);
+
+       asn_fprint(stderr, &asn_DEF_LogLine, &ll);
+       buf_size = 128;
+       uint8_t scratch[buf_size];
+       buf = scratch;
+       erval = der_encode(&asn_DEF_LogLine, &ll, buf_fill, 0);
+       assert(erval.encoded > 1);
+       fprintf(stderr, "Encoded in %zd bytes\n", erval.encoded);
+       fprintf(stderr, "\n");
+       for(i = 0; i < buf_pos; i++) {
+               fprintf(stderr, "%d ", buf[i]);
+       }
+       fprintf(stderr, "\n\n");
+       assert(erval.encoded == sizeof(buf0));
+       assert(memcmp(buf0, buf, sizeof(buf0)) == 0);
+       ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LogLine, &ll);
+       return;
+}
+
+int
+main(int ac, char **av) {
+       LogLine_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check_serialize();
+
+       check(&t, buf0, sizeof(buf0), sizeof(buf0));
+       check(&t, buf1, sizeof(buf1), sizeof(buf1));
+
+       return 0;
+}
+
+#endif
diff --git a/tests/tests-c-compiler/check-src/check-43.c b/tests/tests-c-compiler/check-src/check-43.c
new file mode 100644 (file)
index 0000000..4a61385
--- /dev/null
@@ -0,0 +1,27 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Test-structure-1.h>
+#include <Choice-1.h>
+
+int
+main(int ac, char **av) {
+       Test_structure_1_t ts1;
+       Choice_1_t cs1;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&ts1, 0, sizeof(ts1));
+       memset(&cs1, 0, sizeof(cs1));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-44.c b/tests/tests-c-compiler/check-src/check-44.c
new file mode 100644 (file)
index 0000000..f7c2835
--- /dev/null
@@ -0,0 +1,66 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf1[] = {
+       32 | ((3 << 6) + 1),    /* [PRIVATE 1], constructed */
+       4,      /* L */
+       ((3 << 6) + 2),         /* [PRIVATE 2], primitive */
+       0,      /* L */
+       ((3 << 6) + 5),         /* [PRIVATE 5], primitive */
+       0,      /* L */
+};
+
+uint8_t buf2[] = {
+       32 | ((3 << 6) + 1),    /* [PRIVATE 1], constructed */
+       6,      /* L */
+       ((3 << 6) + 2),         /* [PRIVATE 2], primitive */
+       0,      /* L */
+       32 | ((3 << 6) + 9),    /* [PRIVATE 9], constructed */
+       2,
+       ((3 << 6) + 1),         /* [PRIVATE 1], primitive */
+       0,      /* L */
+};
+
+static void
+check(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+       } else {
+               if(rval.code == RC_OK) {
+               }
+               assert(rval.consumed <= consumed);
+       }
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(1, buf1, sizeof(buf1), sizeof(buf1));
+       check(0, buf1, sizeof(buf1) - 1, sizeof(buf1) - 1);
+       check(0, buf1, sizeof(buf1) - 2, sizeof(buf1) - 2);
+
+       check(1, buf2, sizeof(buf2), sizeof(buf2));
+       check(0, buf2, sizeof(buf2) - 1, sizeof(buf2));
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-46.c b/tests/tests-c-compiler/check-src/check-46.c
new file mode 100644 (file)
index 0000000..21ae690
--- /dev/null
@@ -0,0 +1,47 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+
+uint8_t buf1[] = {
+       32 | ((2 << 6) + 3),    /* [3], constructed */
+       5,
+       ((2 << 6) + 5), /* [5], primitive */
+       3,      /* L */
+  'a',
+  'b',
+  'c',
+};
+
+static void
+check(uint8_t *buf, size_t size, size_t consumed) {
+       T_t t, *tp;
+       asn_dec_rval_t rval;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == consumed);
+       ASN_STRUCT_RESET(asn_DEF_T, tp);
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check(buf1, sizeof(buf1), sizeof(buf1));
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-48.c b/tests/tests-c-compiler/check-src/check-48.c
new file mode 100644 (file)
index 0000000..a41981e
--- /dev/null
@@ -0,0 +1,100 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+
+#include <UserIdentifier.h>
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       unsigned char *b, *bend;
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+       b = buf + buf_offset;
+       bend = b + size;
+       printf("=> [");
+       for(; b < bend; b++)
+               printf(" %02X", *b);
+       printf("]:%zd\n", size);
+       buf_offset += size;
+       return 0;
+}
+
+static int
+save_object(void *bs, asn_TYPE_descriptor_t *td) {
+       asn_enc_rval_t rval; /* Return value */
+       int i;
+       
+       rval = der_encode(td, bs, _buf_writer, 0);
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return -1;      /* JIC */
+       }
+
+       buf[buf_offset++] = 123;        /* Finalize with garbage */
+
+       asn_fprint(stderr, td, bs);
+       xer_fprint(stderr, td, bs);
+
+       printf("OUT: [");
+       for(i = 0; i < buf_offset; i++)
+               printf(" %02x", buf[i]);
+       printf("]\n");
+
+       return 0;
+}
+
+static int
+load_object(void *bs, asn_TYPE_descriptor_t *td) {
+       asn_dec_rval_t rval;
+
+       fprintf(stderr, "\nLOADING OBJECT OF SIZE %d\n", buf_offset);
+
+       rval = ber_decode(0, td, (void **)&bs, buf, buf_offset);
+       assert(rval.code == RC_OK);
+
+       asn_fprint(stderr, td, bs);
+       xer_fprint(stderr, td, bs);
+
+       return (rval.code == RC_OK)?0:-1;
+}
+
+int
+main() {
+       asn_TYPE_descriptor_t *td = &asn_DEF_UserIdentifier;
+       UserIdentifier_t user;
+       UserIdentifier_t user_new;
+       int ret;
+
+       memset(&user, 0, sizeof user);
+       memset(&user_new, 0, sizeof user_new);
+
+       user.present = UserIdentifier_PR_phoneNumber;
+       OCTET_STRING_fromBuf(
+               &user.choice.phoneNumber,
+               "0123456789", -1);
+
+       /* Save->Load must succeed */
+       save_object(&user, td);
+       ret = load_object(&user_new, td);
+
+       assert(user_new.present == UserIdentifier_PR_phoneNumber);
+
+       assert(ret == 0);
+
+       printf("OK\n");
+
+       ASN_STRUCT_RESET(asn_DEF_UserIdentifier, &user);
+       ASN_STRUCT_RESET(asn_DEF_UserIdentifier, &user_new);
+       return ret;
+}
diff --git a/tests/tests-c-compiler/check-src/check-50.c b/tests/tests-c-compiler/check-src/check-50.c
new file mode 100644 (file)
index 0000000..cfdd600
--- /dev/null
@@ -0,0 +1,23 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Int5.h>
+#include <Str4.h>
+#include <Utf8-4.h>
+#include <VisibleIdentifier.h>
+
+int
+main(int ac, char **av) {
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-59.c b/tests/tests-c-compiler/check-src/check-59.c
new file mode 100644 (file)
index 0000000..ba970be
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Choice.h>
+
+int
+main(int ac, char **av) {
+       Choice_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-60.c b/tests/tests-c-compiler/check-src/check-60.c
new file mode 100644 (file)
index 0000000..f7e84ca
--- /dev/null
@@ -0,0 +1,208 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <errno.h>
+
+#include <T1.h>
+#include <T2.h>
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       unsigned char *b, *bend;
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       if (buffer) {
+               memcpy(buf + buf_offset, buffer, size);
+       }
+       b = buf + buf_offset;
+       bend = b + size;
+       printf("=> [");
+       for(; b < bend; b++)
+               printf(" %02X", *b);
+       printf("]:%zd\n", size);
+       buf_offset += size;
+       return 0;
+}
+
+static int
+save_object(void *bs, asn_TYPE_descriptor_t *td) {
+       asn_enc_rval_t rval; /* Return value */
+       int i;
+
+       buf_offset = 0;
+       
+       rval = der_encode(td, bs, _buf_writer, 0);
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return -1;      /* JIC */
+       }
+
+       buf[buf_offset++] = 0xab;       /* Finalize with garbage */
+
+       asn_fprint(stderr, td, bs);
+
+       printf("OUT: [");
+       for(i = 0; i < buf_offset; i++)
+               printf(" %02x", buf[i]);
+       printf("]\n");
+
+       return 0;
+}
+
+static int
+load_object(void *bs, asn_TYPE_descriptor_t *td) {
+       asn_dec_rval_t rval;
+
+       fprintf(stderr, "\nLOADING OBJECT OF SIZE %d\n", buf_offset);
+
+       rval = ber_decode(0, td, (void **)&bs, buf, buf_offset);
+       assert(rval.code == RC_OK);
+
+       asn_fprint(stderr, td, bs);
+
+       return (rval.code == RC_OK)?0:-1;
+}
+
+/* [3] IMPLICIT SEQUENCE { b BOOLEAN } */
+uint8_t test_any_buf1[] = { 0xa3, 0x80, /* [3], constructed, indefinite */
+       0x01, 0x01, 0xff,       /* b BOOLEAN ::= TRUE */
+       0x00, 0x00 /* End of content octets */ };
+
+/* b BOOLEAN */
+uint8_t test_any_buf2[] = { 0x01, 0x01, 0x13 };
+
+int
+main() {
+       asn_TYPE_descriptor_t *td1 = &asn_DEF_T1;
+       asn_TYPE_descriptor_t *td2 = &asn_DEF_T2;
+       T1_t t1, t1_new;
+       T2_t t2, t2_new;
+       int ret;
+
+       /*
+        * Test the T1 with constructed indefinite length ANY encoding.
+        */
+       memset(&t1, 0, sizeof(t1));
+       memset(&t1_new, 0, sizeof(t1_new));
+
+       t1.i = 112233;
+       t1.any.buf = test_any_buf1;
+       t1.any.size = sizeof(test_any_buf1);
+
+       /* Save->Load must succeed */
+       save_object(&t1, td1);
+       ret = load_object(&t1_new, td1);
+
+       assert(ret == 0);
+       assert(t1_new.i == 112233);
+       assert(t1_new.any.size == (ssize_t)sizeof(test_any_buf1));
+       assert(memcmp(t1_new.any.buf, test_any_buf1, sizeof(test_any_buf1)) == 0);
+
+       /*
+        * Test the T1 with primitive encoding.
+        */
+       memset(&t1, 0, sizeof(t1));
+       ASN_STRUCT_RESET(asn_DEF_T1, &t1_new);
+
+       t1.i = -112233;
+       t1.any.buf = test_any_buf2;
+       t1.any.size = sizeof(test_any_buf2);
+
+       /* Save->Load must succeed */
+       save_object(&t1, td1);
+       ret = load_object(&t1_new, td1);
+
+       assert(ret == 0);
+       assert(t1_new.i == -112233);
+       assert(t1_new.any.size == (ssize_t)sizeof(test_any_buf2));
+       assert(memcmp(t1_new.any.buf, test_any_buf2, sizeof(test_any_buf2)) == 0);
+       ASN_STRUCT_RESET(asn_DEF_T1, &t1_new);
+
+       /*
+        * Test the T2 empty sequence.
+        */
+       memset(&t2, 0, sizeof(t2));
+       memset(&t2_new, 0, sizeof(t2_new));
+
+       t2.i = 332211;
+       t2.any = calloc(1, sizeof(*t2.any));
+       t2.any->buf = 0;
+       t2.any->size = 0;
+
+       /* Save->Load must succeed */
+       save_object(&t2, td2);
+       ret = load_object(&t2_new, td2);
+
+       assert(ret == 0);
+       assert(t2_new.i == 332211);
+       assert(t2_new.any->size == 0);
+
+       /*
+        * Test the T2 sequence.
+        */
+       ASN_STRUCT_RESET(asn_DEF_T2, &t2);
+       ASN_STRUCT_RESET(asn_DEF_T2, &t2_new);
+
+       t2.i = 332211;
+       t2.any = calloc(1, sizeof(*t2.any));
+       t2.any->buf = test_any_buf1;
+       t2.any->size = sizeof(test_any_buf1);
+
+       /* Save->Load must succeed */
+       save_object(&t2, td2);
+       ret = load_object(&t2_new, td2);
+
+       assert(ret == 0);
+       assert(t2_new.i == 332211);
+       assert(t2_new.any->size == (ssize_t)sizeof(test_any_buf1));
+       assert(memcmp(t2_new.any->buf, test_any_buf1, sizeof(test_any_buf1)) == 0);
+
+       /*
+        * Test the T2 sequence with primitive encoding.
+        */
+       t2.any->buf = NULL;
+       t2.any->size = 0;
+       ASN_STRUCT_RESET(asn_DEF_T2, &t2);
+       ASN_STRUCT_RESET(asn_DEF_T2, &t2_new);
+
+       t2.i = 0;
+       t2.any = calloc(1, sizeof(*t2.any));
+       t2.any->buf = test_any_buf2;
+       t2.any->size = sizeof(test_any_buf2);
+
+       /* Save->Load must succeed */
+       save_object(&t2, td2);
+       ret = load_object(&t2_new, td2);
+
+       assert(ret == 0);
+       assert(t2_new.i == 0);
+       assert(t2_new.any->size == (ssize_t)sizeof(test_any_buf2));
+       assert(memcmp(t2_new.any->buf, test_any_buf2, sizeof(test_any_buf2)) == 0);
+
+       /*
+        * Test T2 with ANY element omitted.
+        */
+       free(t2.any);
+       t2.any = 0;
+       ASN_STRUCT_RESET(asn_DEF_T2, &t2_new);
+
+       save_object(&t2, td2);
+       ret = load_object(&t2_new, td2);
+
+       assert(ret == 0);
+       assert(t2_new.i == 0);
+       assert(t2_new.any == 0);
+
+       printf("OK\n");
+
+       return ret;
+}
diff --git a/tests/tests-c-compiler/check-src/check-62.c b/tests/tests-c-compiler/check-src/check-62.c
new file mode 100644 (file)
index 0000000..2a09616
--- /dev/null
@@ -0,0 +1,224 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2), getcwd(3) */
+#include <string.h>
+#include <dirent.h>
+#include <assert.h>
+#include <errno.h>
+
+#include <T.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+enum expectation {
+       EXP_OK,         /* Encoding/decoding must succeed */
+       EXP_BROKEN,     /* Decoding must fail */
+       EXP_RECLESS,    /* Reconstruction is allowed to yield less data */
+       EXP_DIFFERENT,  /* Reconstruction will yield different encoding */
+};
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       unsigned char *b, *bend;
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       if (buffer) {
+               memcpy(buf + buf_offset, buffer, size);
+       }
+       b = buf + buf_offset;
+       bend = b + size;
+       printf("=> [");
+       for(; b < bend; b++)
+               printf(" %02X", *b);
+       printf("]:%zd\n", size);
+       buf_offset += size;
+       return 0;
+}
+
+static int
+save_object(T_t *st) {
+       asn_enc_rval_t rval; /* Return value */
+
+       buf_offset = 0;
+       
+       rval = der_encode(&asn_DEF_T, st, _buf_writer, 0);
+       if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return -1;      /* JIC */
+       }
+
+       fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+
+       return 0;
+}
+
+static T_t *
+load_object(enum expectation expectation, unsigned char *fbuf, size_t size) {
+       asn_dec_rval_t rval;
+       T_t *st = 0;
+       int csize;
+
+       fprintf(stderr, "LOADING OBJECT OF SIZE %d\n", (int)size);
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(csize = 1; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_T, st);
+               st = 0;
+
+               do {
+                       fprintf(stderr, "Decoding from %d with %d (left %d)\n",
+                               fbuf_offset, fbuf_chunk, fbuf_left);
+                       rval = ber_decode(0, &asn_DEF_T, (void **)&st,
+                               fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                               ? fbuf_chunk : fbuf_left);
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               if(expectation != EXP_BROKEN) {
+                       assert(rval.code == RC_OK);
+                       assert(fbuf_offset == (ssize_t)size);
+               } else {
+                       assert(rval.code != RC_OK);
+                       fprintf(stderr, "Failed, but this was expected\n");
+                       ASN_STRUCT_FREE(asn_DEF_T, st);
+                       st = 0; /* ignore leak for now */
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_T, st);
+       return st;
+}
+
+
+static void
+process_data(enum expectation expectation, unsigned char *fbuf, ssize_t size) {
+       T_t *st;
+       int ret;
+
+       st = load_object(expectation, fbuf, size);
+       if(!st) return;
+
+       ret = save_object(st);
+       assert(buf_offset < (ssize_t)sizeof(buf));
+       assert(ret == 0);
+
+       switch(expectation) {
+       case EXP_RECLESS:
+               assert(buf_offset > 0 && buf_offset < size);
+               assert(memcmp(buf + 2, fbuf + 2, buf_offset - 2) == 0);
+               break;
+       case EXP_DIFFERENT:
+               assert(buf_offset > 0 && buf_offset < size);
+               break;
+       case EXP_BROKEN:
+               assert(buf_offset != size
+                       || memcmp(buf, fbuf, buf_offset));
+               break;
+       case EXP_OK:
+               assert(buf_offset == (ssize_t)size);
+               assert(memcmp(buf, fbuf, buf_offset) == 0);
+               break;
+       }
+
+       ASN_STRUCT_FREE(asn_DEF_T, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       char prevdir[256];
+       unsigned char fbuf[4096];
+       char *ext = strrchr(fname, '.');
+       enum expectation expectation;
+       char *cwd;
+       int ret;
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".ber"))
+               return 0;
+
+       switch(ext[-1]) {
+       case 'B':       /* The file is intentionally broken */
+               expectation = EXP_BROKEN; break;
+       case 'D':       /* Reconstructing should yield different data */
+               expectation = EXP_DIFFERENT; break;
+       case 'L':       /* Extensions are present */
+               expectation = EXP_RECLESS; break;
+       default:
+               expectation = EXP_OK; break;
+       }
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       cwd = getcwd(prevdir, sizeof(prevdir));
+       assert(cwd != NULL);
+       ret = chdir(SRCDIR_S "/data-62");
+       assert(ret == 0);
+       fp = fopen(fname, "r");
+       ret = chdir(prevdir);
+       assert(ret == 0);
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert(rd < (ssize_t)sizeof(fbuf));     /* expect small files */
+
+       process_data(expectation, fbuf, rd);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       dir = opendir(SRCDIR_S "/data-62");
+       assert(dir);
+
+       str = getenv("DATA_62_FILE");
+       if(str && strncmp(str, "data-62-", 8) == 0)
+               process(str);
+
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-62-", 8) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check-65.c b/tests/tests-c-compiler/check-src/check-65.c
new file mode 100644 (file)
index 0000000..c292063
--- /dev/null
@@ -0,0 +1,114 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <T.h>
+#include <T1.h>
+
+uint8_t buf1[] = {
+       32 | ((2 << 6) + 2),    /* [2], constructed */
+       6,
+       32 | ((2 << 6) + 3),    /* [3], constructed */
+       4,
+       32 | ((2 << 6) + 4),    /* [4], constructed */
+       2,
+       0  | ((2 << 6) + 6),    /* [6], primitive */
+       0
+};
+
+uint8_t buf2[] = {
+
+       32 | ((2 << 6) + 0),    /* [0], constructed */
+       23,
+
+       32 | ((2 << 6) + 1),    /* [1], constructed */
+       6,
+       32 | ((2 << 6) + 4),    /* [4], constructed */
+       4,
+       0  | ((2 << 6) + 6),    /* [6], primitive */
+       2,
+  0xC0,
+  0x00,
+
+       32 | ((2 << 6) + 2),    /* [2], constructed */
+       6,
+       32 | ((2 << 6) + 4),    /* [4], constructed */
+       4,
+       0  | ((2 << 6) + 6),    /* [6], primitive */
+       2,
+  0x80,
+  0x00,
+
+       32 | ((2 << 6) + 3),    /* [3], constructed */
+       5,
+       0  | ((2 << 6) + 6),    /* [6], primitive */
+       3,
+  0x80,
+  0x01,
+  0x02,
+};
+
+static void
+check_1(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       asn_TYPE_descriptor_t *td = &asn_DEF_T1;
+       asn_dec_rval_t rval;
+       T1_t t, *tp;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, td, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+       } else {
+               if(rval.code == RC_OK) {
+               }
+               assert(rval.consumed <= consumed);
+       }
+}
+
+static void
+check_2(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
+       asn_TYPE_descriptor_t *td = &asn_DEF_T;
+       asn_dec_rval_t rval;
+       T_t t, *tp;
+
+       tp = memset(&t, 0, sizeof(t));
+
+       fprintf(stderr, "Buf %p\n", buf);
+       rval = ber_decode(0, td, (void **)&tp, buf, size);
+       fprintf(stderr, "Returned code %d, consumed %zd\n",
+               (int)rval.code, rval.consumed);
+
+       if(is_ok) {
+               assert(rval.code == RC_OK);
+               assert(rval.consumed == consumed);
+       } else {
+               if(rval.code == RC_OK) {
+               }
+               assert(rval.consumed <= consumed);
+       }
+       ASN_STRUCT_RESET(*td, tp);
+}
+
+int
+main(int ac, char **av) {
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       check_1(1, buf1, sizeof(buf1), sizeof(buf1));
+       check_1(0, buf1, sizeof(buf1) - 1, sizeof(buf1) - 1);
+
+       check_2(1, buf2, sizeof(buf2), sizeof(buf2));
+       check_2(0, buf2, sizeof(buf2) - 1, sizeof(buf2) - 1);
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-70.-fwide-types.c b/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
new file mode 100644 (file)
index 0000000..82653fc
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+ * Mode of operation:
+ * Each of the *.in files is XER-decoded, then converted into DER,
+ * then decoded from DER and encoded into XER again. The resulting
+ * stream is checked against rules specified in ../data-70/README file.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2), getcwd(3) */
+#include <string.h>
+#include <ctype.h>
+#include <dirent.h>
+#include <assert.h>
+#include <errno.h>
+
+#include <PDU.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+    PDU_t *st = 0;
+    asn_dec_rval_t rval;
+    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
+    assert(rval.consumed <= Size);
+    ASN_STRUCT_FREE(asn_DEF_PDU, st);
+    return 0;
+}
+
+#else
+
+enum expectation {
+       EXP_OK,         /* Encoding/decoding must succeed */
+       EXP_CXER_EXACT, /* Encoding/decoding using CXER must be exact */
+       EXP_CXER_DIFF,  /* Encoding/decoding using CXER must be different */
+       EXP_BROKEN,     /* Decoding must fail */
+       EXP_DIFFERENT,  /* Reconstruction will yield different encoding */
+};
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       unsigned char *b, *bend;
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+       b = buf + buf_offset;
+       bend = b + size;
+       fprintf(stderr, "=> [");
+       for(; b < bend; b++) {
+               if(*b >= 32 && *b < 127 && *b != '%')
+                       fprintf(stderr, "%c", *b);
+               else
+                       fprintf(stderr, "%%%02x", *b);
+       }
+       fprintf(stderr, "]:%zd\n", size);
+       buf_offset += size;
+       return 0;
+}
+
+static void
+save_object_as(PDU_t *st, enum asn_transfer_syntax syntax) {
+    asn_enc_rval_t rval; /* Return value */
+
+    buf_offset = 0;
+
+    rval = asn_encode(0, syntax, &asn_DEF_PDU, st, _buf_writer, 0);
+
+    if (rval.encoded == -1) {
+        fprintf(stderr,
+            "Cannot encode %s: %s\n",
+            rval.failed_type->name, strerror(errno));
+        assert(rval.encoded != -1);
+        return;
+    }
+
+    fprintf(stderr, "SAVED OBJECT IN SIZE %d/%zd\n", buf_offset, rval.encoded);
+
+    assert(buf_offset == rval.encoded);
+}
+
+static PDU_t *
+load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum asn_transfer_syntax syntax) {
+       asn_dec_rval_t rval;
+       PDU_t *st = 0;
+       size_t csize = 1;
+
+       if(getenv("INITIAL_CHUNK_SIZE"))
+               csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               fprintf(stderr, "LOADING OBJECT OF SIZE %zd, chunks %zd\n",
+                       size, csize);
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               st = 0;
+
+               do {
+                       ASN_DEBUG("Decoding bytes %d..%d (left %d)",
+                               fbuf_offset,
+                                       fbuf_chunk < fbuf_left
+                                               ? fbuf_chunk : fbuf_left,
+                                       fbuf_left);
+#ifdef  ASN_EMIT_DEBUG
+                       if(st) {
+                               fprintf(stderr, "=== currently ===\n");
+                               asn_fprint(stderr, &asn_DEF_PDU, st);
+                               fprintf(stderr, "=== end ===\n");
+                       }
+#endif
+                       rval = asn_decode(0, syntax, &asn_DEF_PDU, (void **)&st,
+                               fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left);
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               if(expectation != EXP_BROKEN) {
+                       assert(rval.code == RC_OK);
+                       if(syntax == ATS_BER) {
+                               assert(fbuf_offset == (ssize_t)size);
+                       } else {
+                               assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
+                                       && fbuf[size - 1] == '\n')
+                               || (fbuf_offset + 2 /* "\r\n" */  == (ssize_t)size
+                                       && fbuf[size - 2] == '\r'
+                                       && fbuf[size - 1] == '\n')
+                               );
+                       }
+               } else {
+                       assert(rval.code != RC_OK);
+                       fprintf(stderr, "Failed, but this was expected\n");
+                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                       st = 0; /* ignore leak for now */
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_PDU, st);
+       return st;
+}
+
+static int
+xer_encoding_equal(void *obufp, size_t osize, void *nbufp, size_t nsize) {
+    char *obuf = obufp;
+    char *nbuf = nbufp;
+       char *oend = obuf + osize;
+       char *nend = nbuf + nsize;
+
+       if((osize && !nsize) || (!osize && nsize))
+               return 0;       /* not equal apriori */
+
+       while(1) {
+               while(obuf < oend && isspace(*obuf)) obuf++;
+               while(nbuf < nend && isspace(*nbuf)) nbuf++;
+
+               if(obuf == oend || nbuf == nend) {
+                       if(obuf == oend && nbuf == nend)
+                               break;
+                       fprintf(stderr, "%s data in reconstructed encoding\n",
+                               (obuf == oend) ? "More" : "Less");
+                       return 0;
+               }
+
+               if(*obuf != *nbuf) {
+                       printf("%c%c != %c%c\n",
+                               obuf[0], obuf[1],
+                               nbuf[0], nbuf[1]);
+                       return 0;
+               }
+               obuf++, nbuf++;
+       }
+
+       return 1;
+}
+
+static void
+process_XER_data(enum expectation expectation, unsigned char *fbuf, size_t size) {
+       PDU_t *st;
+
+       st = load_object_from(expectation, fbuf, size, ATS_BASIC_XER);
+       if(!st) return;
+
+       /* Save and re-load as DER */
+       save_object_as(st, ATS_DER);
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+       st = load_object_from(expectation, buf, buf_offset, ATS_BER);
+       assert(st);
+
+       save_object_as(st,
+                       (expectation == EXP_CXER_EXACT
+                       || expectation == EXP_CXER_DIFF)
+                       ? ATS_CANONICAL_XER : ATS_BASIC_XER);
+       fprintf(stderr, "=== original ===\n");
+       fwrite(fbuf, 1, size, stderr);
+       fprintf(stderr, "=== re-encoded ===\n");
+       fwrite(buf, 1, buf_offset, stderr);
+       fprintf(stderr, "=== end ===\n");
+
+       switch(expectation) {
+       case EXP_DIFFERENT:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_BROKEN:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_CXER_EXACT:
+               buf[buf_offset++] = '\n';
+               assert((ssize_t)size == buf_offset);
+               assert(memcmp(fbuf, buf, size) == 0);
+               break;
+       case EXP_CXER_DIFF:
+               buf[buf_offset++] = '\n';
+               assert((ssize_t)size != buf_offset
+                       || memcmp(fbuf, buf, size));
+               break;
+       case EXP_OK:
+               assert(xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       }
+
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       char prevdir[256];
+       unsigned char fbuf[4096];
+       char *ext = strrchr(fname, '.');
+       enum expectation expectation;
+       char *cwd;
+       int ret;
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".in"))
+               return 0;
+
+       switch(ext[-1]) {
+       case 'B':       /* The file is intentionally broken */
+               expectation = EXP_BROKEN; break;
+       case 'D':       /* Reconstructing should yield different data */
+               expectation = EXP_DIFFERENT; break;
+       case 'E':       /* Byte to byte exact reconstruction */
+               expectation = EXP_CXER_EXACT; break;
+       case 'X':       /* Should fail byte-to-byte comparison */
+               expectation = EXP_CXER_DIFF; break;
+       default:
+               expectation = EXP_OK; break;
+       }
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       cwd = getcwd(prevdir, sizeof(prevdir));
+       assert(cwd != NULL);
+       ret = chdir(SRCDIR_S "/data-70");
+       assert(ret == 0);
+       fp = fopen(fname, "r");
+       ret = chdir(prevdir);
+       assert(ret == 0);
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert(rd < (ssize_t)sizeof(fbuf));     /* expect small files */
+
+       process_XER_data(expectation, fbuf, rd);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       /* Process a specific test file */
+       str = getenv("DATA_70_FILE");
+       if(str && strncmp(str, "data-70-", 8) == 0) {
+               process(str);
+               return 0;
+       }
+
+       dir = opendir(SRCDIR_S "/data-70");
+       assert(dir);
+
+       /*
+        * Process each file in that directory.
+        */
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-70-", 8) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
+#endif
diff --git a/tests/tests-c-compiler/check-src/check-70.c b/tests/tests-c-compiler/check-src/check-70.c
new file mode 100644 (file)
index 0000000..a499c9c
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * Mode of operation:
+ * Each of the *.in files is XER-decoded, then converted into DER,
+ * then decoded from DER and encoded into XER again. The resulting
+ * stream is compared with the corresponding .out file.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>    /* for chdir(2), getcwd(3) */
+#include <string.h>
+#include <dirent.h>
+#include <ctype.h>     /* for isspace(3) */
+#include <assert.h>
+#include <errno.h>
+
+#include <PDU.h>
+
+#ifndef SRCDIR
+#define SRCDIR_S ".."
+#else
+#define STRINGIFY_MACRO2(x) #x
+#define STRINGIFY_MACRO(x)  STRINGIFY_MACRO2(x)
+#define SRCDIR_S    STRINGIFY_MACRO(SRCDIR)
+#endif
+
+#ifdef ENABLE_LIBFUZZER
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+    PDU_t *st = 0;
+    asn_dec_rval_t rval;
+    rval = asn_decode(0, ATS_BASIC_XER, &asn_DEF_PDU, (void **)&st, Data, Size);
+    assert(rval.consumed <= Size);
+    ASN_STRUCT_FREE(asn_DEF_PDU, st);
+    return 0;
+}
+
+#else
+
+enum expectation {
+       EXP_OK,         /* Encoding/decoding must succeed */
+       EXP_BROKEN,     /* Decoding must fail */
+       EXP_DIFFERENT,  /* Reconstruction will yield different encoding */
+};
+
+static unsigned char buf[4096];
+static int buf_offset;
+
+static int
+_buf_writer(const void *buffer, size_t size, void *app_key) {
+       unsigned char *b, *bend;
+       (void)app_key;
+       assert(buf_offset + size < sizeof(buf));
+       memcpy(buf + buf_offset, buffer, size);
+       b = buf + buf_offset;
+       bend = b + size;
+       fprintf(stderr, "=> [");
+       for(; b < bend; b++)
+               fprintf(stderr, "%c", *b);
+       fprintf(stderr, "]:%zd\n", size);
+       buf_offset += size;
+       return 0;
+}
+
+static void
+save_object_as(PDU_t *st, enum asn_transfer_syntax syntax) {
+    asn_enc_rval_t rval; /* Return value */
+
+    buf_offset = 0;
+
+    rval = asn_encode(0, syntax, &asn_DEF_PDU, st, _buf_writer, 0);
+
+    if (rval.encoded == -1) {
+               fprintf(stderr,
+                       "Cannot encode %s: %s\n",
+                       rval.failed_type->name, strerror(errno));
+               assert(rval.encoded != -1);
+               return;
+    }
+
+    fprintf(stderr, "SAVED OBJECT IN SIZE %d/%zu\n", buf_offset, rval.encoded);
+
+    assert(buf_offset == rval.encoded);
+}
+
+static PDU_t *
+load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum asn_transfer_syntax syntax) {
+       asn_dec_rval_t rval;
+       PDU_t *st = 0;
+       size_t csize = 1;
+
+       if(getenv("INITIAL_CHUNK_SIZE"))
+               csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
+
+       /* Perform multiple iterations with multiple chunks sizes */
+       for(; csize < 20; csize += 1) {
+               int fbuf_offset = 0;
+               int fbuf_left = size;
+               int fbuf_chunk = csize;
+
+               fprintf(stderr, "LOADING OBJECT OF SIZE %zd, chunks %zd\n",
+                       size, csize);
+
+               if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
+               st = 0;
+
+               do {
+                       ASN_DEBUG("Decoding bytes %d..%d (left %d)",
+                               fbuf_offset,
+                                       fbuf_chunk < fbuf_left
+                                               ? fbuf_chunk : fbuf_left,
+                                       fbuf_left);
+#ifdef  ASN_EMIT_DEBUG
+                       if(st) {
+                               fprintf(stderr, "=== currently ===\n");
+                               asn_fprint(stderr, &asn_DEF_PDU, st);
+                               fprintf(stderr, "=== end ===\n");
+                       }
+#endif
+                       rval = asn_decode(0, syntax, &asn_DEF_PDU, (void **)&st,
+                               fbuf + fbuf_offset,
+                                       fbuf_chunk < fbuf_left 
+                                       ? fbuf_chunk : fbuf_left);
+                       fbuf_offset += rval.consumed;
+                       fbuf_left -= rval.consumed;
+                       if(rval.code == RC_WMORE)
+                               fbuf_chunk += 1;        /* Give little more */
+                       else
+                               fbuf_chunk = csize;     /* Back off */
+               } while(fbuf_left && rval.code == RC_WMORE);
+
+               if(expectation != EXP_BROKEN) {
+                       assert(rval.code == RC_OK);
+                       if(syntax == ATS_BER) {
+                               assert(fbuf_offset == (ssize_t)size);
+                       } else {
+                               assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
+                                       && fbuf[size - 1] == '\n')
+                               || (fbuf_offset + 2 /* "\r\n" */  == (ssize_t)size
+                                       && fbuf[size - 2] == '\r'
+                                       && fbuf[size - 1] == '\n')
+                               );
+                       }
+               } else {
+                       assert(rval.code != RC_OK);
+                       fprintf(stderr, "Failed, but this was expected\n");
+                       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+                       st = 0; /* ignore leak for now */
+               }
+       }
+
+       if(st) asn_fprint(stderr, &asn_DEF_PDU, st);
+       return st;
+}
+
+static int
+xer_encoding_equal(void *obufp, size_t osize, void *nbufp, size_t nsize) {
+    char *obuf = obufp;
+    char *nbuf = nbufp;
+       char *oend = obuf + osize;
+       char *nend = nbuf + nsize;
+
+       if((osize && !nsize) || (!osize && nsize))
+               return 0;       /* not equal apriori */
+
+       while(1) {
+               while(obuf < oend && isspace(*obuf)) obuf++;
+               while(nbuf < nend && isspace(*nbuf)) nbuf++;
+
+               if(obuf == oend || nbuf == nend) {
+                       if(obuf == oend && nbuf == nend)
+                               break;
+                       fprintf(stderr, "%s data in reconstructed encoding\n",
+                               (obuf == oend) ? "More" : "Less");
+                       return 0;
+               }
+
+               if(*obuf != *nbuf) {
+                       printf("%c%c != %c%c\n",
+                               obuf[0], obuf[1],
+                               nbuf[0], nbuf[1]);
+                       return 0;
+               }
+               obuf++, nbuf++;
+       }
+
+       return 1;
+}
+
+static void
+process_XER_data(enum expectation expectation, unsigned char *fbuf, size_t size) {
+       PDU_t *st;
+
+       st = load_object_from(expectation, fbuf, size, ATS_BASIC_XER);
+       if(!st) return;
+
+       /* Save and re-load as DER */
+       save_object_as(st, ATS_DER);
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+       st = load_object_from(expectation, buf, buf_offset, ATS_BER);
+       assert(st);
+
+       save_object_as(st, ATS_BASIC_XER);
+       fprintf(stderr, "=== original ===\n");
+       fwrite(fbuf, 1, size, stderr);
+       fprintf(stderr, "=== re-encoded ===\n");
+       fwrite(buf, 1, buf_offset, stderr);
+       fprintf(stderr, "=== end ===\n");
+
+       switch(expectation) {
+       case EXP_DIFFERENT:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_BROKEN:
+               assert(!xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       case EXP_OK:
+               assert(xer_encoding_equal(fbuf, size, buf, buf_offset));
+               break;
+       }
+
+       ASN_STRUCT_FREE(asn_DEF_PDU, st);
+}
+
+/*
+ * Decode the .der files and try to regenerate them.
+ */
+static int
+process(const char *fname) {
+       char prevdir[256];
+       unsigned char fbuf[4096];
+       char *ext = strrchr(fname, '.');
+       enum expectation expectation;
+       char *cwd;
+       int ret;
+       int rd;
+       FILE *fp;
+
+       if(ext == 0 || strcmp(ext, ".in"))
+               return 0;
+
+       switch(ext[-1]) {
+       case 'B':       /* The file is intentionally broken */
+               expectation = EXP_BROKEN; break;
+       case 'X':
+       case 'D':       /* Reconstructing should yield different data */
+               expectation = EXP_DIFFERENT; break;
+       case 'E':
+       default:
+               expectation = EXP_OK; break;
+       }
+
+       fprintf(stderr, "\nProcessing file [../%s]\n", fname);
+
+       cwd = getcwd(prevdir, sizeof(prevdir));
+       assert(cwd != NULL);
+       ret = chdir(SRCDIR_S "/data-70");
+       assert(ret == 0);
+       fp = fopen(fname, "r");
+       ret = chdir(prevdir);
+       assert(ret == 0);
+       assert(fp);
+
+       rd = fread(fbuf, 1, sizeof(fbuf), fp);
+       fclose(fp);
+
+       assert(rd > 0 && (size_t)rd < sizeof(fbuf));    /* expect small files */
+
+       process_XER_data(expectation, fbuf, rd);
+
+       return 1;
+}
+
+int
+main() {
+       DIR *dir;
+       struct dirent *dent;
+       int processed_files = 0;
+       char *str;
+
+       /* Process a specific test file */
+       str = getenv("DATA_70_FILE");
+       if(str && strncmp(str, "data-70-", 8) == 0)
+               process(str);
+
+       dir = opendir(SRCDIR_S "/data-70");
+       assert(dir);
+
+       /*
+        * Process each file in that directory.
+        */
+       while((dent = readdir(dir))) {
+               if(strncmp(dent->d_name, "data-70-", 8) == 0)
+                       if(process(dent->d_name))
+                               processed_files++;
+       }
+
+       assert(processed_files);
+       closedir(dir);
+
+       return 0;
+}
+
+#endif
diff --git a/tests/tests-c-compiler/check-src/check-72.-fcompound-names.c b/tests/tests-c-compiler/check-src/check-72.-fcompound-names.c
new file mode 100644 (file)
index 0000000..322742d
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Type.h>
+
+int
+main(int ac, char **av) {
+       Type_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-73.c b/tests/tests-c-compiler/check-src/check-73.c
new file mode 100644 (file)
index 0000000..9d33141
--- /dev/null
@@ -0,0 +1,28 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Epyt.h>
+
+int
+main(int ac, char **av) {
+       Type_t t;
+       Epyt_t ept;
+       Ypet_t ypt;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+       memset(&ept, 0, sizeof(ept));
+       memset(&ypt, 0, sizeof(ypt));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-92.-findirect-choice.c b/tests/tests-c-compiler/check-src/check-92.-findirect-choice.c
new file mode 100644 (file)
index 0000000..caa367f
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Everything.h>
+
+int
+main(int ac, char **av) {
+       Everything_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check-92.c b/tests/tests-c-compiler/check-src/check-92.c
new file mode 100644 (file)
index 0000000..caa367f
--- /dev/null
@@ -0,0 +1,24 @@
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+
+#include <Everything.h>
+
+int
+main(int ac, char **av) {
+       Everything_t t;
+
+       (void)ac;       /* Unused argument */
+       (void)av;       /* Unused argument */
+
+       memset(&t, 0, sizeof(t));
+
+       /*
+        * No plans to fill it up: just checking whether it compiles or not.
+        */
+
+       return 0;
+}
diff --git a/tests/tests-c-compiler/check-src/check64-134.-gen-PER.c b/tests/tests-c-compiler/check-src/check64-134.-gen-PER.c
new file mode 100644 (file)
index 0000000..5396cfe
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Verify INTEGER values with greater than 32 bits range.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+static unsigned long i2ul(const INTEGER_t *i) {
+    unsigned long l;
+    int ret = asn_INTEGER2ulong(i, &l);
+    assert(ret == 0);
+    return l;
+}
+
+static long i2l(const INTEGER_t *i) {
+    long l;
+    int ret = asn_INTEGER2long(i, &l);
+    assert(ret == 0);
+    return l;
+}
+
+static void ul2i(INTEGER_t *i, unsigned long l) {
+    int ret = asn_ulong2INTEGER(i, l);
+    assert(ret == 0);
+}
+
+static void l2i(INTEGER_t *i, long l) {
+    int ret = asn_long2INTEGER(i, l);
+    assert(ret == 0);
+}
+
+static void
+verify(int testNo, T_t *ti) {
+       asn_enc_rval_t er;
+       asn_dec_rval_t rv;
+       unsigned char buf[20];
+       T_t *to = 0;
+
+       fprintf(stderr, "%d IN: { %lu, %lu, %ld, %ld }\n", testNo,
+               i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
+               i2l(&ti->signed33), i2l(&ti->signed33ext)
+    );
+
+       er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
+       assert(er.encoded >= 33 + 42 + 33 + 1 + 33);
+
+       rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0);
+       assert(rv.code == RC_OK);
+
+       fprintf(stderr, "%d ENC: %2x%2x%2x%2x %2x%2x%2x%2x\n", testNo,
+               buf[0], buf[1], buf[2], buf[3],
+               buf[4], buf[5], buf[6], buf[7]);
+       fprintf(stderr, "%d OUT: { %lu, %lu, %ld, %ld } vs { %lu, %lu, %ld, %ld }\n",
+               testNo,
+               i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
+               i2l(&ti->signed33), i2l(&ti->signed33ext),
+               i2ul(&to->unsigned33), i2ul(&to->unsigned42),
+               i2l(&to->signed33), i2l(&to->signed33ext));
+       assert(i2ul(&ti->unsigned33) == i2ul(&to->unsigned33));
+       assert(i2ul(&ti->unsigned42) == i2ul(&to->unsigned42));
+       assert(i2l(&ti->signed33) == i2l(&to->signed33));
+       assert(i2l(&ti->signed33ext) == i2l(&to->signed33ext));
+
+       xer_fprint(stderr, &asn_DEF_T, ti);
+       xer_fprint(stderr, &asn_DEF_T, to);
+       ASN_STRUCT_FREE(asn_DEF_T, to);
+}
+
+static void
+NO_encode(int testNo, T_t *ti) {
+       asn_enc_rval_t er;
+       unsigned char buf[16];
+
+       fprintf(stderr, "%d IN: { %lu, %lu, %ld, %ld }\n", testNo,
+               i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
+               i2l(&ti->signed33), i2l(&ti->signed33ext)
+    );
+
+       er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
+       assert(er.encoded == -1);
+}
+
+int main() {
+       T_t ti;
+
+    memset(&ti, 0, sizeof(ti));
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 0);
+       verify(1, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  1);
+    ul2i(&ti.unsigned42,  1);
+    l2i(&ti.signed33,    1);
+    l2i(&ti.signed33ext, 1);
+       verify(2, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  5000000000);
+    ul2i(&ti.unsigned42,  3153600000000);
+    l2i(&ti.signed33,    4000000000);
+    l2i(&ti.signed33ext, 4000000000);
+       verify(3, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33, -1);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 0);
+       NO_encode(4, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42, -1);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 0);
+       NO_encode(5, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    -4000000000-1);
+    l2i(&ti.signed33ext, 0);
+       NO_encode(6, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, -4000000000-1);
+    assert(ti.signed33ext.size == 5);
+       verify(7, &ti); /* signed33ext is extensible */
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  5000000000 + 1);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 0);
+       NO_encode(8, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42,  3153600000000 + 1);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 0);
+       NO_encode(9, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  5000000000 - 1);
+    ul2i(&ti.unsigned42,  3153600000000 - 1);
+    l2i(&ti.signed33,    4000000000 - 1);
+    l2i(&ti.signed33ext, 4000000000 - 1);
+       verify(10, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+    ul2i(&ti.unsigned33,  0);
+    ul2i(&ti.unsigned42,  0);
+    l2i(&ti.signed33,    0);
+    l2i(&ti.signed33ext, 4000000000 + 1);
+       verify(11, &ti);
+       ASN_STRUCT_RESET(asn_DEF_T, &ti);
+
+       return 0;
+}
+
diff --git a/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c b/tests/tests-c-compiler/check-src/check64-136.-gen-OER.c
new file mode 100644 (file)
index 0000000..866fd71
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Verify OER with constrained INTEGER code gen.
+ */
+#undef NDEBUG
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <T.h>
+
+int main() {
+    uint8_t tmpbuf[128];
+    T_t source;
+    T_t *decoded = 0; /* "= 0" is important */
+
+    memset(&source, 0, sizeof(source));
+
+    /* Fill in complex INTEGER */
+    asn_long2INTEGER(&source.unsigned33, 0);
+
+    asn_enc_rval_t er =
+        oer_encode_to_buffer(&asn_DEF_T, 0, &source, tmpbuf, sizeof(tmpbuf));
+    assert(er.encoded != -1);
+
+    asn_dec_rval_t dr =
+        oer_decode(0, &asn_DEF_T, (void **)&decoded, tmpbuf, er.encoded);
+
+    assert(dr.code == RC_OK);
+    if((ssize_t)dr.consumed != er.encoded) {
+        ASN_DEBUG("Consumed %zd, expected %zu", dr.consumed, er.encoded);
+        assert((ssize_t)dr.consumed == er.encoded);
+    }
+
+    if(XEQ_SUCCESS != xer_equivalent(&asn_DEF_T, &source, decoded, stderr)) {
+        return 1;
+    }
+    ASN_STRUCT_RESET(asn_DEF_T, &source);
+    ASN_STRUCT_FREE(asn_DEF_T, decoded);
+    return 0;
+}
+
diff --git a/tests/tests-c-compiler/data-119/README b/tests/tests-c-compiler/data-119/README
new file mode 100644 (file)
index 0000000..044f5b8
--- /dev/null
@@ -0,0 +1,13 @@
+Mode of operation:
+
+       Each of the *.in files is XER-decoded, then converted into PER,
+       then decoded back from PER, then encoded into XER again,
+       and finally compared to the original encoding.
+
+Naming conventions:
+
+*-B.in -       The file is intentionally broken
+*-P.in -       Is not PER compatible, PER encoding must fail.
+*-E.in  -      CXER reconstruction should yield byte-wise identical data.
+
+Otherwise, a reconstructed buffer should loosely match the original.
diff --git a/tests/tests-c-compiler/data-119/data-119-01.in b/tests/tests-c-compiler/data-119/data-119-01.in
new file mode 100644 (file)
index 0000000..47e83a0
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ns></ns>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-02.in b/tests/tests-c-compiler/data-119/data-119-02.in
new file mode 100644 (file)
index 0000000..c7f53b4
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ns>0123456789</ns>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-03.in b/tests/tests-c-compiler/data-119/data-119-03.in
new file mode 100644 (file)
index 0000000..f51836d
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ns> </ns>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-04-P.in b/tests/tests-c-compiler/data-119/data-119-04-P.in
new file mode 100644 (file)
index 0000000..df606c9
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ns>z</ns>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-05.in b/tests/tests-c-compiler/data-119/data-119-05.in
new file mode 100644 (file)
index 0000000..632652d
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <ia5>yabloko</ia5>
+       <vs>yabloko</vs>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-06-P.in b/tests/tests-c-compiler/data-119/data-119-06-P.in
new file mode 100644 (file)
index 0000000..6eddf52
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ia5>ÑÂÌÏËÏ</ia5>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-07-P.in b/tests/tests-c-compiler/data-119/data-119-07-P.in
new file mode 100644 (file)
index 0000000..9f7ace8
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ia5-c>non-capitals</ia5-c>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-08.in b/tests/tests-c-compiler/data-119/data-119-08.in
new file mode 100644 (file)
index 0000000..5916078
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <ia5-c>CAPITALS</ia5-c>
+       <vs-c>CAPITALS</vs-c>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-09.in b/tests/tests-c-compiler/data-119/data-119-09.in
new file mode 100644 (file)
index 0000000..b20ca47
--- /dev/null
@@ -0,0 +1,8 @@
+<PDU>
+       <ia5></ia5>
+       <ia5-c></ia5-c>
+       <ia5-ce></ia5-ce>
+       <vs></vs>
+       <vs-c></vs-c>
+       <vs-ce></vs-ce>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-10.in b/tests/tests-c-compiler/data-119/data-119-10.in
new file mode 100644 (file)
index 0000000..afe04b0
--- /dev/null
@@ -0,0 +1,9 @@
+<PDU>
+       <ia5-ir>BAZ</ia5-ir>
+       <vs-ir>BAZ</vs-ir>
+       <pr-ir>BAZ</pr-ir>
+       <ns-ir>19</ns-ir>
+       <ut-c>Do not respect SIZE constraint</ut-c>
+       <ut-ce>Do not respect SIZE constraint</ut-ce>
+       <ut-ir>ABCabc</ut-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-11-P.in b/tests/tests-c-compiler/data-119/data-119-11-P.in
new file mode 100644 (file)
index 0000000..4a7d4d2
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ia5-ir>FAIL</ia5-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-12-P.in b/tests/tests-c-compiler/data-119/data-119-12-P.in
new file mode 100644 (file)
index 0000000..bd45e2e
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <vs-ir>FAIL</vs-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-13-P.in b/tests/tests-c-compiler/data-119/data-119-13-P.in
new file mode 100644 (file)
index 0000000..c2396c1
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <pr-ir>FAIL</pr-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-14-P.in b/tests/tests-c-compiler/data-119/data-119-14-P.in
new file mode 100644 (file)
index 0000000..0f2d9ec
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ns-ir>13</ns-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-15.in b/tests/tests-c-compiler/data-119/data-119-15.in
new file mode 100644 (file)
index 0000000..296dc2d
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <ut-ir>ABCabc,12234</ut-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-16.in b/tests/tests-c-compiler/data-119/data-119-16.in
new file mode 100644 (file)
index 0000000..2a117fa
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <real>3.14159265</real>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-17.in b/tests/tests-c-compiler/data-119/data-119-17.in
new file mode 100644 (file)
index 0000000..862efc1
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <oid>1.3.6.1.4.1.9363.1.5.1</oid>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-18.in b/tests/tests-c-compiler/data-119/data-119-18.in
new file mode 100644 (file)
index 0000000..619502d
--- /dev/null
@@ -0,0 +1,10 @@
+<PDU>
+       <many>
+               <PDU><bm>abra kadabra</bm></PDU>
+               <PDU><bm-c>AAAAZZZZ</bm-c></PDU>
+               <PDU><bm-cs>шесть!</bm-cs></PDU>
+               <PDU><bm-ce>ABC</bm-ce></PDU>
+               <PDU><bm-ce>ABCabc (extensibility in play)</bm-ce></PDU>
+               <PDU><bm-ir>ABXZ</bm-ir></PDU>
+       </many>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-19.in b/tests/tests-c-compiler/data-119/data-119-19.in
new file mode 100644 (file)
index 0000000..c5e8f09
--- /dev/null
@@ -0,0 +1,10 @@
+<PDU>
+       <many>
+               <PDU><us>kadabra</us></PDU>
+               <PDU><us-c>AAAAZZZZ</us-c></PDU>
+               <PDU><us-cs>шесть!</us-cs></PDU>
+               <PDU><us-ce>ABC</us-ce></PDU>
+               <PDU><us-ce>ABCabc (extensibility in play)</us-ce></PDU>
+               <PDU><us-ir>ABXZ</us-ir></PDU>
+       </many>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-20-P.in b/tests/tests-c-compiler/data-119/data-119-20-P.in
new file mode 100644 (file)
index 0000000..53c1981
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <bm-c>abcd</bm-c>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-21-P.in b/tests/tests-c-compiler/data-119/data-119-21-P.in
new file mode 100644 (file)
index 0000000..d2d47d8
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <us-c>abcd</us-c>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-22-P.in b/tests/tests-c-compiler/data-119/data-119-22-P.in
new file mode 100644 (file)
index 0000000..6eb9a3e
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <bm-cs></bm-cs>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-23-P.in b/tests/tests-c-compiler/data-119/data-119-23-P.in
new file mode 100644 (file)
index 0000000..d250892
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <us-cs></us-cs>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-24-P.in b/tests/tests-c-compiler/data-119/data-119-24-P.in
new file mode 100644 (file)
index 0000000..094b45d
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <bm-ir>ABC</bm-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-119/data-119-25-P.in b/tests/tests-c-compiler/data-119/data-119-25-P.in
new file mode 100644 (file)
index 0000000..6da8b82
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <us-ir>ABC</us-ir>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/README b/tests/tests-c-compiler/data-126/README
new file mode 100644 (file)
index 0000000..99ab584
--- /dev/null
@@ -0,0 +1,12 @@
+Mode of operation:
+
+       Each of the *.in files is XER-decoded, then converted into PER,
+       then compared with the .out file, then decoded back into XER
+       and compared to the original .in file content.
+
+Naming conventions:
+
+*-C.in  -       Comparison of .out might fail, but decoding succeeds
+*-P.in  -       PER decoding of .out file must fail.
+*-X.in -       Final XER comparison must fail.
+
diff --git a/tests/tests-c-compiler/data-126/data-126-01.in b/tests/tests-c-compiler/data-126/data-126-01.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-01.out b/tests/tests-c-compiler/data-126/data-126-01.out
new file mode 100644 (file)
index 0000000..776f213
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-01.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-02-P.in b/tests/tests-c-compiler/data-126/data-126-02-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-02-P.out b/tests/tests-c-compiler/data-126/data-126-02-P.out
new file mode 100644 (file)
index 0000000..11deabc
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-02-P.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-03-P.in b/tests/tests-c-compiler/data-126/data-126-03-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-03-P.out b/tests/tests-c-compiler/data-126/data-126-03-P.out
new file mode 100644 (file)
index 0000000..d7a555e
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-03-P.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-04-P.in b/tests/tests-c-compiler/data-126/data-126-04-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-04-P.out b/tests/tests-c-compiler/data-126/data-126-04-P.out
new file mode 100644 (file)
index 0000000..54a8a52
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-04-P.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-05-P.in b/tests/tests-c-compiler/data-126/data-126-05-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-05-P.out b/tests/tests-c-compiler/data-126/data-126-05-P.out
new file mode 100644 (file)
index 0000000..7c9ea7f
--- /dev/null
@@ -0,0 +1 @@
+\81@@@
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-126/data-126-06-P.in b/tests/tests-c-compiler/data-126/data-126-06-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-06-P.out b/tests/tests-c-compiler/data-126/data-126-06-P.out
new file mode 100644 (file)
index 0000000..90ad515
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-06-P.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-07-P.in b/tests/tests-c-compiler/data-126/data-126-07-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-07-P.out b/tests/tests-c-compiler/data-126/data-126-07-P.out
new file mode 100644 (file)
index 0000000..8979b4f
--- /dev/null
@@ -0,0 +1 @@
+\81@@
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-126/data-126-08-P.in b/tests/tests-c-compiler/data-126/data-126-08-P.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-08-P.out b/tests/tests-c-compiler/data-126/data-126-08-P.out
new file mode 100644 (file)
index 0000000..e84a902
--- /dev/null
@@ -0,0 +1 @@
+\81@\80
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-126/data-126-09-C.in b/tests/tests-c-compiler/data-126/data-126-09-C.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-09-C.out b/tests/tests-c-compiler/data-126/data-126-09-C.out
new file mode 100644 (file)
index 0000000..1b6cb8f
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-09-C.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-10-C.in b/tests/tests-c-compiler/data-126/data-126-10-C.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-10-C.out b/tests/tests-c-compiler/data-126/data-126-10-C.out
new file mode 100644 (file)
index 0000000..fe55c5f
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-10-C.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-11-C.in b/tests/tests-c-compiler/data-126/data-126-11-C.in
new file mode 100644 (file)
index 0000000..d01eb54
--- /dev/null
@@ -0,0 +1,3 @@
+<PDU>
+       <str-m></str-m>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-11-C.out b/tests/tests-c-compiler/data-126/data-126-11-C.out
new file mode 100644 (file)
index 0000000..0f23c82
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-11-C.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-12.in b/tests/tests-c-compiler/data-126/data-126-12.in
new file mode 100644 (file)
index 0000000..2b17d34
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m></str-m>
+       <singl><opt-z></opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-12.out b/tests/tests-c-compiler/data-126/data-126-12.out
new file mode 100644 (file)
index 0000000..095b6fe
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-12.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-13.in b/tests/tests-c-compiler/data-126/data-126-13.in
new file mode 100644 (file)
index 0000000..7eaafe2
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m>a</str-m>
+       <singl><opt-z></opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-13.out b/tests/tests-c-compiler/data-126/data-126-13.out
new file mode 100644 (file)
index 0000000..0b77183
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-13.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-14.in b/tests/tests-c-compiler/data-126/data-126-14.in
new file mode 100644 (file)
index 0000000..eacad91
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m>ab</str-m>
+       <singl><opt-z></opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-14.out b/tests/tests-c-compiler/data-126/data-126-14.out
new file mode 100644 (file)
index 0000000..d044763
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-14.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-15.in b/tests/tests-c-compiler/data-126/data-126-15.in
new file mode 100644 (file)
index 0000000..add216d
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m></str-m>
+       <singl><opt-z>z</opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-15.out b/tests/tests-c-compiler/data-126/data-126-15.out
new file mode 100644 (file)
index 0000000..e278c6b
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-15.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-16.in b/tests/tests-c-compiler/data-126/data-126-16.in
new file mode 100644 (file)
index 0000000..58c0bb5
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m>a</str-m>
+       <singl><opt-z>z</opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-16.out b/tests/tests-c-compiler/data-126/data-126-16.out
new file mode 100644 (file)
index 0000000..bebf853
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-16.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-17.in b/tests/tests-c-compiler/data-126/data-126-17.in
new file mode 100644 (file)
index 0000000..74e870e
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m>ab</str-m>
+       <singl><opt-z>z</opt-z></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-17.out b/tests/tests-c-compiler/data-126/data-126-17.out
new file mode 100644 (file)
index 0000000..f0398ed
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-17.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-18-X.in b/tests/tests-c-compiler/data-126/data-126-18-X.in
new file mode 100644 (file)
index 0000000..9f56752
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <str-m>ab</str-m>
+       <singl></singl>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-18-X.out b/tests/tests-c-compiler/data-126/data-126-18-X.out
new file mode 100644 (file)
index 0000000..f0398ed
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-18-X.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-19.in b/tests/tests-c-compiler/data-126/data-126-19.in
new file mode 100644 (file)
index 0000000..42d3595
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <str-m>some long string spanning multiple bytes</str-m>
+       <singl><opt-z>zzz-zzz-zzz-zzz</opt-z></singl>
+       <pdu-2>
+               <main>42</main>
+       </pdu-2>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-19.out b/tests/tests-c-compiler/data-126/data-126-19.out
new file mode 100644 (file)
index 0000000..5cc830e
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-19.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-20.in b/tests/tests-c-compiler/data-126/data-126-20.in
new file mode 100644 (file)
index 0000000..2e26d4c
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <str-m>some long string spanning multiple bytes</str-m>
+       <singl><opt-z>zzz-zzz-zzz-zzz</opt-z></singl>
+       <pdu-2>
+               <ext0>13</ext0>
+       </pdu-2>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-20.out b/tests/tests-c-compiler/data-126/data-126-20.out
new file mode 100644 (file)
index 0000000..6a5d6dd
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-20.out differ
diff --git a/tests/tests-c-compiler/data-126/data-126-21.in b/tests/tests-c-compiler/data-126/data-126-21.in
new file mode 100644 (file)
index 0000000..3ea60bd
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <str-m></str-m>
+       <singl><opt-z></opt-z></singl>
+       <pdu-2>
+               <ext0>0</ext0>
+       </pdu-2>
+</PDU>
diff --git a/tests/tests-c-compiler/data-126/data-126-21.out b/tests/tests-c-compiler/data-126/data-126-21.out
new file mode 100644 (file)
index 0000000..865a90a
Binary files /dev/null and b/tests/tests-c-compiler/data-126/data-126-21.out differ
diff --git a/tests/tests-c-compiler/data-62/Makefile b/tests/tests-c-compiler/data-62/Makefile
new file mode 100644 (file)
index 0000000..b901d72
--- /dev/null
@@ -0,0 +1,9 @@
+
+all:
+       @for xbr in *.xbr; do                                   \
+               ber=`echo "$$xbr" | sed -e 's/\.xbr$$/\.ber/'`; \
+               if [ $$xbr -nt $$ber ]; then                    \
+                       echo "../../enber $$xbr > $$ber";       \
+                       ../../enber $$xbr > $$ber || exit $$?;  \
+               fi;                                             \
+       done
diff --git a/tests/tests-c-compiler/data-62/README b/tests/tests-c-compiler/data-62/README
new file mode 100644 (file)
index 0000000..5d2a25e
--- /dev/null
@@ -0,0 +1,3 @@
+*-B.*  -       The file is intentionally broken
+*-D.*  -       Reconstructing should yield different data
+*-L.*  -       Extensions are present
diff --git a/tests/tests-c-compiler/data-62/data-62-01.ber b/tests/tests-c-compiler/data-62/data-62-01.ber
new file mode 100644 (file)
index 0000000..9d0cd7d
--- /dev/null
@@ -0,0 +1 @@
+0\v\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-01.xbr b/tests/tests-c-compiler/data-62/data-62-01.xbr
new file mode 100644 (file)
index 0000000..18f3e10
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="11">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-02-B.ber b/tests/tests-c-compiler/data-62/data-62-02-B.ber
new file mode 100644 (file)
index 0000000..288fa2f
--- /dev/null
@@ -0,0 +1,2 @@
+0
+\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-02-B.xbr b/tests/tests-c-compiler/data-62/data-62-02-B.xbr
new file mode 100644 (file)
index 0000000..3d4afbf
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="10">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-03-B.ber b/tests/tests-c-compiler/data-62/data-62-03-B.ber
new file mode 100644 (file)
index 0000000..35271bc
--- /dev/null
@@ -0,0 +1 @@
+0      \ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-03-B.xbr b/tests/tests-c-compiler/data-62/data-62-03-B.xbr
new file mode 100644 (file)
index 0000000..50930a6
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="9">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-04-B.ber b/tests/tests-c-compiler/data-62/data-62-04-B.ber
new file mode 100644 (file)
index 0000000..c65a578
--- /dev/null
@@ -0,0 +1 @@
+0\b\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-04-B.xbr b/tests/tests-c-compiler/data-62/data-62-04-B.xbr
new file mode 100644 (file)
index 0000000..f5b78c3
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="8">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-05-B.ber b/tests/tests-c-compiler/data-62/data-62-05-B.ber
new file mode 100644 (file)
index 0000000..ff65b20
--- /dev/null
@@ -0,0 +1 @@
+0\a\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-05-B.xbr b/tests/tests-c-compiler/data-62/data-62-05-B.xbr
new file mode 100644 (file)
index 0000000..dd075fc
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="7">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-06-B.ber b/tests/tests-c-compiler/data-62/data-62-06-B.ber
new file mode 100644 (file)
index 0000000..530d54b
--- /dev/null
@@ -0,0 +1 @@
+0\ 6\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-06-B.xbr b/tests/tests-c-compiler/data-62/data-62-06-B.xbr
new file mode 100644 (file)
index 0000000..e5bdfd8
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="6">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-07-B.ber b/tests/tests-c-compiler/data-62/data-62-07-B.ber
new file mode 100644 (file)
index 0000000..286ca58
--- /dev/null
@@ -0,0 +1 @@
+0\f\ 2\ 1\ 5¡\ 6\13\ 4test
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-07-B.xbr b/tests/tests-c-compiler/data-62/data-62-07-B.xbr
new file mode 100644 (file)
index 0000000..9680309
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="12">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-08-L.ber b/tests/tests-c-compiler/data-62/data-62-08-L.ber
new file mode 100644 (file)
index 0000000..f20de45
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-08-L.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-08-L.xbr b/tests/tests-c-compiler/data-62/data-62-08-L.xbr
new file mode 100644 (file)
index 0000000..8afad43
--- /dev/null
@@ -0,0 +1,7 @@
+<C T="[UNIVERSAL 16]" TL="2" V="13">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>  -- extra component
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-09-L.ber b/tests/tests-c-compiler/data-62/data-62-09-L.ber
new file mode 100644 (file)
index 0000000..808abc4
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-09-L.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-09-L.xbr b/tests/tests-c-compiler/data-62/data-62-09-L.xbr
new file mode 100644 (file)
index 0000000..2240918
--- /dev/null
@@ -0,0 +1,19 @@
+<C T="[UNIVERSAL 16]" TL="2" V="34">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>  -- extra component
+       <P T="[UNIVERSAL 1]" TL="2" V="1">&xff;</P>  -- another extra component
+       <C T="[1]" TL="2" V="12">       -- yet another extra component
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="5">
+                               <C T="[23]" TL="2" V="3">
+                                       <P T="[UNIVERSAL 19]" TL="2" V="1">z</P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+       <I T="[PRIVATE 1]" TL="2">      -- and yet another one
+       </I>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-10.ber b/tests/tests-c-compiler/data-62/data-62-10.ber
new file mode 100644 (file)
index 0000000..0772c45
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-10.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-10.xbr b/tests/tests-c-compiler/data-62/data-62-10.xbr
new file mode 100644 (file)
index 0000000..7dd86f0
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="7">
+       <C T="[1]" TL="2" V="5">
+               <I T="[APPLICATION 123]" TL="3" V="Indefinite">
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-11.ber b/tests/tests-c-compiler/data-62/data-62-11.ber
new file mode 100644 (file)
index 0000000..8eeb0d8
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-11.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-11.xbr b/tests/tests-c-compiler/data-62/data-62-11.xbr
new file mode 100644 (file)
index 0000000..1ce0695
--- /dev/null
@@ -0,0 +1,8 @@
+<C T="[UNIVERSAL 16]" TL="2" V="10">
+       <C T="[1]" TL="2" V="8">
+               <I T="[1]" TL="2">
+               </I>
+               <I T="[1]" TL="2">
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-12-B.ber b/tests/tests-c-compiler/data-62/data-62-12-B.ber
new file mode 100644 (file)
index 0000000..2ea1bdc
--- /dev/null
@@ -0,0 +1 @@
+0\ 6¡\ 2¡\80
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-12-B.xbr b/tests/tests-c-compiler/data-62/data-62-12-B.xbr
new file mode 100644 (file)
index 0000000..b3a370c
--- /dev/null
@@ -0,0 +1,6 @@
+<C T="[UNIVERSAL 16]" TL="2" V="6">
+       <C T="[1]" TL="2" V="2">
+               <I T="[1]" TL="2">
+               -- Do not terminate: no end-of-content octets is intended
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-13-B.ber b/tests/tests-c-compiler/data-62/data-62-13-B.ber
new file mode 100644 (file)
index 0000000..47dc2ac
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-13-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-13-B.xbr b/tests/tests-c-compiler/data-62/data-62-13-B.xbr
new file mode 100644 (file)
index 0000000..4ee3002
--- /dev/null
@@ -0,0 +1,8 @@
+<C T="[UNIVERSAL 16]" TL="2" V="8">
+       <C T="[1]" TL="2" V="6">
+               <I T="[PRIVATE 1]" TL="2">
+               </I>
+               <I T="[PRIVATE 2]" TL="2">
+               -- Do not terminate: no end-of-content octets is intended.
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-14.ber b/tests/tests-c-compiler/data-62/data-62-14.ber
new file mode 100644 (file)
index 0000000..c048f28
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-14.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-14.xbr b/tests/tests-c-compiler/data-62/data-62-14.xbr
new file mode 100644 (file)
index 0000000..0c7da7c
--- /dev/null
@@ -0,0 +1,10 @@
+<C T="[UNIVERSAL 16]" TL="2" V="14">
+       <C T="[1]" TL="2" V="12">
+               <I T="[PRIVATE 1]" TL="2">
+                       <I T="[PRIVATE 2]" TL="2">
+                       </I>
+                       <I T="[PRIVATE 3]" TL="2">
+                       </I>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-15-B.ber b/tests/tests-c-compiler/data-62/data-62-15-B.ber
new file mode 100644 (file)
index 0000000..f87367f
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-15-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-15-B.xbr b/tests/tests-c-compiler/data-62/data-62-15-B.xbr
new file mode 100644 (file)
index 0000000..c57f270
--- /dev/null
@@ -0,0 +1,10 @@
+<C T="[UNIVERSAL 16]" TL="2" V="12">
+       <C T="[1]" TL="2" V="10">
+               <I T="[PRIVATE 1]" TL="2">
+                       <I T="[PRIVATE 2]" TL="2">
+                       </I>
+                       <I T="[PRIVATE 3]" TL="2">
+                       -- missing EOC
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-16.ber b/tests/tests-c-compiler/data-62/data-62-16.ber
new file mode 100644 (file)
index 0000000..799e1e7
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-16.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-16.xbr b/tests/tests-c-compiler/data-62/data-62-16.xbr
new file mode 100644 (file)
index 0000000..600a6c1
--- /dev/null
@@ -0,0 +1,7 @@
+<C T="[UNIVERSAL 16]" TL="2" V="12">
+       <C T="[1]" TL="2" V="10">
+               <I T="[PRIVATE 1]" TL="2">
+                       <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-17-B.ber b/tests/tests-c-compiler/data-62/data-62-17-B.ber
new file mode 100644 (file)
index 0000000..5d98f99
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-17-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-17-B.xbr b/tests/tests-c-compiler/data-62/data-62-17-B.xbr
new file mode 100644 (file)
index 0000000..4e49f2b
--- /dev/null
@@ -0,0 +1,7 @@
+<C T="[UNIVERSAL 16]" TL="2" V="12">
+       <C T="[1]" TL="2" V="10">
+               <I T="[PRIVATE 1]" TL="2">
+                       <P T="[UNIVERSAL 19]" TL="2" V="5">test2</P>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-18-B.ber b/tests/tests-c-compiler/data-62/data-62-18-B.ber
new file mode 100644 (file)
index 0000000..7e10c51
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-18-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-18-B.xbr b/tests/tests-c-compiler/data-62/data-62-18-B.xbr
new file mode 100644 (file)
index 0000000..2177866
--- /dev/null
@@ -0,0 +1,7 @@
+<C T="[UNIVERSAL 16]" TL="2" V="13">
+       <C T="[1]" TL="2" V="11">
+               <I T="[PRIVATE 1]" TL="2">
+                       <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-19-B.ber b/tests/tests-c-compiler/data-62/data-62-19-B.ber
new file mode 100644 (file)
index 0000000..1e2641b
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-19-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-19-B.xbr b/tests/tests-c-compiler/data-62/data-62-19-B.xbr
new file mode 100644 (file)
index 0000000..5e424cc
--- /dev/null
@@ -0,0 +1,7 @@
+<C T="[UNIVERSAL 16]" TL="2" V="12">
+       <C T="[1]" TL="2" V="11">
+               <I T="[PRIVATE 1]" TL="2">
+                       <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-20.ber b/tests/tests-c-compiler/data-62/data-62-20.ber
new file mode 100644 (file)
index 0000000..ea13838
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-20.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-20.xbr b/tests/tests-c-compiler/data-62/data-62-20.xbr
new file mode 100644 (file)
index 0000000..178fa66
--- /dev/null
@@ -0,0 +1,8 @@
+<C T="[UNIVERSAL 16]" TL="2" V="9">
+       <C T="[1]" TL="2" V="7">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="0">
+                       </C>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-21-B.ber b/tests/tests-c-compiler/data-62/data-62-21-B.ber
new file mode 100644 (file)
index 0000000..d109b4f
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-21-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-21-B.xbr b/tests/tests-c-compiler/data-62/data-62-21-B.xbr
new file mode 100644 (file)
index 0000000..7aeac97
--- /dev/null
@@ -0,0 +1,11 @@
+<C T="[UNIVERSAL 16]" TL="2" V="9">
+       <C T="[1]" TL="2" V="7">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="0">
+                               <C T="[23]" TL="2" V="0">
+                                       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-22.ber b/tests/tests-c-compiler/data-62/data-62-22.ber
new file mode 100644 (file)
index 0000000..a9a984d
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-22.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-22.xbr b/tests/tests-c-compiler/data-62/data-62-22.xbr
new file mode 100644 (file)
index 0000000..ca220a7
--- /dev/null
@@ -0,0 +1,11 @@
+<C T="[UNIVERSAL 16]" TL="2" V="13">
+       <C T="[1]" TL="2" V="11">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="4">
+                               <C T="[23]" TL="2" V="2">
+                                       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-23-B.ber b/tests/tests-c-compiler/data-62/data-62-23-B.ber
new file mode 100644 (file)
index 0000000..1b90671
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-23-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-23-B.xbr b/tests/tests-c-compiler/data-62/data-62-23-B.xbr
new file mode 100644 (file)
index 0000000..7a2777e
--- /dev/null
@@ -0,0 +1,11 @@
+<C T="[UNIVERSAL 16]" TL="2" V="13">
+       <C T="[1]" TL="2" V="11">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="5">
+                               <C T="[23]" TL="2" V="2">
+                                       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-24-L.ber b/tests/tests-c-compiler/data-62/data-62-24-L.ber
new file mode 100644 (file)
index 0000000..d88d78b
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-24-L.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-24-L.xbr b/tests/tests-c-compiler/data-62/data-62-24-L.xbr
new file mode 100644 (file)
index 0000000..9974a67
--- /dev/null
@@ -0,0 +1,12 @@
+<I T="[UNIVERSAL 16]" TL="2" V="Indefinite">
+       <C T="[1]" TL="2" V="14">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="5">
+                               <C T="[23]" TL="2" V="3">
+                                       <P T="[UNIVERSAL 19]" TL="2" V="1">z</P>
+                               </C>
+                       </C>
+               </I>
+               <P T="[UNIVERSAL 0]" TL="2" V="0"></P>
+       </C>
+</I>
diff --git a/tests/tests-c-compiler/data-62/data-62-25.ber b/tests/tests-c-compiler/data-62/data-62-25.ber
new file mode 100644 (file)
index 0000000..931978b
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-25.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-25.xbr b/tests/tests-c-compiler/data-62/data-62-25.xbr
new file mode 100644 (file)
index 0000000..d62e456
--- /dev/null
@@ -0,0 +1,11 @@
+<C T="[UNIVERSAL 16]" TL="2" V="14">
+       <C T="[1]" TL="2" V="12">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="5">
+                               <C T="[23]" TL="2" V="3">
+                                       <P T="[UNIVERSAL 19]" TL="2" V="1">z</P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-26-B.ber b/tests/tests-c-compiler/data-62/data-62-26-B.ber
new file mode 100644 (file)
index 0000000..ef7d106
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-26-B.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-26-B.xbr b/tests/tests-c-compiler/data-62/data-62-26-B.xbr
new file mode 100644 (file)
index 0000000..13c0aa2
--- /dev/null
@@ -0,0 +1,11 @@
+<I T="[UNIVERSAL 16]" TL="2" V="Indefinite">
+       <C T="[1]" TL="2" V="14">
+               <I T="[PRIVATE 1]" TL="2">
+                       <C T="[123]" TL="3" V="5">
+                               <C T="[23]" TL="2" V="3">
+                                       <P T="[UNIVERSAL 19]" TL="2" V="1">z</P>
+                               </C>
+                       </C>
+               </I>
+       </C>
+</I>
diff --git a/tests/tests-c-compiler/data-62/data-62-27.ber b/tests/tests-c-compiler/data-62/data-62-27.ber
new file mode 100644 (file)
index 0000000..7cb619d
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-27.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-27.xbr b/tests/tests-c-compiler/data-62/data-62-27.xbr
new file mode 100644 (file)
index 0000000..2fb6422
--- /dev/null
@@ -0,0 +1,4 @@
+<C T="[UNIVERSAL 16]" TL="2" V="2">
+       <C T="[1]" TL="2" V="0">
+       </C>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-28-D.ber b/tests/tests-c-compiler/data-62/data-62-28-D.ber
new file mode 100644 (file)
index 0000000..8a2910b
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-28-D.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-28-D.xbr b/tests/tests-c-compiler/data-62/data-62-28-D.xbr
new file mode 100644 (file)
index 0000000..fd52594
--- /dev/null
@@ -0,0 +1,4 @@
+<C T="[UNIVERSAL 16]" TL="2" V="4">
+       <I T="[1]" TL="2" V="0">
+       </I>
+</C>
diff --git a/tests/tests-c-compiler/data-62/data-62-29-L.ber b/tests/tests-c-compiler/data-62/data-62-29-L.ber
new file mode 100644 (file)
index 0000000..108f257
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-29-L.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-29-L.xbr b/tests/tests-c-compiler/data-62/data-62-29-L.xbr
new file mode 100644 (file)
index 0000000..3f313d0
--- /dev/null
@@ -0,0 +1,12 @@
+<I T="[UNIVERSAL 16]" TL="2">
+       <P T="[UNIVERSAL 2]" TL="2" V="1">&x05;</P>
+       <C T="[1]" TL="2" V="6">
+               <P T="[UNIVERSAL 19]" TL="2" V="4">test</P>
+       </C>
+       <P T="[UNIVERSAL 5]" TL="2" V="0"></P>  -- extra component
+       <I T="[PRIVATE 1]" TL="2">              -- another one
+               <I T="[PRIVATE 1]" TL="2">
+               </I>
+       </I>
+       <P T="[UNIVERSAL 1]" TL="2" V="1">&xff;</P>  -- and yet another
+</I>
diff --git a/tests/tests-c-compiler/data-62/data-62-30-L.ber b/tests/tests-c-compiler/data-62/data-62-30-L.ber
new file mode 100644 (file)
index 0000000..d7f43ae
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-30-L.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-30-L.xbr b/tests/tests-c-compiler/data-62/data-62-30-L.xbr
new file mode 100644 (file)
index 0000000..d225c17
--- /dev/null
@@ -0,0 +1,8 @@
+<I T="[16]" TL="2" V="Indefinite">
+       <P T="[0]" TL="2" V="2">&x37;&x39;</P>
+       <P T="[1]" TL="2" V="1">&x00;</P>
+       <C T="[3]" TL="2" V="13">
+               <P T="[UNIVERSAL 18]" TL="2" V="11" A="NumericString">79023700808</P>
+       </C>
+       <P T="[4]" TL="2" V="1">&x00;</P>
+</I T="[UNIVERSAL 0]" TL="2">
diff --git a/tests/tests-c-compiler/data-62/data-62-31-D.ber b/tests/tests-c-compiler/data-62/data-62-31-D.ber
new file mode 100644 (file)
index 0000000..f1b74d0
Binary files /dev/null and b/tests/tests-c-compiler/data-62/data-62-31-D.ber differ
diff --git a/tests/tests-c-compiler/data-62/data-62-31-D.xbr b/tests/tests-c-compiler/data-62/data-62-31-D.xbr
new file mode 100644 (file)
index 0000000..b903a84
--- /dev/null
@@ -0,0 +1,8 @@
+<I T="[16]" TL="2" V="Indefinite">
+       <P T="[0]" TL="2" V="2">&x37;&x39;</P>
+       <P T="[1]" TL="2" V="1">&x00;</P>
+       <I T="[3]" TL="2" V="Indefinite">
+               <P T="[UNIVERSAL 18]" TL="2" V="11" A="NumericString">79023700808</P>
+       </I T="[UNIVERSAL 0]" TL="2">
+       <P T="[4]" TL="2" V="1">&x00;</P>
+</I T="[UNIVERSAL 0]" TL="2">
diff --git a/tests/tests-c-compiler/data-62/data-62-32.ber b/tests/tests-c-compiler/data-62/data-62-32.ber
new file mode 100644 (file)
index 0000000..a43f9ae
--- /dev/null
@@ -0,0 +1 @@
+¿5\ 5\81\ 3123
\ No newline at end of file
diff --git a/tests/tests-c-compiler/data-62/data-62-32.xbr b/tests/tests-c-compiler/data-62/data-62-32.xbr
new file mode 100644 (file)
index 0000000..5724b40
--- /dev/null
@@ -0,0 +1,3 @@
+<C T="[53]" TL="3" V="5">
+       <P T="[1]" TL="2" V="3">123</P>
+</C>
diff --git a/tests/tests-c-compiler/data-70/README b/tests/tests-c-compiler/data-70/README
new file mode 100644 (file)
index 0000000..c34eee3
--- /dev/null
@@ -0,0 +1,14 @@
+Mode of operation:
+
+       Each of the *.in files is XER-decoded, then converted into DER,
+       then decoded back from DER, then encoded into XER again,
+       and finally compared to the original encoding.
+
+Naming conventions:
+
+*-B.in -       The file is intentionally (B)roken
+*-D.in -       Reconstructing should yield (D)ifferent data
+*-E.in  -      CXER reconstruction should yield byte-wise identical data.
+*-X.in  -      CXER reconstruction should yield non-identical data.
+
+Otherwise, a reconstructed buffer should loosely match the original.
diff --git a/tests/tests-c-compiler/data-70/data-70-01.in b/tests/tests-c-compiler/data-70/data-70-01.in
new file mode 100644 (file)
index 0000000..f5ed8fb
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <sequence>
+               <integer>     128     </integer>
+               <string>string</string>
+       </sequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-02.in b/tests/tests-c-compiler/data-70/data-70-02.in
new file mode 100644 (file)
index 0000000..6037e2b
--- /dev/null
@@ -0,0 +1 @@
+<PDU><sequence><integer>-1</integer><string></string></sequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-03.in b/tests/tests-c-compiler/data-70/data-70-03.in
new file mode 100644 (file)
index 0000000..9008d85
--- /dev/null
@@ -0,0 +1,8 @@
+<PDU>
+       <sequence>
+               <integer>231234</integer>
+               <bits>01  01
+                       11  01</bits>
+               <string>string</string>
+       </sequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-04-B.in b/tests/tests-c-compiler/data-70/data-70-04-B.in
new file mode 100644 (file)
index 0000000..b9fb31c
--- /dev/null
@@ -0,0 +1,2 @@
+<PDU>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-05-B.in b/tests/tests-c-compiler/data-70/data-70-05-B.in
new file mode 100644 (file)
index 0000000..4a1ae69
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <sequence>
+               <Integer>231234</Integer>
+               <string>string</string>
+       </sequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-06-B.in b/tests/tests-c-compiler/data-70/data-70-06-B.in
new file mode 100644 (file)
index 0000000..eb21008
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <sequence>
+       </sequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-07-D.in b/tests/tests-c-compiler/data-70/data-70-07-D.in
new file mode 100644 (file)
index 0000000..14922b0
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <set>
+               <opaque><!-- <zzz> --></opaque>
+       <!-- <zzz> -->
+               <roid>123.456.789.101112</roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-08-B.in b/tests/tests-c-compiler/data-70/data-70-08-B.in
new file mode 100644 (file)
index 0000000..e6885f8
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112</roid>
+               <roid>1.2.3.4</roid>
+               <!-- duplicates are not allowed -->
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-09-D.in b/tests/tests-c-compiler/data-70/data-70-09-D.in
new file mode 100644 (file)
index 0000000..4a2a627
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfREAL>
+               <REAL>3.14</REAL>
+               <REAL><!--<zzz>--><PLUS-INFINITY/></REAL>
+       </setOfREAL>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-10.in b/tests/tests-c-compiler/data-70/data-70-10.in
new file mode 100644 (file)
index 0000000..a175091
--- /dev/null
@@ -0,0 +1 @@
+<PDU><setOfREAL></setOfREAL></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-11.in b/tests/tests-c-compiler/data-70/data-70-11.in
new file mode 100644 (file)
index 0000000..df05ddd
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU><sequenceOf>
+       <id>8</id> <id>7</id>
+       <id>6</id> <id>9</id>
+</sequenceOf></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-12.in b/tests/tests-c-compiler/data-70/data-70-12.in
new file mode 100644 (file)
index 0000000..7584b0b
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <extensibleSet>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-13-D.in b/tests/tests-c-compiler/data-70/data-70-13-D.in
new file mode 100644 (file)
index 0000000..a24a43d
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSet>
+               <string>something&#x20;here</string>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-14-D.in b/tests/tests-c-compiler/data-70/data-70-14-D.in
new file mode 100644 (file)
index 0000000..1279a94
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSet>
+               <string>some<!-- <zzz> -->thing&#x20here</string>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-15.in b/tests/tests-c-compiler/data-70/data-70-15.in
new file mode 100644 (file)
index 0000000..3b894bd
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSet>
+               <string>one <nul/> two</string>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-16-B.in b/tests/tests-c-compiler/data-70/data-70-16-B.in
new file mode 100644 (file)
index 0000000..347d53e
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSet>
+               <string>one </nul> two</string>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-17-D.in b/tests/tests-c-compiler/data-70/data-70-17-D.in
new file mode 100644 (file)
index 0000000..f060092
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <extensibleSet>
+               <extension> <!-- <ext> --> </extension>
+               <!-- zzz -->
+               <zuka/>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-18.in b/tests/tests-c-compiler/data-70/data-70-18.in
new file mode 100644 (file)
index 0000000..c9f3594
--- /dev/null
@@ -0,0 +1,4 @@
+<PDU>
+       <extensibleSequence>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-19.in b/tests/tests-c-compiler/data-70/data-70-19.in
new file mode 100644 (file)
index 0000000..b9a2d54
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSequence>
+               <string>one <nul/> two</string>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-20-D.in b/tests/tests-c-compiler/data-70/data-70-20-D.in
new file mode 100644 (file)
index 0000000..33920d8
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence>
+               <integer>123</integer>
+               <string>one <nul/> two</string>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-21-D.in b/tests/tests-c-compiler/data-70/data-70-21-D.in
new file mode 100644 (file)
index 0000000..24cb9bb
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence>
+               <string>one <nul/> two</string>
+               <extension> <another/> <something></something> </extension>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-22-D.in b/tests/tests-c-compiler/data-70/data-70-22-D.in
new file mode 100644 (file)
index 0000000..2a12a5a
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <extensibleSequence>
+               <integer>0</integer>
+               <extension> in improper place </extension>
+               <string>one <nul/> two</string>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-23-D.in b/tests/tests-c-compiler/data-70/data-70-23-D.in
new file mode 100644 (file)
index 0000000..05f012c
--- /dev/null
@@ -0,0 +1,9 @@
+<PDU>
+       <extensibleSequence>
+               <string></string>
+               <one></one>
+               <two> <two/> </two>
+               <extensibleSequence/>
+               <integer>234</integer>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-24-D.in b/tests/tests-c-compiler/data-70/data-70-24-D.in
new file mode 100644 (file)
index 0000000..14aef69
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence>
+               <extensibleSequence/>
+               <integer> <!-- <zzz> --> 234</integer>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-25.in b/tests/tests-c-compiler/data-70/data-70-25.in
new file mode 100644 (file)
index 0000000..44c4cf5
--- /dev/null
@@ -0,0 +1,7 @@
+<PDU>
+       <setOfNULL>
+               <NULL/>
+               <NULL/>
+               <NULL/>
+       </setOfNULL>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-26-B.in b/tests/tests-c-compiler/data-70/data-70-26-B.in
new file mode 100644 (file)
index 0000000..b683259
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <setOfNULL>
+               <zuka/>
+       </setOfNULL>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-27.in b/tests/tests-c-compiler/data-70/data-70-27.in
new file mode 100644 (file)
index 0000000..f02101c
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <seqOfZuka>
+               <NULL/>
+       </seqOfZuka>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-28.in b/tests/tests-c-compiler/data-70/data-70-28.in
new file mode 100644 (file)
index 0000000..bdaa32c
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfEnums>
+               <one/>
+               <oneMore/>
+       </setOfEnums>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-29-D.in b/tests/tests-c-compiler/data-70/data-70-29-D.in
new file mode 100644 (file)
index 0000000..46d142b
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfEnums>
+               <oneMore/>
+               <one/>
+       </setOfEnums>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-30-B.in b/tests/tests-c-compiler/data-70/data-70-30-B.in
new file mode 100644 (file)
index 0000000..90f66b3
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfEnums>
+               <one/>
+               <unknown/>
+       </setOfEnums>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-31-B.in b/tests/tests-c-compiler/data-70/data-70-31-B.in
new file mode 100644 (file)
index 0000000..3ca6ca6
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <sequenceOf>
+               <id><one/></id>
+               <id>7</id>
+       </sequenceOf>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-32.in b/tests/tests-c-compiler/data-70/data-70-32.in
new file mode 100644 (file)
index 0000000..790605a
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <sequenceOf>
+               <id>1</id>
+               <id>7</id>
+       </sequenceOf>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-33.in b/tests/tests-c-compiler/data-70/data-70-33.in
new file mode 100644 (file)
index 0000000..1ba85a9
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSet>
+               <enum>\r <a/>\r </enum>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-34-B.in b/tests/tests-c-compiler/data-70/data-70-34-B.in
new file mode 100644 (file)
index 0000000..554fa95
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence>
+               <extensibleSequence/>
+               <integer> <!-- <zzz> --> </integer>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-35-B.in b/tests/tests-c-compiler/data-70/data-70-35-B.in
new file mode 100644 (file)
index 0000000..4f338db
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence>
+               <extensibleSequence/>
+               <integer>35 35</integer>
+       </extensibleSequence>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-36.in b/tests/tests-c-compiler/data-70/data-70-36.in
new file mode 100644 (file)
index 0000000..7be4ca5
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112</roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-37-D.in b/tests/tests-c-compiler/data-70/data-70-37-D.in
new file mode 100644 (file)
index 0000000..4927630
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789 <!-- whitespace --></roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-38-B.in b/tests/tests-c-compiler/data-70/data-70-38-B.in
new file mode 100644 (file)
index 0000000..5c67564
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789  345</roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-39.in b/tests/tests-c-compiler/data-70/data-70-39.in
new file mode 100644 (file)
index 0000000..f648557
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <extensibleSequence2>
+               <integer>123</integer>
+       </extensibleSequence2>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-40-D.in b/tests/tests-c-compiler/data-70/data-70-40-D.in
new file mode 100644 (file)
index 0000000..b23feff
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSequence2>
+               <integer>123</integer>
+               <string>one <nul/> two</string>
+       </extensibleSequence2>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-41-D.in b/tests/tests-c-compiler/data-70/data-70-41-D.in
new file mode 100644 (file)
index 0000000..84e79ef
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <extensibleSet>
+               <enum> <a/> </enum>
+               <unknown-extension> </unknown-extension>
+       </extensibleSet>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-42-E.in b/tests/tests-c-compiler/data-70/data-70-42-E.in
new file mode 100644 (file)
index 0000000..f346c92
--- /dev/null
@@ -0,0 +1 @@
+<PDU><extensibleSequence><gtime>20040512224355Z</gtime></extensibleSequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-43-E.in b/tests/tests-c-compiler/data-70/data-70-43-E.in
new file mode 100644 (file)
index 0000000..cddc3c7
--- /dev/null
@@ -0,0 +1 @@
+<PDU><extensibleSequence><gtime>20040512224355.123Z</gtime></extensibleSequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-44-X.in b/tests/tests-c-compiler/data-70/data-70-44-X.in
new file mode 100644 (file)
index 0000000..00d66ac
--- /dev/null
@@ -0,0 +1 @@
+<PDU><extensibleSequence><gtime>20040512224355,123Z</gtime></extensibleSequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-45-X.in b/tests/tests-c-compiler/data-70/data-70-45-X.in
new file mode 100644 (file)
index 0000000..fb4f524
--- /dev/null
@@ -0,0 +1 @@
+<PDU><extensibleSequence><gtime>20040512224355.120Z</gtime></extensibleSequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-46-X.in b/tests/tests-c-compiler/data-70/data-70-46-X.in
new file mode 100644 (file)
index 0000000..1b26840
--- /dev/null
@@ -0,0 +1 @@
+<PDU><extensibleSequence><gtime>20040512224355+0000</gtime></extensibleSequence></PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-47.in b/tests/tests-c-compiler/data-70/data-70-47.in
new file mode 100644 (file)
index 0000000..5a57256
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <namedSetOfEnums>
+               <one/>
+               <oneMore/>
+       </namedSetOfEnums>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-48.in b/tests/tests-c-compiler/data-70/data-70-48.in
new file mode 100644 (file)
index 0000000..269247d
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <setOfREAL>
+               <REAL>1.0</REAL>
+       </setOfREAL>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-49.in b/tests/tests-c-compiler/data-70/data-70-49.in
new file mode 100644 (file)
index 0000000..d3a8344
--- /dev/null
@@ -0,0 +1 @@
+<PDU> <namedSetOfREAL> <name>1.0</name> </namedSetOfREAL> </PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-50.in b/tests/tests-c-compiler/data-70/data-70-50.in
new file mode 100644 (file)
index 0000000..21233c5
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <namedSetOfNULL>
+               <NULL/> <NULL/> <NULL/>
+       </namedSetOfNULL>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-51.in b/tests/tests-c-compiler/data-70/data-70-51.in
new file mode 100644 (file)
index 0000000..106bbb8
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfChoice>
+               <a></a>
+               <b>1</b>
+       </setOfChoice>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-52-D.in b/tests/tests-c-compiler/data-70/data-70-52-D.in
new file mode 100644 (file)
index 0000000..0a35d3d
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <setOfChoice>
+               <a/>
+               <b>1</b>
+       </setOfChoice>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-53.in b/tests/tests-c-compiler/data-70/data-70-53.in
new file mode 100644 (file)
index 0000000..20940b6
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <namedSetOfChoice>
+               <a></a>
+               <b>1</b>
+       </namedSetOfChoice>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-54-D.in b/tests/tests-c-compiler/data-70/data-70-54-D.in
new file mode 100644 (file)
index 0000000..365026d
--- /dev/null
@@ -0,0 +1,6 @@
+<PDU>
+       <namedSetOfChoice>
+               <a/>
+               <b>1</b>
+       </namedSetOfChoice>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-55.in b/tests/tests-c-compiler/data-70/data-70-55.in
new file mode 100644 (file)
index 0000000..7be4ca5
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112</roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-56.in b/tests/tests-c-compiler/data-70/data-70-56.in
new file mode 100644 (file)
index 0000000..7a7ba07
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid> 123.456.789.101112 </roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-57-D.in b/tests/tests-c-compiler/data-70/data-70-57-D.in
new file mode 100644 (file)
index 0000000..74da9b9
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid> <!--/--> 123.456.789.101112</roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-58-D.in b/tests/tests-c-compiler/data-70/data-70-58-D.in
new file mode 100644 (file)
index 0000000..252345d
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112<!--/--></roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-59-D.in b/tests/tests-c-compiler/data-70/data-70-59-D.in
new file mode 100644 (file)
index 0000000..2d989d2
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112<!--/--> </roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-60-D.in b/tests/tests-c-compiler/data-70/data-70-60-D.in
new file mode 100644 (file)
index 0000000..11be5d7
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112 <!--/--></roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-61-D.in b/tests/tests-c-compiler/data-70/data-70-61-D.in
new file mode 100644 (file)
index 0000000..5c47c9f
--- /dev/null
@@ -0,0 +1,5 @@
+<PDU>
+       <set>
+               <roid>123.456.789.101112 <!--/--> </roid>
+       </set>
+</PDU>
diff --git a/tests/tests-c-compiler/data-70/data-70-62-D.in b/tests/tests-c-compiler/data-70/data-70-62-D.in
new file mode 100644 (file)
index 0000000..cb790d2
--- /dev/null
@@ -0,0 +1,9 @@
+<PDU>
+       <set>
+               <roid>
+                       <!-- This is a special comment -->
+                       123.456.789.101112
+                       <!-- This is a special comment too -->
+               </roid>
+       </set>
+</PDU>
diff --git a/tests/tests-randomized/.deps/test-param-helper.Po b/tests/tests-randomized/.deps/test-param-helper.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-randomized/Makefile b/tests/tests-randomized/Makefile
new file mode 100644 (file)
index 0000000..fb0b47e
--- /dev/null
@@ -0,0 +1,1253 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-randomized/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+check_PROGRAMS = test-param-helper$(EXEEXT)
+subdir = tests/tests-randomized
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+test_param_helper_SOURCES = test-param-helper.c
+test_param_helper_OBJECTS = test-param-helper.$(OBJEXT)
+test_param_helper_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = test-param-helper.c
+DIST_SOURCES = test-param-helper.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99)
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-randomized
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-randomized
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+dist_check_SCRIPTS = check-bundles.sh
+
+# Override single test fuzzing time using "make check FUZZ_TIME=1"
+FUZZ_TIME = 10
+TESTS_ENVIRONMENT = \
+    CC="${CC}"                              \
+    MAKE="${MAKE}"                          \
+    CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}"  \
+    CFLAGS_M32="${CFLAGS_M32}"              \
+    LDFLAGS="${LDFLAGS}"                    \
+    LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}"  \
+    FUZZ_TIME="${FUZZ_TIME}"                \
+    ASAN_ENV_FLAGS=" ASAN_OPTIONS=detect_leaks=1"       \
+    srcdir=${srcdir}                        \
+    abs_builddir=${abs_builddir}            \
+    abs_top_srcdir=${abs_top_srcdir}        \
+    abs_top_builddir=${abs_top_builddir}    \
+    ${srcdir}/check-bundles.sh
+
+TESTS = bundles/00-NULL-bundle.txt bundles/01-BOOLEAN-bundle.txt \
+       bundles/02-INTEGER-bundle.txt bundles/03-ENUMERATED-bundle.txt \
+       bundles/04-REAL-bundle.txt bundles/05-BIT-STRING-bundle.txt \
+       bundles/06-OCTET-STRING-bundle.txt \
+       bundles/07-VisibleString-bundle.txt \
+       bundles/08-OBJECT-IDENTIFIER-bundle.txt \
+       bundles/09-RELATIVE-OID-bundle.txt \
+       bundles/10-UTF8String-bundle.txt \
+       bundles/11-BMPString-bundle.txt \
+       bundles/12-UniversalString-bundle.txt \
+       bundles/13-UTCTime-bundle.txt \
+       bundles/14-GeneralizedTime-bundle.txt \
+       bundles/15-CHOICE-bundle.txt bundles/16-SEQUENCE-bundle.txt \
+       bundles/17-SEQUENCE-OF-bundle.txt bundles/19-SET-OF-bundle.txt
+EXTRA_DIST = \
+    random-test-driver.c        \
+    $(srcdir)/bundles/README    \
+    $(srcdir)/bundles/*.txt
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-randomized/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-randomized/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+test-param-helper$(EXEEXT): $(test_param_helper_OBJECTS) $(test_param_helper_DEPENDENCIES) $(EXTRA_test_param_helper_DEPENDENCIES) 
+       @rm -f test-param-helper$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_param_helper_OBJECTS) $(test_param_helper_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/test-param-helper.Po
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+bundles/00-NULL-bundle.txt.log: bundles/00-NULL-bundle.txt
+       @p='bundles/00-NULL-bundle.txt'; \
+       b='bundles/00-NULL-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/01-BOOLEAN-bundle.txt.log: bundles/01-BOOLEAN-bundle.txt
+       @p='bundles/01-BOOLEAN-bundle.txt'; \
+       b='bundles/01-BOOLEAN-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/02-INTEGER-bundle.txt.log: bundles/02-INTEGER-bundle.txt
+       @p='bundles/02-INTEGER-bundle.txt'; \
+       b='bundles/02-INTEGER-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/03-ENUMERATED-bundle.txt.log: bundles/03-ENUMERATED-bundle.txt
+       @p='bundles/03-ENUMERATED-bundle.txt'; \
+       b='bundles/03-ENUMERATED-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/04-REAL-bundle.txt.log: bundles/04-REAL-bundle.txt
+       @p='bundles/04-REAL-bundle.txt'; \
+       b='bundles/04-REAL-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/05-BIT-STRING-bundle.txt.log: bundles/05-BIT-STRING-bundle.txt
+       @p='bundles/05-BIT-STRING-bundle.txt'; \
+       b='bundles/05-BIT-STRING-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/06-OCTET-STRING-bundle.txt.log: bundles/06-OCTET-STRING-bundle.txt
+       @p='bundles/06-OCTET-STRING-bundle.txt'; \
+       b='bundles/06-OCTET-STRING-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/07-VisibleString-bundle.txt.log: bundles/07-VisibleString-bundle.txt
+       @p='bundles/07-VisibleString-bundle.txt'; \
+       b='bundles/07-VisibleString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/08-OBJECT-IDENTIFIER-bundle.txt.log: bundles/08-OBJECT-IDENTIFIER-bundle.txt
+       @p='bundles/08-OBJECT-IDENTIFIER-bundle.txt'; \
+       b='bundles/08-OBJECT-IDENTIFIER-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/09-RELATIVE-OID-bundle.txt.log: bundles/09-RELATIVE-OID-bundle.txt
+       @p='bundles/09-RELATIVE-OID-bundle.txt'; \
+       b='bundles/09-RELATIVE-OID-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/10-UTF8String-bundle.txt.log: bundles/10-UTF8String-bundle.txt
+       @p='bundles/10-UTF8String-bundle.txt'; \
+       b='bundles/10-UTF8String-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/11-BMPString-bundle.txt.log: bundles/11-BMPString-bundle.txt
+       @p='bundles/11-BMPString-bundle.txt'; \
+       b='bundles/11-BMPString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/12-UniversalString-bundle.txt.log: bundles/12-UniversalString-bundle.txt
+       @p='bundles/12-UniversalString-bundle.txt'; \
+       b='bundles/12-UniversalString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/13-UTCTime-bundle.txt.log: bundles/13-UTCTime-bundle.txt
+       @p='bundles/13-UTCTime-bundle.txt'; \
+       b='bundles/13-UTCTime-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/14-GeneralizedTime-bundle.txt.log: bundles/14-GeneralizedTime-bundle.txt
+       @p='bundles/14-GeneralizedTime-bundle.txt'; \
+       b='bundles/14-GeneralizedTime-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/15-CHOICE-bundle.txt.log: bundles/15-CHOICE-bundle.txt
+       @p='bundles/15-CHOICE-bundle.txt'; \
+       b='bundles/15-CHOICE-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/16-SEQUENCE-bundle.txt.log: bundles/16-SEQUENCE-bundle.txt
+       @p='bundles/16-SEQUENCE-bundle.txt'; \
+       b='bundles/16-SEQUENCE-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/17-SEQUENCE-OF-bundle.txt.log: bundles/17-SEQUENCE-OF-bundle.txt
+       @p='bundles/17-SEQUENCE-OF-bundle.txt'; \
+       b='bundles/17-SEQUENCE-OF-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/19-SET-OF-bundle.txt.log: bundles/19-SET-OF-bundle.txt
+       @p='bundles/19-SET-OF-bundle.txt'; \
+       b='bundles/19-SET-OF-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+         $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+       cscopelist-am ctags ctags-am distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+clean-local:
+       rm -rf .tmp.*
+
+# 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:
diff --git a/tests/tests-randomized/Makefile.am b/tests/tests-randomized/Makefile.am
new file mode 100644 (file)
index 0000000..99267a1
--- /dev/null
@@ -0,0 +1,55 @@
+@CODE_COVERAGE_RULES@
+
+check_PROGRAMS = test-param-helper
+dist_check_SCRIPTS = check-bundles.sh
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+
+# Override single test fuzzing time using "make check FUZZ_TIME=1"
+FUZZ_TIME=10
+
+TESTS_ENVIRONMENT=                          \
+    CC="${CC}"                              \
+    MAKE="${MAKE}"                          \
+    CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}"  \
+    CFLAGS_M32="${CFLAGS_M32}"              \
+    LDFLAGS="${LDFLAGS}"                    \
+    LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}"  \
+    FUZZ_TIME="${FUZZ_TIME}"                \
+    ASAN_ENV_FLAGS="@ASAN_ENV_FLAGS@"       \
+    srcdir=${srcdir}                        \
+    abs_builddir=${abs_builddir}            \
+    abs_top_srcdir=${abs_top_srcdir}        \
+    abs_top_builddir=${abs_top_builddir}    \
+    ${srcdir}/check-bundles.sh
+
+TESTS =
+TESTS += bundles/00-NULL-bundle.txt
+TESTS += bundles/01-BOOLEAN-bundle.txt
+TESTS += bundles/02-INTEGER-bundle.txt
+TESTS += bundles/03-ENUMERATED-bundle.txt
+TESTS += bundles/04-REAL-bundle.txt
+TESTS += bundles/05-BIT-STRING-bundle.txt
+TESTS += bundles/06-OCTET-STRING-bundle.txt
+TESTS += bundles/07-VisibleString-bundle.txt
+TESTS += bundles/08-OBJECT-IDENTIFIER-bundle.txt
+TESTS += bundles/09-RELATIVE-OID-bundle.txt
+TESTS += bundles/10-UTF8String-bundle.txt
+TESTS += bundles/11-BMPString-bundle.txt
+TESTS += bundles/12-UniversalString-bundle.txt
+TESTS += bundles/13-UTCTime-bundle.txt
+TESTS += bundles/14-GeneralizedTime-bundle.txt
+TESTS += bundles/15-CHOICE-bundle.txt
+TESTS += bundles/16-SEQUENCE-bundle.txt
+TESTS += bundles/17-SEQUENCE-OF-bundle.txt
+TESTS += bundles/19-SET-OF-bundle.txt
+
+EXTRA_DIST =                    \
+    random-test-driver.c        \
+    $(srcdir)/bundles/README    \
+    $(srcdir)/bundles/*.txt
+
+clean-local:
+       rm -rf .tmp.*
diff --git a/tests/tests-randomized/Makefile.in b/tests/tests-randomized/Makefile.in
new file mode 100644 (file)
index 0000000..06dd928
--- /dev/null
@@ -0,0 +1,1155 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+check_PROGRAMS = test-param-helper$(EXEEXT)
+subdir = tests/tests-randomized
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+test_param_helper_SOURCES = test-param-helper.c
+test_param_helper_OBJECTS = test-param-helper.$(OBJEXT)
+test_param_helper_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = test-param-helper.c
+DIST_SOURCES = test-param-helper.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@)
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+dist_check_SCRIPTS = check-bundles.sh
+
+# Override single test fuzzing time using "make check FUZZ_TIME=1"
+FUZZ_TIME = 10
+TESTS_ENVIRONMENT = \
+    CC="${CC}"                              \
+    MAKE="${MAKE}"                          \
+    CFLAGS="${TESTSUITE_CFLAGS} ${CFLAGS}"  \
+    CFLAGS_M32="${CFLAGS_M32}"              \
+    LDFLAGS="${LDFLAGS}"                    \
+    LIBFUZZER_CFLAGS="${LIBFUZZER_CFLAGS}"  \
+    FUZZ_TIME="${FUZZ_TIME}"                \
+    ASAN_ENV_FLAGS="@ASAN_ENV_FLAGS@"       \
+    srcdir=${srcdir}                        \
+    abs_builddir=${abs_builddir}            \
+    abs_top_srcdir=${abs_top_srcdir}        \
+    abs_top_builddir=${abs_top_builddir}    \
+    ${srcdir}/check-bundles.sh
+
+TESTS = bundles/00-NULL-bundle.txt bundles/01-BOOLEAN-bundle.txt \
+       bundles/02-INTEGER-bundle.txt bundles/03-ENUMERATED-bundle.txt \
+       bundles/04-REAL-bundle.txt bundles/05-BIT-STRING-bundle.txt \
+       bundles/06-OCTET-STRING-bundle.txt \
+       bundles/07-VisibleString-bundle.txt \
+       bundles/08-OBJECT-IDENTIFIER-bundle.txt \
+       bundles/09-RELATIVE-OID-bundle.txt \
+       bundles/10-UTF8String-bundle.txt \
+       bundles/11-BMPString-bundle.txt \
+       bundles/12-UniversalString-bundle.txt \
+       bundles/13-UTCTime-bundle.txt \
+       bundles/14-GeneralizedTime-bundle.txt \
+       bundles/15-CHOICE-bundle.txt bundles/16-SEQUENCE-bundle.txt \
+       bundles/17-SEQUENCE-OF-bundle.txt bundles/19-SET-OF-bundle.txt
+EXTRA_DIST = \
+    random-test-driver.c        \
+    $(srcdir)/bundles/README    \
+    $(srcdir)/bundles/*.txt
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-randomized/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-randomized/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+test-param-helper$(EXEEXT): $(test_param_helper_OBJECTS) $(test_param_helper_DEPENDENCIES) $(EXTRA_test_param_helper_DEPENDENCIES) 
+       @rm -f test-param-helper$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_param_helper_OBJECTS) $(test_param_helper_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-param-helper.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+bundles/00-NULL-bundle.txt.log: bundles/00-NULL-bundle.txt
+       @p='bundles/00-NULL-bundle.txt'; \
+       b='bundles/00-NULL-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/01-BOOLEAN-bundle.txt.log: bundles/01-BOOLEAN-bundle.txt
+       @p='bundles/01-BOOLEAN-bundle.txt'; \
+       b='bundles/01-BOOLEAN-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/02-INTEGER-bundle.txt.log: bundles/02-INTEGER-bundle.txt
+       @p='bundles/02-INTEGER-bundle.txt'; \
+       b='bundles/02-INTEGER-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/03-ENUMERATED-bundle.txt.log: bundles/03-ENUMERATED-bundle.txt
+       @p='bundles/03-ENUMERATED-bundle.txt'; \
+       b='bundles/03-ENUMERATED-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/04-REAL-bundle.txt.log: bundles/04-REAL-bundle.txt
+       @p='bundles/04-REAL-bundle.txt'; \
+       b='bundles/04-REAL-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/05-BIT-STRING-bundle.txt.log: bundles/05-BIT-STRING-bundle.txt
+       @p='bundles/05-BIT-STRING-bundle.txt'; \
+       b='bundles/05-BIT-STRING-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/06-OCTET-STRING-bundle.txt.log: bundles/06-OCTET-STRING-bundle.txt
+       @p='bundles/06-OCTET-STRING-bundle.txt'; \
+       b='bundles/06-OCTET-STRING-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/07-VisibleString-bundle.txt.log: bundles/07-VisibleString-bundle.txt
+       @p='bundles/07-VisibleString-bundle.txt'; \
+       b='bundles/07-VisibleString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/08-OBJECT-IDENTIFIER-bundle.txt.log: bundles/08-OBJECT-IDENTIFIER-bundle.txt
+       @p='bundles/08-OBJECT-IDENTIFIER-bundle.txt'; \
+       b='bundles/08-OBJECT-IDENTIFIER-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/09-RELATIVE-OID-bundle.txt.log: bundles/09-RELATIVE-OID-bundle.txt
+       @p='bundles/09-RELATIVE-OID-bundle.txt'; \
+       b='bundles/09-RELATIVE-OID-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/10-UTF8String-bundle.txt.log: bundles/10-UTF8String-bundle.txt
+       @p='bundles/10-UTF8String-bundle.txt'; \
+       b='bundles/10-UTF8String-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/11-BMPString-bundle.txt.log: bundles/11-BMPString-bundle.txt
+       @p='bundles/11-BMPString-bundle.txt'; \
+       b='bundles/11-BMPString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/12-UniversalString-bundle.txt.log: bundles/12-UniversalString-bundle.txt
+       @p='bundles/12-UniversalString-bundle.txt'; \
+       b='bundles/12-UniversalString-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/13-UTCTime-bundle.txt.log: bundles/13-UTCTime-bundle.txt
+       @p='bundles/13-UTCTime-bundle.txt'; \
+       b='bundles/13-UTCTime-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/14-GeneralizedTime-bundle.txt.log: bundles/14-GeneralizedTime-bundle.txt
+       @p='bundles/14-GeneralizedTime-bundle.txt'; \
+       b='bundles/14-GeneralizedTime-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/15-CHOICE-bundle.txt.log: bundles/15-CHOICE-bundle.txt
+       @p='bundles/15-CHOICE-bundle.txt'; \
+       b='bundles/15-CHOICE-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/16-SEQUENCE-bundle.txt.log: bundles/16-SEQUENCE-bundle.txt
+       @p='bundles/16-SEQUENCE-bundle.txt'; \
+       b='bundles/16-SEQUENCE-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/17-SEQUENCE-OF-bundle.txt.log: bundles/17-SEQUENCE-OF-bundle.txt
+       @p='bundles/17-SEQUENCE-OF-bundle.txt'; \
+       b='bundles/17-SEQUENCE-OF-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+bundles/19-SET-OF-bundle.txt.log: bundles/19-SET-OF-bundle.txt
+       @p='bundles/19-SET-OF-bundle.txt'; \
+       b='bundles/19-SET-OF-bundle.txt'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+         $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+       cscopelist-am ctags ctags-am distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+clean-local:
+       rm -rf .tmp.*
+
+# 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:
diff --git a/tests/tests-randomized/bundles/00-NULL-bundle.txt b/tests/tests-randomized/bundles/00-NULL-bundle.txt
new file mode 100644 (file)
index 0000000..7951def
--- /dev/null
@@ -0,0 +1 @@
+NULL
diff --git a/tests/tests-randomized/bundles/01-BOOLEAN-bundle.txt b/tests/tests-randomized/bundles/01-BOOLEAN-bundle.txt
new file mode 100644 (file)
index 0000000..e5b7583
--- /dev/null
@@ -0,0 +1,8 @@
+-- Test boolean. Should be easy
+T ::= BOOLEAN
+T ::= BOOLEAN (FALSE)
+T ::= BOOLEAN (TRUE)
+T ::= BOOLEAN (FALSE,...)
+T ::= BOOLEAN (TRUE,...)
+T ::= BOOLEAN (FALSE..TRUE)
+T ::= BOOLEAN (FALSE..TRUE,...)
diff --git a/tests/tests-randomized/bundles/02-INTEGER-bundle.txt b/tests/tests-randomized/bundles/02-INTEGER-bundle.txt
new file mode 100644 (file)
index 0000000..7cb67e2
--- /dev/null
@@ -0,0 +1,10 @@
+-- Test encoding/decoding/transcoding of everything concerning the integer.
+T ::= INTEGER
+T ::= [1] INTEGER -- Tagged integer test
+T ::= [300] INTEGER -- Large tag integer
+T ::= INTEGER (MIN..MAX)  -- Constrained integer
+T ::= INTEGER (0..1)  -- Constrained integer
+T ::= INTEGER (0..255)  -- Constrained integer
+T ::= INTEGER (-128..127)  -- Constrained integer
+T ::= INTEGER (-128..127,...)  -- Extensible constrained integer
+T ::= INTEGER { foo(0), bar(1), baz(2) }
diff --git a/tests/tests-randomized/bundles/03-ENUMERATED-bundle.txt b/tests/tests-randomized/bundles/03-ENUMERATED-bundle.txt
new file mode 100644 (file)
index 0000000..ac97a8d
--- /dev/null
@@ -0,0 +1,10 @@
+-- Test encoding/decoding/transcoding of everything concerning the ENUMERATED.
+T ::= ENUMERATED { foo }
+T ::= ENUMERATED { foo, ... }
+T ::= ENUMERATED { foo(0), bar(65535) }
+T ::= ENUMERATED { foo(0), bar(65535), ... }
+T ::= ENUMERATED { foo(0), bar(2147483647) }
+T ::= ENUMERATED { foo(0), bar(2147483647), ... }
+T ::= ENUMERATED { foo(0), ..., bar(2147483647) }
+T ::= ENUMERATED { foo(-2147483648), bar(0), baz(2147483647) }
+T ::= ENUMERATED { foo(-2147483648), ..., baz(2147483647) }
diff --git a/tests/tests-randomized/bundles/04-REAL-bundle.txt b/tests/tests-randomized/bundles/04-REAL-bundle.txt
new file mode 100644 (file)
index 0000000..267baa1
--- /dev/null
@@ -0,0 +1,7 @@
+-- Test the REAL (floating point) type.
+T ::= REAL
+T ::= REAL (WITH COMPONENTS { mantissa (-16384..16384), base (2), exponent (-10..10)})
+T ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104)})
+T ::= REAL (WITH COMPONENTS { mantissa (-9007199254740991..9007199254740991), base (2), exponent (-1074..971)})
+T ::= Real32 Real32 ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104)})
+T ::= Real64 Real64 ::= REAL (WITH COMPONENTS { mantissa (-9007199254740991..9007199254740991), base (2), exponent (-1074..971)})
diff --git a/tests/tests-randomized/bundles/05-BIT-STRING-bundle.txt b/tests/tests-randomized/bundles/05-BIT-STRING-bundle.txt
new file mode 100644 (file)
index 0000000..f2d253e
--- /dev/null
@@ -0,0 +1,25 @@
+-- Test encoding/decoding/transcoding of everything concerning the BIT STRING.
+T ::= BIT STRING { foo(0) }
+T ::= BIT STRING { foo(0) } (SIZE(0..1))
+T ::= BIT STRING { foo(0) } (SIZE(1))
+T ::= BIT STRING { foo(0) } (SIZE(1..MAX))
+T ::= BIT STRING { foo(0) } (SIZE(1..2))
+T ::= BIT STRING { foo(0) } (SIZE(2))
+T ::= BIT STRING { foo(0) } (SIZE(2,...))
+T ::= BIT STRING { foo(0), bar(65535) }
+T ::= BIT STRING { foo(0), bar(65535) } (SIZE(0..16))
+T ::= BIT STRING { foo(0), bar(65535) } (SIZE(16))
+T ::= BIT STRING { foo(0), bar(2147483647) }
+T ::= BIT STRING { foo(0), bar(2147483647) } (SIZE(1..MAX))
+T ::= BIT STRING { foo(2147483648), bar(0), baz(2147483647) }
+T ::= BIT STRING { foo(2147483648), baz(2147483647) }
+T ::= BIT STRING { foo(2147483648), baz(2147483647) } (SIZE(32))
+T ::= BIT STRING { foo(2147483648), baz(2147483647) } (SIZE(31,...))
+T ::= BIT STRING { foo(2147483648), baz(2147483647) } (SIZE(0..32))
+T ::= BIT STRING { foo(2147483648), baz(2147483647) } (SIZE(0..31,...))
+T ::= BIT STRING { foo(0) } (SIZE(65535))       -- RMAX=65540
+T ::= BIT STRING { foo(0) } (SIZE(65536))       -- RMAX=65540
+T ::= BIT STRING { foo(0) } (SIZE(65537))       -- RMAX=65540
+T ::= BIT STRING { foo(0) } (SIZE(65535,...))   -- RMAX=65540
+T ::= BIT STRING { foo(0) } (SIZE(65536,...))   -- RMAX=65540
+T ::= BIT STRING { foo(0) } (SIZE(65537,...))   -- RMAX=65540
diff --git a/tests/tests-randomized/bundles/06-OCTET-STRING-bundle.txt b/tests/tests-randomized/bundles/06-OCTET-STRING-bundle.txt
new file mode 100644 (file)
index 0000000..192ebac
--- /dev/null
@@ -0,0 +1,19 @@
+-- Test encoding/decoding/transcoding of a primitive byte string type
+T ::= OCTET STRING
+T ::= OCTET STRING ("Value Constraint")
+T ::= OCTET STRING (SIZE(0))
+T ::= OCTET STRING (SIZE(0,...))
+T ::= OCTET STRING (SIZE(1))
+T ::= OCTET STRING (SIZE(1,...))
+T ::= OCTET STRING (SIZE(2))
+T ::= OCTET STRING (SIZE(2,...))
+T ::= OCTET STRING (SIZE(1..2))
+T ::= OCTET STRING (SIZE(1..2,...))
+T ::= OCTET STRING (SIZE(1..127))
+T ::= OCTET STRING (SIZE(1..128))
+T ::= OCTET STRING (SIZE(1..129))
+T ::= OCTET STRING (SIZE(64000))           -- RMAX=64000, #11.9.3.3
+T ::= OCTET STRING (SIZE(32000..32002))    -- RMAX=33000
+T ::= OCTET STRING (SIZE(65530..65535))    -- RMAX=65536
+T ::= OCTET STRING (SIZE(65530..65536))    -- RMAX=65536
+T ::= OCTET STRING (SIZE(65535..65550))    -- RMAX=66000
diff --git a/tests/tests-randomized/bundles/07-VisibleString-bundle.txt b/tests/tests-randomized/bundles/07-VisibleString-bundle.txt
new file mode 100644 (file)
index 0000000..b94c1ea
--- /dev/null
@@ -0,0 +1,27 @@
+-- Test encoding/decoding/transcoding of a simple string type
+T ::= VisibleString
+T ::= VisibleString ("Value Constraint")
+T ::= VisibleString (SIZE(0))
+T ::= VisibleString (SIZE(0,...))
+T ::= VisibleString (SIZE(1))
+T ::= VisibleString (SIZE(1)) (FROM("A".."B"))
+T ::= VisibleString (SIZE(1,...))
+T ::= VisibleString (SIZE(2))
+T ::= VisibleString (SIZE(2,...))
+T ::= VisibleString (SIZE(1..2))
+T ::= VisibleString (SIZE(1..2,...))
+T ::= VisibleString (SIZE(4..6,...)) (FROM("A".."B"))
+T ::= VisibleString (SIZE(1..MAX)) (FROM("A".."B"))
+T ::= VisibleString (SIZE(1..127))
+T ::= VisibleString (SIZE(1..128))
+T ::= VisibleString (SIZE(1..129))
+T ::= VisibleString (SIZE(5) INTERSECTION FROM("A".."Z"))
+T ::= VisibleString (SIZE(4..6) INTERSECTION (FROM("A".."B")))
+T ::= VisibleString (SIZE(4..6,...) INTERSECTION (FROM("A".."B")))
+T ::= VisibleString (SIZE(64000))           -- RMAX=64000, #11.9.3.3
+T ::= VisibleString (SIZE(32000..32002))    -- RMAX=33000
+T ::= VisibleString (SIZE(32000..32002)) (FROM("A".."B"))       -- RMAX=33000
+T ::= VisibleString (SIZE(32000..32002,...)) (FROM("A".."B"))   -- RMAX=33000
+T ::= VisibleString (SIZE(65530..65535))    -- RMAX=65536
+T ::= VisibleString (SIZE(65530..65536))    -- RMAX=65536
+T ::= VisibleString (SIZE(65535..65550))    -- RMAX=66000
diff --git a/tests/tests-randomized/bundles/08-OBJECT-IDENTIFIER-bundle.txt b/tests/tests-randomized/bundles/08-OBJECT-IDENTIFIER-bundle.txt
new file mode 100644 (file)
index 0000000..108955a
--- /dev/null
@@ -0,0 +1 @@
+OBJECT IDENTIFIER
diff --git a/tests/tests-randomized/bundles/09-RELATIVE-OID-bundle.txt b/tests/tests-randomized/bundles/09-RELATIVE-OID-bundle.txt
new file mode 100644 (file)
index 0000000..f322cc0
--- /dev/null
@@ -0,0 +1 @@
+RELATIVE-OID
diff --git a/tests/tests-randomized/bundles/10-UTF8String-bundle.txt b/tests/tests-randomized/bundles/10-UTF8String-bundle.txt
new file mode 100644 (file)
index 0000000..206c59d
--- /dev/null
@@ -0,0 +1,7 @@
+UTF8String
+UTF8String (SIZE(0))
+UTF8String (SIZE(1))
+UTF8String (SIZE(3))
+UTF8String (FROM("A".."Z"))
+UTF8String (FROM("A".."Z") INTERSECTION SIZE(0))
+UTF8String (FROM("A".."Z") INTERSECTION SIZE(3))
diff --git a/tests/tests-randomized/bundles/11-BMPString-bundle.txt b/tests/tests-randomized/bundles/11-BMPString-bundle.txt
new file mode 100644 (file)
index 0000000..b56c8df
--- /dev/null
@@ -0,0 +1,7 @@
+BMPString
+BMPString (SIZE(0))
+BMPString (SIZE(1))
+BMPString (SIZE(3))
+BMPString (FROM("A".."Z"))
+BMPString (FROM("A".."Z") INTERSECTION SIZE(0))
+BMPString (FROM("A".."Z") INTERSECTION SIZE(3))
diff --git a/tests/tests-randomized/bundles/12-UniversalString-bundle.txt b/tests/tests-randomized/bundles/12-UniversalString-bundle.txt
new file mode 100644 (file)
index 0000000..aa99882
--- /dev/null
@@ -0,0 +1,7 @@
+UniversalString
+UniversalString (SIZE(0))
+UniversalString (SIZE(1))
+UniversalString (SIZE(3))
+UniversalString (FROM("A".."Z"))
+UniversalString (FROM("A".."Z") INTERSECTION SIZE(0))
+UniversalString (FROM("A".."Z") INTERSECTION SIZE(3))
diff --git a/tests/tests-randomized/bundles/13-UTCTime-bundle.txt b/tests/tests-randomized/bundles/13-UTCTime-bundle.txt
new file mode 100644 (file)
index 0000000..8676f98
--- /dev/null
@@ -0,0 +1 @@
+UTCTime
diff --git a/tests/tests-randomized/bundles/14-GeneralizedTime-bundle.txt b/tests/tests-randomized/bundles/14-GeneralizedTime-bundle.txt
new file mode 100644 (file)
index 0000000..3a261cc
--- /dev/null
@@ -0,0 +1 @@
+GeneralizedTime
diff --git a/tests/tests-randomized/bundles/15-CHOICE-bundle.txt b/tests/tests-randomized/bundles/15-CHOICE-bundle.txt
new file mode 100644 (file)
index 0000000..4fe76bb
--- /dev/null
@@ -0,0 +1,20 @@
+CHOICE { null NULL }
+CHOICE { null NULL, ... }
+CHOICE { one NULL, two [2] NULL }
+CHOICE { one [1] NULL, two [2] NULL }
+CHOICE { one [2] NULL, two [1] NULL }
+CHOICE { one [1] NULL, two [3] NULL }
+CHOICE { one [3] NULL, two [1] NULL }
+CHOICE { one [3] NULL, two [1] NULL, three [2] NULL }
+CHOICE { one [4] NULL, two [3] NULL, three [1] NULL, four [2] NULL }
+CHOICE { one [5] NULL, two [4] NULL, ..., three [3] NULL, four [2] NULL }
+CHOICE { null NULL, ..., one [5] NULL, two [4] NULL, three [3] NULL, four [2] NULL }
+CHOICE { one NULL, two [2] NULL, ... }
+CHOICE { one NULL, ..., two [2] NULL }
+CHOICE { one NULL, two [2] NULL, ..., three [3] NULL }
+CHOICE { one NULL, ..., two [2] NULL, three [3] NULL }
+CHOICE { one BOOLEAN, ..., two [2] BOOLEAN, three [3] BOOLEAN }
+CHOICE { one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+CHOICE { null NULL, ..., one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+CHOICE { one NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+CHOICE { null NULL, ..., one [1] NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
diff --git a/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt b/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt
new file mode 100644 (file)
index 0000000..cbe3d8c
--- /dev/null
@@ -0,0 +1,90 @@
+SEQUENCE { }
+SEQUENCE { ... }
+SEQUENCE { null NULL }
+SEQUENCE { null NULL OPTIONAL }
+SEQUENCE { ..., null NULL }
+SEQUENCE { ..., null NULL OPTIONAL }
+SEQUENCE { ..., null BOOLEAN }
+SEQUENCE { ..., null BOOLEAN DEFAULT FALSE }
+SEQUENCE { ..., null BOOLEAN DEFAULT TRUE }
+SEQUENCE { str IA5String }
+SEQUENCE { str IA5String OPTIONAL }
+SEQUENCE { str IA5String (SIZE(0)) }
+SEQUENCE { str IA5String (SIZE(0)) OPTIONAL }
+SEQUENCE { str IA5String (SIZE(1)) }
+SEQUENCE { str IA5String (SIZE(1)) OPTIONAL }
+
+SEQUENCE { null NULL }
+SEQUENCE { null NULL, ... }
+SEQUENCE { one NULL, two [2] NULL }
+SEQUENCE { one [1] NULL, two [2] NULL }
+SEQUENCE { one [2] NULL, two [1] NULL }
+SEQUENCE { one [1] NULL, two [3] NULL }
+SEQUENCE { one [3] NULL, two [1] NULL }
+SEQUENCE { one [3] NULL, two [1] NULL, three [2] NULL }
+SEQUENCE { one [4] NULL, two [3] NULL, three [1] NULL, four [2] NULL }
+SEQUENCE { one [5] NULL, two [4] NULL, ..., three [3] NULL, four [2] NULL }
+SEQUENCE { null NULL, ..., one [5] NULL, two [4] NULL, three [3] NULL, four [2] NULL }
+SEQUENCE { one NULL, two [2] NULL, ... }
+SEQUENCE { one NULL, ..., two [2] NULL }
+SEQUENCE { one NULL, two [2] NULL, ..., three [3] NULL }
+SEQUENCE { one NULL, ..., two [2] NULL, three [3] NULL }
+SEQUENCE { one BOOLEAN, ..., two [2] BOOLEAN, three [3] BOOLEAN }
+SEQUENCE { one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+SEQUENCE { null NULL, ..., one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+SEQUENCE { one NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+SEQUENCE { null NULL, ..., one [1] NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+
+SEQUENCE { one NULL, ..., two [2] NULL }
+SEQUENCE { one [1] NULL, ..., two [2] NULL }
+SEQUENCE { one [2] NULL, ..., two [1] NULL }
+SEQUENCE { one [1] NULL, ..., two [3] NULL }
+SEQUENCE { one [3] NULL, ..., two [1] NULL }
+SEQUENCE { one [3] NULL, ..., two [1] NULL, three [2] NULL }
+SEQUENCE { one [4] NULL, ..., two [3] NULL, three [1] NULL, four [2] NULL }
+SEQUENCE { one [5] NULL, ..., two [4] NULL, ..., three [3] NULL, four [2] NULL }
+SEQUENCE { one NULL, ..., two [2] NULL, ... }
+SEQUENCE { one NULL, ..., two [2] NULL, ..., three [3] NULL }
+SEQUENCE { one NULL, ..., two [2] NULL, three [3] NULL }
+SEQUENCE { one BOOLEAN, ..., two [2] BOOLEAN, three [3] BOOLEAN, ... }
+SEQUENCE { one BOOLEAN, ..., two BIT STRING (SIZE(1..3)) }
+SEQUENCE { null NULL, ..., one BOOLEAN, two BIT STRING (SIZE(1..3)), ... }
+SEQUENCE { one NULL, ..., two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+SEQUENCE { null NULL, ..., one [1] NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)), ... }
+SEQUENCE { null NULL, ..., one [1] NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)), ..., four IA5String (SIZE(0)) }
+
+SEQUENCE { ..., null NULL }
+SEQUENCE { ..., null NULL, ... }
+SEQUENCE { ..., one NULL, two [2] NULL }
+SEQUENCE { ..., one [1] NULL, two [2] NULL }
+SEQUENCE { ..., one [2] NULL, two [1] NULL }
+SEQUENCE { ..., one [1] NULL, two [3] NULL }
+SEQUENCE { ..., one [3] NULL, two [1] NULL }
+SEQUENCE { ..., one [3] NULL, two [1] NULL, three [2] NULL }
+SEQUENCE { ..., one [4] NULL, two [3] NULL, three [1] NULL, four [2] NULL }
+SEQUENCE { ..., one [5] NULL, two [4] NULL, ..., three [3] NULL, four [2] NULL }
+SEQUENCE { ..., null NULL, ..., one [5] NULL, two [4] NULL, three [3] NULL, four [2] NULL }
+SEQUENCE { ..., one NULL, two [2] NULL, ... }
+SEQUENCE { ..., one NULL, ..., two [2] NULL }
+SEQUENCE { ..., one NULL, two [2] NULL, ..., three [3] NULL }
+SEQUENCE { ..., one NULL, ..., two [2] NULL, three [3] NULL }
+SEQUENCE { ..., one BOOLEAN, ..., two [2] BOOLEAN, three [3] BOOLEAN }
+SEQUENCE { ..., one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+SEQUENCE { ..., null NULL, ..., one BOOLEAN, two BIT STRING (SIZE(1..3)) }
+SEQUENCE { ..., one NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+SEQUENCE { ..., null NULL, ..., one [1] NULL, two BOOLEAN, three BIT STRING (SIZE(1..3)) }
+
+
+SEQUENCE { one BOOLEAN OPTIONAL, two PrintableString (SIZE(1)), three VisibleString (SIZE(1)) DEFAULT "Z" }
+SEQUENCE { one [1] BOOLEAN OPTIONAL, two [2] BOOLEAN, three [3] BOOLEAN DEFAULT TRUE, four PrintableString (SIZE(1)), five VisibleString (SIZE(1)) DEFAULT "Z" }
+SEQUENCE { list SEQUENCE OF PrintableString (SIZE(1)), guard OCTET STRING (SIZE(1)) } -- RMAX=16385
+
+-- Mainly verifies list encoding when its size is 0.
+SEQUENCE { list SET OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SET (SIZE(1..MAX)) OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SET (SIZE(1..MAX,...)) OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SET (SIZE(1..2,...)) OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SEQUENCE OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SEQUENCE (SIZE(1..MAX,...)) OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+SEQUENCE { list SEQUENCE (SIZE(1..2,...)) OF OCTET STRING(SIZE(1)), guard OCTET STRING(SIZE(1)) }
+
diff --git a/tests/tests-randomized/bundles/17-SEQUENCE-OF-bundle.txt b/tests/tests-randomized/bundles/17-SEQUENCE-OF-bundle.txt
new file mode 100644 (file)
index 0000000..ab8179c
--- /dev/null
@@ -0,0 +1,38 @@
+SEQUENCE OF NULL
+SEQUENCE (SIZE(0)) OF NULL
+SEQUENCE (SIZE(1)) OF NULL
+SEQUENCE (SIZE(0..2)) OF NULL
+SEQUENCE (SIZE(1..2)) OF NULL
+SEQUENCE (SIZE(1..MAX)) OF NULL
+
+SEQUENCE OF BOOLEAN
+SEQUENCE (SIZE(0)) OF BOOLEAN
+SEQUENCE (SIZE(1)) OF BOOLEAN
+SEQUENCE (SIZE(0..2)) OF BOOLEAN
+SEQUENCE (SIZE(1..2)) OF BOOLEAN
+SEQUENCE (SIZE(1..MAX)) OF BOOLEAN
+
+SEQUENCE OF PrintableString (SIZE(1))
+SEQUENCE (SIZE(0)) OF PrintableString (SIZE(1))
+SEQUENCE (SIZE(1)) OF PrintableString (SIZE(1))
+SEQUENCE (SIZE(0..2)) OF PrintableString (SIZE(1))
+SEQUENCE (SIZE(1..2)) OF PrintableString (SIZE(1))
+SEQUENCE (SIZE(1..MAX)) OF PrintableString (SIZE(1))
+
+SEQUENCE OF PrintableString (FROM("A".."Z"))
+SEQUENCE (SIZE(0)) OF PrintableString (FROM("A".."Z"))
+SEQUENCE (SIZE(1)) OF PrintableString (FROM("A".."Z"))
+SEQUENCE (SIZE(0..2)) OF PrintableString (FROM("A".."Z"))
+SEQUENCE (SIZE(1..2)) OF PrintableString (FROM("A".."Z"))
+SEQUENCE (SIZE(1..MAX)) OF PrintableString (FROM("A".."Z"))
+
+SEQUENCE OF PrintableString (FROM("A".."Z"))
+
+SEQUENCE OF BOOLEAN -- RMAX=70000
+SEQUENCE (SIZE(2..MAX)) OF BOOLEAN -- RMAX=70000
+SEQUENCE OF PrintableString (SIZE(1))  --RMAX=16384
+
+-- Mainly verifies encoding when its size is 0.
+SEQUENCE OF OCTET STRING (SIZE(1))
+SEQUENCE (SIZE(1..MAX,...)) OF OCTET STRING (SIZE(1))
+SEQUENCE (SIZE(1..2,...)) OF OCTET STRING (SIZE(1))
diff --git a/tests/tests-randomized/bundles/19-SET-OF-bundle.txt b/tests/tests-randomized/bundles/19-SET-OF-bundle.txt
new file mode 100644 (file)
index 0000000..ea83c25
--- /dev/null
@@ -0,0 +1,38 @@
+SET OF NULL
+SET (SIZE(0)) OF NULL
+SET (SIZE(1)) OF NULL
+SET (SIZE(0..2)) OF NULL
+SET (SIZE(1..2)) OF NULL
+SET (SIZE(1..MAX)) OF NULL
+
+SET OF BOOLEAN
+SET (SIZE(0)) OF BOOLEAN
+SET (SIZE(1)) OF BOOLEAN
+SET (SIZE(0..2)) OF BOOLEAN
+SET (SIZE(1..2)) OF BOOLEAN
+SET (SIZE(1..MAX)) OF BOOLEAN
+
+SET OF PrintableString (SIZE(1))
+SET (SIZE(0)) OF PrintableString (SIZE(1))
+SET (SIZE(1)) OF PrintableString (SIZE(1))
+SET (SIZE(0..2)) OF PrintableString (SIZE(1))
+SET (SIZE(1..2)) OF PrintableString (SIZE(1))
+SET (SIZE(1..MAX)) OF PrintableString (SIZE(1))
+
+SET OF PrintableString (FROM("A".."Z"))
+SET (SIZE(0)) OF PrintableString (FROM("A".."Z"))
+SET (SIZE(1)) OF PrintableString (FROM("A".."Z"))
+SET (SIZE(0..2)) OF PrintableString (FROM("A".."Z"))
+SET (SIZE(1..2)) OF PrintableString (FROM("A".."Z"))
+SET (SIZE(1..MAX)) OF PrintableString (FROM("A".."Z"))
+
+SET OF PrintableString (FROM("A".."Z"))
+
+SET OF BOOLEAN -- RMAX=70000
+SET (SIZE(2..MAX)) OF BOOLEAN -- RMAX=70000
+SET OF PrintableString (SIZE(1))  --RMAX=16384
+
+-- Mainly verifies encoding when its size is 0.
+SET OF OCTET STRING (SIZE(1))
+SET (SIZE(1..MAX,...)) OF OCTET STRING (SIZE(1))
+SET (SIZE(1..2,...)) OF OCTET STRING (SIZE(1))
diff --git a/tests/tests-randomized/bundles/README b/tests/tests-randomized/bundles/README
new file mode 100644 (file)
index 0000000..e962eed
--- /dev/null
@@ -0,0 +1,22 @@
+
+This directory contains test bundles for randomized testing.
+Each file contains a number of related ASN.1 types with variations in
+contstraints that are intended to affect encoding and parsing.
+
+ * Lines consisting of comments only are ignored.
+
+ * The ASN.1 type can be written with "T ::=" prefix or without it, in which
+   case it will be added automatically. It is done to simplify manual
+   testing with ./check-bundles.sh -t <type>. For example,
+        ./check-bundles.sh -t INTEGER
+   is equivalent to
+        ./check-bundles.sh -t "T ::= INTEGER"
+
+ * By default, the random value generator attempts to generate values
+   limited to very roughly to around 128 bytes. If huge values are desired
+   (perhaps due to large constraints), the RMAX=<size> setting can be specified
+   in the ASN.1 comments:
+
+        T ::= VisibleString (SIZE(64000))    -- RMAX=64000
+   
+
diff --git a/tests/tests-randomized/check-bundles.sh b/tests/tests-randomized/check-bundles.sh
new file mode 100755 (executable)
index 0000000..61c1bbc
--- /dev/null
@@ -0,0 +1,403 @@
+#!/bin/sh
+
+#
+# Create an ASN.1 source code project for each line in each of the
+# bundles/*.txt files, compile and run that it can be encoded, decoded,
+# and fuzzed (if fuzzing is available).
+#
+
+set -e
+
+usage() {
+    echo "Usage:"
+    echo "  $0 -h"
+    echo "  $0 [--dirty] -t \"<ASN.1 text defining type T, in string form>\""
+    echo "  $0 [--dirty] bundles/<bundle-name.txt> [<line>]"
+    echo "Where options are:"
+    echo "  -h              Show this help screen"
+    echo "  -e <syntax>     Verify a given encoding explicitly (default is ALL)"
+    echo "  --asn1c <flag>  Add this flag to asn1c"
+    echo "  --dirty         Reuse compile results from the previous run(s)"
+    echo "  -t <ASN.1>      Run this particular typel"
+    echo "Examples:"
+    echo "  $0 -t UTF8String"
+    echo "  $0 -t \"T ::= INTEGER (0..1)\""
+    echo "  $0 bundles/01-INTEGER-bundle.txt 3"
+    exit 1
+}
+
+RNDTEMP="${RNDTEMP:-.tmp.random}"
+
+srcdir="${srcdir:-.}"
+abs_top_srcdir="${abs_top_srcdir:-`pwd`/../../}"
+abs_top_builddir="${abs_top_builddir:-`pwd`/../../}"
+abs_builddir="${abs_builddir:-`pwd`}"
+export abs_builddir
+MAKE="${MAKE:-make}"
+FUZZ_TIME="${FUZZ_TIME:-10}"
+
+tests_succeeded=0
+tests_failed=0
+stop_after_failed=1  # We stop after 3 failures.
+need_clean_before_bundle=1  # Clean before testing a bundle file
+need_clean_before_test=0    # Before each line in a bundle file
+encodings=""    # Default is to verify all supported ASN.1 transfer syntaxes
+parallelism=1
+asn1c_flags=""
+
+make_clean_before_bundle() {
+    if [ "${need_clean_before_bundle}" = "1" ] ; then
+        (cd "${RNDTEMP}" && Make clean) || :
+    fi
+}
+
+make_clean_before_test() {
+    if [ "${need_clean_before_test}" = "1" ] ; then
+        Make clean
+    else
+        # Low resolution file system mtime prevents rapid testing
+        # without recompilation. We have to clean at least the most
+        # critical portion of the objects. This will reach our objective
+        # of fast compile times (since most of skeletons are not recompiled),
+        # but won't yield a stale T.o object where newer T.c source exists.
+        rm -f T.o libasncodec.a || :
+    fi
+}
+
+# Get all the type-bearding lines in file and process them individually
+verify_asn_types_in_file() {
+    filename="$1"
+    need_line="$2"
+    test "x$filename" != "x" || usage
+
+    make_clean_before_bundle
+
+    echo "Open [$filename]"
+    for mode in syntax full; do
+      if [ "x${mode}" = "xsyntax" ]; then
+        max_failures=1
+      else
+        max_failures="${stop_after_failed}"
+      fi
+
+      line=0
+      while read asn; do
+        line=`expr ${line} + 1`
+        if echo "$asn" | sed -e 's/--.*//;' | grep -vi "[A-Z]" > /dev/null; then
+            # Ignore lines consisting of just comments.
+            continue;
+        fi
+        if [ "x$need_line" != "x" ] && [ "$need_line" != "$line" ]; then
+            # We need a different line.
+            continue;
+        fi
+        verify_asn_type "$mode" "$asn" "in $filename $line"
+        if [ "${tests_failed}" = "${max_failures}" ]; then
+            echo "STOP after ${tests_failed} failures, OK ${tests_succeeded}"
+            exit 1
+        fi
+      done < "$filename"
+    done
+}
+
+verify_asn_type() {
+    mode="$1"
+    asn="$2"
+    where="$3"
+    shift 3
+    test "x$asn" != "x" || usage
+
+    if echo "$asn" | grep -v "::=" > /dev/null; then
+        asn="T ::= $asn"
+    fi
+    echo "Testing [$asn] ${where}"
+
+    mkdir -p ${RNDTEMP}
+
+    if [ "x${mode}" = "xsyntax" ]; then
+        if asn1c_invoke "${RNDTEMP}/test.asn1" "$asn" "$where" -P 2>&1 >/dev/null; then
+            return 0
+        else
+            tests_failed=`expr ${tests_failed} + 1`
+            echo "FAIL: ASN.1 ERROR ${where}"
+            return 1
+        fi
+    fi
+
+    if (set -e && cd "${RNDTEMP}" && compile_and_test "$asn" "${where}"); then
+        echo "OK [$asn] ${where}"
+        tests_succeeded=`expr ${tests_succeeded} + 1`
+    else
+        tests_failed=`expr ${tests_failed} + 1`
+        echo "FAIL [$asn] ${where}"
+    fi
+}
+
+Make() {
+    ${MAKE} -j "${parallelism}" "$@" || return $?
+}
+
+get_param() {
+    param="$1"
+    default="$2"
+    asn="$3"
+
+    "${abs_builddir}/test-param-helper" "${param}" "${default}" "${asn}"
+}
+
+# compile_and_test "<text>" "<where found>"
+# This function is executed in the temporary test directory ${RNDTEMP}.
+compile_and_test() {
+    asn="$1"
+    where="$2"
+
+    if [ "x$CC" = "x" ]; then CCSTR=""; else CCSTR="CC=${CC} "; fi
+    reproduce_make="cd \"${RNDTEMP}\" && ${CCSTR}CFLAGS=\"${CFLAGS}\" ${MAKE}"
+
+    env > .test-environment
+    set > .test-set
+
+    make_clean_before_test
+
+    asn_compile "$asn" "$where"
+    if [ $? -ne 0 ]; then
+        echo "Cannot compile ASN.1 $asn"
+        return 1
+    fi
+
+    rm -f random-test-driver.o
+    rm -f random-test-driver
+    CFLAGS="${CFLAGS}" Make
+    if [ $? -ne 0 ] ; then
+        echo "Cannot compile C for $asn in ${RNDTEMP}"
+        return 2
+    fi
+
+    # Maximum size of the random data
+    rmax=`get_param RMAX 128 "$asn"`
+    if [ "0${rmax}" -lt 1 ]; then rmax=128; fi
+
+    echo "Checking random data encode-decode"
+    round_trip_check_cmd="${ASAN_ENV_FLAGS} ./random-test-driver -s ${rmax} ${encodings} -c"
+    echo "(${reproduce_make} && ${round_trip_check_cmd})" > .test-reproduce
+    if eval "$round_trip_check_cmd"; then
+        echo "Random test OK"
+    else
+        { echo "RETRY:"; cat .test-reproduce ; }
+        return 3
+    fi
+
+    echo "Generating new random data"
+    rm -rf random-data
+    cmd="${ASAN_ENV_FLAGS} UBSAN_OPTIONS=print_stacktrace=1"
+    cmd="${cmd} ./random-test-driver -s ${rmax} ${encodings} -g random-data"
+    echo "(${reproduce_make} && ${cmd})" > .test-reproduce
+    if eval "$cmd" ; then
+        echo "Random data generated OK"
+    else
+        { echo "RETRY:"; cat .test-reproduce ; }
+        return 4
+    fi
+
+    # Do a LibFuzzer based testing
+    fuzz_cmd="${ASAN_ENV_FLAGS} UBSAN_OPTIONS=print_stacktrace=1"
+    fuzz_cmd="${fuzz_cmd} ./random-test-driver"
+    fuzz_cmd="${fuzz_cmd} -timeout=3 -max_total_time=${FUZZ_TIME} -max_len=${rmax}"
+
+    if grep "^fuzz:" Makefile >/dev/null ; then
+        echo "No fuzzer defined, skipping fuzzing"
+    else
+        fuzz_targets=`echo random-data/* | sed -e 's/random-data./fuzz-/g'`
+        {
+        echo "fuzz: $fuzz_targets"
+        echo "fuzz-%: random-data/% random-test-driver"
+        echo " ASN1_DATA_DIR=\$< ${fuzz_cmd} \$<"
+        } >> Makefile
+    fi
+
+    # If LIBFUZZER_CFLAGS are properly defined, do the fuzz test as well
+    if echo "${LIBFUZZER_CFLAGS}" | grep -i "[a-z]" > /dev/null; then
+
+        echo "Recompiling for fuzzing..."
+        rm -f random-test-driver.o
+        rm -f random-test-driver
+        reproduce_make="cd \"${RNDTEMP}\" && ${CCSTR}CFLAGS=\"${LIBFUZZER_CFLAGS} ${CFLAGS}\" ${MAKE}"
+        echo "(${reproduce_make})" > .test-reproduce
+        CFLAGS="${LIBFUZZER_CFLAGS} ${CFLAGS}" Make
+        if [ $? -ne 0 ]; then
+            echo "Recompile failed"
+            return 4
+        fi
+
+        echo "Fuzzing will take a multiple of ${FUZZ_TIME} seconds..."
+        echo "(${reproduce_make} fuzz)" > .test-reproduce
+        CFLAGS="${LIBFUZZER_CFLAGS} ${CFLAGS}" Make fuzz
+        if [ $? -ne 0 ]; then
+            { echo "RETRY:"; cat .test-reproduce ; }
+            return 5
+        fi
+    fi
+
+    return 0
+}
+
+asn1c_invoke() {
+    tmpfile="$1"
+    asn="$2"
+    where="$3"
+    shift 3
+
+    {
+    echo "Test DEFINITIONS ::= BEGIN $asn"
+    echo "-- ${where}"
+    echo "END"
+    } > ${tmpfile}
+    echo "${abs_top_builddir}/asn1c/asn1c -S ${abs_top_srcdir}/skeletons"
+    if "${abs_top_builddir}/asn1c/asn1c" -S "${abs_top_srcdir}/skeletons" \
+        ${asn1c_flags} $@ ${tmpfile}
+    then
+        echo "ASN.1 compiled OK"
+    else
+        return 1
+    fi
+}
+
+asn_compile() {
+    asn="$1"
+    where="$2"
+
+    # Create "INTEGER (1..2)" from "T ::= INTEGER (1..2) -- RMAX=5"
+    short_asn=`echo "$asn" | sed -e 's/ *--.*//;s/RMAX=[0-9]//;'`
+    if [ `echo "$short_asn" | grep -c "::="` = 1 ]; then
+        short_asn=`echo "$short_asn" | sed -e 's/.*::= *//'`
+    fi
+
+    test ! -f Makefile.am   # Protection from accidental clobbering
+
+    asn1c_invoke "test.asn1" "$asn" "$where" "-flink-skeletons"
+    if [ $? != 0 ]; then
+        return 1
+    fi
+
+    rm -f converter-example.c
+    ln -sf "../${srcdir}/random-test-driver.c" || cp "../${srcdir}/random-test-driver.c" .
+    {
+    echo "CFLAGS+= -DASN1_TEXT='$short_asn'";
+    echo "ASN_PROGRAM = random-test-driver"
+    echo "ASN_PROGRAM_SRCS = random-test-driver.c"
+    echo
+    echo "include converter-example.mk"
+    echo
+    echo "all-tests-succeeded: ${abs_top_builddir}/asn1c/asn1c \$(ASN_PROGRAM_SRCS) \$(ASN_MODULE_SRCS) \$(ASN_MODULE_HDRS)"
+    echo "     @rm -f \$@"
+    echo "     @echo Previous try did not go correctly. To reproduce:"
+    echo "     @cat .test-reproduce"
+    echo "     @exit 1"
+    echo
+    } > Makefile
+    echo "converter-example.mk -> Makefile"
+}
+
+# Make up to four different passes:
+#  CFLAGS: | asn1c_flags:
+#   -m64   | -fnative-types
+#   -m32   | -fnative-types
+#   -m64   | -fwide-types
+#   -m32   | -fwide-types
+# *) Of course, -m64 and -fnative-types are just implied.
+test_drive() {
+    func="$1"
+    shift
+
+    if [ "x${asn1c_flags}" = "x" ] ; then
+        # Test for native types and wide types
+        asn1c_flags=" " test_drive "${func}" "$@"
+        asn1c_flags="-fnative-types" test_drive "${func}" "$@"
+        return 0
+    fi
+
+    # Can't reuse object code.
+    rm -rf ${RNDTEMP}
+
+    echo "MODE: default"
+    # Default (likely 64-bit) mode
+    ${func} "$@"
+
+    # 32-bit mode, if available
+    if echo "${CFLAGS_M32}" | grep -i '[a-z]' > /dev/null ; then
+        echo "MODE: 32-bit"
+
+        # Can't reuse object code between modes.
+        rm -rf ${RNDTEMP}
+
+        # -m32 doesn't support fuzzing (no such library), so we remove fuzzer.
+        # -m32 doesn't support leak sanitizing (it hangs), so we remove
+        # ASAN_ENV_FLAGS which enable leak check in runtime.
+        CFLAGS="${CFLAGS} ${CFLAGS_M32}" CFLAGS_M32="" \
+        LIBFUZZER_CFLAGS="" ASAN_ENV_FLAGS="" \
+            ${func} "$@"
+    fi
+}
+
+if echo "$*" | grep ' -- ' > /dev/null; then
+    TEST_DRIVER=`echo "$*"  | sed -e 's/ -- .*/ -- /g'`
+    args=`echo "$*"  | sed -e 's/.* //g'`
+    set "${args}"
+else
+    TEST_DRIVER=""
+fi
+
+# Command line parsing
+while :; do
+    case "$1" in
+        -h) usage ;;
+        --asn1c) asn1c_flags="${asn1c_flags} $2"; shift 2; continue ;;
+        --bundle)
+            shift
+
+            # Look for the transcript in bundles/NN-*-bundles.txt.log
+            set -x
+
+            base=`basename "$1" | sed -e 's/.txt$//'`
+            RNDTEMP=".tmp.${base}"
+
+            if Make -C "${RNDTEMP}" all-tests-succeeded >/dev/null 2>&1 ; then
+                echo "Test succeeded before. Not rechecking."
+                tests_succeeded=1
+                break
+            fi
+
+            test_drive verify_asn_types_in_file "$@"
+
+            touch "${RNDTEMP}/all-tests-succeeded"
+
+            break
+            ;;
+        --dirty)
+            need_clean_before_bundle=0
+            need_clean_before_test=0
+            shift
+            continue
+            ;;
+        -e) encodings="${encodings} -e $2"; shift 2; continue;;
+        -j) parallelism="$1"; shift 2; continue;;
+        -t)
+            test_drive verify_asn_type "full" "$2" "(command line)" || exit 1 ;;
+        "")
+            for bundle in `ls -1 ${srcdir}/bundles/*.txt | sort -nr`; do
+                test_drive verify_asn_types_in_file "$bundle"
+            done
+        ;;
+        *)
+            exec ${TEST_DRIVER} $0 --bundle "$@"
+        ;;
+    esac
+    break
+done
+
+if [ "$tests_succeeded" != "0" ] && [ "$tests_failed" = "0" ]; then
+    echo "OK $tests_succeeded tests"
+else
+    echo "FAILED $tests_failed tests, OK $tests_succeeded tests"
+    exit 1
+fi
diff --git a/tests/tests-randomized/random-test-driver.c b/tests/tests-randomized/random-test-driver.c
new file mode 100644 (file)
index 0000000..ecb75f8
--- /dev/null
@@ -0,0 +1,416 @@
+#include <T.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sysexits.h>
+
+#ifdef ASN1_TEXT
+#define STRINGIFY(x)    #x
+#define ASN1_STR    STRINGIFY(ASN1_TEXT)
+#else
+#define ASN1_STR    "T"
+#endif
+
+static const struct encoding_map {
+    const char *name;
+    const char *dir_name;
+    enum asn_transfer_syntax syntax;
+} encodings[] = {
+    {"DER", "der", ATS_DER},
+    {"OER", "oer", ATS_CANONICAL_OER},
+    {"UPER", "uper", ATS_UNALIGNED_CANONICAL_PER},
+    {"XER", "xer", ATS_CANONICAL_XER},
+};
+
+static enum asn_transfer_syntax
+lookup_syntax(const char *name) {
+    if(name) {
+        for(size_t i = 0; i < sizeof(encodings) / sizeof(encodings[0]); i++) {
+            struct encoding_map enc = encodings[i];
+            if(strcasecmp(name, enc.name) == 0) {
+                return enc.syntax;
+            }
+        }
+    }
+    return ATS_INVALID;
+}
+
+
+#ifdef  ENABLE_LIBFUZZER
+
+static int initialized;
+static enum asn_transfer_syntax syntax;
+static void __attribute__((constructor)) initialize() {
+    initialized = 1;
+    const char *data_dir = getenv("ASN1_DATA_DIR");
+    if(data_dir && strrchr(data_dir, '/')) {
+        data_dir = strrchr(data_dir, '/') + 1;
+    }
+    syntax = lookup_syntax(data_dir);
+    if(syntax == ATS_INVALID) {
+        fprintf(stderr,
+                "Expected ASN1_DATA_DIR={der,oer,uper,xer} environment "
+                "variable.\n");
+        exit(EX_UNAVAILABLE);
+    }
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
+
+int
+LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+    if(!initialized) exit(0);
+
+    /*
+     * Try to decode whatever garbage that comes in Data/Size.
+     * The idea is that we should not crash, and we should not leak memory,
+     * no matter what garbage we're dealing with.
+     */
+    T_t *structure = 0;
+    (void)asn_decode(0, syntax, &asn_DEF_T, (void **)&structure, Data, Size);
+    ASN_STRUCT_FREE(asn_DEF_T, structure);
+
+    return 0;
+}
+
+#else   /* The usual check */
+
+static void
+usage(const char *progname) {
+    fprintf(stderr,
+            "Usage: %s {-c|-g <dir>} [-n <number>] [-e <encoding> ...]\n"
+            "OPTIONS:\n"
+            "  -c               Check encode-decode round-trip on random data\n"
+            "  -g <dir>         Generate random data for selected encodings\n"
+            "  -s <size>        Approximate max random value size for -c and -g\n"
+            "  -n <number>      Number of iterations for -c and -g\n"
+            "  -e <encoding>    Encodings to test or generate random data for\n"
+            "Encodings (ASN.1 Transfer Syntaxes):\n"
+            "   DER             Distinguished Encoding Rules (compatible with "
+            "BER)\n"
+            "   OER             Canonical Octet Encoding Rules\n"
+            "   UPER            Canonical Unaligned Packed Encoding Rules\n"
+            "   XER             XML Encoding Rules\n",
+            progname);
+}
+
+static int
+file_write_cb(const void *data, size_t size, void *key) {
+    return fwrite(data, 1, size, (FILE *)key) == size ? 0 : -1;
+}
+
+#ifndef PATH_MAX
+#define PATH_MAX        255
+#endif
+
+static void
+generate_random_data(enum asn_transfer_syntax syntax, const char *top_dirname, size_t max_random_value_size, int iterations, int debug) {
+    char dirname[PATH_MAX];
+    size_t dirname_len = 0;
+    dirname[dirname_len] = '\0';
+
+    for(size_t i = 0; i < sizeof(encodings)/sizeof(encodings[0]); i++) {
+        struct encoding_map enc = encodings[i];
+        if(enc.syntax == syntax) {
+            int r = snprintf(dirname, sizeof(dirname), "%s/%s", top_dirname,
+                             enc.dir_name);
+            if(r < 0 || (size_t)r >= sizeof(dirname) - sizeof("filename.bin")) {
+                fprintf(stderr, "Too long filenames\n");
+                exit(EX_SOFTWARE);
+            }
+            dirname_len = r;
+            fprintf(stderr, "Generating %d random %s values of %s into %s\n",
+                    iterations, enc.name, asn_DEF_T.name, dirname);
+            break;
+        }
+    }
+    assert(dirname[0]);
+
+    (void)mkdir(top_dirname, 0777);
+
+    if(mkdir(dirname, 0777) == -1) {
+        if(errno == EEXIST) {
+            fprintf(stderr, "%s: is already present, remove.\n", dirname);
+            fprintf(stderr, "%s: not overwriting potentially valuable data.\n",
+                    dirname);
+        }
+        perror(dirname);
+        exit(2);
+    }
+
+    size_t generated_ok = 0;
+    for(int i = 0; i < iterations; i++) {
+        T_t *structure = 0;
+        FILE *f;
+        snprintf(&dirname[dirname_len], sizeof(dirname) - dirname_len,
+                 "/%03d.bin", i);
+
+        if(asn_random_fill(&asn_DEF_T, (void **)&structure,
+                           max_random_value_size)
+           == -1) {
+            assert(structure == 0);
+            fprintf(stderr, "Can't generate %d'th value, skipping\n", i);
+            continue;
+        }
+        assert(structure != 0);
+
+        const char *filename = dirname;
+        f = fopen(filename, "wb");
+        if(!f) {
+            perror(filename);
+            assert(f);
+            exit(EX_SOFTWARE);
+        }
+        asn_enc_rval_t rval =
+            asn_encode(0, syntax, &asn_DEF_T, structure, file_write_cb, f);
+        fclose(f);
+        if(rval.encoded == -1) {
+            fprintf(stderr, "Cannot encode a random value of T into %s:\n",
+                    filename);
+            if(rval.failed_type) {
+                fprintf(stderr, "(Failed type: %s)\n", rval.failed_type->name);
+            }
+            asn_fprint(stderr, &asn_DEF_T, structure);
+            exit(EX_SOFTWARE);
+        }
+
+        if(debug) {
+            if(i < 5 || debug > 1) {
+                fprintf(stderr, "[%s] ", &filename[dirname_len+1]);
+                asn_fprint(stderr, &asn_DEF_T, structure);
+            } else if(i == 5) {
+                fprintf(stderr, "... and so on\n");
+            }
+        }
+
+        ASN_STRUCT_FREE(asn_DEF_T, structure);
+        generated_ok++;
+    }
+
+    if(!generated_ok) {
+        fprintf(stderr, "Requested to generate %d values, but failed.\n",
+                iterations);
+        exit(EX_SOFTWARE);
+    }
+
+}
+
+static void
+check_random_roundtrip(enum asn_transfer_syntax syntax, size_t max_random_value_size, int iterations, int debug) {
+    struct encoding_map enc;
+
+    for(size_t i = 0; i < sizeof(encodings)/sizeof(encodings[0]); i++) {
+        enc = encodings[i];
+        if(enc.syntax == syntax) {
+            fprintf(stderr, "Testing %d iterations of round-trip for %s\n",
+                    iterations, enc.name);
+            break;
+        }
+    }
+
+    for(int i = 0; i < iterations; i++) {
+        char tmp_buffer[512];
+        char *buffer = tmp_buffer;
+        size_t buffer_size = sizeof(tmp_buffer);
+        T_t *structure = 0;
+        T_t *decoded_structure = 0;
+
+        if(asn_random_fill(&asn_DEF_T, (void **)&structure,
+                           max_random_value_size)
+           == -1) {
+            assert(structure == 0);
+            fprintf(stderr, "Can't generate %d'th value, skipping\n", i);
+            continue;
+        }
+        assert(structure != 0);
+
+        if(debug) {
+            fprintf(stderr, "Random structure %s:\n",
+                    sizeof(ASN1_STR) > 60 ? "T" : ASN1_STR);
+            asn_fprint(stderr, &asn_DEF_T, structure);
+            xer_fprint(stderr, &asn_DEF_T, structure);
+        }
+
+        asn_enc_rval_t er;
+        for(;;) {
+            er = asn_encode_to_buffer(
+                0, syntax, &asn_DEF_T, structure, buffer, buffer_size);
+            if(er.encoded < 0) {
+                fprintf(stderr, "Encoded T into %zd bytes\n", er.encoded);
+                fprintf(stderr, "Structure %s:\n",
+                        sizeof(ASN1_STR) > 60 ? "T" : ASN1_STR);
+                asn_fprint(stderr, &asn_DEF_T, structure);
+                assert(er.encoded >= 0);
+                exit(EX_SOFTWARE);
+            }
+            if((size_t)er.encoded > buffer_size && buffer == tmp_buffer) {
+                if(debug) {
+                    fprintf(
+                        stderr,
+                        "Reallocate output buffer %zu -> %zu (iteration %d)\n",
+                        buffer_size, er.encoded, i);
+                }
+                buffer = malloc(er.encoded + 1);
+                assert(buffer);
+                buffer[er.encoded] = '\0';
+                buffer_size = er.encoded;
+                continue;
+            }
+            break;
+        }
+        if((size_t)er.encoded > buffer_size) {
+            fprintf(stderr, "Data %zd does not fit into buffer %zu\n",
+                    er.encoded, buffer_size);
+            assert((size_t)er.encoded <= buffer_size);
+        }
+
+        asn_dec_rval_t rval =
+            asn_decode(0, syntax, &asn_DEF_T, (void **)&decoded_structure,
+                       buffer, er.encoded);
+        if(rval.code == RC_OK) {
+            /* Everything's cool... or is it? Expecting a proper consumed */
+            if((ssize_t)rval.consumed != er.encoded) {
+                fprintf(stderr, "Encoded into %zd, yet consumed %zu\n",
+                        er.encoded, rval.consumed);
+                fprintf(stderr, "Original random structure:\n");
+                asn_fprint(stderr, &asn_DEF_T, structure);
+                fprintf(stderr, "Partially decoded %s value:\n", ASN1_STR);
+                asn_fprint(stderr, &asn_DEF_T, decoded_structure);
+                assert((ssize_t)rval.consumed == er.encoded);
+                exit(EX_SOFTWARE);
+            }
+        } else {
+            fprintf(stderr,
+                    "Decoding %zu bytes of T yielded %s after byte %zu\n",
+                    er.encoded, rval.code == RC_FAIL ? "RC_FAIL" : "RC_WMORE",
+                    rval.consumed);
+            fprintf(stderr, "Original random structure:\n");
+            asn_fprint(stderr, &asn_DEF_T, structure);
+            exit(EX_SOFTWARE);
+        }
+
+        /*
+         * Confirm that we decoded the same data.
+         */
+        int cmp = asn_DEF_T.op->compare_struct(&asn_DEF_T, structure,
+                                               decoded_structure);
+        if(cmp != 0 || debug) {
+            fprintf(stderr, "Random %s value:\n", ASN1_STR);
+            asn_fprint(stderr, &asn_DEF_T, structure);
+            xer_fprint(stderr, &asn_DEF_T, structure);
+            fprintf(stderr, "Decoded %s value:\n", ASN1_STR);
+            asn_fprint(stderr, &asn_DEF_T, decoded_structure);
+            xer_fprint(stderr, &asn_DEF_T, decoded_structure);
+            assert(cmp == 0);
+        }
+        ASN_STRUCT_FREE(asn_DEF_T, structure);
+        ASN_STRUCT_FREE(asn_DEF_T, decoded_structure);
+
+        if(buffer != tmp_buffer) {
+            free(buffer);
+        }
+
+        if(i < 5) {
+            fprintf(stderr, "[%03d] round-trip in %zd bytes OK\n", i,
+                    er.encoded);
+        } else if(i == 5) {
+            fprintf(stderr, "... and so on\n");
+        }
+    }
+
+    fprintf(stderr, "OK %d iterations of round-trip for %s\n", iterations,
+            enc.name);
+}
+
+int main(int argc, char **argv) {
+    uint32_t enabled_encodings = 0;
+    enum {
+        MODE_UNKNOWN,
+        MODE_GENERATE_RANDOM_DATA,
+        MODE_CHECK_RANDOM_ROUNDTRIP
+    } mode = MODE_UNKNOWN;
+    const char *generate_into_dir = NULL;
+    int iterations = 100;
+    size_t max_random_value_size = 128;
+    int debug = 0;
+    int c;
+
+    while((c = getopt(argc, argv, "cde:g:hn:s:")) != -1) {
+        switch(c) {
+        case 'c':
+            mode = MODE_CHECK_RANDOM_ROUNDTRIP;
+            break;
+        case 'd':
+            debug++;
+            break;
+        case 'e':
+            enabled_encodings |= 1 << lookup_syntax(optarg);
+            if(enabled_encodings & (1 << ATS_INVALID)) {
+                fprintf(stderr, "-e %s: Unknown (unsupported?) encoding\n",
+                        optarg);
+                exit(EX_UNAVAILABLE);
+            }
+            break;
+        case 'g':
+            mode = MODE_GENERATE_RANDOM_DATA;
+            generate_into_dir = optarg;
+            break;
+        case 'h':
+            usage(argv[0]);
+            exit(0);
+        case 'n':
+            iterations = atoi(optarg);
+            if(iterations <= 0) {
+                fprintf(stderr, "-n %s: positive value expected\n", optarg);
+                exit(EX_DATAERR);
+            }
+            break;
+        case 's':
+            if(atoi(optarg) <= 0) {
+                fprintf(stderr, "-s %s: positive value expected\n", optarg);
+                exit(EX_DATAERR);
+            }
+            max_random_value_size = atoi(optarg);
+            break;
+        default:
+            usage(argv[0]);
+            exit(2);
+        }
+    }
+
+    if(mode == MODE_UNKNOWN) {
+        usage(argv[0]);
+        exit(2);
+    } else if(!enabled_encodings) {
+        for(size_t i = 0; i < sizeof(encodings)/sizeof(encodings[0]); i++) {
+            enabled_encodings |= 1 << encodings[i].syntax;
+        }
+    }
+
+    /* Enumerate requested encodings (-e ...) */
+    for(unsigned i = 0; i < 8*sizeof(enabled_encodings)-1; i++) {
+        if(enabled_encodings & (1 << i)) {
+            enum asn_transfer_syntax syntax = i;
+            switch(mode) {
+            case MODE_UNKNOWN:
+                assert(mode != MODE_UNKNOWN);
+                break;
+            case MODE_GENERATE_RANDOM_DATA:
+                generate_random_data(syntax, generate_into_dir,
+                                     max_random_value_size, iterations, debug);
+                break;
+            case MODE_CHECK_RANDOM_ROUNDTRIP:
+                check_random_roundtrip(syntax, max_random_value_size,
+                                       iterations, debug);
+                break;
+            }
+        }
+    }
+
+    return 0;
+}
+
+#endif
diff --git a/tests/tests-randomized/test-param-helper.c b/tests/tests-randomized/test-param-helper.c
new file mode 100644 (file)
index 0000000..ed81186
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Since working awk is not present on every supported platform
+ * (notably Solaris), and nawk is not the same on Solaris and Linux,
+ * this program is a replacement for it to extract test parameter from the.
+ * string specified in the command line.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+
+static void
+usage(const char *progname) {
+    fprintf(stderr, "Search PARAM=VALUE pattern in the given string\n");
+    fprintf(stderr, "Usage: %s <parameter-name> <default-value> <string>\n",
+            progname);
+}
+
+static const char *
+search(const char *param, const char *haystack) {
+
+    const char *p = strstr(haystack, param);
+    if(p && p[strlen(param)] == '=') {
+        const char *param_begin = &p[strlen(param) + 1];
+        const char *param_end = param_begin;
+        for(param_end = param_begin; param_end; param_end++) {
+            switch(*param_end) {
+            case '0' ... '9':
+                continue;
+            default:
+                break;
+            }
+            break;
+        }
+
+        static char static_buf[64];
+
+        if((param_end - param_begin) <= 0) {
+            fprintf(stderr, "Parameter %s is malformed after '='\n", param);
+            return NULL;
+        }
+
+        if((param_end - param_begin) >= (ssize_t)sizeof(static_buf)) {
+            fprintf(stderr, "Parameter %s value exceeds buffer size %zu\n",
+                    param, sizeof(static_buf));
+            return NULL;
+        }
+
+        memcpy(static_buf, param_begin, param_end - param_begin);
+        static_buf[param_end - param_begin] = '\0';
+        return static_buf;
+    } else if(p) {
+        fprintf(stderr, "Parameter %s should contain '='\n", param);
+        return NULL;
+    }
+
+    return NULL;
+}
+
+int
+main(int ac, char **av) {
+    if(ac != 4) {
+        usage(av[0]);
+        exit(EX_USAGE);
+    }
+
+    const char *value = search(av[1], av[3]);
+    if(value) {
+        printf("%s\n", value);
+    } else {
+        printf("%s\n", av[2]);
+    }
+}
diff --git a/tests/tests-skeletons/.deps/check-GeneralizedTime.Po b/tests/tests-skeletons/.deps/check-GeneralizedTime.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-INTEGER.Po b/tests/tests-skeletons/.deps/check-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-OCTET_STRING.Po b/tests/tests-skeletons/.deps/check-OCTET_STRING.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-OER-INTEGER.Po b/tests/tests-skeletons/.deps/check-OER-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-OER-NativeEnumerated.Po b/tests/tests-skeletons/.deps/check-OER-NativeEnumerated.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-OER-support.Po b/tests/tests-skeletons/.deps/check-OER-support.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-OIDs.Po b/tests/tests-skeletons/.deps/check-OIDs.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-PER-INTEGER.Po b/tests/tests-skeletons/.deps/check-PER-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-PER-UniversalString.Po b/tests/tests-skeletons/.deps/check-PER-UniversalString.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-PER-support.Po b/tests/tests-skeletons/.deps/check-PER-support.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-REAL.Po b/tests/tests-skeletons/.deps/check-REAL.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-UTCTime.Po b/tests/tests-skeletons/.deps/check-UTCTime.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-UTF8String.Po b/tests/tests-skeletons/.deps/check-UTF8String.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-XER.Po b/tests/tests-skeletons/.deps/check-XER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-ber_tlv_tag.Po b/tests/tests-skeletons/.deps/check-ber_tlv_tag.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-bits.Po b/tests/tests-skeletons/.deps/check-bits.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check-length.Po b/tests/tests-skeletons/.deps/check-length.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_GeneralizedTime-check-GeneralizedTime.Po b/tests/tests-skeletons/.deps/check_32_GeneralizedTime-check-GeneralizedTime.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_INTEGER-check-INTEGER.Po b/tests/tests-skeletons/.deps/check_32_INTEGER-check-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_OCTET_STRING-check-OCTET_STRING.Po b/tests/tests-skeletons/.deps/check_32_OCTET_STRING-check-OCTET_STRING.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_OER_INTEGER-check-OER-INTEGER.Po b/tests/tests-skeletons/.deps/check_32_OER_INTEGER-check-OER-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po b/tests/tests-skeletons/.deps/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_OER_support-check-OER-support.Po b/tests/tests-skeletons/.deps/check_32_OER_support-check-OER-support.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_OIDs-check-OIDs.Po b/tests/tests-skeletons/.deps/check_32_OIDs-check-OIDs.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_PER_INTEGER-check-PER-INTEGER.Po b/tests/tests-skeletons/.deps/check_32_PER_INTEGER-check-PER-INTEGER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_PER_UniversalString-check-PER-UniversalString.Po b/tests/tests-skeletons/.deps/check_32_PER_UniversalString-check-PER-UniversalString.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_PER_support-check-PER-support.Po b/tests/tests-skeletons/.deps/check_32_PER_support-check-PER-support.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_REAL-check-REAL.Po b/tests/tests-skeletons/.deps/check_32_REAL-check-REAL.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_UTCTime-check-UTCTime.Po b/tests/tests-skeletons/.deps/check_32_UTCTime-check-UTCTime.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_UTF8String-check-UTF8String.Po b/tests/tests-skeletons/.deps/check_32_UTF8String-check-UTF8String.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_XER-check-XER.Po b/tests/tests-skeletons/.deps/check_32_XER-check-XER.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_ber_tlv_tag-check-ber_tlv_tag.Po b/tests/tests-skeletons/.deps/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_bits-check-bits.Po b/tests/tests-skeletons/.deps/check_32_bits-check-bits.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/.deps/check_32_length-check-length.Po b/tests/tests-skeletons/.deps/check_32_length-check-length.Po
new file mode 100644 (file)
index 0000000..9ce06a8
--- /dev/null
@@ -0,0 +1 @@
+# dummy
diff --git a/tests/tests-skeletons/Makefile b/tests/tests-skeletons/Makefile
new file mode 100644 (file)
index 0000000..7bb1762
--- /dev/null
@@ -0,0 +1,2104 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# tests/tests-skeletons/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2014 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.
+
+
+
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/asn1c
+pkgincludedir = $(includedir)/asn1c
+pkglibdir = $(libdir)/asn1c
+pkglibexecdir = $(libexecdir)/asn1c
+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 = x86_64-pc-linux-gnu
+host_triplet = x86_64-pc-linux-gnu
+check_PROGRAMS = check-ber_tlv_tag$(EXEEXT) check-length$(EXEEXT) \
+       check-bits$(EXEEXT) check-OIDs$(EXEEXT) \
+       check-GeneralizedTime$(EXEEXT) check-OCTET_STRING$(EXEEXT) \
+       check-UTF8String$(EXEEXT) check-UTCTime$(EXEEXT) \
+       check-INTEGER$(EXEEXT) check-REAL$(EXEEXT) check-XER$(EXEEXT) \
+       check-OER-support$(EXEEXT) check-OER-INTEGER$(EXEEXT) \
+       check-OER-NativeEnumerated$(EXEEXT) check-PER-support$(EXEEXT) \
+       check-PER-UniversalString$(EXEEXT) check-PER-INTEGER$(EXEEXT) \
+       $(am__EXEEXT_1)
+#am__append_1 = \
+#    check-32-ber_tlv_tag            \
+#    check-32-length                 \
+#    check-32-bits                   \
+#    check-32-OIDs                   \
+#    check-32-GeneralizedTime        \
+#    check-32-OCTET_STRING           \
+#    check-32-UTF8String             \
+#    check-32-UTCTime                \
+#    check-32-INTEGER                \
+#    check-32-REAL                   \
+#    check-32-XER                    \
+#    check-32-OER-support            \
+#    check-32-OER-INTEGER            \
+#    check-32-OER-NativeEnumerated   \
+#    check-32-PER-support            \
+#    check-32-PER-UniversalString    \
+#    check-32-PER-INTEGER
+
+subdir = tests/tests-skeletons
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+#am__EXEEXT_1 = check-32-ber_tlv_tag$(EXEEXT) \
+#      check-32-length$(EXEEXT) \
+#      check-32-bits$(EXEEXT) \
+#      check-32-OIDs$(EXEEXT) \
+#      check-32-GeneralizedTime$(EXEEXT) \
+#      check-32-OCTET_STRING$(EXEEXT) \
+#      check-32-UTF8String$(EXEEXT) \
+#      check-32-UTCTime$(EXEEXT) \
+#      check-32-INTEGER$(EXEEXT) \
+#      check-32-REAL$(EXEEXT) \
+#      check-32-XER$(EXEEXT) \
+#      check-32-OER-support$(EXEEXT) \
+#      check-32-OER-INTEGER$(EXEEXT) \
+#      check-32-OER-NativeEnumerated$(EXEEXT) \
+#      check-32-PER-support$(EXEEXT) \
+#      check-32-PER-UniversalString$(EXEEXT) \
+#      check-32-PER-INTEGER$(EXEEXT)
+am__check_32_GeneralizedTime_SOURCES_DIST = check-GeneralizedTime.c
+#am_check_32_GeneralizedTime_OBJECTS = check_32_GeneralizedTime-check-GeneralizedTime.$(OBJEXT)
+check_32_GeneralizedTime_OBJECTS =  \
+       $(am_check_32_GeneralizedTime_OBJECTS)
+#am__DEPENDENCIES_1 = $(top_builddir)/skeletons/libasn1cskeletons_c89_32.la
+#check_32_GeneralizedTime_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+check_32_GeneralizedTime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_INTEGER_SOURCES_DIST = check-INTEGER.c
+#am_check_32_INTEGER_OBJECTS =  \
+#      check_32_INTEGER-check-INTEGER.$(OBJEXT)
+check_32_INTEGER_OBJECTS = $(am_check_32_INTEGER_OBJECTS)
+#check_32_INTEGER_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+am__check_32_OCTET_STRING_SOURCES_DIST = check-OCTET_STRING.c
+#am_check_32_OCTET_STRING_OBJECTS = check_32_OCTET_STRING-check-OCTET_STRING.$(OBJEXT)
+check_32_OCTET_STRING_OBJECTS = $(am_check_32_OCTET_STRING_OBJECTS)
+#check_32_OCTET_STRING_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_OCTET_STRING_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OER_INTEGER_SOURCES_DIST = check-OER-INTEGER.c
+#am_check_32_OER_INTEGER_OBJECTS = check_32_OER_INTEGER-check-OER-INTEGER.$(OBJEXT)
+check_32_OER_INTEGER_OBJECTS = $(am_check_32_OER_INTEGER_OBJECTS)
+#check_32_OER_INTEGER_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_OER_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OER_NativeEnumerated_SOURCES_DIST =  \
+       check-OER-NativeEnumerated.c
+#am_check_32_OER_NativeEnumerated_OBJECTS = check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.$(OBJEXT)
+check_32_OER_NativeEnumerated_OBJECTS =  \
+       $(am_check_32_OER_NativeEnumerated_OBJECTS)
+#check_32_OER_NativeEnumerated_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_OER_NativeEnumerated_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_OER_support_SOURCES_DIST = check-OER-support.c
+#am_check_32_OER_support_OBJECTS = check_32_OER_support-check-OER-support.$(OBJEXT)
+check_32_OER_support_OBJECTS = $(am_check_32_OER_support_OBJECTS)
+#check_32_OER_support_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_OER_support_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_support_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OIDs_SOURCES_DIST = check-OIDs.c
+#am_check_32_OIDs_OBJECTS =  \
+#      check_32_OIDs-check-OIDs.$(OBJEXT)
+check_32_OIDs_OBJECTS = $(am_check_32_OIDs_OBJECTS)
+#check_32_OIDs_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_OIDs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_OIDs_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_PER_INTEGER_SOURCES_DIST = check-PER-INTEGER.c
+#am_check_32_PER_INTEGER_OBJECTS = check_32_PER_INTEGER-check-PER-INTEGER.$(OBJEXT)
+check_32_PER_INTEGER_OBJECTS = $(am_check_32_PER_INTEGER_OBJECTS)
+#check_32_PER_INTEGER_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_PER_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_PER_UniversalString_SOURCES_DIST =  \
+       check-PER-UniversalString.c
+#am_check_32_PER_UniversalString_OBJECTS = check_32_PER_UniversalString-check-PER-UniversalString.$(OBJEXT)
+check_32_PER_UniversalString_OBJECTS =  \
+       $(am_check_32_PER_UniversalString_OBJECTS)
+#check_32_PER_UniversalString_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_PER_UniversalString_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_PER_support_SOURCES_DIST = check-PER-support.c
+#am_check_32_PER_support_OBJECTS = check_32_PER_support-check-PER-support.$(OBJEXT)
+check_32_PER_support_OBJECTS = $(am_check_32_PER_support_OBJECTS)
+#check_32_PER_support_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_PER_support_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_support_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_REAL_SOURCES_DIST = check-REAL.c
+#am_check_32_REAL_OBJECTS =  \
+#      check_32_REAL-check-REAL.$(OBJEXT)
+check_32_REAL_OBJECTS = $(am_check_32_REAL_OBJECTS)
+#check_32_REAL_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_REAL_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_REAL_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_UTCTime_SOURCES_DIST = check-UTCTime.c
+#am_check_32_UTCTime_OBJECTS =  \
+#      check_32_UTCTime-check-UTCTime.$(OBJEXT)
+check_32_UTCTime_OBJECTS = $(am_check_32_UTCTime_OBJECTS)
+#check_32_UTCTime_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_UTCTime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_UTCTime_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+am__check_32_UTF8String_SOURCES_DIST = check-UTF8String.c
+#am_check_32_UTF8String_OBJECTS = check_32_UTF8String-check-UTF8String.$(OBJEXT)
+check_32_UTF8String_OBJECTS = $(am_check_32_UTF8String_OBJECTS)
+#check_32_UTF8String_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_UTF8String_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_UTF8String_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_XER_SOURCES_DIST = check-XER.c
+#am_check_32_XER_OBJECTS =  \
+#      check_32_XER-check-XER.$(OBJEXT)
+check_32_XER_OBJECTS = $(am_check_32_XER_OBJECTS)
+#check_32_XER_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_XER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_XER_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_ber_tlv_tag_SOURCES_DIST = check-ber_tlv_tag.c
+#am_check_32_ber_tlv_tag_OBJECTS = check_32_ber_tlv_tag-check-ber_tlv_tag.$(OBJEXT)
+check_32_ber_tlv_tag_OBJECTS = $(am_check_32_ber_tlv_tag_OBJECTS)
+#check_32_ber_tlv_tag_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_ber_tlv_tag_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_bits_SOURCES_DIST = check-bits.c
+#am_check_32_bits_OBJECTS =  \
+#      check_32_bits-check-bits.$(OBJEXT)
+check_32_bits_OBJECTS = $(am_check_32_bits_OBJECTS)
+#check_32_bits_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_bits_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_bits_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_length_SOURCES_DIST = check-length.c
+#am_check_32_length_OBJECTS =  \
+#      check_32_length-check-length.$(OBJEXT)
+check_32_length_OBJECTS = $(am_check_32_length_OBJECTS)
+#check_32_length_DEPENDENCIES =  \
+#      $(am__DEPENDENCIES_1)
+check_32_length_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_length_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+check_GeneralizedTime_SOURCES = check-GeneralizedTime.c
+check_GeneralizedTime_OBJECTS = check-GeneralizedTime.$(OBJEXT)
+check_GeneralizedTime_LDADD = $(LDADD)
+check_GeneralizedTime_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_INTEGER_SOURCES = check-INTEGER.c
+check_INTEGER_OBJECTS = check-INTEGER.$(OBJEXT)
+check_INTEGER_LDADD = $(LDADD)
+check_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OCTET_STRING_SOURCES = check-OCTET_STRING.c
+check_OCTET_STRING_OBJECTS = check-OCTET_STRING.$(OBJEXT)
+check_OCTET_STRING_LDADD = $(LDADD)
+check_OCTET_STRING_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_INTEGER_SOURCES = check-OER-INTEGER.c
+check_OER_INTEGER_OBJECTS = check-OER-INTEGER.$(OBJEXT)
+check_OER_INTEGER_LDADD = $(LDADD)
+check_OER_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_NativeEnumerated_SOURCES = check-OER-NativeEnumerated.c
+check_OER_NativeEnumerated_OBJECTS =  \
+       check-OER-NativeEnumerated.$(OBJEXT)
+check_OER_NativeEnumerated_LDADD = $(LDADD)
+check_OER_NativeEnumerated_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_support_SOURCES = check-OER-support.c
+check_OER_support_OBJECTS = check-OER-support.$(OBJEXT)
+check_OER_support_LDADD = $(LDADD)
+check_OER_support_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OIDs_SOURCES = check-OIDs.c
+check_OIDs_OBJECTS = check-OIDs.$(OBJEXT)
+check_OIDs_LDADD = $(LDADD)
+check_OIDs_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_INTEGER_SOURCES = check-PER-INTEGER.c
+check_PER_INTEGER_OBJECTS = check-PER-INTEGER.$(OBJEXT)
+check_PER_INTEGER_LDADD = $(LDADD)
+check_PER_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_UniversalString_SOURCES = check-PER-UniversalString.c
+check_PER_UniversalString_OBJECTS =  \
+       check-PER-UniversalString.$(OBJEXT)
+check_PER_UniversalString_LDADD = $(LDADD)
+check_PER_UniversalString_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_support_SOURCES = check-PER-support.c
+check_PER_support_OBJECTS = check-PER-support.$(OBJEXT)
+check_PER_support_LDADD = $(LDADD)
+check_PER_support_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_REAL_SOURCES = check-REAL.c
+check_REAL_OBJECTS = check-REAL.$(OBJEXT)
+check_REAL_LDADD = $(LDADD)
+check_REAL_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_UTCTime_SOURCES = check-UTCTime.c
+check_UTCTime_OBJECTS = check-UTCTime.$(OBJEXT)
+check_UTCTime_LDADD = $(LDADD)
+check_UTCTime_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_UTF8String_SOURCES = check-UTF8String.c
+check_UTF8String_OBJECTS = check-UTF8String.$(OBJEXT)
+check_UTF8String_LDADD = $(LDADD)
+check_UTF8String_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_XER_SOURCES = check-XER.c
+check_XER_OBJECTS = check-XER.$(OBJEXT)
+check_XER_LDADD = $(LDADD)
+check_XER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_ber_tlv_tag_SOURCES = check-ber_tlv_tag.c
+check_ber_tlv_tag_OBJECTS = check-ber_tlv_tag.$(OBJEXT)
+check_ber_tlv_tag_LDADD = $(LDADD)
+check_ber_tlv_tag_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_bits_SOURCES = check-bits.c
+check_bits_OBJECTS = check-bits.$(OBJEXT)
+check_bits_LDADD = $(LDADD)
+check_bits_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_length_SOURCES = check-length.c
+check_length_OBJECTS = check-length.$(OBJEXT)
+check_length_LDADD = $(LDADD)
+check_length_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(check_32_GeneralizedTime_SOURCES) \
+       $(check_32_INTEGER_SOURCES) $(check_32_OCTET_STRING_SOURCES) \
+       $(check_32_OER_INTEGER_SOURCES) \
+       $(check_32_OER_NativeEnumerated_SOURCES) \
+       $(check_32_OER_support_SOURCES) $(check_32_OIDs_SOURCES) \
+       $(check_32_PER_INTEGER_SOURCES) \
+       $(check_32_PER_UniversalString_SOURCES) \
+       $(check_32_PER_support_SOURCES) $(check_32_REAL_SOURCES) \
+       $(check_32_UTCTime_SOURCES) $(check_32_UTF8String_SOURCES) \
+       $(check_32_XER_SOURCES) $(check_32_ber_tlv_tag_SOURCES) \
+       $(check_32_bits_SOURCES) $(check_32_length_SOURCES) \
+       check-GeneralizedTime.c check-INTEGER.c check-OCTET_STRING.c \
+       check-OER-INTEGER.c check-OER-NativeEnumerated.c \
+       check-OER-support.c check-OIDs.c check-PER-INTEGER.c \
+       check-PER-UniversalString.c check-PER-support.c check-REAL.c \
+       check-UTCTime.c check-UTF8String.c check-XER.c \
+       check-ber_tlv_tag.c check-bits.c check-length.c
+DIST_SOURCES = $(am__check_32_GeneralizedTime_SOURCES_DIST) \
+       $(am__check_32_INTEGER_SOURCES_DIST) \
+       $(am__check_32_OCTET_STRING_SOURCES_DIST) \
+       $(am__check_32_OER_INTEGER_SOURCES_DIST) \
+       $(am__check_32_OER_NativeEnumerated_SOURCES_DIST) \
+       $(am__check_32_OER_support_SOURCES_DIST) \
+       $(am__check_32_OIDs_SOURCES_DIST) \
+       $(am__check_32_PER_INTEGER_SOURCES_DIST) \
+       $(am__check_32_PER_UniversalString_SOURCES_DIST) \
+       $(am__check_32_PER_support_SOURCES_DIST) \
+       $(am__check_32_REAL_SOURCES_DIST) \
+       $(am__check_32_UTCTime_SOURCES_DIST) \
+       $(am__check_32_UTF8String_SOURCES_DIST) \
+       $(am__check_32_XER_SOURCES_DIST) \
+       $(am__check_32_ber_tlv_tag_SOURCES_DIST) \
+       $(am__check_32_bits_SOURCES_DIST) \
+       $(am__check_32_length_SOURCES_DIST) check-GeneralizedTime.c \
+       check-INTEGER.c check-OCTET_STRING.c check-OER-INTEGER.c \
+       check-OER-NativeEnumerated.c check-OER-support.c check-OIDs.c \
+       check-PER-INTEGER.c check-PER-UniversalString.c \
+       check-PER-support.c check-REAL.c check-UTCTime.c \
+       check-UTF8String.c check-XER.c check-ber_tlv_tag.c \
+       check-bits.c check-length.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS =  .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing aclocal-1.15
+ADD_CFLAGS = 
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+ASAN_ENV_FLAGS =  ASAN_OPTIONS=detect_leaks=1
+AUTOCONF = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoconf
+AUTOHEADER = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing autoheader
+AUTOMAKE = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing automake-1.15
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), -g -O2 -Wall -Wcast-qual -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-error=attributes -Wno-error=cast-align -std=gnu99) \
+    -I$(top_srcdir)/skeletons $(TESTSUITE_CFLAGS)
+
+CFLAGS_M32 = 
+CODE_COVERAGE_CFLAGS = 
+CODE_COVERAGE_CPPFLAGS = 
+CODE_COVERAGE_CXXFLAGS = 
+CODE_COVERAGE_ENABLED = no
+CODE_COVERAGE_LDFLAGS = 
+CODE_COVERAGE_LIBS = 
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = false
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GCOV = 
+GENHTML = 
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+LCOV = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LEX = flex
+LEXLIB = -lfl
+LEX_OUTPUT_ROOT = lex.yy
+LIBFUZZER_CFLAGS = 
+LIBOBJS = 
+LIBS = 
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+LT_SYS_LIBRARY_PATH = 
+MAKEINFO = ${SHELL} /home/nokia/mouse07410/asn1c/config/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = asn1c
+PACKAGE_BUGREPORT = vlm@lionet.info
+PACKAGE_NAME = asn1c
+PACKAGE_STRING = asn1c 0.9.29
+PACKAGE_TARNAME = asn1c
+PACKAGE_URL = 
+PACKAGE_VERSION = 0.9.29
+PANDOC = 
+PATH_SEPARATOR = :
+RANLIB = ranlib
+SANITIZER_CFLAGS =  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SKELETONS_CFLAGS =   -std=c89 -Wpedantic -Wno-long-long  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+STRIP = strip
+TESTSUITE_CFLAGS =  -std=gnu99 -Wno-error=unused-variable  -fsanitize=undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -fsanitize=address -fno-omit-frame-pointer
+VERSION = 0.9.29
+YACC = bison -y
+YFLAGS = 
+abs_builddir = /home/nokia/mouse07410/asn1c/tests/tests-skeletons
+abs_srcdir = /home/nokia/mouse07410/asn1c/tests/tests-skeletons
+abs_top_builddir = /home/nokia/mouse07410/asn1c
+abs_top_srcdir = /home/nokia/mouse07410/asn1c
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-pc-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = pc
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-pc-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = pc
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/nokia/mouse07410/asn1c/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+runstatedir = ${localstatedir}/run
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+#check_32_ber_tlv_tag_CFLAGS = $(CFLAGS_M32)
+#check_32_ber_tlv_tag_LDADD = $(LDADD_32)
+#check_32_ber_tlv_tag_SOURCES = check-ber_tlv_tag.c
+#check_32_length_CFLAGS = $(CFLAGS_M32)
+#check_32_length_LDADD = $(LDADD_32)
+#check_32_length_SOURCES = check-length.c
+#check_32_bits_CFLAGS = $(CFLAGS_M32)
+#check_32_bits_LDADD = $(LDADD_32)
+#check_32_bits_SOURCES = check-bits.c
+#check_32_OIDs_CFLAGS = $(CFLAGS_M32)
+#check_32_OIDs_LDADD = $(LDADD_32)
+#check_32_OIDs_SOURCES = check-OIDs.c
+#check_32_GeneralizedTime_CFLAGS = $(CFLAGS_M32)
+#check_32_GeneralizedTime_LDADD = $(LDADD_32)
+#check_32_GeneralizedTime_SOURCES = check-GeneralizedTime.c
+#check_32_OCTET_STRING_CFLAGS = $(CFLAGS_M32)
+#check_32_OCTET_STRING_LDADD = $(LDADD_32)
+#check_32_OCTET_STRING_SOURCES = check-OCTET_STRING.c
+#check_32_UTF8String_CFLAGS = $(CFLAGS_M32)
+#check_32_UTF8String_LDADD = $(LDADD_32)
+#check_32_UTF8String_SOURCES = check-UTF8String.c
+#check_32_UTCTime_CFLAGS = $(CFLAGS_M32)
+#check_32_UTCTime_LDADD = $(LDADD_32)
+#check_32_UTCTime_SOURCES = check-UTCTime.c
+#check_32_INTEGER_CFLAGS = $(CFLAGS_M32)
+#check_32_INTEGER_LDADD = $(LDADD_32)
+#check_32_INTEGER_SOURCES = check-INTEGER.c
+#check_32_REAL_CFLAGS = $(CFLAGS_M32)
+#check_32_REAL_LDADD = $(LDADD_32)
+#check_32_REAL_SOURCES = check-REAL.c
+#check_32_XER_CFLAGS = $(CFLAGS_M32)
+#check_32_XER_LDADD = $(LDADD_32)
+#check_32_XER_SOURCES = check-XER.c
+#check_32_OER_support_CFLAGS = $(CFLAGS_M32)
+#check_32_OER_support_LDADD = $(LDADD_32)
+#check_32_OER_support_SOURCES = check-OER-support.c
+#check_32_OER_INTEGER_CFLAGS = $(CFLAGS_M32)
+#check_32_OER_INTEGER_LDADD = $(LDADD_32)
+#check_32_OER_INTEGER_SOURCES = check-OER-INTEGER.c
+#check_32_OER_NativeEnumerated_CFLAGS = $(CFLAGS_M32)
+#check_32_OER_NativeEnumerated_LDADD = $(LDADD_32)
+#check_32_OER_NativeEnumerated_SOURCES = check-OER-NativeEnumerated.c
+#check_32_PER_support_CFLAGS = $(CFLAGS_M32)
+#check_32_PER_support_LDADD = $(LDADD_32)
+#check_32_PER_support_SOURCES = check-PER-support.c
+#check_32_PER_UniversalString_CFLAGS = $(CFLAGS_M32)
+#check_32_PER_UniversalString_LDADD = $(LDADD_32)
+#check_32_PER_UniversalString_SOURCES = check-PER-UniversalString.c
+#check_32_PER_INTEGER_CFLAGS = $(CFLAGS_M32)
+#check_32_PER_INTEGER_LDADD = $(LDADD_32)
+#check_32_PER_INTEGER_SOURCES = check-PER-INTEGER.c
+#LDADD_32 = -lm $(top_builddir)/skeletons/libasn1cskeletons_c89_32.la
+LDADD = -lm $(top_builddir)/skeletons/libasn1cskeletons.la
+TESTS = $(check_PROGRAMS)
+TESTS_ENVIRONMENT = \
+     ASAN_OPTIONS=detect_leaks=1                    \
+    UBSAN_OPTIONS=print_stacktrace=1    \
+    ${srcdir}/disable-leak-check-m32.sh
+
+EXTRA_DIST = disable-leak-check-m32.sh
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-skeletons/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-skeletons/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check-32-GeneralizedTime$(EXEEXT): $(check_32_GeneralizedTime_OBJECTS) $(check_32_GeneralizedTime_DEPENDENCIES) $(EXTRA_check_32_GeneralizedTime_DEPENDENCIES) 
+       @rm -f check-32-GeneralizedTime$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_GeneralizedTime_LINK) $(check_32_GeneralizedTime_OBJECTS) $(check_32_GeneralizedTime_LDADD) $(LIBS)
+
+check-32-INTEGER$(EXEEXT): $(check_32_INTEGER_OBJECTS) $(check_32_INTEGER_DEPENDENCIES) $(EXTRA_check_32_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_INTEGER_LINK) $(check_32_INTEGER_OBJECTS) $(check_32_INTEGER_LDADD) $(LIBS)
+
+check-32-OCTET_STRING$(EXEEXT): $(check_32_OCTET_STRING_OBJECTS) $(check_32_OCTET_STRING_DEPENDENCIES) $(EXTRA_check_32_OCTET_STRING_DEPENDENCIES) 
+       @rm -f check-32-OCTET_STRING$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OCTET_STRING_LINK) $(check_32_OCTET_STRING_OBJECTS) $(check_32_OCTET_STRING_LDADD) $(LIBS)
+
+check-32-OER-INTEGER$(EXEEXT): $(check_32_OER_INTEGER_OBJECTS) $(check_32_OER_INTEGER_DEPENDENCIES) $(EXTRA_check_32_OER_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-OER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_INTEGER_LINK) $(check_32_OER_INTEGER_OBJECTS) $(check_32_OER_INTEGER_LDADD) $(LIBS)
+
+check-32-OER-NativeEnumerated$(EXEEXT): $(check_32_OER_NativeEnumerated_OBJECTS) $(check_32_OER_NativeEnumerated_DEPENDENCIES) $(EXTRA_check_32_OER_NativeEnumerated_DEPENDENCIES) 
+       @rm -f check-32-OER-NativeEnumerated$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_NativeEnumerated_LINK) $(check_32_OER_NativeEnumerated_OBJECTS) $(check_32_OER_NativeEnumerated_LDADD) $(LIBS)
+
+check-32-OER-support$(EXEEXT): $(check_32_OER_support_OBJECTS) $(check_32_OER_support_DEPENDENCIES) $(EXTRA_check_32_OER_support_DEPENDENCIES) 
+       @rm -f check-32-OER-support$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_support_LINK) $(check_32_OER_support_OBJECTS) $(check_32_OER_support_LDADD) $(LIBS)
+
+check-32-OIDs$(EXEEXT): $(check_32_OIDs_OBJECTS) $(check_32_OIDs_DEPENDENCIES) $(EXTRA_check_32_OIDs_DEPENDENCIES) 
+       @rm -f check-32-OIDs$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OIDs_LINK) $(check_32_OIDs_OBJECTS) $(check_32_OIDs_LDADD) $(LIBS)
+
+check-32-PER-INTEGER$(EXEEXT): $(check_32_PER_INTEGER_OBJECTS) $(check_32_PER_INTEGER_DEPENDENCIES) $(EXTRA_check_32_PER_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-PER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_INTEGER_LINK) $(check_32_PER_INTEGER_OBJECTS) $(check_32_PER_INTEGER_LDADD) $(LIBS)
+
+check-32-PER-UniversalString$(EXEEXT): $(check_32_PER_UniversalString_OBJECTS) $(check_32_PER_UniversalString_DEPENDENCIES) $(EXTRA_check_32_PER_UniversalString_DEPENDENCIES) 
+       @rm -f check-32-PER-UniversalString$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_UniversalString_LINK) $(check_32_PER_UniversalString_OBJECTS) $(check_32_PER_UniversalString_LDADD) $(LIBS)
+
+check-32-PER-support$(EXEEXT): $(check_32_PER_support_OBJECTS) $(check_32_PER_support_DEPENDENCIES) $(EXTRA_check_32_PER_support_DEPENDENCIES) 
+       @rm -f check-32-PER-support$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_support_LINK) $(check_32_PER_support_OBJECTS) $(check_32_PER_support_LDADD) $(LIBS)
+
+check-32-REAL$(EXEEXT): $(check_32_REAL_OBJECTS) $(check_32_REAL_DEPENDENCIES) $(EXTRA_check_32_REAL_DEPENDENCIES) 
+       @rm -f check-32-REAL$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_REAL_LINK) $(check_32_REAL_OBJECTS) $(check_32_REAL_LDADD) $(LIBS)
+
+check-32-UTCTime$(EXEEXT): $(check_32_UTCTime_OBJECTS) $(check_32_UTCTime_DEPENDENCIES) $(EXTRA_check_32_UTCTime_DEPENDENCIES) 
+       @rm -f check-32-UTCTime$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_UTCTime_LINK) $(check_32_UTCTime_OBJECTS) $(check_32_UTCTime_LDADD) $(LIBS)
+
+check-32-UTF8String$(EXEEXT): $(check_32_UTF8String_OBJECTS) $(check_32_UTF8String_DEPENDENCIES) $(EXTRA_check_32_UTF8String_DEPENDENCIES) 
+       @rm -f check-32-UTF8String$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_UTF8String_LINK) $(check_32_UTF8String_OBJECTS) $(check_32_UTF8String_LDADD) $(LIBS)
+
+check-32-XER$(EXEEXT): $(check_32_XER_OBJECTS) $(check_32_XER_DEPENDENCIES) $(EXTRA_check_32_XER_DEPENDENCIES) 
+       @rm -f check-32-XER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_XER_LINK) $(check_32_XER_OBJECTS) $(check_32_XER_LDADD) $(LIBS)
+
+check-32-ber_tlv_tag$(EXEEXT): $(check_32_ber_tlv_tag_OBJECTS) $(check_32_ber_tlv_tag_DEPENDENCIES) $(EXTRA_check_32_ber_tlv_tag_DEPENDENCIES) 
+       @rm -f check-32-ber_tlv_tag$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_ber_tlv_tag_LINK) $(check_32_ber_tlv_tag_OBJECTS) $(check_32_ber_tlv_tag_LDADD) $(LIBS)
+
+check-32-bits$(EXEEXT): $(check_32_bits_OBJECTS) $(check_32_bits_DEPENDENCIES) $(EXTRA_check_32_bits_DEPENDENCIES) 
+       @rm -f check-32-bits$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_bits_LINK) $(check_32_bits_OBJECTS) $(check_32_bits_LDADD) $(LIBS)
+
+check-32-length$(EXEEXT): $(check_32_length_OBJECTS) $(check_32_length_DEPENDENCIES) $(EXTRA_check_32_length_DEPENDENCIES) 
+       @rm -f check-32-length$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_length_LINK) $(check_32_length_OBJECTS) $(check_32_length_LDADD) $(LIBS)
+
+check-GeneralizedTime$(EXEEXT): $(check_GeneralizedTime_OBJECTS) $(check_GeneralizedTime_DEPENDENCIES) $(EXTRA_check_GeneralizedTime_DEPENDENCIES) 
+       @rm -f check-GeneralizedTime$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_GeneralizedTime_OBJECTS) $(check_GeneralizedTime_LDADD) $(LIBS)
+
+check-INTEGER$(EXEEXT): $(check_INTEGER_OBJECTS) $(check_INTEGER_DEPENDENCIES) $(EXTRA_check_INTEGER_DEPENDENCIES) 
+       @rm -f check-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_INTEGER_OBJECTS) $(check_INTEGER_LDADD) $(LIBS)
+
+check-OCTET_STRING$(EXEEXT): $(check_OCTET_STRING_OBJECTS) $(check_OCTET_STRING_DEPENDENCIES) $(EXTRA_check_OCTET_STRING_DEPENDENCIES) 
+       @rm -f check-OCTET_STRING$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OCTET_STRING_OBJECTS) $(check_OCTET_STRING_LDADD) $(LIBS)
+
+check-OER-INTEGER$(EXEEXT): $(check_OER_INTEGER_OBJECTS) $(check_OER_INTEGER_DEPENDENCIES) $(EXTRA_check_OER_INTEGER_DEPENDENCIES) 
+       @rm -f check-OER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_INTEGER_OBJECTS) $(check_OER_INTEGER_LDADD) $(LIBS)
+
+check-OER-NativeEnumerated$(EXEEXT): $(check_OER_NativeEnumerated_OBJECTS) $(check_OER_NativeEnumerated_DEPENDENCIES) $(EXTRA_check_OER_NativeEnumerated_DEPENDENCIES) 
+       @rm -f check-OER-NativeEnumerated$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_NativeEnumerated_OBJECTS) $(check_OER_NativeEnumerated_LDADD) $(LIBS)
+
+check-OER-support$(EXEEXT): $(check_OER_support_OBJECTS) $(check_OER_support_DEPENDENCIES) $(EXTRA_check_OER_support_DEPENDENCIES) 
+       @rm -f check-OER-support$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_support_OBJECTS) $(check_OER_support_LDADD) $(LIBS)
+
+check-OIDs$(EXEEXT): $(check_OIDs_OBJECTS) $(check_OIDs_DEPENDENCIES) $(EXTRA_check_OIDs_DEPENDENCIES) 
+       @rm -f check-OIDs$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OIDs_OBJECTS) $(check_OIDs_LDADD) $(LIBS)
+
+check-PER-INTEGER$(EXEEXT): $(check_PER_INTEGER_OBJECTS) $(check_PER_INTEGER_DEPENDENCIES) $(EXTRA_check_PER_INTEGER_DEPENDENCIES) 
+       @rm -f check-PER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_INTEGER_OBJECTS) $(check_PER_INTEGER_LDADD) $(LIBS)
+
+check-PER-UniversalString$(EXEEXT): $(check_PER_UniversalString_OBJECTS) $(check_PER_UniversalString_DEPENDENCIES) $(EXTRA_check_PER_UniversalString_DEPENDENCIES) 
+       @rm -f check-PER-UniversalString$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_UniversalString_OBJECTS) $(check_PER_UniversalString_LDADD) $(LIBS)
+
+check-PER-support$(EXEEXT): $(check_PER_support_OBJECTS) $(check_PER_support_DEPENDENCIES) $(EXTRA_check_PER_support_DEPENDENCIES) 
+       @rm -f check-PER-support$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_support_OBJECTS) $(check_PER_support_LDADD) $(LIBS)
+
+check-REAL$(EXEEXT): $(check_REAL_OBJECTS) $(check_REAL_DEPENDENCIES) $(EXTRA_check_REAL_DEPENDENCIES) 
+       @rm -f check-REAL$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_REAL_OBJECTS) $(check_REAL_LDADD) $(LIBS)
+
+check-UTCTime$(EXEEXT): $(check_UTCTime_OBJECTS) $(check_UTCTime_DEPENDENCIES) $(EXTRA_check_UTCTime_DEPENDENCIES) 
+       @rm -f check-UTCTime$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_UTCTime_OBJECTS) $(check_UTCTime_LDADD) $(LIBS)
+
+check-UTF8String$(EXEEXT): $(check_UTF8String_OBJECTS) $(check_UTF8String_DEPENDENCIES) $(EXTRA_check_UTF8String_DEPENDENCIES) 
+       @rm -f check-UTF8String$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_UTF8String_OBJECTS) $(check_UTF8String_LDADD) $(LIBS)
+
+check-XER$(EXEEXT): $(check_XER_OBJECTS) $(check_XER_DEPENDENCIES) $(EXTRA_check_XER_DEPENDENCIES) 
+       @rm -f check-XER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_XER_OBJECTS) $(check_XER_LDADD) $(LIBS)
+
+check-ber_tlv_tag$(EXEEXT): $(check_ber_tlv_tag_OBJECTS) $(check_ber_tlv_tag_DEPENDENCIES) $(EXTRA_check_ber_tlv_tag_DEPENDENCIES) 
+       @rm -f check-ber_tlv_tag$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_ber_tlv_tag_OBJECTS) $(check_ber_tlv_tag_LDADD) $(LIBS)
+
+check-bits$(EXEEXT): $(check_bits_OBJECTS) $(check_bits_DEPENDENCIES) $(EXTRA_check_bits_DEPENDENCIES) 
+       @rm -f check-bits$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_bits_OBJECTS) $(check_bits_LDADD) $(LIBS)
+
+check-length$(EXEEXT): $(check_length_OBJECTS) $(check_length_DEPENDENCIES) $(EXTRA_check_length_DEPENDENCIES) 
+       @rm -f check-length$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_length_OBJECTS) $(check_length_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/check-GeneralizedTime.Po
+include ./$(DEPDIR)/check-INTEGER.Po
+include ./$(DEPDIR)/check-OCTET_STRING.Po
+include ./$(DEPDIR)/check-OER-INTEGER.Po
+include ./$(DEPDIR)/check-OER-NativeEnumerated.Po
+include ./$(DEPDIR)/check-OER-support.Po
+include ./$(DEPDIR)/check-OIDs.Po
+include ./$(DEPDIR)/check-PER-INTEGER.Po
+include ./$(DEPDIR)/check-PER-UniversalString.Po
+include ./$(DEPDIR)/check-PER-support.Po
+include ./$(DEPDIR)/check-REAL.Po
+include ./$(DEPDIR)/check-UTCTime.Po
+include ./$(DEPDIR)/check-UTF8String.Po
+include ./$(DEPDIR)/check-XER.Po
+include ./$(DEPDIR)/check-ber_tlv_tag.Po
+include ./$(DEPDIR)/check-bits.Po
+include ./$(DEPDIR)/check-length.Po
+include ./$(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po
+include ./$(DEPDIR)/check_32_INTEGER-check-INTEGER.Po
+include ./$(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po
+include ./$(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po
+include ./$(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
+include ./$(DEPDIR)/check_32_OER_support-check-OER-support.Po
+include ./$(DEPDIR)/check_32_OIDs-check-OIDs.Po
+include ./$(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po
+include ./$(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po
+include ./$(DEPDIR)/check_32_PER_support-check-PER-support.Po
+include ./$(DEPDIR)/check_32_REAL-check-REAL.Po
+include ./$(DEPDIR)/check_32_UTCTime-check-UTCTime.Po
+include ./$(DEPDIR)/check_32_UTF8String-check-UTF8String.Po
+include ./$(DEPDIR)/check_32_XER-check-XER.Po
+include ./$(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
+include ./$(DEPDIR)/check_32_bits-check-bits.Po
+include ./$(DEPDIR)/check_32_length-check-length.Po
+
+.c.o:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+       $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#      $(AM_V_CC)source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+       $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+       $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#      $(AM_V_CC)source='$<' object='$@' libtool=yes \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+check_32_GeneralizedTime-check-GeneralizedTime.o: check-GeneralizedTime.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -MT check_32_GeneralizedTime-check-GeneralizedTime.o -MD -MP -MF $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo -c -o check_32_GeneralizedTime-check-GeneralizedTime.o `test -f 'check-GeneralizedTime.c' || echo '$(srcdir)/'`check-GeneralizedTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po
+#      $(AM_V_CC)source='check-GeneralizedTime.c' object='check_32_GeneralizedTime-check-GeneralizedTime.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -c -o check_32_GeneralizedTime-check-GeneralizedTime.o `test -f 'check-GeneralizedTime.c' || echo '$(srcdir)/'`check-GeneralizedTime.c
+
+check_32_GeneralizedTime-check-GeneralizedTime.obj: check-GeneralizedTime.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -MT check_32_GeneralizedTime-check-GeneralizedTime.obj -MD -MP -MF $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo -c -o check_32_GeneralizedTime-check-GeneralizedTime.obj `if test -f 'check-GeneralizedTime.c'; then $(CYGPATH_W) 'check-GeneralizedTime.c'; else $(CYGPATH_W) '$(srcdir)/check-GeneralizedTime.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po
+#      $(AM_V_CC)source='check-GeneralizedTime.c' object='check_32_GeneralizedTime-check-GeneralizedTime.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -c -o check_32_GeneralizedTime-check-GeneralizedTime.obj `if test -f 'check-GeneralizedTime.c'; then $(CYGPATH_W) 'check-GeneralizedTime.c'; else $(CYGPATH_W) '$(srcdir)/check-GeneralizedTime.c'; fi`
+
+check_32_INTEGER-check-INTEGER.o: check-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_INTEGER-check-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo -c -o check_32_INTEGER-check-INTEGER.o `test -f 'check-INTEGER.c' || echo '$(srcdir)/'`check-INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo $(DEPDIR)/check_32_INTEGER-check-INTEGER.Po
+#      $(AM_V_CC)source='check-INTEGER.c' object='check_32_INTEGER-check-INTEGER.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_INTEGER-check-INTEGER.o `test -f 'check-INTEGER.c' || echo '$(srcdir)/'`check-INTEGER.c
+
+check_32_INTEGER-check-INTEGER.obj: check-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_INTEGER-check-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo -c -o check_32_INTEGER-check-INTEGER.obj `if test -f 'check-INTEGER.c'; then $(CYGPATH_W) 'check-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-INTEGER.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo $(DEPDIR)/check_32_INTEGER-check-INTEGER.Po
+#      $(AM_V_CC)source='check-INTEGER.c' object='check_32_INTEGER-check-INTEGER.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_INTEGER-check-INTEGER.obj `if test -f 'check-INTEGER.c'; then $(CYGPATH_W) 'check-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-INTEGER.c'; fi`
+
+check_32_OCTET_STRING-check-OCTET_STRING.o: check-OCTET_STRING.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -MT check_32_OCTET_STRING-check-OCTET_STRING.o -MD -MP -MF $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo -c -o check_32_OCTET_STRING-check-OCTET_STRING.o `test -f 'check-OCTET_STRING.c' || echo '$(srcdir)/'`check-OCTET_STRING.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po
+#      $(AM_V_CC)source='check-OCTET_STRING.c' object='check_32_OCTET_STRING-check-OCTET_STRING.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -c -o check_32_OCTET_STRING-check-OCTET_STRING.o `test -f 'check-OCTET_STRING.c' || echo '$(srcdir)/'`check-OCTET_STRING.c
+
+check_32_OCTET_STRING-check-OCTET_STRING.obj: check-OCTET_STRING.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -MT check_32_OCTET_STRING-check-OCTET_STRING.obj -MD -MP -MF $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo -c -o check_32_OCTET_STRING-check-OCTET_STRING.obj `if test -f 'check-OCTET_STRING.c'; then $(CYGPATH_W) 'check-OCTET_STRING.c'; else $(CYGPATH_W) '$(srcdir)/check-OCTET_STRING.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po
+#      $(AM_V_CC)source='check-OCTET_STRING.c' object='check_32_OCTET_STRING-check-OCTET_STRING.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -c -o check_32_OCTET_STRING-check-OCTET_STRING.obj `if test -f 'check-OCTET_STRING.c'; then $(CYGPATH_W) 'check-OCTET_STRING.c'; else $(CYGPATH_W) '$(srcdir)/check-OCTET_STRING.c'; fi`
+
+check_32_OER_INTEGER-check-OER-INTEGER.o: check-OER-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_OER_INTEGER-check-OER-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo -c -o check_32_OER_INTEGER-check-OER-INTEGER.o `test -f 'check-OER-INTEGER.c' || echo '$(srcdir)/'`check-OER-INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po
+#      $(AM_V_CC)source='check-OER-INTEGER.c' object='check_32_OER_INTEGER-check-OER-INTEGER.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_OER_INTEGER-check-OER-INTEGER.o `test -f 'check-OER-INTEGER.c' || echo '$(srcdir)/'`check-OER-INTEGER.c
+
+check_32_OER_INTEGER-check-OER-INTEGER.obj: check-OER-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_OER_INTEGER-check-OER-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo -c -o check_32_OER_INTEGER-check-OER-INTEGER.obj `if test -f 'check-OER-INTEGER.c'; then $(CYGPATH_W) 'check-OER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-INTEGER.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po
+#      $(AM_V_CC)source='check-OER-INTEGER.c' object='check_32_OER_INTEGER-check-OER-INTEGER.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_OER_INTEGER-check-OER-INTEGER.obj `if test -f 'check-OER-INTEGER.c'; then $(CYGPATH_W) 'check-OER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-INTEGER.c'; fi`
+
+check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o: check-OER-NativeEnumerated.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -MT check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o -MD -MP -MF $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o `test -f 'check-OER-NativeEnumerated.c' || echo '$(srcdir)/'`check-OER-NativeEnumerated.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
+#      $(AM_V_CC)source='check-OER-NativeEnumerated.c' object='check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o `test -f 'check-OER-NativeEnumerated.c' || echo '$(srcdir)/'`check-OER-NativeEnumerated.c
+
+check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj: check-OER-NativeEnumerated.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -MT check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj -MD -MP -MF $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj `if test -f 'check-OER-NativeEnumerated.c'; then $(CYGPATH_W) 'check-OER-NativeEnumerated.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-NativeEnumerated.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
+#      $(AM_V_CC)source='check-OER-NativeEnumerated.c' object='check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj `if test -f 'check-OER-NativeEnumerated.c'; then $(CYGPATH_W) 'check-OER-NativeEnumerated.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-NativeEnumerated.c'; fi`
+
+check_32_OER_support-check-OER-support.o: check-OER-support.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -MT check_32_OER_support-check-OER-support.o -MD -MP -MF $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo -c -o check_32_OER_support-check-OER-support.o `test -f 'check-OER-support.c' || echo '$(srcdir)/'`check-OER-support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo $(DEPDIR)/check_32_OER_support-check-OER-support.Po
+#      $(AM_V_CC)source='check-OER-support.c' object='check_32_OER_support-check-OER-support.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -c -o check_32_OER_support-check-OER-support.o `test -f 'check-OER-support.c' || echo '$(srcdir)/'`check-OER-support.c
+
+check_32_OER_support-check-OER-support.obj: check-OER-support.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -MT check_32_OER_support-check-OER-support.obj -MD -MP -MF $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo -c -o check_32_OER_support-check-OER-support.obj `if test -f 'check-OER-support.c'; then $(CYGPATH_W) 'check-OER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-support.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo $(DEPDIR)/check_32_OER_support-check-OER-support.Po
+#      $(AM_V_CC)source='check-OER-support.c' object='check_32_OER_support-check-OER-support.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -c -o check_32_OER_support-check-OER-support.obj `if test -f 'check-OER-support.c'; then $(CYGPATH_W) 'check-OER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-support.c'; fi`
+
+check_32_OIDs-check-OIDs.o: check-OIDs.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -MT check_32_OIDs-check-OIDs.o -MD -MP -MF $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo -c -o check_32_OIDs-check-OIDs.o `test -f 'check-OIDs.c' || echo '$(srcdir)/'`check-OIDs.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo $(DEPDIR)/check_32_OIDs-check-OIDs.Po
+#      $(AM_V_CC)source='check-OIDs.c' object='check_32_OIDs-check-OIDs.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -c -o check_32_OIDs-check-OIDs.o `test -f 'check-OIDs.c' || echo '$(srcdir)/'`check-OIDs.c
+
+check_32_OIDs-check-OIDs.obj: check-OIDs.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -MT check_32_OIDs-check-OIDs.obj -MD -MP -MF $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo -c -o check_32_OIDs-check-OIDs.obj `if test -f 'check-OIDs.c'; then $(CYGPATH_W) 'check-OIDs.c'; else $(CYGPATH_W) '$(srcdir)/check-OIDs.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo $(DEPDIR)/check_32_OIDs-check-OIDs.Po
+#      $(AM_V_CC)source='check-OIDs.c' object='check_32_OIDs-check-OIDs.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -c -o check_32_OIDs-check-OIDs.obj `if test -f 'check-OIDs.c'; then $(CYGPATH_W) 'check-OIDs.c'; else $(CYGPATH_W) '$(srcdir)/check-OIDs.c'; fi`
+
+check_32_PER_INTEGER-check-PER-INTEGER.o: check-PER-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_PER_INTEGER-check-PER-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo -c -o check_32_PER_INTEGER-check-PER-INTEGER.o `test -f 'check-PER-INTEGER.c' || echo '$(srcdir)/'`check-PER-INTEGER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po
+#      $(AM_V_CC)source='check-PER-INTEGER.c' object='check_32_PER_INTEGER-check-PER-INTEGER.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_PER_INTEGER-check-PER-INTEGER.o `test -f 'check-PER-INTEGER.c' || echo '$(srcdir)/'`check-PER-INTEGER.c
+
+check_32_PER_INTEGER-check-PER-INTEGER.obj: check-PER-INTEGER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_PER_INTEGER-check-PER-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo -c -o check_32_PER_INTEGER-check-PER-INTEGER.obj `if test -f 'check-PER-INTEGER.c'; then $(CYGPATH_W) 'check-PER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-INTEGER.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po
+#      $(AM_V_CC)source='check-PER-INTEGER.c' object='check_32_PER_INTEGER-check-PER-INTEGER.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_PER_INTEGER-check-PER-INTEGER.obj `if test -f 'check-PER-INTEGER.c'; then $(CYGPATH_W) 'check-PER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-INTEGER.c'; fi`
+
+check_32_PER_UniversalString-check-PER-UniversalString.o: check-PER-UniversalString.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -MT check_32_PER_UniversalString-check-PER-UniversalString.o -MD -MP -MF $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo -c -o check_32_PER_UniversalString-check-PER-UniversalString.o `test -f 'check-PER-UniversalString.c' || echo '$(srcdir)/'`check-PER-UniversalString.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po
+#      $(AM_V_CC)source='check-PER-UniversalString.c' object='check_32_PER_UniversalString-check-PER-UniversalString.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -c -o check_32_PER_UniversalString-check-PER-UniversalString.o `test -f 'check-PER-UniversalString.c' || echo '$(srcdir)/'`check-PER-UniversalString.c
+
+check_32_PER_UniversalString-check-PER-UniversalString.obj: check-PER-UniversalString.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -MT check_32_PER_UniversalString-check-PER-UniversalString.obj -MD -MP -MF $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo -c -o check_32_PER_UniversalString-check-PER-UniversalString.obj `if test -f 'check-PER-UniversalString.c'; then $(CYGPATH_W) 'check-PER-UniversalString.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-UniversalString.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po
+#      $(AM_V_CC)source='check-PER-UniversalString.c' object='check_32_PER_UniversalString-check-PER-UniversalString.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -c -o check_32_PER_UniversalString-check-PER-UniversalString.obj `if test -f 'check-PER-UniversalString.c'; then $(CYGPATH_W) 'check-PER-UniversalString.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-UniversalString.c'; fi`
+
+check_32_PER_support-check-PER-support.o: check-PER-support.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -MT check_32_PER_support-check-PER-support.o -MD -MP -MF $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo -c -o check_32_PER_support-check-PER-support.o `test -f 'check-PER-support.c' || echo '$(srcdir)/'`check-PER-support.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo $(DEPDIR)/check_32_PER_support-check-PER-support.Po
+#      $(AM_V_CC)source='check-PER-support.c' object='check_32_PER_support-check-PER-support.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -c -o check_32_PER_support-check-PER-support.o `test -f 'check-PER-support.c' || echo '$(srcdir)/'`check-PER-support.c
+
+check_32_PER_support-check-PER-support.obj: check-PER-support.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -MT check_32_PER_support-check-PER-support.obj -MD -MP -MF $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo -c -o check_32_PER_support-check-PER-support.obj `if test -f 'check-PER-support.c'; then $(CYGPATH_W) 'check-PER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-support.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo $(DEPDIR)/check_32_PER_support-check-PER-support.Po
+#      $(AM_V_CC)source='check-PER-support.c' object='check_32_PER_support-check-PER-support.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -c -o check_32_PER_support-check-PER-support.obj `if test -f 'check-PER-support.c'; then $(CYGPATH_W) 'check-PER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-support.c'; fi`
+
+check_32_REAL-check-REAL.o: check-REAL.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -MT check_32_REAL-check-REAL.o -MD -MP -MF $(DEPDIR)/check_32_REAL-check-REAL.Tpo -c -o check_32_REAL-check-REAL.o `test -f 'check-REAL.c' || echo '$(srcdir)/'`check-REAL.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_REAL-check-REAL.Tpo $(DEPDIR)/check_32_REAL-check-REAL.Po
+#      $(AM_V_CC)source='check-REAL.c' object='check_32_REAL-check-REAL.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -c -o check_32_REAL-check-REAL.o `test -f 'check-REAL.c' || echo '$(srcdir)/'`check-REAL.c
+
+check_32_REAL-check-REAL.obj: check-REAL.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -MT check_32_REAL-check-REAL.obj -MD -MP -MF $(DEPDIR)/check_32_REAL-check-REAL.Tpo -c -o check_32_REAL-check-REAL.obj `if test -f 'check-REAL.c'; then $(CYGPATH_W) 'check-REAL.c'; else $(CYGPATH_W) '$(srcdir)/check-REAL.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_REAL-check-REAL.Tpo $(DEPDIR)/check_32_REAL-check-REAL.Po
+#      $(AM_V_CC)source='check-REAL.c' object='check_32_REAL-check-REAL.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -c -o check_32_REAL-check-REAL.obj `if test -f 'check-REAL.c'; then $(CYGPATH_W) 'check-REAL.c'; else $(CYGPATH_W) '$(srcdir)/check-REAL.c'; fi`
+
+check_32_UTCTime-check-UTCTime.o: check-UTCTime.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -MT check_32_UTCTime-check-UTCTime.o -MD -MP -MF $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo -c -o check_32_UTCTime-check-UTCTime.o `test -f 'check-UTCTime.c' || echo '$(srcdir)/'`check-UTCTime.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo $(DEPDIR)/check_32_UTCTime-check-UTCTime.Po
+#      $(AM_V_CC)source='check-UTCTime.c' object='check_32_UTCTime-check-UTCTime.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -c -o check_32_UTCTime-check-UTCTime.o `test -f 'check-UTCTime.c' || echo '$(srcdir)/'`check-UTCTime.c
+
+check_32_UTCTime-check-UTCTime.obj: check-UTCTime.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -MT check_32_UTCTime-check-UTCTime.obj -MD -MP -MF $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo -c -o check_32_UTCTime-check-UTCTime.obj `if test -f 'check-UTCTime.c'; then $(CYGPATH_W) 'check-UTCTime.c'; else $(CYGPATH_W) '$(srcdir)/check-UTCTime.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo $(DEPDIR)/check_32_UTCTime-check-UTCTime.Po
+#      $(AM_V_CC)source='check-UTCTime.c' object='check_32_UTCTime-check-UTCTime.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -c -o check_32_UTCTime-check-UTCTime.obj `if test -f 'check-UTCTime.c'; then $(CYGPATH_W) 'check-UTCTime.c'; else $(CYGPATH_W) '$(srcdir)/check-UTCTime.c'; fi`
+
+check_32_UTF8String-check-UTF8String.o: check-UTF8String.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -MT check_32_UTF8String-check-UTF8String.o -MD -MP -MF $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo -c -o check_32_UTF8String-check-UTF8String.o `test -f 'check-UTF8String.c' || echo '$(srcdir)/'`check-UTF8String.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo $(DEPDIR)/check_32_UTF8String-check-UTF8String.Po
+#      $(AM_V_CC)source='check-UTF8String.c' object='check_32_UTF8String-check-UTF8String.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -c -o check_32_UTF8String-check-UTF8String.o `test -f 'check-UTF8String.c' || echo '$(srcdir)/'`check-UTF8String.c
+
+check_32_UTF8String-check-UTF8String.obj: check-UTF8String.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -MT check_32_UTF8String-check-UTF8String.obj -MD -MP -MF $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo -c -o check_32_UTF8String-check-UTF8String.obj `if test -f 'check-UTF8String.c'; then $(CYGPATH_W) 'check-UTF8String.c'; else $(CYGPATH_W) '$(srcdir)/check-UTF8String.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo $(DEPDIR)/check_32_UTF8String-check-UTF8String.Po
+#      $(AM_V_CC)source='check-UTF8String.c' object='check_32_UTF8String-check-UTF8String.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -c -o check_32_UTF8String-check-UTF8String.obj `if test -f 'check-UTF8String.c'; then $(CYGPATH_W) 'check-UTF8String.c'; else $(CYGPATH_W) '$(srcdir)/check-UTF8String.c'; fi`
+
+check_32_XER-check-XER.o: check-XER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -MT check_32_XER-check-XER.o -MD -MP -MF $(DEPDIR)/check_32_XER-check-XER.Tpo -c -o check_32_XER-check-XER.o `test -f 'check-XER.c' || echo '$(srcdir)/'`check-XER.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_XER-check-XER.Tpo $(DEPDIR)/check_32_XER-check-XER.Po
+#      $(AM_V_CC)source='check-XER.c' object='check_32_XER-check-XER.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -c -o check_32_XER-check-XER.o `test -f 'check-XER.c' || echo '$(srcdir)/'`check-XER.c
+
+check_32_XER-check-XER.obj: check-XER.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -MT check_32_XER-check-XER.obj -MD -MP -MF $(DEPDIR)/check_32_XER-check-XER.Tpo -c -o check_32_XER-check-XER.obj `if test -f 'check-XER.c'; then $(CYGPATH_W) 'check-XER.c'; else $(CYGPATH_W) '$(srcdir)/check-XER.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_XER-check-XER.Tpo $(DEPDIR)/check_32_XER-check-XER.Po
+#      $(AM_V_CC)source='check-XER.c' object='check_32_XER-check-XER.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -c -o check_32_XER-check-XER.obj `if test -f 'check-XER.c'; then $(CYGPATH_W) 'check-XER.c'; else $(CYGPATH_W) '$(srcdir)/check-XER.c'; fi`
+
+check_32_ber_tlv_tag-check-ber_tlv_tag.o: check-ber_tlv_tag.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -MT check_32_ber_tlv_tag-check-ber_tlv_tag.o -MD -MP -MF $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.o `test -f 'check-ber_tlv_tag.c' || echo '$(srcdir)/'`check-ber_tlv_tag.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
+#      $(AM_V_CC)source='check-ber_tlv_tag.c' object='check_32_ber_tlv_tag-check-ber_tlv_tag.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.o `test -f 'check-ber_tlv_tag.c' || echo '$(srcdir)/'`check-ber_tlv_tag.c
+
+check_32_ber_tlv_tag-check-ber_tlv_tag.obj: check-ber_tlv_tag.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -MT check_32_ber_tlv_tag-check-ber_tlv_tag.obj -MD -MP -MF $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.obj `if test -f 'check-ber_tlv_tag.c'; then $(CYGPATH_W) 'check-ber_tlv_tag.c'; else $(CYGPATH_W) '$(srcdir)/check-ber_tlv_tag.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
+#      $(AM_V_CC)source='check-ber_tlv_tag.c' object='check_32_ber_tlv_tag-check-ber_tlv_tag.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.obj `if test -f 'check-ber_tlv_tag.c'; then $(CYGPATH_W) 'check-ber_tlv_tag.c'; else $(CYGPATH_W) '$(srcdir)/check-ber_tlv_tag.c'; fi`
+
+check_32_bits-check-bits.o: check-bits.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -MT check_32_bits-check-bits.o -MD -MP -MF $(DEPDIR)/check_32_bits-check-bits.Tpo -c -o check_32_bits-check-bits.o `test -f 'check-bits.c' || echo '$(srcdir)/'`check-bits.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_bits-check-bits.Tpo $(DEPDIR)/check_32_bits-check-bits.Po
+#      $(AM_V_CC)source='check-bits.c' object='check_32_bits-check-bits.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -c -o check_32_bits-check-bits.o `test -f 'check-bits.c' || echo '$(srcdir)/'`check-bits.c
+
+check_32_bits-check-bits.obj: check-bits.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -MT check_32_bits-check-bits.obj -MD -MP -MF $(DEPDIR)/check_32_bits-check-bits.Tpo -c -o check_32_bits-check-bits.obj `if test -f 'check-bits.c'; then $(CYGPATH_W) 'check-bits.c'; else $(CYGPATH_W) '$(srcdir)/check-bits.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_bits-check-bits.Tpo $(DEPDIR)/check_32_bits-check-bits.Po
+#      $(AM_V_CC)source='check-bits.c' object='check_32_bits-check-bits.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -c -o check_32_bits-check-bits.obj `if test -f 'check-bits.c'; then $(CYGPATH_W) 'check-bits.c'; else $(CYGPATH_W) '$(srcdir)/check-bits.c'; fi`
+
+check_32_length-check-length.o: check-length.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -MT check_32_length-check-length.o -MD -MP -MF $(DEPDIR)/check_32_length-check-length.Tpo -c -o check_32_length-check-length.o `test -f 'check-length.c' || echo '$(srcdir)/'`check-length.c
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_length-check-length.Tpo $(DEPDIR)/check_32_length-check-length.Po
+#      $(AM_V_CC)source='check-length.c' object='check_32_length-check-length.o' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -c -o check_32_length-check-length.o `test -f 'check-length.c' || echo '$(srcdir)/'`check-length.c
+
+check_32_length-check-length.obj: check-length.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -MT check_32_length-check-length.obj -MD -MP -MF $(DEPDIR)/check_32_length-check-length.Tpo -c -o check_32_length-check-length.obj `if test -f 'check-length.c'; then $(CYGPATH_W) 'check-length.c'; else $(CYGPATH_W) '$(srcdir)/check-length.c'; fi`
+       $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_length-check-length.Tpo $(DEPDIR)/check_32_length-check-length.Po
+#      $(AM_V_CC)source='check-length.c' object='check_32_length-check-length.obj' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -c -o check_32_length-check-length.obj `if test -f 'check-length.c'; then $(CYGPATH_W) 'check-length.c'; else $(CYGPATH_W) '$(srcdir)/check-length.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-ber_tlv_tag.log: check-ber_tlv_tag$(EXEEXT)
+       @p='check-ber_tlv_tag$(EXEEXT)'; \
+       b='check-ber_tlv_tag'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-length.log: check-length$(EXEEXT)
+       @p='check-length$(EXEEXT)'; \
+       b='check-length'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-bits.log: check-bits$(EXEEXT)
+       @p='check-bits$(EXEEXT)'; \
+       b='check-bits'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OIDs.log: check-OIDs$(EXEEXT)
+       @p='check-OIDs$(EXEEXT)'; \
+       b='check-OIDs'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-GeneralizedTime.log: check-GeneralizedTime$(EXEEXT)
+       @p='check-GeneralizedTime$(EXEEXT)'; \
+       b='check-GeneralizedTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OCTET_STRING.log: check-OCTET_STRING$(EXEEXT)
+       @p='check-OCTET_STRING$(EXEEXT)'; \
+       b='check-OCTET_STRING'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-UTF8String.log: check-UTF8String$(EXEEXT)
+       @p='check-UTF8String$(EXEEXT)'; \
+       b='check-UTF8String'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-UTCTime.log: check-UTCTime$(EXEEXT)
+       @p='check-UTCTime$(EXEEXT)'; \
+       b='check-UTCTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-INTEGER.log: check-INTEGER$(EXEEXT)
+       @p='check-INTEGER$(EXEEXT)'; \
+       b='check-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-REAL.log: check-REAL$(EXEEXT)
+       @p='check-REAL$(EXEEXT)'; \
+       b='check-REAL'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-XER.log: check-XER$(EXEEXT)
+       @p='check-XER$(EXEEXT)'; \
+       b='check-XER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-support.log: check-OER-support$(EXEEXT)
+       @p='check-OER-support$(EXEEXT)'; \
+       b='check-OER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-INTEGER.log: check-OER-INTEGER$(EXEEXT)
+       @p='check-OER-INTEGER$(EXEEXT)'; \
+       b='check-OER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-NativeEnumerated.log: check-OER-NativeEnumerated$(EXEEXT)
+       @p='check-OER-NativeEnumerated$(EXEEXT)'; \
+       b='check-OER-NativeEnumerated'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-support.log: check-PER-support$(EXEEXT)
+       @p='check-PER-support$(EXEEXT)'; \
+       b='check-PER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-UniversalString.log: check-PER-UniversalString$(EXEEXT)
+       @p='check-PER-UniversalString$(EXEEXT)'; \
+       b='check-PER-UniversalString'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-INTEGER.log: check-PER-INTEGER$(EXEEXT)
+       @p='check-PER-INTEGER$(EXEEXT)'; \
+       b='check-PER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-ber_tlv_tag.log: check-32-ber_tlv_tag$(EXEEXT)
+       @p='check-32-ber_tlv_tag$(EXEEXT)'; \
+       b='check-32-ber_tlv_tag'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-length.log: check-32-length$(EXEEXT)
+       @p='check-32-length$(EXEEXT)'; \
+       b='check-32-length'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-bits.log: check-32-bits$(EXEEXT)
+       @p='check-32-bits$(EXEEXT)'; \
+       b='check-32-bits'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OIDs.log: check-32-OIDs$(EXEEXT)
+       @p='check-32-OIDs$(EXEEXT)'; \
+       b='check-32-OIDs'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-GeneralizedTime.log: check-32-GeneralizedTime$(EXEEXT)
+       @p='check-32-GeneralizedTime$(EXEEXT)'; \
+       b='check-32-GeneralizedTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OCTET_STRING.log: check-32-OCTET_STRING$(EXEEXT)
+       @p='check-32-OCTET_STRING$(EXEEXT)'; \
+       b='check-32-OCTET_STRING'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-UTF8String.log: check-32-UTF8String$(EXEEXT)
+       @p='check-32-UTF8String$(EXEEXT)'; \
+       b='check-32-UTF8String'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-UTCTime.log: check-32-UTCTime$(EXEEXT)
+       @p='check-32-UTCTime$(EXEEXT)'; \
+       b='check-32-UTCTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-INTEGER.log: check-32-INTEGER$(EXEEXT)
+       @p='check-32-INTEGER$(EXEEXT)'; \
+       b='check-32-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-REAL.log: check-32-REAL$(EXEEXT)
+       @p='check-32-REAL$(EXEEXT)'; \
+       b='check-32-REAL'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-XER.log: check-32-XER$(EXEEXT)
+       @p='check-32-XER$(EXEEXT)'; \
+       b='check-32-XER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-support.log: check-32-OER-support$(EXEEXT)
+       @p='check-32-OER-support$(EXEEXT)'; \
+       b='check-32-OER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-INTEGER.log: check-32-OER-INTEGER$(EXEEXT)
+       @p='check-32-OER-INTEGER$(EXEEXT)'; \
+       b='check-32-OER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-NativeEnumerated.log: check-32-OER-NativeEnumerated$(EXEEXT)
+       @p='check-32-OER-NativeEnumerated$(EXEEXT)'; \
+       b='check-32-OER-NativeEnumerated'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-support.log: check-32-PER-support$(EXEEXT)
+       @p='check-32-PER-support$(EXEEXT)'; \
+       b='check-32-PER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-UniversalString.log: check-32-PER-UniversalString$(EXEEXT)
+       @p='check-32-PER-UniversalString$(EXEEXT)'; \
+       b='check-32-PER-UniversalString'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-INTEGER.log: check-32-PER-INTEGER$(EXEEXT)
+       @p='check-32-PER-INTEGER$(EXEEXT)'; \
+       b='check-32-PER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+#.test$(EXEEXT).log:
+#      @p='$<'; \
+#      $(am__set_b); \
+#      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+#      --log-file $$b.log --trs-file $$b.trs \
+#      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+#      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Code coverage
+#
+# Optional:
+#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
+#    Multiple directories may be specified, separated by whitespace.
+#    (Default: $(top_builddir))
+#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
+#    by lcov for code coverage. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
+#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
+#    reports to be created. (Default:
+#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
+#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
+#    set to 0 to disable it and leave empty to stay with the default.
+#    (Default: empty)
+#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
+#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
+#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
+#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
+#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
+#    lcov instance. (Default: empty)
+#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
+#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
+#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
+#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
+#
+# The generated report will be titled using the $(PACKAGE_NAME) and
+# $(PACKAGE_VERSION). In order to add the current git hash to the title,
+# use the git-version-gen script, available online.
+
+# Optional variables
+CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
+CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
+CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
+CODE_COVERAGE_BRANCH_COVERAGE ?=
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
+CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
+CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
+$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
+--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+CODE_COVERAGE_IGNORE_PATTERN ?=
+
+code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
+code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
+ $(CODE_COVERAGE_OUTPUT_FILE);
+code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
+code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
+ $(CODE_COVERAGE_IGNORE_PATTERN);
+code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
+code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
+code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
+code_coverage_quiet = $(code_coverage_quiet_$(V))
+code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
+code_coverage_quiet_0 = --quiet
+
+# sanitizes the test-name: replaces with underscores: dashes and dots
+code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
+
+# Use recursive makes in order to ignore errors during check
+check-code-coverage:
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Capture code coverage data
+code-coverage-capture: code-coverage-capture-hook
+       @echo "Need to reconfigure with --enable-code-coverage"
+
+
+# Hook rule executed before code-coverage-capture, overridable by the user
+code-coverage-capture-hook:
+
+
+
+GITIGNOREFILES ?=
+GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
+
+AM_DISTCHECK_CONFIGURE_FLAGS ?=
+AM_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
+
+.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
+
+
+# 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:
diff --git a/tests/tests-skeletons/Makefile.am b/tests/tests-skeletons/Makefile.am
new file mode 100644 (file)
index 0000000..3cec35d
--- /dev/null
@@ -0,0 +1,109 @@
+@CODE_COVERAGE_RULES@
+
+check_PROGRAMS =            \
+    check-ber_tlv_tag       \
+    check-length            \
+    check-bits              \
+    check-OIDs              \
+    check-GeneralizedTime   \
+    check-OCTET_STRING      \
+    check-UTF8String        \
+    check-UTCTime           \
+    check-INTEGER           \
+    check-REAL              \
+    check-XER               \
+    check-OER-support       \
+    check-OER-INTEGER       \
+    check-OER-NativeEnumerated \
+    check-PER-support       \
+    check-PER-UniversalString  \
+    check-PER-INTEGER
+
+if EXPLICIT_M32
+check_PROGRAMS +=                   \
+    check-32-ber_tlv_tag            \
+    check-32-length                 \
+    check-32-bits                   \
+    check-32-OIDs                   \
+    check-32-GeneralizedTime        \
+    check-32-OCTET_STRING           \
+    check-32-UTF8String             \
+    check-32-UTCTime                \
+    check-32-INTEGER                \
+    check-32-REAL                   \
+    check-32-XER                    \
+    check-32-OER-support            \
+    check-32-OER-INTEGER            \
+    check-32-OER-NativeEnumerated   \
+    check-32-PER-support            \
+    check-32-PER-UniversalString    \
+    check-32-PER-INTEGER
+
+check_32_ber_tlv_tag_CFLAGS=$(CFLAGS_M32)
+check_32_ber_tlv_tag_LDADD=$(LDADD_32)
+check_32_ber_tlv_tag_SOURCES=check-ber_tlv_tag.c
+check_32_length_CFLAGS=$(CFLAGS_M32)
+check_32_length_LDADD=$(LDADD_32)
+check_32_length_SOURCES=check-length.c
+check_32_bits_CFLAGS=$(CFLAGS_M32)
+check_32_bits_LDADD=$(LDADD_32)
+check_32_bits_SOURCES=check-bits.c
+check_32_OIDs_CFLAGS=$(CFLAGS_M32)
+check_32_OIDs_LDADD=$(LDADD_32)
+check_32_OIDs_SOURCES=check-OIDs.c
+check_32_GeneralizedTime_CFLAGS=$(CFLAGS_M32)
+check_32_GeneralizedTime_LDADD=$(LDADD_32)
+check_32_GeneralizedTime_SOURCES=check-GeneralizedTime.c
+check_32_OCTET_STRING_CFLAGS=$(CFLAGS_M32)
+check_32_OCTET_STRING_LDADD=$(LDADD_32)
+check_32_OCTET_STRING_SOURCES=check-OCTET_STRING.c
+check_32_UTF8String_CFLAGS=$(CFLAGS_M32)
+check_32_UTF8String_LDADD=$(LDADD_32)
+check_32_UTF8String_SOURCES=check-UTF8String.c
+check_32_UTCTime_CFLAGS=$(CFLAGS_M32)
+check_32_UTCTime_LDADD=$(LDADD_32)
+check_32_UTCTime_SOURCES=check-UTCTime.c
+check_32_INTEGER_CFLAGS=$(CFLAGS_M32)
+check_32_INTEGER_LDADD=$(LDADD_32)
+check_32_INTEGER_SOURCES=check-INTEGER.c
+check_32_REAL_CFLAGS=$(CFLAGS_M32)
+check_32_REAL_LDADD=$(LDADD_32)
+check_32_REAL_SOURCES=check-REAL.c
+check_32_XER_CFLAGS=$(CFLAGS_M32)
+check_32_XER_LDADD=$(LDADD_32)
+check_32_XER_SOURCES=check-XER.c
+check_32_OER_support_CFLAGS=$(CFLAGS_M32)
+check_32_OER_support_LDADD=$(LDADD_32)
+check_32_OER_support_SOURCES=check-OER-support.c
+check_32_OER_INTEGER_CFLAGS=$(CFLAGS_M32)
+check_32_OER_INTEGER_LDADD=$(LDADD_32)
+check_32_OER_INTEGER_SOURCES=check-OER-INTEGER.c
+check_32_OER_NativeEnumerated_CFLAGS=$(CFLAGS_M32)
+check_32_OER_NativeEnumerated_LDADD=$(LDADD_32)
+check_32_OER_NativeEnumerated_SOURCES=check-OER-NativeEnumerated.c
+check_32_PER_support_CFLAGS=$(CFLAGS_M32)
+check_32_PER_support_LDADD=$(LDADD_32)
+check_32_PER_support_SOURCES=check-PER-support.c
+check_32_PER_UniversalString_CFLAGS=$(CFLAGS_M32)
+check_32_PER_UniversalString_LDADD=$(LDADD_32)
+check_32_PER_UniversalString_SOURCES=check-PER-UniversalString.c
+check_32_PER_INTEGER_CFLAGS=$(CFLAGS_M32)
+check_32_PER_INTEGER_LDADD=$(LDADD_32)
+check_32_PER_INTEGER_SOURCES=check-PER-INTEGER.c
+
+LDADD_32 = -lm $(top_builddir)/skeletons/libasn1cskeletons_c89_32.la
+endif
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@) \
+    -I$(top_srcdir)/skeletons $(TESTSUITE_CFLAGS)
+LDADD = -lm $(top_builddir)/skeletons/libasn1cskeletons.la
+
+TESTS = $(check_PROGRAMS)
+TESTS_ENVIRONMENT=                      \
+    @ASAN_ENV_FLAGS@                    \
+    UBSAN_OPTIONS=print_stacktrace=1    \
+    ${srcdir}/disable-leak-check-m32.sh
+
+EXTRA_DIST = disable-leak-check-m32.sh
diff --git a/tests/tests-skeletons/Makefile.in b/tests/tests-skeletons/Makefile.in
new file mode 100644 (file)
index 0000000..ecc5142
--- /dev/null
@@ -0,0 +1,2006 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+check_PROGRAMS = check-ber_tlv_tag$(EXEEXT) check-length$(EXEEXT) \
+       check-bits$(EXEEXT) check-OIDs$(EXEEXT) \
+       check-GeneralizedTime$(EXEEXT) check-OCTET_STRING$(EXEEXT) \
+       check-UTF8String$(EXEEXT) check-UTCTime$(EXEEXT) \
+       check-INTEGER$(EXEEXT) check-REAL$(EXEEXT) check-XER$(EXEEXT) \
+       check-OER-support$(EXEEXT) check-OER-INTEGER$(EXEEXT) \
+       check-OER-NativeEnumerated$(EXEEXT) check-PER-support$(EXEEXT) \
+       check-PER-UniversalString$(EXEEXT) check-PER-INTEGER$(EXEEXT) \
+       $(am__EXEEXT_1)
+@EXPLICIT_M32_TRUE@am__append_1 = \
+@EXPLICIT_M32_TRUE@    check-32-ber_tlv_tag            \
+@EXPLICIT_M32_TRUE@    check-32-length                 \
+@EXPLICIT_M32_TRUE@    check-32-bits                   \
+@EXPLICIT_M32_TRUE@    check-32-OIDs                   \
+@EXPLICIT_M32_TRUE@    check-32-GeneralizedTime        \
+@EXPLICIT_M32_TRUE@    check-32-OCTET_STRING           \
+@EXPLICIT_M32_TRUE@    check-32-UTF8String             \
+@EXPLICIT_M32_TRUE@    check-32-UTCTime                \
+@EXPLICIT_M32_TRUE@    check-32-INTEGER                \
+@EXPLICIT_M32_TRUE@    check-32-REAL                   \
+@EXPLICIT_M32_TRUE@    check-32-XER                    \
+@EXPLICIT_M32_TRUE@    check-32-OER-support            \
+@EXPLICIT_M32_TRUE@    check-32-OER-INTEGER            \
+@EXPLICIT_M32_TRUE@    check-32-OER-NativeEnumerated   \
+@EXPLICIT_M32_TRUE@    check-32-PER-support            \
+@EXPLICIT_M32_TRUE@    check-32-PER-UniversalString    \
+@EXPLICIT_M32_TRUE@    check-32-PER-INTEGER
+
+subdir = tests/tests-skeletons
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps =  \
+       $(top_srcdir)/m4/ax_check_compile_and_link_flag.m4 \
+       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
+       $(top_srcdir)/m4/ax_code_coverage.m4 \
+       $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+       $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+       $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@EXPLICIT_M32_TRUE@am__EXEEXT_1 = check-32-ber_tlv_tag$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-length$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-bits$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-OIDs$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-GeneralizedTime$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-OCTET_STRING$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-UTF8String$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-UTCTime$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-INTEGER$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-REAL$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-XER$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-OER-support$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-OER-INTEGER$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-OER-NativeEnumerated$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-PER-support$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-PER-UniversalString$(EXEEXT) \
+@EXPLICIT_M32_TRUE@    check-32-PER-INTEGER$(EXEEXT)
+am__check_32_GeneralizedTime_SOURCES_DIST = check-GeneralizedTime.c
+@EXPLICIT_M32_TRUE@am_check_32_GeneralizedTime_OBJECTS = check_32_GeneralizedTime-check-GeneralizedTime.$(OBJEXT)
+check_32_GeneralizedTime_OBJECTS =  \
+       $(am_check_32_GeneralizedTime_OBJECTS)
+@EXPLICIT_M32_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/skeletons/libasn1cskeletons_c89_32.la
+@EXPLICIT_M32_TRUE@check_32_GeneralizedTime_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+check_32_GeneralizedTime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_INTEGER_SOURCES_DIST = check-INTEGER.c
+@EXPLICIT_M32_TRUE@am_check_32_INTEGER_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_INTEGER-check-INTEGER.$(OBJEXT)
+check_32_INTEGER_OBJECTS = $(am_check_32_INTEGER_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_INTEGER_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+am__check_32_OCTET_STRING_SOURCES_DIST = check-OCTET_STRING.c
+@EXPLICIT_M32_TRUE@am_check_32_OCTET_STRING_OBJECTS = check_32_OCTET_STRING-check-OCTET_STRING.$(OBJEXT)
+check_32_OCTET_STRING_OBJECTS = $(am_check_32_OCTET_STRING_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_OCTET_STRING_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_OCTET_STRING_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OER_INTEGER_SOURCES_DIST = check-OER-INTEGER.c
+@EXPLICIT_M32_TRUE@am_check_32_OER_INTEGER_OBJECTS = check_32_OER_INTEGER-check-OER-INTEGER.$(OBJEXT)
+check_32_OER_INTEGER_OBJECTS = $(am_check_32_OER_INTEGER_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_OER_INTEGER_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_OER_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OER_NativeEnumerated_SOURCES_DIST =  \
+       check-OER-NativeEnumerated.c
+@EXPLICIT_M32_TRUE@am_check_32_OER_NativeEnumerated_OBJECTS = check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.$(OBJEXT)
+check_32_OER_NativeEnumerated_OBJECTS =  \
+       $(am_check_32_OER_NativeEnumerated_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_OER_NativeEnumerated_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_OER_NativeEnumerated_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_OER_support_SOURCES_DIST = check-OER-support.c
+@EXPLICIT_M32_TRUE@am_check_32_OER_support_OBJECTS = check_32_OER_support-check-OER-support.$(OBJEXT)
+check_32_OER_support_OBJECTS = $(am_check_32_OER_support_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_OER_support_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_OER_support_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_OER_support_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_OIDs_SOURCES_DIST = check-OIDs.c
+@EXPLICIT_M32_TRUE@am_check_32_OIDs_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_OIDs-check-OIDs.$(OBJEXT)
+check_32_OIDs_OBJECTS = $(am_check_32_OIDs_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_OIDs_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_OIDs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_OIDs_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_PER_INTEGER_SOURCES_DIST = check-PER-INTEGER.c
+@EXPLICIT_M32_TRUE@am_check_32_PER_INTEGER_OBJECTS = check_32_PER_INTEGER-check-PER-INTEGER.$(OBJEXT)
+check_32_PER_INTEGER_OBJECTS = $(am_check_32_PER_INTEGER_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_PER_INTEGER_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_PER_INTEGER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_PER_UniversalString_SOURCES_DIST =  \
+       check-PER-UniversalString.c
+@EXPLICIT_M32_TRUE@am_check_32_PER_UniversalString_OBJECTS = check_32_PER_UniversalString-check-PER-UniversalString.$(OBJEXT)
+check_32_PER_UniversalString_OBJECTS =  \
+       $(am_check_32_PER_UniversalString_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_PER_UniversalString_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_PER_UniversalString_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_PER_support_SOURCES_DIST = check-PER-support.c
+@EXPLICIT_M32_TRUE@am_check_32_PER_support_OBJECTS = check_32_PER_support-check-PER-support.$(OBJEXT)
+check_32_PER_support_OBJECTS = $(am_check_32_PER_support_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_PER_support_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_PER_support_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_PER_support_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_REAL_SOURCES_DIST = check-REAL.c
+@EXPLICIT_M32_TRUE@am_check_32_REAL_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_REAL-check-REAL.$(OBJEXT)
+check_32_REAL_OBJECTS = $(am_check_32_REAL_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_REAL_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_REAL_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_REAL_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_UTCTime_SOURCES_DIST = check-UTCTime.c
+@EXPLICIT_M32_TRUE@am_check_32_UTCTime_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_UTCTime-check-UTCTime.$(OBJEXT)
+check_32_UTCTime_OBJECTS = $(am_check_32_UTCTime_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_UTCTime_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_UTCTime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_UTCTime_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+am__check_32_UTF8String_SOURCES_DIST = check-UTF8String.c
+@EXPLICIT_M32_TRUE@am_check_32_UTF8String_OBJECTS = check_32_UTF8String-check-UTF8String.$(OBJEXT)
+check_32_UTF8String_OBJECTS = $(am_check_32_UTF8String_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_UTF8String_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_UTF8String_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_UTF8String_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_XER_SOURCES_DIST = check-XER.c
+@EXPLICIT_M32_TRUE@am_check_32_XER_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_XER-check-XER.$(OBJEXT)
+check_32_XER_OBJECTS = $(am_check_32_XER_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_XER_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_XER_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_XER_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_ber_tlv_tag_SOURCES_DIST = check-ber_tlv_tag.c
+@EXPLICIT_M32_TRUE@am_check_32_ber_tlv_tag_OBJECTS = check_32_ber_tlv_tag-check-ber_tlv_tag.$(OBJEXT)
+check_32_ber_tlv_tag_OBJECTS = $(am_check_32_ber_tlv_tag_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_ber_tlv_tag_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_ber_tlv_tag_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+am__check_32_bits_SOURCES_DIST = check-bits.c
+@EXPLICIT_M32_TRUE@am_check_32_bits_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_bits-check-bits.$(OBJEXT)
+check_32_bits_OBJECTS = $(am_check_32_bits_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_bits_DEPENDENCIES = $(am__DEPENDENCIES_1)
+check_32_bits_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(check_32_bits_CFLAGS) \
+       $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__check_32_length_SOURCES_DIST = check-length.c
+@EXPLICIT_M32_TRUE@am_check_32_length_OBJECTS =  \
+@EXPLICIT_M32_TRUE@    check_32_length-check-length.$(OBJEXT)
+check_32_length_OBJECTS = $(am_check_32_length_OBJECTS)
+@EXPLICIT_M32_TRUE@check_32_length_DEPENDENCIES =  \
+@EXPLICIT_M32_TRUE@    $(am__DEPENDENCIES_1)
+check_32_length_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(check_32_length_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+check_GeneralizedTime_SOURCES = check-GeneralizedTime.c
+check_GeneralizedTime_OBJECTS = check-GeneralizedTime.$(OBJEXT)
+check_GeneralizedTime_LDADD = $(LDADD)
+check_GeneralizedTime_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_INTEGER_SOURCES = check-INTEGER.c
+check_INTEGER_OBJECTS = check-INTEGER.$(OBJEXT)
+check_INTEGER_LDADD = $(LDADD)
+check_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OCTET_STRING_SOURCES = check-OCTET_STRING.c
+check_OCTET_STRING_OBJECTS = check-OCTET_STRING.$(OBJEXT)
+check_OCTET_STRING_LDADD = $(LDADD)
+check_OCTET_STRING_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_INTEGER_SOURCES = check-OER-INTEGER.c
+check_OER_INTEGER_OBJECTS = check-OER-INTEGER.$(OBJEXT)
+check_OER_INTEGER_LDADD = $(LDADD)
+check_OER_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_NativeEnumerated_SOURCES = check-OER-NativeEnumerated.c
+check_OER_NativeEnumerated_OBJECTS =  \
+       check-OER-NativeEnumerated.$(OBJEXT)
+check_OER_NativeEnumerated_LDADD = $(LDADD)
+check_OER_NativeEnumerated_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OER_support_SOURCES = check-OER-support.c
+check_OER_support_OBJECTS = check-OER-support.$(OBJEXT)
+check_OER_support_LDADD = $(LDADD)
+check_OER_support_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_OIDs_SOURCES = check-OIDs.c
+check_OIDs_OBJECTS = check-OIDs.$(OBJEXT)
+check_OIDs_LDADD = $(LDADD)
+check_OIDs_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_INTEGER_SOURCES = check-PER-INTEGER.c
+check_PER_INTEGER_OBJECTS = check-PER-INTEGER.$(OBJEXT)
+check_PER_INTEGER_LDADD = $(LDADD)
+check_PER_INTEGER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_UniversalString_SOURCES = check-PER-UniversalString.c
+check_PER_UniversalString_OBJECTS =  \
+       check-PER-UniversalString.$(OBJEXT)
+check_PER_UniversalString_LDADD = $(LDADD)
+check_PER_UniversalString_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_PER_support_SOURCES = check-PER-support.c
+check_PER_support_OBJECTS = check-PER-support.$(OBJEXT)
+check_PER_support_LDADD = $(LDADD)
+check_PER_support_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_REAL_SOURCES = check-REAL.c
+check_REAL_OBJECTS = check-REAL.$(OBJEXT)
+check_REAL_LDADD = $(LDADD)
+check_REAL_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_UTCTime_SOURCES = check-UTCTime.c
+check_UTCTime_OBJECTS = check-UTCTime.$(OBJEXT)
+check_UTCTime_LDADD = $(LDADD)
+check_UTCTime_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_UTF8String_SOURCES = check-UTF8String.c
+check_UTF8String_OBJECTS = check-UTF8String.$(OBJEXT)
+check_UTF8String_LDADD = $(LDADD)
+check_UTF8String_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_XER_SOURCES = check-XER.c
+check_XER_OBJECTS = check-XER.$(OBJEXT)
+check_XER_LDADD = $(LDADD)
+check_XER_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_ber_tlv_tag_SOURCES = check-ber_tlv_tag.c
+check_ber_tlv_tag_OBJECTS = check-ber_tlv_tag.$(OBJEXT)
+check_ber_tlv_tag_LDADD = $(LDADD)
+check_ber_tlv_tag_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_bits_SOURCES = check-bits.c
+check_bits_OBJECTS = check-bits.$(OBJEXT)
+check_bits_LDADD = $(LDADD)
+check_bits_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+check_length_SOURCES = check-length.c
+check_length_OBJECTS = check-length.$(OBJEXT)
+check_length_LDADD = $(LDADD)
+check_length_DEPENDENCIES =  \
+       $(top_builddir)/skeletons/libasn1cskeletons.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=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_CCLD_1 = 
+SOURCES = $(check_32_GeneralizedTime_SOURCES) \
+       $(check_32_INTEGER_SOURCES) $(check_32_OCTET_STRING_SOURCES) \
+       $(check_32_OER_INTEGER_SOURCES) \
+       $(check_32_OER_NativeEnumerated_SOURCES) \
+       $(check_32_OER_support_SOURCES) $(check_32_OIDs_SOURCES) \
+       $(check_32_PER_INTEGER_SOURCES) \
+       $(check_32_PER_UniversalString_SOURCES) \
+       $(check_32_PER_support_SOURCES) $(check_32_REAL_SOURCES) \
+       $(check_32_UTCTime_SOURCES) $(check_32_UTF8String_SOURCES) \
+       $(check_32_XER_SOURCES) $(check_32_ber_tlv_tag_SOURCES) \
+       $(check_32_bits_SOURCES) $(check_32_length_SOURCES) \
+       check-GeneralizedTime.c check-INTEGER.c check-OCTET_STRING.c \
+       check-OER-INTEGER.c check-OER-NativeEnumerated.c \
+       check-OER-support.c check-OIDs.c check-PER-INTEGER.c \
+       check-PER-UniversalString.c check-PER-support.c check-REAL.c \
+       check-UTCTime.c check-UTF8String.c check-XER.c \
+       check-ber_tlv_tag.c check-bits.c check-length.c
+DIST_SOURCES = $(am__check_32_GeneralizedTime_SOURCES_DIST) \
+       $(am__check_32_INTEGER_SOURCES_DIST) \
+       $(am__check_32_OCTET_STRING_SOURCES_DIST) \
+       $(am__check_32_OER_INTEGER_SOURCES_DIST) \
+       $(am__check_32_OER_NativeEnumerated_SOURCES_DIST) \
+       $(am__check_32_OER_support_SOURCES_DIST) \
+       $(am__check_32_OIDs_SOURCES_DIST) \
+       $(am__check_32_PER_INTEGER_SOURCES_DIST) \
+       $(am__check_32_PER_UniversalString_SOURCES_DIST) \
+       $(am__check_32_PER_support_SOURCES_DIST) \
+       $(am__check_32_REAL_SOURCES_DIST) \
+       $(am__check_32_UTCTime_SOURCES_DIST) \
+       $(am__check_32_UTF8String_SOURCES_DIST) \
+       $(am__check_32_XER_SOURCES_DIST) \
+       $(am__check_32_ber_tlv_tag_SOURCES_DIST) \
+       $(am__check_32_bits_SOURCES_DIST) \
+       $(am__check_32_length_SOURCES_DIST) check-GeneralizedTime.c \
+       check-INTEGER.c check-OCTET_STRING.c check-OER-INTEGER.c \
+       check-OER-NativeEnumerated.c check-OER-support.c check-OIDs.c \
+       check-PER-INTEGER.c check-PER-UniversalString.c \
+       check-PER-support.c check-REAL.c check-UTCTime.c \
+       check-UTF8String.c check-XER.c check-ber_tlv_tag.c \
+       check-bits.c check-length.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+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; }; \
+  }
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# 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
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# 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.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(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='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/config/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/config/depcomp \
+       $(top_srcdir)/config/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADD_CFLAGS = @ADD_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+ASAN_ENV_FLAGS = @ASAN_ENV_FLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+
+#Filter out the coverage options from CFLAGS as we don't need
+#code coverage data for the tests executables
+CFLAGS = $(filter-out $(CODE_COVERAGE_CFLAGS), @CFLAGS@) \
+    -I$(top_srcdir)/skeletons $(TESTSUITE_CFLAGS)
+
+CFLAGS_M32 = @CFLAGS_M32@
+CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@
+CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
+CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
+CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
+CODE_COVERAGE_LDFLAGS = @CODE_COVERAGE_LDFLAGS@
+CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GENHTML = @GENHTML@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBFUZZER_CFLAGS = @LIBFUZZER_CFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+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@
+PANDOC = @PANDOC@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SANITIZER_CFLAGS = @SANITIZER_CFLAGS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SKELETONS_CFLAGS = @SKELETONS_CFLAGS@
+STRIP = @STRIP@
+TESTSUITE_CFLAGS = @TESTSUITE_CFLAGS@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+runstatedir = @runstatedir@
+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@
+@EXPLICIT_M32_TRUE@check_32_ber_tlv_tag_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_ber_tlv_tag_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_ber_tlv_tag_SOURCES = check-ber_tlv_tag.c
+@EXPLICIT_M32_TRUE@check_32_length_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_length_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_length_SOURCES = check-length.c
+@EXPLICIT_M32_TRUE@check_32_bits_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_bits_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_bits_SOURCES = check-bits.c
+@EXPLICIT_M32_TRUE@check_32_OIDs_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_OIDs_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_OIDs_SOURCES = check-OIDs.c
+@EXPLICIT_M32_TRUE@check_32_GeneralizedTime_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_GeneralizedTime_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_GeneralizedTime_SOURCES = check-GeneralizedTime.c
+@EXPLICIT_M32_TRUE@check_32_OCTET_STRING_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_OCTET_STRING_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_OCTET_STRING_SOURCES = check-OCTET_STRING.c
+@EXPLICIT_M32_TRUE@check_32_UTF8String_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_UTF8String_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_UTF8String_SOURCES = check-UTF8String.c
+@EXPLICIT_M32_TRUE@check_32_UTCTime_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_UTCTime_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_UTCTime_SOURCES = check-UTCTime.c
+@EXPLICIT_M32_TRUE@check_32_INTEGER_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_INTEGER_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_INTEGER_SOURCES = check-INTEGER.c
+@EXPLICIT_M32_TRUE@check_32_REAL_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_REAL_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_REAL_SOURCES = check-REAL.c
+@EXPLICIT_M32_TRUE@check_32_XER_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_XER_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_XER_SOURCES = check-XER.c
+@EXPLICIT_M32_TRUE@check_32_OER_support_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_OER_support_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_OER_support_SOURCES = check-OER-support.c
+@EXPLICIT_M32_TRUE@check_32_OER_INTEGER_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_OER_INTEGER_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_OER_INTEGER_SOURCES = check-OER-INTEGER.c
+@EXPLICIT_M32_TRUE@check_32_OER_NativeEnumerated_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_OER_NativeEnumerated_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_OER_NativeEnumerated_SOURCES = check-OER-NativeEnumerated.c
+@EXPLICIT_M32_TRUE@check_32_PER_support_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_PER_support_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_PER_support_SOURCES = check-PER-support.c
+@EXPLICIT_M32_TRUE@check_32_PER_UniversalString_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_PER_UniversalString_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_PER_UniversalString_SOURCES = check-PER-UniversalString.c
+@EXPLICIT_M32_TRUE@check_32_PER_INTEGER_CFLAGS = $(CFLAGS_M32)
+@EXPLICIT_M32_TRUE@check_32_PER_INTEGER_LDADD = $(LDADD_32)
+@EXPLICIT_M32_TRUE@check_32_PER_INTEGER_SOURCES = check-PER-INTEGER.c
+@EXPLICIT_M32_TRUE@LDADD_32 = -lm $(top_builddir)/skeletons/libasn1cskeletons_c89_32.la
+LDADD = -lm $(top_builddir)/skeletons/libasn1cskeletons.la
+TESTS = $(check_PROGRAMS)
+TESTS_ENVIRONMENT = \
+    @ASAN_ENV_FLAGS@                    \
+    UBSAN_OPTIONS=print_stacktrace=1    \
+    ${srcdir}/disable-leak-check-m32.sh
+
+EXTRA_DIST = disable-leak-check-m32.sh
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/tests-skeletons/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign tests/tests-skeletons/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+check-32-GeneralizedTime$(EXEEXT): $(check_32_GeneralizedTime_OBJECTS) $(check_32_GeneralizedTime_DEPENDENCIES) $(EXTRA_check_32_GeneralizedTime_DEPENDENCIES) 
+       @rm -f check-32-GeneralizedTime$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_GeneralizedTime_LINK) $(check_32_GeneralizedTime_OBJECTS) $(check_32_GeneralizedTime_LDADD) $(LIBS)
+
+check-32-INTEGER$(EXEEXT): $(check_32_INTEGER_OBJECTS) $(check_32_INTEGER_DEPENDENCIES) $(EXTRA_check_32_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_INTEGER_LINK) $(check_32_INTEGER_OBJECTS) $(check_32_INTEGER_LDADD) $(LIBS)
+
+check-32-OCTET_STRING$(EXEEXT): $(check_32_OCTET_STRING_OBJECTS) $(check_32_OCTET_STRING_DEPENDENCIES) $(EXTRA_check_32_OCTET_STRING_DEPENDENCIES) 
+       @rm -f check-32-OCTET_STRING$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OCTET_STRING_LINK) $(check_32_OCTET_STRING_OBJECTS) $(check_32_OCTET_STRING_LDADD) $(LIBS)
+
+check-32-OER-INTEGER$(EXEEXT): $(check_32_OER_INTEGER_OBJECTS) $(check_32_OER_INTEGER_DEPENDENCIES) $(EXTRA_check_32_OER_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-OER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_INTEGER_LINK) $(check_32_OER_INTEGER_OBJECTS) $(check_32_OER_INTEGER_LDADD) $(LIBS)
+
+check-32-OER-NativeEnumerated$(EXEEXT): $(check_32_OER_NativeEnumerated_OBJECTS) $(check_32_OER_NativeEnumerated_DEPENDENCIES) $(EXTRA_check_32_OER_NativeEnumerated_DEPENDENCIES) 
+       @rm -f check-32-OER-NativeEnumerated$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_NativeEnumerated_LINK) $(check_32_OER_NativeEnumerated_OBJECTS) $(check_32_OER_NativeEnumerated_LDADD) $(LIBS)
+
+check-32-OER-support$(EXEEXT): $(check_32_OER_support_OBJECTS) $(check_32_OER_support_DEPENDENCIES) $(EXTRA_check_32_OER_support_DEPENDENCIES) 
+       @rm -f check-32-OER-support$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OER_support_LINK) $(check_32_OER_support_OBJECTS) $(check_32_OER_support_LDADD) $(LIBS)
+
+check-32-OIDs$(EXEEXT): $(check_32_OIDs_OBJECTS) $(check_32_OIDs_DEPENDENCIES) $(EXTRA_check_32_OIDs_DEPENDENCIES) 
+       @rm -f check-32-OIDs$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_OIDs_LINK) $(check_32_OIDs_OBJECTS) $(check_32_OIDs_LDADD) $(LIBS)
+
+check-32-PER-INTEGER$(EXEEXT): $(check_32_PER_INTEGER_OBJECTS) $(check_32_PER_INTEGER_DEPENDENCIES) $(EXTRA_check_32_PER_INTEGER_DEPENDENCIES) 
+       @rm -f check-32-PER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_INTEGER_LINK) $(check_32_PER_INTEGER_OBJECTS) $(check_32_PER_INTEGER_LDADD) $(LIBS)
+
+check-32-PER-UniversalString$(EXEEXT): $(check_32_PER_UniversalString_OBJECTS) $(check_32_PER_UniversalString_DEPENDENCIES) $(EXTRA_check_32_PER_UniversalString_DEPENDENCIES) 
+       @rm -f check-32-PER-UniversalString$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_UniversalString_LINK) $(check_32_PER_UniversalString_OBJECTS) $(check_32_PER_UniversalString_LDADD) $(LIBS)
+
+check-32-PER-support$(EXEEXT): $(check_32_PER_support_OBJECTS) $(check_32_PER_support_DEPENDENCIES) $(EXTRA_check_32_PER_support_DEPENDENCIES) 
+       @rm -f check-32-PER-support$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_PER_support_LINK) $(check_32_PER_support_OBJECTS) $(check_32_PER_support_LDADD) $(LIBS)
+
+check-32-REAL$(EXEEXT): $(check_32_REAL_OBJECTS) $(check_32_REAL_DEPENDENCIES) $(EXTRA_check_32_REAL_DEPENDENCIES) 
+       @rm -f check-32-REAL$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_REAL_LINK) $(check_32_REAL_OBJECTS) $(check_32_REAL_LDADD) $(LIBS)
+
+check-32-UTCTime$(EXEEXT): $(check_32_UTCTime_OBJECTS) $(check_32_UTCTime_DEPENDENCIES) $(EXTRA_check_32_UTCTime_DEPENDENCIES) 
+       @rm -f check-32-UTCTime$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_UTCTime_LINK) $(check_32_UTCTime_OBJECTS) $(check_32_UTCTime_LDADD) $(LIBS)
+
+check-32-UTF8String$(EXEEXT): $(check_32_UTF8String_OBJECTS) $(check_32_UTF8String_DEPENDENCIES) $(EXTRA_check_32_UTF8String_DEPENDENCIES) 
+       @rm -f check-32-UTF8String$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_UTF8String_LINK) $(check_32_UTF8String_OBJECTS) $(check_32_UTF8String_LDADD) $(LIBS)
+
+check-32-XER$(EXEEXT): $(check_32_XER_OBJECTS) $(check_32_XER_DEPENDENCIES) $(EXTRA_check_32_XER_DEPENDENCIES) 
+       @rm -f check-32-XER$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_XER_LINK) $(check_32_XER_OBJECTS) $(check_32_XER_LDADD) $(LIBS)
+
+check-32-ber_tlv_tag$(EXEEXT): $(check_32_ber_tlv_tag_OBJECTS) $(check_32_ber_tlv_tag_DEPENDENCIES) $(EXTRA_check_32_ber_tlv_tag_DEPENDENCIES) 
+       @rm -f check-32-ber_tlv_tag$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_ber_tlv_tag_LINK) $(check_32_ber_tlv_tag_OBJECTS) $(check_32_ber_tlv_tag_LDADD) $(LIBS)
+
+check-32-bits$(EXEEXT): $(check_32_bits_OBJECTS) $(check_32_bits_DEPENDENCIES) $(EXTRA_check_32_bits_DEPENDENCIES) 
+       @rm -f check-32-bits$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_bits_LINK) $(check_32_bits_OBJECTS) $(check_32_bits_LDADD) $(LIBS)
+
+check-32-length$(EXEEXT): $(check_32_length_OBJECTS) $(check_32_length_DEPENDENCIES) $(EXTRA_check_32_length_DEPENDENCIES) 
+       @rm -f check-32-length$(EXEEXT)
+       $(AM_V_CCLD)$(check_32_length_LINK) $(check_32_length_OBJECTS) $(check_32_length_LDADD) $(LIBS)
+
+check-GeneralizedTime$(EXEEXT): $(check_GeneralizedTime_OBJECTS) $(check_GeneralizedTime_DEPENDENCIES) $(EXTRA_check_GeneralizedTime_DEPENDENCIES) 
+       @rm -f check-GeneralizedTime$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_GeneralizedTime_OBJECTS) $(check_GeneralizedTime_LDADD) $(LIBS)
+
+check-INTEGER$(EXEEXT): $(check_INTEGER_OBJECTS) $(check_INTEGER_DEPENDENCIES) $(EXTRA_check_INTEGER_DEPENDENCIES) 
+       @rm -f check-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_INTEGER_OBJECTS) $(check_INTEGER_LDADD) $(LIBS)
+
+check-OCTET_STRING$(EXEEXT): $(check_OCTET_STRING_OBJECTS) $(check_OCTET_STRING_DEPENDENCIES) $(EXTRA_check_OCTET_STRING_DEPENDENCIES) 
+       @rm -f check-OCTET_STRING$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OCTET_STRING_OBJECTS) $(check_OCTET_STRING_LDADD) $(LIBS)
+
+check-OER-INTEGER$(EXEEXT): $(check_OER_INTEGER_OBJECTS) $(check_OER_INTEGER_DEPENDENCIES) $(EXTRA_check_OER_INTEGER_DEPENDENCIES) 
+       @rm -f check-OER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_INTEGER_OBJECTS) $(check_OER_INTEGER_LDADD) $(LIBS)
+
+check-OER-NativeEnumerated$(EXEEXT): $(check_OER_NativeEnumerated_OBJECTS) $(check_OER_NativeEnumerated_DEPENDENCIES) $(EXTRA_check_OER_NativeEnumerated_DEPENDENCIES) 
+       @rm -f check-OER-NativeEnumerated$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_NativeEnumerated_OBJECTS) $(check_OER_NativeEnumerated_LDADD) $(LIBS)
+
+check-OER-support$(EXEEXT): $(check_OER_support_OBJECTS) $(check_OER_support_DEPENDENCIES) $(EXTRA_check_OER_support_DEPENDENCIES) 
+       @rm -f check-OER-support$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OER_support_OBJECTS) $(check_OER_support_LDADD) $(LIBS)
+
+check-OIDs$(EXEEXT): $(check_OIDs_OBJECTS) $(check_OIDs_DEPENDENCIES) $(EXTRA_check_OIDs_DEPENDENCIES) 
+       @rm -f check-OIDs$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_OIDs_OBJECTS) $(check_OIDs_LDADD) $(LIBS)
+
+check-PER-INTEGER$(EXEEXT): $(check_PER_INTEGER_OBJECTS) $(check_PER_INTEGER_DEPENDENCIES) $(EXTRA_check_PER_INTEGER_DEPENDENCIES) 
+       @rm -f check-PER-INTEGER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_INTEGER_OBJECTS) $(check_PER_INTEGER_LDADD) $(LIBS)
+
+check-PER-UniversalString$(EXEEXT): $(check_PER_UniversalString_OBJECTS) $(check_PER_UniversalString_DEPENDENCIES) $(EXTRA_check_PER_UniversalString_DEPENDENCIES) 
+       @rm -f check-PER-UniversalString$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_UniversalString_OBJECTS) $(check_PER_UniversalString_LDADD) $(LIBS)
+
+check-PER-support$(EXEEXT): $(check_PER_support_OBJECTS) $(check_PER_support_DEPENDENCIES) $(EXTRA_check_PER_support_DEPENDENCIES) 
+       @rm -f check-PER-support$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_PER_support_OBJECTS) $(check_PER_support_LDADD) $(LIBS)
+
+check-REAL$(EXEEXT): $(check_REAL_OBJECTS) $(check_REAL_DEPENDENCIES) $(EXTRA_check_REAL_DEPENDENCIES) 
+       @rm -f check-REAL$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_REAL_OBJECTS) $(check_REAL_LDADD) $(LIBS)
+
+check-UTCTime$(EXEEXT): $(check_UTCTime_OBJECTS) $(check_UTCTime_DEPENDENCIES) $(EXTRA_check_UTCTime_DEPENDENCIES) 
+       @rm -f check-UTCTime$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_UTCTime_OBJECTS) $(check_UTCTime_LDADD) $(LIBS)
+
+check-UTF8String$(EXEEXT): $(check_UTF8String_OBJECTS) $(check_UTF8String_DEPENDENCIES) $(EXTRA_check_UTF8String_DEPENDENCIES) 
+       @rm -f check-UTF8String$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_UTF8String_OBJECTS) $(check_UTF8String_LDADD) $(LIBS)
+
+check-XER$(EXEEXT): $(check_XER_OBJECTS) $(check_XER_DEPENDENCIES) $(EXTRA_check_XER_DEPENDENCIES) 
+       @rm -f check-XER$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_XER_OBJECTS) $(check_XER_LDADD) $(LIBS)
+
+check-ber_tlv_tag$(EXEEXT): $(check_ber_tlv_tag_OBJECTS) $(check_ber_tlv_tag_DEPENDENCIES) $(EXTRA_check_ber_tlv_tag_DEPENDENCIES) 
+       @rm -f check-ber_tlv_tag$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_ber_tlv_tag_OBJECTS) $(check_ber_tlv_tag_LDADD) $(LIBS)
+
+check-bits$(EXEEXT): $(check_bits_OBJECTS) $(check_bits_DEPENDENCIES) $(EXTRA_check_bits_DEPENDENCIES) 
+       @rm -f check-bits$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_bits_OBJECTS) $(check_bits_LDADD) $(LIBS)
+
+check-length$(EXEEXT): $(check_length_OBJECTS) $(check_length_DEPENDENCIES) $(EXTRA_check_length_DEPENDENCIES) 
+       @rm -f check-length$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(check_length_OBJECTS) $(check_length_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-GeneralizedTime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-OCTET_STRING.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-OER-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-OER-NativeEnumerated.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-OER-support.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-OIDs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-PER-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-PER-UniversalString.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-PER-support.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-REAL.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-UTCTime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-UTF8String.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-XER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-ber_tlv_tag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-bits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check-length.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_INTEGER-check-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_OER_support-check-OER-support.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_OIDs-check-OIDs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_PER_support-check-PER-support.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_REAL-check-REAL.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_UTCTime-check-UTCTime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_UTF8String-check-UTF8String.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_XER-check-XER.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_bits-check-bits.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_32_length-check-length.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+check_32_GeneralizedTime-check-GeneralizedTime.o: check-GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -MT check_32_GeneralizedTime-check-GeneralizedTime.o -MD -MP -MF $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo -c -o check_32_GeneralizedTime-check-GeneralizedTime.o `test -f 'check-GeneralizedTime.c' || echo '$(srcdir)/'`check-GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-GeneralizedTime.c' object='check_32_GeneralizedTime-check-GeneralizedTime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -c -o check_32_GeneralizedTime-check-GeneralizedTime.o `test -f 'check-GeneralizedTime.c' || echo '$(srcdir)/'`check-GeneralizedTime.c
+
+check_32_GeneralizedTime-check-GeneralizedTime.obj: check-GeneralizedTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -MT check_32_GeneralizedTime-check-GeneralizedTime.obj -MD -MP -MF $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo -c -o check_32_GeneralizedTime-check-GeneralizedTime.obj `if test -f 'check-GeneralizedTime.c'; then $(CYGPATH_W) 'check-GeneralizedTime.c'; else $(CYGPATH_W) '$(srcdir)/check-GeneralizedTime.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Tpo $(DEPDIR)/check_32_GeneralizedTime-check-GeneralizedTime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-GeneralizedTime.c' object='check_32_GeneralizedTime-check-GeneralizedTime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_GeneralizedTime_CFLAGS) $(CFLAGS) -c -o check_32_GeneralizedTime-check-GeneralizedTime.obj `if test -f 'check-GeneralizedTime.c'; then $(CYGPATH_W) 'check-GeneralizedTime.c'; else $(CYGPATH_W) '$(srcdir)/check-GeneralizedTime.c'; fi`
+
+check_32_INTEGER-check-INTEGER.o: check-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_INTEGER-check-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo -c -o check_32_INTEGER-check-INTEGER.o `test -f 'check-INTEGER.c' || echo '$(srcdir)/'`check-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo $(DEPDIR)/check_32_INTEGER-check-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-INTEGER.c' object='check_32_INTEGER-check-INTEGER.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_INTEGER-check-INTEGER.o `test -f 'check-INTEGER.c' || echo '$(srcdir)/'`check-INTEGER.c
+
+check_32_INTEGER-check-INTEGER.obj: check-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_INTEGER-check-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo -c -o check_32_INTEGER-check-INTEGER.obj `if test -f 'check-INTEGER.c'; then $(CYGPATH_W) 'check-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-INTEGER.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_INTEGER-check-INTEGER.Tpo $(DEPDIR)/check_32_INTEGER-check-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-INTEGER.c' object='check_32_INTEGER-check-INTEGER.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_INTEGER-check-INTEGER.obj `if test -f 'check-INTEGER.c'; then $(CYGPATH_W) 'check-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-INTEGER.c'; fi`
+
+check_32_OCTET_STRING-check-OCTET_STRING.o: check-OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -MT check_32_OCTET_STRING-check-OCTET_STRING.o -MD -MP -MF $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo -c -o check_32_OCTET_STRING-check-OCTET_STRING.o `test -f 'check-OCTET_STRING.c' || echo '$(srcdir)/'`check-OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OCTET_STRING.c' object='check_32_OCTET_STRING-check-OCTET_STRING.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -c -o check_32_OCTET_STRING-check-OCTET_STRING.o `test -f 'check-OCTET_STRING.c' || echo '$(srcdir)/'`check-OCTET_STRING.c
+
+check_32_OCTET_STRING-check-OCTET_STRING.obj: check-OCTET_STRING.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -MT check_32_OCTET_STRING-check-OCTET_STRING.obj -MD -MP -MF $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo -c -o check_32_OCTET_STRING-check-OCTET_STRING.obj `if test -f 'check-OCTET_STRING.c'; then $(CYGPATH_W) 'check-OCTET_STRING.c'; else $(CYGPATH_W) '$(srcdir)/check-OCTET_STRING.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Tpo $(DEPDIR)/check_32_OCTET_STRING-check-OCTET_STRING.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OCTET_STRING.c' object='check_32_OCTET_STRING-check-OCTET_STRING.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OCTET_STRING_CFLAGS) $(CFLAGS) -c -o check_32_OCTET_STRING-check-OCTET_STRING.obj `if test -f 'check-OCTET_STRING.c'; then $(CYGPATH_W) 'check-OCTET_STRING.c'; else $(CYGPATH_W) '$(srcdir)/check-OCTET_STRING.c'; fi`
+
+check_32_OER_INTEGER-check-OER-INTEGER.o: check-OER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_OER_INTEGER-check-OER-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo -c -o check_32_OER_INTEGER-check-OER-INTEGER.o `test -f 'check-OER-INTEGER.c' || echo '$(srcdir)/'`check-OER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-INTEGER.c' object='check_32_OER_INTEGER-check-OER-INTEGER.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_OER_INTEGER-check-OER-INTEGER.o `test -f 'check-OER-INTEGER.c' || echo '$(srcdir)/'`check-OER-INTEGER.c
+
+check_32_OER_INTEGER-check-OER-INTEGER.obj: check-OER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_OER_INTEGER-check-OER-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo -c -o check_32_OER_INTEGER-check-OER-INTEGER.obj `if test -f 'check-OER-INTEGER.c'; then $(CYGPATH_W) 'check-OER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-INTEGER.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Tpo $(DEPDIR)/check_32_OER_INTEGER-check-OER-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-INTEGER.c' object='check_32_OER_INTEGER-check-OER-INTEGER.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_OER_INTEGER-check-OER-INTEGER.obj `if test -f 'check-OER-INTEGER.c'; then $(CYGPATH_W) 'check-OER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-INTEGER.c'; fi`
+
+check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o: check-OER-NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -MT check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o -MD -MP -MF $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o `test -f 'check-OER-NativeEnumerated.c' || echo '$(srcdir)/'`check-OER-NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-NativeEnumerated.c' object='check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.o `test -f 'check-OER-NativeEnumerated.c' || echo '$(srcdir)/'`check-OER-NativeEnumerated.c
+
+check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj: check-OER-NativeEnumerated.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -MT check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj -MD -MP -MF $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj `if test -f 'check-OER-NativeEnumerated.c'; then $(CYGPATH_W) 'check-OER-NativeEnumerated.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-NativeEnumerated.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Tpo $(DEPDIR)/check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-NativeEnumerated.c' object='check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_NativeEnumerated_CFLAGS) $(CFLAGS) -c -o check_32_OER_NativeEnumerated-check-OER-NativeEnumerated.obj `if test -f 'check-OER-NativeEnumerated.c'; then $(CYGPATH_W) 'check-OER-NativeEnumerated.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-NativeEnumerated.c'; fi`
+
+check_32_OER_support-check-OER-support.o: check-OER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -MT check_32_OER_support-check-OER-support.o -MD -MP -MF $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo -c -o check_32_OER_support-check-OER-support.o `test -f 'check-OER-support.c' || echo '$(srcdir)/'`check-OER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo $(DEPDIR)/check_32_OER_support-check-OER-support.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-support.c' object='check_32_OER_support-check-OER-support.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -c -o check_32_OER_support-check-OER-support.o `test -f 'check-OER-support.c' || echo '$(srcdir)/'`check-OER-support.c
+
+check_32_OER_support-check-OER-support.obj: check-OER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -MT check_32_OER_support-check-OER-support.obj -MD -MP -MF $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo -c -o check_32_OER_support-check-OER-support.obj `if test -f 'check-OER-support.c'; then $(CYGPATH_W) 'check-OER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-support.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OER_support-check-OER-support.Tpo $(DEPDIR)/check_32_OER_support-check-OER-support.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OER-support.c' object='check_32_OER_support-check-OER-support.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OER_support_CFLAGS) $(CFLAGS) -c -o check_32_OER_support-check-OER-support.obj `if test -f 'check-OER-support.c'; then $(CYGPATH_W) 'check-OER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-OER-support.c'; fi`
+
+check_32_OIDs-check-OIDs.o: check-OIDs.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -MT check_32_OIDs-check-OIDs.o -MD -MP -MF $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo -c -o check_32_OIDs-check-OIDs.o `test -f 'check-OIDs.c' || echo '$(srcdir)/'`check-OIDs.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo $(DEPDIR)/check_32_OIDs-check-OIDs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OIDs.c' object='check_32_OIDs-check-OIDs.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -c -o check_32_OIDs-check-OIDs.o `test -f 'check-OIDs.c' || echo '$(srcdir)/'`check-OIDs.c
+
+check_32_OIDs-check-OIDs.obj: check-OIDs.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -MT check_32_OIDs-check-OIDs.obj -MD -MP -MF $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo -c -o check_32_OIDs-check-OIDs.obj `if test -f 'check-OIDs.c'; then $(CYGPATH_W) 'check-OIDs.c'; else $(CYGPATH_W) '$(srcdir)/check-OIDs.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_OIDs-check-OIDs.Tpo $(DEPDIR)/check_32_OIDs-check-OIDs.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-OIDs.c' object='check_32_OIDs-check-OIDs.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_OIDs_CFLAGS) $(CFLAGS) -c -o check_32_OIDs-check-OIDs.obj `if test -f 'check-OIDs.c'; then $(CYGPATH_W) 'check-OIDs.c'; else $(CYGPATH_W) '$(srcdir)/check-OIDs.c'; fi`
+
+check_32_PER_INTEGER-check-PER-INTEGER.o: check-PER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_PER_INTEGER-check-PER-INTEGER.o -MD -MP -MF $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo -c -o check_32_PER_INTEGER-check-PER-INTEGER.o `test -f 'check-PER-INTEGER.c' || echo '$(srcdir)/'`check-PER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-INTEGER.c' object='check_32_PER_INTEGER-check-PER-INTEGER.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_PER_INTEGER-check-PER-INTEGER.o `test -f 'check-PER-INTEGER.c' || echo '$(srcdir)/'`check-PER-INTEGER.c
+
+check_32_PER_INTEGER-check-PER-INTEGER.obj: check-PER-INTEGER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -MT check_32_PER_INTEGER-check-PER-INTEGER.obj -MD -MP -MF $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo -c -o check_32_PER_INTEGER-check-PER-INTEGER.obj `if test -f 'check-PER-INTEGER.c'; then $(CYGPATH_W) 'check-PER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-INTEGER.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Tpo $(DEPDIR)/check_32_PER_INTEGER-check-PER-INTEGER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-INTEGER.c' object='check_32_PER_INTEGER-check-PER-INTEGER.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_INTEGER_CFLAGS) $(CFLAGS) -c -o check_32_PER_INTEGER-check-PER-INTEGER.obj `if test -f 'check-PER-INTEGER.c'; then $(CYGPATH_W) 'check-PER-INTEGER.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-INTEGER.c'; fi`
+
+check_32_PER_UniversalString-check-PER-UniversalString.o: check-PER-UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -MT check_32_PER_UniversalString-check-PER-UniversalString.o -MD -MP -MF $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo -c -o check_32_PER_UniversalString-check-PER-UniversalString.o `test -f 'check-PER-UniversalString.c' || echo '$(srcdir)/'`check-PER-UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-UniversalString.c' object='check_32_PER_UniversalString-check-PER-UniversalString.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -c -o check_32_PER_UniversalString-check-PER-UniversalString.o `test -f 'check-PER-UniversalString.c' || echo '$(srcdir)/'`check-PER-UniversalString.c
+
+check_32_PER_UniversalString-check-PER-UniversalString.obj: check-PER-UniversalString.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -MT check_32_PER_UniversalString-check-PER-UniversalString.obj -MD -MP -MF $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo -c -o check_32_PER_UniversalString-check-PER-UniversalString.obj `if test -f 'check-PER-UniversalString.c'; then $(CYGPATH_W) 'check-PER-UniversalString.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-UniversalString.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Tpo $(DEPDIR)/check_32_PER_UniversalString-check-PER-UniversalString.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-UniversalString.c' object='check_32_PER_UniversalString-check-PER-UniversalString.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_UniversalString_CFLAGS) $(CFLAGS) -c -o check_32_PER_UniversalString-check-PER-UniversalString.obj `if test -f 'check-PER-UniversalString.c'; then $(CYGPATH_W) 'check-PER-UniversalString.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-UniversalString.c'; fi`
+
+check_32_PER_support-check-PER-support.o: check-PER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -MT check_32_PER_support-check-PER-support.o -MD -MP -MF $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo -c -o check_32_PER_support-check-PER-support.o `test -f 'check-PER-support.c' || echo '$(srcdir)/'`check-PER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo $(DEPDIR)/check_32_PER_support-check-PER-support.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-support.c' object='check_32_PER_support-check-PER-support.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -c -o check_32_PER_support-check-PER-support.o `test -f 'check-PER-support.c' || echo '$(srcdir)/'`check-PER-support.c
+
+check_32_PER_support-check-PER-support.obj: check-PER-support.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -MT check_32_PER_support-check-PER-support.obj -MD -MP -MF $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo -c -o check_32_PER_support-check-PER-support.obj `if test -f 'check-PER-support.c'; then $(CYGPATH_W) 'check-PER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-support.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_PER_support-check-PER-support.Tpo $(DEPDIR)/check_32_PER_support-check-PER-support.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-PER-support.c' object='check_32_PER_support-check-PER-support.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_PER_support_CFLAGS) $(CFLAGS) -c -o check_32_PER_support-check-PER-support.obj `if test -f 'check-PER-support.c'; then $(CYGPATH_W) 'check-PER-support.c'; else $(CYGPATH_W) '$(srcdir)/check-PER-support.c'; fi`
+
+check_32_REAL-check-REAL.o: check-REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -MT check_32_REAL-check-REAL.o -MD -MP -MF $(DEPDIR)/check_32_REAL-check-REAL.Tpo -c -o check_32_REAL-check-REAL.o `test -f 'check-REAL.c' || echo '$(srcdir)/'`check-REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_REAL-check-REAL.Tpo $(DEPDIR)/check_32_REAL-check-REAL.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-REAL.c' object='check_32_REAL-check-REAL.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -c -o check_32_REAL-check-REAL.o `test -f 'check-REAL.c' || echo '$(srcdir)/'`check-REAL.c
+
+check_32_REAL-check-REAL.obj: check-REAL.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -MT check_32_REAL-check-REAL.obj -MD -MP -MF $(DEPDIR)/check_32_REAL-check-REAL.Tpo -c -o check_32_REAL-check-REAL.obj `if test -f 'check-REAL.c'; then $(CYGPATH_W) 'check-REAL.c'; else $(CYGPATH_W) '$(srcdir)/check-REAL.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_REAL-check-REAL.Tpo $(DEPDIR)/check_32_REAL-check-REAL.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-REAL.c' object='check_32_REAL-check-REAL.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_REAL_CFLAGS) $(CFLAGS) -c -o check_32_REAL-check-REAL.obj `if test -f 'check-REAL.c'; then $(CYGPATH_W) 'check-REAL.c'; else $(CYGPATH_W) '$(srcdir)/check-REAL.c'; fi`
+
+check_32_UTCTime-check-UTCTime.o: check-UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -MT check_32_UTCTime-check-UTCTime.o -MD -MP -MF $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo -c -o check_32_UTCTime-check-UTCTime.o `test -f 'check-UTCTime.c' || echo '$(srcdir)/'`check-UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo $(DEPDIR)/check_32_UTCTime-check-UTCTime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-UTCTime.c' object='check_32_UTCTime-check-UTCTime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -c -o check_32_UTCTime-check-UTCTime.o `test -f 'check-UTCTime.c' || echo '$(srcdir)/'`check-UTCTime.c
+
+check_32_UTCTime-check-UTCTime.obj: check-UTCTime.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -MT check_32_UTCTime-check-UTCTime.obj -MD -MP -MF $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo -c -o check_32_UTCTime-check-UTCTime.obj `if test -f 'check-UTCTime.c'; then $(CYGPATH_W) 'check-UTCTime.c'; else $(CYGPATH_W) '$(srcdir)/check-UTCTime.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTCTime-check-UTCTime.Tpo $(DEPDIR)/check_32_UTCTime-check-UTCTime.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-UTCTime.c' object='check_32_UTCTime-check-UTCTime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTCTime_CFLAGS) $(CFLAGS) -c -o check_32_UTCTime-check-UTCTime.obj `if test -f 'check-UTCTime.c'; then $(CYGPATH_W) 'check-UTCTime.c'; else $(CYGPATH_W) '$(srcdir)/check-UTCTime.c'; fi`
+
+check_32_UTF8String-check-UTF8String.o: check-UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -MT check_32_UTF8String-check-UTF8String.o -MD -MP -MF $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo -c -o check_32_UTF8String-check-UTF8String.o `test -f 'check-UTF8String.c' || echo '$(srcdir)/'`check-UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo $(DEPDIR)/check_32_UTF8String-check-UTF8String.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-UTF8String.c' object='check_32_UTF8String-check-UTF8String.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -c -o check_32_UTF8String-check-UTF8String.o `test -f 'check-UTF8String.c' || echo '$(srcdir)/'`check-UTF8String.c
+
+check_32_UTF8String-check-UTF8String.obj: check-UTF8String.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -MT check_32_UTF8String-check-UTF8String.obj -MD -MP -MF $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo -c -o check_32_UTF8String-check-UTF8String.obj `if test -f 'check-UTF8String.c'; then $(CYGPATH_W) 'check-UTF8String.c'; else $(CYGPATH_W) '$(srcdir)/check-UTF8String.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_UTF8String-check-UTF8String.Tpo $(DEPDIR)/check_32_UTF8String-check-UTF8String.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-UTF8String.c' object='check_32_UTF8String-check-UTF8String.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_UTF8String_CFLAGS) $(CFLAGS) -c -o check_32_UTF8String-check-UTF8String.obj `if test -f 'check-UTF8String.c'; then $(CYGPATH_W) 'check-UTF8String.c'; else $(CYGPATH_W) '$(srcdir)/check-UTF8String.c'; fi`
+
+check_32_XER-check-XER.o: check-XER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -MT check_32_XER-check-XER.o -MD -MP -MF $(DEPDIR)/check_32_XER-check-XER.Tpo -c -o check_32_XER-check-XER.o `test -f 'check-XER.c' || echo '$(srcdir)/'`check-XER.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_XER-check-XER.Tpo $(DEPDIR)/check_32_XER-check-XER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-XER.c' object='check_32_XER-check-XER.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -c -o check_32_XER-check-XER.o `test -f 'check-XER.c' || echo '$(srcdir)/'`check-XER.c
+
+check_32_XER-check-XER.obj: check-XER.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -MT check_32_XER-check-XER.obj -MD -MP -MF $(DEPDIR)/check_32_XER-check-XER.Tpo -c -o check_32_XER-check-XER.obj `if test -f 'check-XER.c'; then $(CYGPATH_W) 'check-XER.c'; else $(CYGPATH_W) '$(srcdir)/check-XER.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_XER-check-XER.Tpo $(DEPDIR)/check_32_XER-check-XER.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-XER.c' object='check_32_XER-check-XER.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_XER_CFLAGS) $(CFLAGS) -c -o check_32_XER-check-XER.obj `if test -f 'check-XER.c'; then $(CYGPATH_W) 'check-XER.c'; else $(CYGPATH_W) '$(srcdir)/check-XER.c'; fi`
+
+check_32_ber_tlv_tag-check-ber_tlv_tag.o: check-ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -MT check_32_ber_tlv_tag-check-ber_tlv_tag.o -MD -MP -MF $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.o `test -f 'check-ber_tlv_tag.c' || echo '$(srcdir)/'`check-ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-ber_tlv_tag.c' object='check_32_ber_tlv_tag-check-ber_tlv_tag.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.o `test -f 'check-ber_tlv_tag.c' || echo '$(srcdir)/'`check-ber_tlv_tag.c
+
+check_32_ber_tlv_tag-check-ber_tlv_tag.obj: check-ber_tlv_tag.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -MT check_32_ber_tlv_tag-check-ber_tlv_tag.obj -MD -MP -MF $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.obj `if test -f 'check-ber_tlv_tag.c'; then $(CYGPATH_W) 'check-ber_tlv_tag.c'; else $(CYGPATH_W) '$(srcdir)/check-ber_tlv_tag.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Tpo $(DEPDIR)/check_32_ber_tlv_tag-check-ber_tlv_tag.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-ber_tlv_tag.c' object='check_32_ber_tlv_tag-check-ber_tlv_tag.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_ber_tlv_tag_CFLAGS) $(CFLAGS) -c -o check_32_ber_tlv_tag-check-ber_tlv_tag.obj `if test -f 'check-ber_tlv_tag.c'; then $(CYGPATH_W) 'check-ber_tlv_tag.c'; else $(CYGPATH_W) '$(srcdir)/check-ber_tlv_tag.c'; fi`
+
+check_32_bits-check-bits.o: check-bits.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -MT check_32_bits-check-bits.o -MD -MP -MF $(DEPDIR)/check_32_bits-check-bits.Tpo -c -o check_32_bits-check-bits.o `test -f 'check-bits.c' || echo '$(srcdir)/'`check-bits.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_bits-check-bits.Tpo $(DEPDIR)/check_32_bits-check-bits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-bits.c' object='check_32_bits-check-bits.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -c -o check_32_bits-check-bits.o `test -f 'check-bits.c' || echo '$(srcdir)/'`check-bits.c
+
+check_32_bits-check-bits.obj: check-bits.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -MT check_32_bits-check-bits.obj -MD -MP -MF $(DEPDIR)/check_32_bits-check-bits.Tpo -c -o check_32_bits-check-bits.obj `if test -f 'check-bits.c'; then $(CYGPATH_W) 'check-bits.c'; else $(CYGPATH_W) '$(srcdir)/check-bits.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_bits-check-bits.Tpo $(DEPDIR)/check_32_bits-check-bits.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-bits.c' object='check_32_bits-check-bits.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_bits_CFLAGS) $(CFLAGS) -c -o check_32_bits-check-bits.obj `if test -f 'check-bits.c'; then $(CYGPATH_W) 'check-bits.c'; else $(CYGPATH_W) '$(srcdir)/check-bits.c'; fi`
+
+check_32_length-check-length.o: check-length.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -MT check_32_length-check-length.o -MD -MP -MF $(DEPDIR)/check_32_length-check-length.Tpo -c -o check_32_length-check-length.o `test -f 'check-length.c' || echo '$(srcdir)/'`check-length.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_length-check-length.Tpo $(DEPDIR)/check_32_length-check-length.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-length.c' object='check_32_length-check-length.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -c -o check_32_length-check-length.o `test -f 'check-length.c' || echo '$(srcdir)/'`check-length.c
+
+check_32_length-check-length.obj: check-length.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -MT check_32_length-check-length.obj -MD -MP -MF $(DEPDIR)/check_32_length-check-length.Tpo -c -o check_32_length-check-length.obj `if test -f 'check-length.c'; then $(CYGPATH_W) 'check-length.c'; else $(CYGPATH_W) '$(srcdir)/check-length.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/check_32_length-check-length.Tpo $(DEPDIR)/check_32_length-check-length.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='check-length.c' object='check_32_length-check-length.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(check_32_length_CFLAGS) $(CFLAGS) -c -o check_32_length-check-length.obj `if test -f 'check-length.c'; then $(CYGPATH_W) 'check-length.c'; else $(CYGPATH_W) '$(srcdir)/check-length.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-ber_tlv_tag.log: check-ber_tlv_tag$(EXEEXT)
+       @p='check-ber_tlv_tag$(EXEEXT)'; \
+       b='check-ber_tlv_tag'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-length.log: check-length$(EXEEXT)
+       @p='check-length$(EXEEXT)'; \
+       b='check-length'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-bits.log: check-bits$(EXEEXT)
+       @p='check-bits$(EXEEXT)'; \
+       b='check-bits'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OIDs.log: check-OIDs$(EXEEXT)
+       @p='check-OIDs$(EXEEXT)'; \
+       b='check-OIDs'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-GeneralizedTime.log: check-GeneralizedTime$(EXEEXT)
+       @p='check-GeneralizedTime$(EXEEXT)'; \
+       b='check-GeneralizedTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OCTET_STRING.log: check-OCTET_STRING$(EXEEXT)
+       @p='check-OCTET_STRING$(EXEEXT)'; \
+       b='check-OCTET_STRING'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-UTF8String.log: check-UTF8String$(EXEEXT)
+       @p='check-UTF8String$(EXEEXT)'; \
+       b='check-UTF8String'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-UTCTime.log: check-UTCTime$(EXEEXT)
+       @p='check-UTCTime$(EXEEXT)'; \
+       b='check-UTCTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-INTEGER.log: check-INTEGER$(EXEEXT)
+       @p='check-INTEGER$(EXEEXT)'; \
+       b='check-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-REAL.log: check-REAL$(EXEEXT)
+       @p='check-REAL$(EXEEXT)'; \
+       b='check-REAL'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-XER.log: check-XER$(EXEEXT)
+       @p='check-XER$(EXEEXT)'; \
+       b='check-XER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-support.log: check-OER-support$(EXEEXT)
+       @p='check-OER-support$(EXEEXT)'; \
+       b='check-OER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-INTEGER.log: check-OER-INTEGER$(EXEEXT)
+       @p='check-OER-INTEGER$(EXEEXT)'; \
+       b='check-OER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-OER-NativeEnumerated.log: check-OER-NativeEnumerated$(EXEEXT)
+       @p='check-OER-NativeEnumerated$(EXEEXT)'; \
+       b='check-OER-NativeEnumerated'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-support.log: check-PER-support$(EXEEXT)
+       @p='check-PER-support$(EXEEXT)'; \
+       b='check-PER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-UniversalString.log: check-PER-UniversalString$(EXEEXT)
+       @p='check-PER-UniversalString$(EXEEXT)'; \
+       b='check-PER-UniversalString'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-PER-INTEGER.log: check-PER-INTEGER$(EXEEXT)
+       @p='check-PER-INTEGER$(EXEEXT)'; \
+       b='check-PER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-ber_tlv_tag.log: check-32-ber_tlv_tag$(EXEEXT)
+       @p='check-32-ber_tlv_tag$(EXEEXT)'; \
+       b='check-32-ber_tlv_tag'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-length.log: check-32-length$(EXEEXT)
+       @p='check-32-length$(EXEEXT)'; \
+       b='check-32-length'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-bits.log: check-32-bits$(EXEEXT)
+       @p='check-32-bits$(EXEEXT)'; \
+       b='check-32-bits'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OIDs.log: check-32-OIDs$(EXEEXT)
+       @p='check-32-OIDs$(EXEEXT)'; \
+       b='check-32-OIDs'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-GeneralizedTime.log: check-32-GeneralizedTime$(EXEEXT)
+       @p='check-32-GeneralizedTime$(EXEEXT)'; \
+       b='check-32-GeneralizedTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OCTET_STRING.log: check-32-OCTET_STRING$(EXEEXT)
+       @p='check-32-OCTET_STRING$(EXEEXT)'; \
+       b='check-32-OCTET_STRING'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-UTF8String.log: check-32-UTF8String$(EXEEXT)
+       @p='check-32-UTF8String$(EXEEXT)'; \
+       b='check-32-UTF8String'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-UTCTime.log: check-32-UTCTime$(EXEEXT)
+       @p='check-32-UTCTime$(EXEEXT)'; \
+       b='check-32-UTCTime'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-INTEGER.log: check-32-INTEGER$(EXEEXT)
+       @p='check-32-INTEGER$(EXEEXT)'; \
+       b='check-32-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-REAL.log: check-32-REAL$(EXEEXT)
+       @p='check-32-REAL$(EXEEXT)'; \
+       b='check-32-REAL'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-XER.log: check-32-XER$(EXEEXT)
+       @p='check-32-XER$(EXEEXT)'; \
+       b='check-32-XER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-support.log: check-32-OER-support$(EXEEXT)
+       @p='check-32-OER-support$(EXEEXT)'; \
+       b='check-32-OER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-INTEGER.log: check-32-OER-INTEGER$(EXEEXT)
+       @p='check-32-OER-INTEGER$(EXEEXT)'; \
+       b='check-32-OER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-OER-NativeEnumerated.log: check-32-OER-NativeEnumerated$(EXEEXT)
+       @p='check-32-OER-NativeEnumerated$(EXEEXT)'; \
+       b='check-32-OER-NativeEnumerated'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-support.log: check-32-PER-support$(EXEEXT)
+       @p='check-32-PER-support$(EXEEXT)'; \
+       b='check-32-PER-support'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-UniversalString.log: check-32-PER-UniversalString$(EXEEXT)
+       @p='check-32-PER-UniversalString$(EXEEXT)'; \
+       b='check-32-PER-UniversalString'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-32-PER-INTEGER.log: check-32-PER-INTEGER$(EXEEXT)
+       @p='check-32-PER-INTEGER$(EXEEXT)'; \
+       b='check-32-PER-INTEGER'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+       @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
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+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:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+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)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+@CODE_COVERAGE_RULES@
+
+# 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:
diff --git a/tests/tests-skeletons/check-GeneralizedTime.c b/tests/tests-skeletons/check-GeneralizedTime.c
new file mode 100644 (file)
index 0000000..8cbf613
--- /dev/null
@@ -0,0 +1,295 @@
+#include <stdio.h>
+#include <assert.h>
+#include <time.h>
+
+#include <GeneralizedTime.c>
+#include <math.h>      /* for pow(3) */
+
+static void
+recognize(char *time_str, time_t expect, int as_gmt) {
+       GeneralizedTime_t gt;
+       struct tm tm;
+       time_t tloc;
+       int fv, fp;
+
+       gt.buf = (uint8_t *)time_str;
+       gt.size = strlen(time_str);
+
+       tloc = asn_GT2time_frac(&gt, &fv, &fp, &tm, as_gmt);
+       printf("%s: [%s] -> %ld == %ld\n",
+               as_gmt?"GMT":"ofs", time_str, (long)tloc, (long)expect);
+
+       if(tloc != -1) {
+               printf("\t%04d-%02d-%02dT%02d:%02d:%02d.%f(%d/%d)%+03ld%02ld\n",
+               tm.tm_year + 1900,
+               tm.tm_mon + 1,
+               tm.tm_mday,
+               tm.tm_hour,
+               tm.tm_min,
+               tm.tm_sec,
+               (double)fv * pow(0.1, fp), fv, fp,
+               (GMTOFF(tm) / 3600),
+               labs(GMTOFF(tm) % 3600)
+               );
+       }
+       assert(tloc == expect);
+
+#ifdef HAVE_TM_GMTOFF
+       assert(tloc == -1 || as_gmt == 0 || GMTOFF(tm) == 0);
+#endif
+
+       if(!as_gmt) recognize(time_str, expect, 1);
+}
+
+static void
+encode(time_t tloc, const char *expect, int force_gmt) {
+       GeneralizedTime_t *gt;
+       struct tm tm, *tmp;
+
+       tmp = localtime_r(&tloc, &tm);
+       assert(tmp);
+
+       gt = asn_time2GT(0, &tm, force_gmt);
+       if(gt) {
+               assert(expect);
+               printf("[%s] vs [%s] (%d)\n",
+                       gt->buf, expect, force_gmt);
+               assert(gt->size == strlen((char *)gt->buf));
+               assert(!strcmp((char *)gt->buf, expect));
+       } else {
+               assert(!expect);
+       }
+       ASN_STRUCT_FREE(asn_DEF_GeneralizedTime, gt);
+}
+
+#define        RECODE(foo, bar)        recode(__LINE__, foo, bar)
+
+static void
+recode(int lineno, char *time_str, const char *expect) {
+       int frac_value, frac_digits;
+       GeneralizedTime_t gt;
+       struct tm tm;
+       time_t tloc;
+       char *tz;
+
+       gt.buf = (uint8_t *)time_str;
+       gt.size = strlen(time_str);
+
+       tloc = asn_GT2time_frac(&gt, &frac_value, &frac_digits, &tm, 1);
+       assert(tloc != -1);
+
+       gt.buf = 0;
+       asn_time2GT_frac(&gt, &tm, frac_value, frac_digits, 1);
+       assert(gt.buf);
+
+       tz = getenv("TZ");
+       printf("%d: [%s] (%ld) => [%s] == [%s] (%d, %d) (TZ=%s)\n",
+               lineno, time_str, (long)tloc, gt.buf,
+               expect, frac_value, frac_digits,
+               tz ? tz : "");
+
+       assert(strcmp((char *)gt.buf, expect) == 0);
+       FREEMEM(gt.buf);
+}
+
+static void
+check_fractions() {
+       GeneralizedTime_t *gt = 0;
+       struct tm tm;
+       int fv, fd;
+       time_t tloc;
+
+       memset(&tm, 0, sizeof tm);
+       tm.tm_year = 70;
+       tm.tm_mday = 1;
+
+       gt = asn_time2GT_frac(gt, &tm, -1, -1, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, 0, 0, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, 0, -1, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, -1, 0, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, 10, 0, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       /* Normalization should happen prior to calling the _frac() */
+       gt = asn_time2GT_frac(gt, &tm, 55, 2, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000.55Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, 5, 2, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000.05Z") == 0);
+
+       /* Normalization should happen prior calling the _frac() */
+       gt = asn_time2GT_frac(gt, &tm, 900, 2, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000Z") == 0);
+
+       gt = asn_time2GT_frac(gt, &tm, 90, 2, 1);
+       assert(gt);
+       printf("[%s]\n", gt->buf);
+       assert(strcmp((char *)gt->buf, "19700101000000.9Z") == 0);
+
+       tloc = asn_GT2time_prec(gt, &fv, 0, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 0);
+
+       tloc = asn_GT2time_prec(gt, &fv, 1, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 9);
+
+       tloc = asn_GT2time_prec(gt, &fv, 2, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 90);
+
+       tloc = asn_GT2time_frac(gt, &fv, &fd, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 9);
+       assert(fd == 1);
+
+       gt->buf[gt->size-1] = '0';
+       gt->buf[gt->size++] = 'Z';
+       gt->buf[gt->size] = '\0';
+
+       tloc = asn_GT2time_frac(gt, &fv, &fd, 0, 1);
+       assert(tloc == 0);
+       assert(fd == 2);
+       assert(fv == 90);
+
+       tloc = asn_GT2time_prec(gt, &fv, 1, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 9);
+
+       tloc = asn_GT2time_prec(gt, &fv, 100, 0, 1);
+       assert(tloc == 0);
+       assert(fv == 0);
+
+       FREEMEM(gt->buf);
+       FREEMEM(gt);
+}
+
+static void
+compare(int lineno, int cmp_control, const char *astr, const char *bstr) {
+    GeneralizedTime_t a = {(uint8_t *)strdup(astr), strlen(astr), {0, 0, 0, 0, 0}};
+    GeneralizedTime_t b = {(uint8_t *)strdup(bstr), strlen(bstr), {0, 0, 0, 0, 0}};
+    int cmp_result = asn_DEF_GeneralizedTime.op->compare_struct(
+        &asn_DEF_GeneralizedTime, &a, &b);
+    if(cmp_result != cmp_control) {
+        fprintf(stderr, "%03d: [%s] == [%s] = %d, expected %d\n", lineno, astr,
+                bstr, cmp_result, cmp_control);
+        assert(cmp_result == cmp_control);
+    }
+    ASN_STRUCT_RESET(asn_DEF_GeneralizedTime, &a);
+    ASN_STRUCT_RESET(asn_DEF_GeneralizedTime, &b);
+}
+
+int
+main(int ac, char **av) {
+       char *tz = getenv("TZ");
+
+       (void)av;
+
+       printf("TZ = [%s]\n", tz ? tz : "");
+
+       check_fractions();
+
+       recognize("200401250", -1, 0);
+       recognize("2004012509300", -1, 0);
+       recognize("20040125093000-", -1, 0);
+       recognize("20040125093007-0", -1, 0);
+       recognize("20040125093007-080", -1, 0);
+       recognize("200401250930.01Z", -1, 0);
+
+       /* These six are from X.690:11.7.5 */
+       recognize("19920520240000Z", -1, 0);  /* midnight represented incorrectly */
+       recognize("19920622123421.0Z", 709216461, 0);  /* spurious trailing zeros */
+       recognize("19920722132100.30Z", 711811260, 0); /* spurious trailing zeros */
+       recognize("19920521000000Z", 706406400, 0);
+       recognize("19920622123421Z", 709216461, 0);
+       recognize("19920722132100.3Z", 711811260, 0);
+
+       recognize("20040125093007Z", 1075023007, 0);
+       recognize("20040125093007+00", 1075023007, 0);
+       recognize("20040125093007.01+0000", 1075023007, 0);
+       recognize("20040125093007,1+0000", 1075023007, 0);
+       recognize("20040125093007-0800", 1075051807, 0);
+
+       recognize("19920722132100.123000123Z", 711811260, 0);
+       recognize("19920722132100.1230000123Z", 711811260, 0);
+       recognize("19920722132100.12300000123Z", 711811260, 0);
+
+       encode(1075023007, "20040125093007Z", 1);
+
+       if(ac > 1) {
+               /* These will be valid only inside PST time zone */
+               recognize("20040125093007", 1075051807, 0);
+               recognize("200401250930", 1075051800, 0);
+               recognize("20040125093000,01", 1075051800, 0);
+               recognize("20040125093000,1234", 1075051800, 0);
+
+               encode(1075023007, "20040125013007-0800", 0);
+               RECODE("20050702123312", "20050702193312Z");
+       }
+
+#if defined(sun) || defined(__sun) || defined(_sun_) || defined(__solaris__)
+       printf("Solaris does not have a decent timegm() function.\n");
+#else  /* !solaris */
+       RECODE("20050702123312Z", "20050702123312Z");
+       RECODE("20050702123312+01", "20050702113312Z");
+       RECODE("20050702123312,0+01", "20050702113312Z");
+       RECODE("20050702123312,1+01", "20050702113312.1Z");
+       RECODE("20050702123312.01+01", "20050702113312.01Z");
+       RECODE("20050702123312.00+01", "20050702113312Z");
+       RECODE("20050702123312.30+01", "20050702113312.3Z");
+       RECODE("20050702123312,30000+01", "20050702113312.3Z");
+       RECODE("20050702123312,300000000+01", "20050702113312.3Z");
+       RECODE("20050702123312.123456+01", "20050702113312.123456Z");
+       RECODE("20050702123312.1234567+01", "20050702113312.1234567Z");
+       RECODE("20050702123312.12345678+01", "20050702113312.12345678Z");
+       RECODE("20050702123312.123456789+01", "20050702113312.123456789Z");
+       RECODE("20050702123312.1234567891+01", "20050702113312.123456789Z");
+       RECODE("20050702123312.2000000000+01", "20050702113312.2Z");
+       RECODE("20050702123312.3000000000+01", "20050702113312.3Z");
+       RECODE("20050702123312.4000000000+01", "20050702113312.4Z");
+       RECODE("20050702123312.5000000000+01", "20050702113312.5Z");
+       RECODE("20050702123312.5000000011+01", "20050702113312.500000001Z");
+       RECODE("20050702123312.5000000001+01", "20050702113312.5Z");
+       RECODE("20050702123312.000000001+01", "20050702113312.000000001Z");
+       RECODE("20050702123312.0000000001Z", "20050702123312Z");
+       RECODE("20050702123312.0000000100Z", "20050702123312.00000001Z");
+       RECODE("20050702123312.0080000010+1056", "20050702013712.008000001Z");
+#endif
+
+    compare(__LINE__, 0, "20040125093007", "20040125093007");
+    compare(__LINE__, 0, "20040125093007-0000", "20040125093007Z");
+    compare(__LINE__, 1, "20040125093008", "20040125093007");
+    compare(__LINE__, 1, "20040125093008-0000", "20040125093007-0000");
+    compare(__LINE__, 0, "20040125093008-0000", "20040125093008-0000");
+    compare(__LINE__, 1, "20040125093008-0000", "20040125093007Z");
+    compare(__LINE__, 0, "20040125093007-0000", "20040125093007+0000");
+    compare(__LINE__, 1, "20040125093007-0030", "20040125093007Z");
+    compare(__LINE__, -1, "20040125093007+0030", "20040125093007Z");
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-INTEGER.c b/tests/tests-skeletons/check-INTEGER.c
new file mode 100644 (file)
index 0000000..5beff7d
--- /dev/null
@@ -0,0 +1,302 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_application.h>
+#include <INTEGER.h>
+
+#define CHECK_XER(a,b,c)        check_xer(__LINE__, a, b, c)
+
+static char *shared_scratch_start;
+
+static int _print2buf(const void *buf, size_t size, void *key) {
+       (void)key;
+       memcpy(shared_scratch_start, buf, size);
+       shared_scratch_start += size;
+       *shared_scratch_start = '\0';   /* 0-termination */
+       return 0;
+}
+
+static void
+check(uint8_t *buf, size_t size, long check_long, int check_ret) {
+       char scratch[128];
+       char verify[32];
+       INTEGER_t val;
+       uint8_t *buf_end = buf + size;
+       int ret;
+       long rlong = 123;
+
+       assert(buf);
+       assert(size > 0);
+
+       val.buf = buf;
+       val.size = size;
+
+       printf("Testing: [");
+       for(; buf < buf_end; buf++) {
+               if(buf != val.buf) printf(":");
+               printf("%02x", *buf);
+       }
+       printf("]: ");
+
+       ret = asn_INTEGER2long(&val, &rlong);
+       printf(" (%ld, %d) vs (%ld, %d)\n",
+               rlong, ret, check_long, check_ret);
+       assert(ret == check_ret);
+       printf("%ld %ld\n", rlong, check_long);
+       assert(rlong == check_long);
+
+       if(check_ret == 0) {
+               INTEGER_t val2;
+               long rlong2;
+               val2.buf = 0;
+               val2.size = 0;
+               ret = asn_long2INTEGER(&val2, rlong);
+               assert(ret == 0);
+               assert(val2.buf);
+               assert(val2.size <= val.size);  /* At least as compact */
+               ret = asn_INTEGER2long(&val, &rlong2);
+               assert(ret == 0);
+               assert(rlong == rlong2);
+               ASN_STRUCT_RESET(asn_DEF_INTEGER, &val2);
+       }
+
+       shared_scratch_start = scratch;
+       ret = INTEGER_print(&asn_DEF_INTEGER, &val, 0, _print2buf, scratch);
+       assert(shared_scratch_start < scratch + sizeof(scratch));
+       assert(ret == 0);
+       ret = snprintf(verify, sizeof(verify), "%ld", check_long);
+       assert(ret < 0 || (size_t)ret < sizeof(verify));
+       ret = strcmp(scratch, verify);
+       printf("         [%s] vs [%s]: %d%s\n",
+               scratch, verify, ret,
+               (check_ret == -1)?" (expected to fail)":""
+               );
+       if(check_ret == -1) {
+               assert(strcmp(scratch, verify));
+       } else {
+               assert(strcmp(scratch, verify) == 0);
+       }
+}
+
+static void
+check_unsigned(uint8_t *buf, int size, unsigned long check_long, int check_ret) {
+       char scratch[128];
+       char verify[32];
+       INTEGER_t val;
+       uint8_t *buf_end = buf + size;
+       int ret;
+       unsigned long rlong = 123;
+
+       assert(buf);
+       assert(size >= 0);
+
+       val.buf = buf;
+       val.size = size;
+
+       printf("Testing: [");
+       for(; buf < buf_end; buf++) {
+               if(buf != val.buf) printf(":");
+               printf("%02x", *buf);
+       }
+       printf("]: ");
+
+       ret = asn_INTEGER2ulong(&val, &rlong);
+       printf(" (%lu, %d) vs (%lu, %d)\n",
+               rlong, ret, check_long, check_ret);
+       assert(ret == check_ret);
+       assert(rlong == check_long);
+
+       if(check_ret == 0) {
+               INTEGER_t val2;
+               unsigned long rlong2;
+               val2.buf = 0;
+               val2.size = 0;
+               ret = asn_ulong2INTEGER(&val2, rlong);
+               assert(ret == 0);
+               assert(val2.buf);
+               if(val2.size > val.size) {
+                       /* At least as compact */
+                       printf("val2.size=%d, val.size=%d\n",
+                               (int)val2.size, (int)val.size);
+                       assert(val2.size <= val.size);
+               }
+               ret = asn_INTEGER2ulong(&val, &rlong2);
+               assert(ret == 0);
+               assert(rlong == rlong2);
+               ASN_STRUCT_RESET(asn_DEF_INTEGER, &val2);
+       }
+
+       return;
+
+       shared_scratch_start = scratch;
+       ret = INTEGER_print(&asn_DEF_INTEGER, &val, 0, _print2buf, scratch);
+       assert(shared_scratch_start < scratch + sizeof(scratch));
+       assert(ret == 0);
+       ret = snprintf(verify, sizeof(verify), "%lu", check_long);
+       assert(ret < (int)sizeof(verify));
+       ret = strcmp(scratch, verify);
+       printf("         [%s] vs [%s]: %d%s\n",
+               scratch, verify, ret,
+               (check_ret == -1)?" (expected to fail)":""
+               );
+       if(check_ret == -1) {
+               assert(strcmp(scratch, verify));
+       } else {
+               assert(strcmp(scratch, verify) == 0);
+       }
+}
+
+static void
+check_xer(int lineno, int tofail, char *xmldata, long orig_value) {
+       INTEGER_t *st = 0;
+       asn_dec_rval_t rc;
+       long value;
+       int ret;
+
+       printf("%03d: [%s] vs %ld: ", lineno, xmldata, orig_value);
+
+       rc = xer_decode(0, &asn_DEF_INTEGER, (void *)&st,
+               xmldata, strlen(xmldata));
+       if(rc.code != RC_OK) {
+               assert(tofail);
+               printf("\tfailed, as expected\n");
+               ASN_STRUCT_FREE(asn_DEF_INTEGER, st);
+               return;
+       }
+        if(tofail) {
+                printf("\tnot failed, as expected!\n");
+               assert(!tofail);
+        }
+
+       ret = asn_INTEGER2long(st, &value);
+       assert(ret == 0);
+
+       printf("\t%ld\n", value);
+
+       assert(value == orig_value);
+
+       ASN_STRUCT_FREE(asn_DEF_INTEGER, st);
+}
+
+int
+main() {
+       uint8_t buf1[] = { 1 };
+       uint8_t buf2[] = { 0xff };
+       uint8_t buf3[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+       uint8_t buf4[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0 };
+       uint8_t buf5[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 };
+       uint8_t buf6[] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+       uint8_t buf7[] = { 0xff, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+       uint8_t buf8[] = { 0x7f, 0x7e, 0x7d, 0x7c };
+       uint8_t buf9[] = { 0, 0x7f, 0x7e, 0x7d, 0x7c };
+       uint8_t buf10[] = { 0, 0, 0, 0, 0, 0, 0x7f, 0x7e, 0x7d, 0x7c };
+       uint8_t buf11[] = { 0x80, 0, 0, 0 };
+       uint8_t buf12[] = { 0x80, 0 };
+       uint8_t buf13[] = { 0x80 };
+       uint8_t buf14[] = { 0x00, 0x80, 0x00, 0x00 };
+       uint8_t buf15[] = { 0x00, 0x80, 0x00, 0x00, 0x00 };
+       uint8_t buf16[] = { 0x00, 0xff, 0xff, 0x00, 0x00 };
+
+#define        UCHECK(buf, val, ret)   check_unsigned(buf, sizeof(buf), val, ret)
+
+#define        CHECK(buf, val, ret)    check(buf, sizeof(buf), val, ret)
+
+       CHECK(buf1, 1, 0);
+       CHECK(buf2, -1, 0);
+       CHECK(buf3, -1, 0);
+       CHECK(buf4, -16, 0);
+       CHECK(buf5, 257, 0);
+       CHECK(buf6, 123, -1);
+       CHECK(buf7, 123, -1);
+       CHECK(buf8, 0x7F7E7D7C, 0);
+       CHECK(buf9, 0x7F7E7D7C, 0);
+       CHECK(buf10, 0x7F7E7D7C, 0);
+       UCHECK(buf10, 0x7F7E7D7C, 0);
+       CHECK(buf11, -2147483647-1, 0); /* 0x80000000 */
+       CHECK(buf12, -32768, 0);
+       CHECK(buf13, -128, 0);
+       UCHECK(buf14, 0x800000, 0);
+       UCHECK(buf15, 0x80000000UL, 0);
+       UCHECK(buf16, 0xffff0000UL, 0);
+
+       CHECK_XER(-1, "", 0);
+       CHECK_XER(-1, "<INTEGER></INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>-</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>+</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>+-</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> -</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> +</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> +-</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>- </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>+ </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>+- </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> - </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> + </INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> +- </INTEGER>", 0);
+       CHECK_XER(0, "<INTEGER>+0</INTEGER>", 0);
+       CHECK_XER(0, "<INTEGER>-0</INTEGER>", 0);
+       CHECK_XER(0, "<INTEGER>+1</INTEGER>", 1);
+       CHECK_XER(0, "<INTEGER>-1</INTEGER>", -1);
+       CHECK_XER(0, "<INTEGER>1</INTEGER>", 1);
+       CHECK_XER(0, "<INTEGER>-15</INTEGER>", -15);
+       CHECK_XER(0, "<INTEGER>+15</INTEGER>", 15);
+       CHECK_XER(0, "<INTEGER>15</INTEGER>", 15);
+       CHECK_XER(0, "<INTEGER> 15</INTEGER>", 15);
+       CHECK_XER(0, "<INTEGER> 15 </INTEGER>", 15);
+       CHECK_XER(0, "<INTEGER>15 </INTEGER>", 15);
+       CHECK_XER(0, "<INTEGER> +15 </INTEGER>", 15);
+       CHECK_XER(-1, "<INTEGER> +15 -</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER> +15 1</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>+ 15</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>12<z>34</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>12 <z>34</INTEGER>", 0);
+       CHECK_XER(-1, "<INTEGER>12 <z></INTEGER>", 0);
+       CHECK_XER(0, "<INTEGER>1234</INTEGER>", 1234);
+       CHECK_XER(-1, "<INTEGER>1234 5678</INTEGER>", 0);
+       CHECK_XER(0, "<INTEGER>-2147483647</INTEGER>", -2147483647);
+       CHECK_XER(0, "<INTEGER>-2147483648</INTEGER>", -2147483647-1);
+       CHECK_XER(0, "<INTEGER>+2147483647</INTEGER>", 2147483647);
+       CHECK_XER(0, "<INTEGER>2147483647</INTEGER>", 2147483647);
+       if(sizeof(long) == 4) {
+               CHECK_XER( 0, "<INTEGER>-2147483648</INTEGER>", -2147483648);
+               CHECK_XER(-1, "<INTEGER>-2147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>2147483648</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>2147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>3147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>4147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>5147483649</INTEGER>", 0); /* special */
+               CHECK_XER(-1, "<INTEGER>9147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>9999999999</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-5147483649</INTEGER>", 0);/* special */
+               CHECK_XER(-1, "<INTEGER>-9147483649</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-9999999999</INTEGER>", 0);
+       }
+#ifdef  TEST_64BIT
+       if(sizeof(long) == 8) {
+               CHECK_XER(0, "<INTEGER>2147483648</INTEGER>", 2147483648);
+               CHECK_XER(0, "<INTEGER>2147483649</INTEGER>", 2147483649);
+               CHECK_XER(0, "<INTEGER>3147483649</INTEGER>", 3147483649);
+               CHECK_XER(0, "<INTEGER>4147483649</INTEGER>", 4147483649);
+               CHECK_XER(0, "<INTEGER>5147483649</INTEGER>", 5147483649);
+               CHECK_XER(0, "<INTEGER>9147483649</INTEGER>", 9147483649);
+               CHECK_XER(0, "<INTEGER>9999999999</INTEGER>", 9999999999);
+               CHECK_XER(0, "<INTEGER>9223372036854775807</INTEGER>", 9223372036854775807);
+               CHECK_XER(-1, "<INTEGER>9223372036854775808</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>10223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>50223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>100223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>500223372036854775807</INTEGER>", 0);
+               CHECK_XER(0, "<INTEGER>-9223372036854775808</INTEGER>", -9223372036854775807-1);
+               CHECK_XER(-1, "<INTEGER>-9223372036854775809</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-10223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-50223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-100223372036854775807</INTEGER>", 0);
+               CHECK_XER(-1, "<INTEGER>-500223372036854775807</INTEGER>", 0);
+       } else {
+                assert(sizeof(long) == 8);
+        }
+#endif
+
+       return 0;
+}
diff --git a/tests/tests-skeletons/check-OCTET_STRING.c b/tests/tests-skeletons/check-OCTET_STRING.c
new file mode 100644 (file)
index 0000000..2581cdc
--- /dev/null
@@ -0,0 +1,154 @@
+#include <stdio.h>
+#include <assert.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include <OCTET_STRING.h>
+#include <BIT_STRING.h>
+
+enum encoding_type { HEX, BINARY, UTF8 };
+
+#define check(t, tag, buf, verify)  check_impl(__LINE__, t, tag, buf, verify)
+
+static void
+check_impl(int lineno, enum encoding_type type, char *tagname, char *xmlbuf, char *verify) {
+       size_t xmllen = strlen(xmlbuf);
+       size_t verlen = verify ? strlen(verify) : 0;
+       asn_TYPE_descriptor_t *td = &asn_DEF_OCTET_STRING;
+       OCTET_STRING_t *st = 0;
+       OCTET_STRING_t **stp = &st;
+       asn_dec_rval_t rc;
+       xer_type_decoder_f *decoder = 0;
+
+       switch(type) {
+       case HEX:
+               decoder = OCTET_STRING_decode_xer_hex;
+               break;
+       case BINARY:
+               td = &asn_DEF_BIT_STRING;
+               decoder = OCTET_STRING_decode_xer_binary;
+               break;
+       case UTF8:
+               decoder = OCTET_STRING_decode_xer_utf8;
+               break;
+       }
+
+       rc = decoder(0, td, (void **)stp, tagname, xmlbuf, xmllen);
+       printf("%03d: [%s] => [%s]:%zu vs [%s]:%zu, code %d\n",
+               lineno, xmlbuf,
+               st ? (const char *)st->buf : "", st ? st->size : 0,
+               verify ? verify : "", verlen, rc.code);
+
+       if(verify) {
+               assert(rc.code == RC_OK);
+               assert(st);
+               assert(st->buf);
+               assert(st->size == verlen);
+               assert(!memcmp(st->buf, verify, verlen));
+       } else {
+               assert(rc.code != RC_OK);
+       }
+
+       ASN_STRUCT_FREE(*td, st);
+}
+
+static char buf[1024];
+
+static int
+write_buf(const void *buffer, size_t size, void *key) {
+       size_t *off = key;
+       assert(*off + size < sizeof(buf));
+       memcpy(buf + *off, buffer, size);
+       *off += size;
+       return 0;
+}
+
+static void
+encode(char *orig, char *encoded) {
+       OCTET_STRING_t os;
+       size_t written = 0;
+       asn_enc_rval_t er;
+
+       memset(&os, 0, sizeof(os));
+
+       OCTET_STRING_fromString(&os, orig);
+
+       er = OCTET_STRING_encode_xer_utf8(&asn_DEF_OCTET_STRING, &os,
+                       0, 0, write_buf, &written);
+       assert(er.encoded >= 0);
+       buf[er.encoded] = '\0';
+       printf("Orig: [%s], encoded: [%s], check [%s]\n",
+               orig, buf, encoded);
+       assert(strcmp(buf, encoded) == 0);
+       ASN_STRUCT_RESET(asn_DEF_OCTET_STRING, &os);
+}
+
+int
+main() {
+
+       check(HEX, 0, "<OCTET_STRING>41424</OCTET_STRING>",
+               "AB@");
+
+       check(HEX, 0, "<!--comment--><OCTET_STRING>\n"
+               "<!--comment-->41424</OCTET_STRING>",
+               "AB@");
+
+       check(HEX, 0, "<OCTET_STRING blah blah> 4 1 4 2 4 5 44 </OCTET_STRING>",
+               "ABED");
+
+       /* Some hard cases */
+       check(HEX, "z", "<z><!-- < -->40</z>", "@");
+       check(HEX, "z", "<z><!-- <-->40</z>", "@");
+       check(HEX, "z", "<z><!-- -->>40</z>", 0);
+       check(HEX, "z", "<z><!-- <some <sometag>-->40</z>", "@");
+       check(HEX, "z", "<z><!-- <some <sometag-->>40</z>", 0);
+
+       check(HEX, "z", "ignored<z>40</z>stuff", "@");
+
+       check(HEX, "tag", "<tag>4</tag>", "@");
+       check(HEX, "a-z", "<a-z>7 375 73 6c6 9<!--/-->6 b</a-z>", "suslik");
+
+       /* This one has a comment in a not-yet-supported place */ 
+       /* check(HEX, "a-z", "<a-z>73 75 73 6c 6<!--/-->9 6b</a-z>",
+               "suslik"); */
+
+       check(BINARY, "tag", "<tag/>", "");
+       check(BINARY, "tag", "<tag>blah</tag>", 0);
+       check(BINARY, "tag", "<tag>01000001</tag>", "A");
+       check(BINARY, "tag", "<tag>01000<!--blah--> 00 101 00001</tag>", "AB");
+
+       check(UTF8, 0, "<OCTET_STRING>one, two, three</OCTET_STRING>",
+               "one, two, three");
+
+       check(UTF8, "z", "<z></z>", "");
+       check(UTF8, "z", "<z z z>&lt;&amp;&gt;</z z z>", "<&>");
+       check(UTF8, "z", "<z z z>a&lt;b&amp;c&gt;d</z z z>", "a<b&c>d");
+       check(UTF8, "z", "<z z z>a&lt</z z z>", "a&lt");
+       check(UTF8, "z", "<z z z>a&sdfsdfsdf;b</z z z>", "a&sdfsdfsdf;b");
+       check(UTF8, "z", "<z z z>a&#x20;b</z z z>", "a b");
+       check(UTF8, "z", "<z z z>a&#32;b</z z z>", "a b");
+       check(UTF8, "z", "<z>a&#32323;b</z>", "a\347\271\203b");
+       check(UTF8, "z", "<z>a&#x4fc4;|</z>", "a\xe4\xbf\x84|");
+    /* Last unicode point */
+       check(UTF8, "z", "<z>a&#x10ffff;|</z>", "a\xf4\x8f\xbf\xbf|");
+       check(UTF8, "z", "<z>a&#1114111;|</z>", "a\xf4\x8f\xbf\xbf|");
+    /* One past the last unicode point */
+       check(UTF8, "z", "<z>a&#x110000;|</z>", "a&#x110000;|");
+       check(UTF8, "z", "<z>a&#1114112;|</z>", "a&#1114112;|");
+       check(UTF8, "z", "<z>a&#3000000000;b</z>", "a&#3000000000;b");
+       check(UTF8, "z", "<z>a&#5000000000;b</z>", "a&#5000000000;b");
+       check(UTF8, "z", "<z>a&#300</z>", "a&#300");
+       check(UTF8, "z", "<z>a&#-300;</z>", "a&#-300;");
+       check(UTF8, "z", "<z>a<ff/>b</z>", "a\014b");
+       check(UTF8, "z", "<z>a<soh/>b</z>", "a\001b");
+       check(UTF8, "z", "<z>a<bel/></z>", "a\007");
+
+       encode("", "");
+       encode("a", "a");
+       encode("a\nb", "a\nb");
+       encode("a\bc", "a<bs/>c");
+       encode("ab\01c\ndef\r\n", "ab<soh/>c\ndef\r\n");
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-OER-INTEGER.c b/tests/tests-skeletons/check-OER-INTEGER.c
new file mode 100644 (file)
index 0000000..53c7ddd
--- /dev/null
@@ -0,0 +1,296 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_application.h>
+#include <INTEGER.h>
+
+#define CHECK_DECODE(code, a, b, c, d, e, f)    check_decode(__LINE__, code, a, b, c, d, e, f)
+#define CHECK_ROUNDTRIP(a, b, c) check_roundtrip(__LINE__, a, b, c);
+#define CHECK_ENCODE_OK(a, b, c) check_encode(__LINE__, 0, a, b, c)
+#define CHECK_ENCODE_BAD(a, b, c) check_encode(__LINE__, 1, a, b, c);
+
+static asn_oer_constraints_t *
+setup_constraints(unsigned width, unsigned positive) {
+    static struct asn_oer_constraints_s empty_constraints;
+    asn_oer_constraints_t *constraints = &empty_constraints;
+    asn_oer_constraint_number_t *ct_value = &constraints->value;
+
+    memset(&empty_constraints, 0, sizeof(empty_constraints));
+
+    /* Setup integer constraints as requested */
+    ct_value->width = width;
+    ct_value->positive = positive;
+
+    return constraints;
+}
+
+static void
+check_decode(int lineno, enum asn_dec_rval_code_e code, intmax_t control, const char *buf, size_t size, const char *dummy, unsigned width, unsigned positive) {
+    static char *code_s[] = { "RC_OK", "RC_WMORE", "RC_FAIL", "<error>" };
+
+    fprintf(stderr, "\n%d: OER decode (control %" PRIdMAX ")\n", lineno, control);
+
+    INTEGER_t *st = NULL;
+    asn_dec_rval_t ret;
+    asn_oer_constraints_t *constraints = setup_constraints(width, positive);
+
+    fprintf(stderr, "%d: buf[%zu]={%d, %d, ...}\n", lineno, size,
+            size <= 0 ? -1 : ((const uint8_t *)buf)[0],
+            size <= 1 ? -1 : ((const uint8_t *)buf)[1]);
+
+    (void)dummy;
+
+    ret = asn_DEF_INTEGER.op->oer_decoder(0, &asn_DEF_INTEGER, constraints,
+                                      (void **)&st, buf, size);
+    if(ret.code != RC_OK) {
+        /* Basic OER decode does not work */
+        fprintf(stderr, "%d: Failed oer_decode(ctl=%" PRIdMAX ", size=%zu)\n",
+                lineno, control, size);
+        if(ret.code == code) {
+            fprintf(stderr, "  (That was expected)\n");
+            ASN_STRUCT_FREE(asn_DEF_INTEGER, st);
+            return;
+        } else {
+            fprintf(
+                stderr, "  Unexpected return code %s (%d) expected %s\n",
+                code_s[(unsigned)ret.code <= RC_FAIL ? RC_FAIL : (RC_FAIL + 1)],
+                (int)ret.code, code_s[code]);
+            assert(ret.code == code);
+        }
+    } else {
+        intmax_t outcome;
+        if(asn_INTEGER2imax(st, &outcome) != 0) {
+            /* Result of decode is structurally incorrect */
+            fprintf(stderr,
+                    "%d: Failed to convert INTEGER 2 imax; structurally "
+                    "incorrect INTEGER\n",
+                    lineno);
+            assert(!"Unreachable");
+        } else if(outcome != control) {
+            /* Decoded value is wrong */
+            fprintf(stderr,
+                    "%d: Decode result %" PRIdMAX " is not expected %" PRIdMAX
+                    "\n",
+                    lineno, outcome, control);
+            assert(outcome == control);
+        }
+    }
+
+    fprintf(stderr, "%d: Decode result %" PRIdMAX "\n", lineno, control);
+    ASN_STRUCT_FREE(asn_DEF_INTEGER, st);
+}
+
+static void
+dump_data(int lineno, const uint8_t *buf, size_t size) {
+    const uint8_t *p = buf;
+    const uint8_t *end = buf + size;
+
+    fprintf(stderr, "%d: Encoded: [", lineno);
+
+    for(; p < end; p++) {
+        fprintf(stderr, "\\x%02x", *(const unsigned char *)p);
+    }
+    fprintf(stderr, "] (%zu bytes)\n", size);
+}
+
+static void
+check_roundtrip(int lineno, intmax_t value, intmax_t lower_bound, intmax_t upper_bound) {
+    uint8_t tmpbuf[32];
+    size_t tmpbuf_size;
+
+    fprintf(stderr, "\n%d: OER round-trip value %" PRIdMAX "\n", lineno, value);
+
+    INTEGER_t *stOut = (INTEGER_t *)calloc(1, sizeof(*stOut));
+    INTEGER_t *stIn = NULL;
+    asn_enc_rval_t er;
+    asn_dec_rval_t ret;
+    asn_oer_constraints_t *constraints =
+        setup_constraints(lower_bound, upper_bound);
+
+    if(asn_imax2INTEGER(stOut, value) == -1) {
+        assert(!"Unreachable imax2INTEGER failure");
+    } else {
+        assert(stOut->buf != NULL);
+        assert(stOut->size != 0);
+    }
+
+    er = oer_encode_to_buffer(&asn_DEF_INTEGER, constraints, stOut, tmpbuf,
+                              sizeof(tmpbuf));
+    if(er.encoded == -1) {
+        fprintf(stderr, "%d: OER encode failed for %s\n", lineno,
+                er.failed_type ? er.failed_type->name : "<none>");
+        assert(er.encoded != -1);
+    }
+    tmpbuf_size = er.encoded;
+    ASN_STRUCT_FREE(asn_DEF_INTEGER, stOut);
+
+    dump_data(lineno, tmpbuf, tmpbuf_size);
+
+    ret = asn_DEF_INTEGER.op->oer_decoder(0, &asn_DEF_INTEGER, constraints,
+                                      (void **)&stIn, tmpbuf, tmpbuf_size);
+    if(ret.code != RC_OK) {
+        /* Basic OER decode does not work */
+        fprintf(stderr, "%d: Failed oer_decode(value=%" PRIdMAX ", size=%zu)\n",
+                lineno, value, tmpbuf_size);
+        assert(ret.code == 0);
+    } else {
+        intmax_t outcome;
+        if(asn_INTEGER2imax(stIn, &outcome) != 0) {
+            /* Result of decode is structurally incorrect */
+            fprintf(stderr,
+                    "%d: Failed to convert INTEGER 2 imax; structurally "
+                    "incorrect INTEGER\n",
+                    lineno);
+            assert(!"Unreachable");
+        } else if(outcome != value) {
+            /* Decoded value is wrong */
+            fprintf(stderr,
+                    "%d: Decode result %" PRIdMAX " is not expected %" PRIdMAX
+                    "\n",
+                    lineno, outcome, value);
+            assert(outcome == value);
+        }
+    }
+
+    ASN_STRUCT_FREE(asn_DEF_INTEGER, stIn);
+    fprintf(stderr, "%d: Decode result %" PRIdMAX "\n", lineno, value);
+}
+
+static void
+check_encode(int lineno, int bad, intmax_t value, unsigned width, unsigned positive) {
+    uint8_t tmpbuf[32];
+
+    fprintf(stderr, "\n%d: OER encode value %" PRIdMAX "\n", lineno, value);
+
+    INTEGER_t *stOut = (INTEGER_t *)calloc(1, sizeof(*stOut));
+    asn_enc_rval_t er;
+    asn_oer_constraints_t *constraints = setup_constraints(width, positive);
+
+    if(asn_imax2INTEGER(stOut, value) == -1) {
+        assert(!"Unreachable imax2INTEGER failure");
+    } else {
+        assert(stOut->buf != NULL);
+        assert(stOut->size != 0);
+    }
+
+    er = oer_encode_to_buffer(&asn_DEF_INTEGER, constraints, stOut, tmpbuf,
+                              sizeof(tmpbuf));
+    if(er.encoded == -1) {
+        fprintf(stderr, "%d: OER encode failed for %s%s\n", lineno,
+                er.failed_type ? er.failed_type->name : "<none>",
+                bad ? " (expected)" : "");
+        if(!bad) {
+            assert(er.encoded != -1);
+        }
+    } else {
+        dump_data(lineno, tmpbuf, er.encoded);
+        if(bad) {
+            assert(er.encoded == -1);
+        }
+    }
+    ASN_STRUCT_FREE(asn_DEF_INTEGER, stOut);
+}
+
+int
+main() {
+       CHECK_DECODE(RC_WMORE, 0, "", 0, "bounds=", 0, 0);
+       CHECK_DECODE(RC_FAIL, 0, "\x00", 1, "bounds=", 0, 0);
+       CHECK_DECODE(RC_WMORE, 0, "", 0, "bounds=", 1, 0);
+       CHECK_DECODE(RC_WMORE, 0, "", 0, "bounds=", 1, 1);
+       CHECK_DECODE(RC_OK, 0, "\x00", 1, "bounds=", 1, 1);
+       CHECK_DECODE(RC_OK, 0, "\x00", 1, "bounds=", 1, 0);
+
+       CHECK_DECODE(RC_OK, 0, "\x00", 1, "bounds=", 1, 0);
+       CHECK_DECODE(RC_OK, 1, "\x01", 1, "bounds=", 1, 0);
+       CHECK_DECODE(RC_OK, -1, "\xff", 1, "bounds=", 1, 0);
+       CHECK_DECODE(RC_OK, -1, "\xff", 1, "bounds=", 1, 0);
+       CHECK_DECODE(RC_OK, 127, "\x7f", 1, "bounds=", 1, 1);
+       CHECK_DECODE(RC_OK, 255, "\xff", 1, "bounds=", 1, 1);
+       CHECK_DECODE(RC_OK, 255, "\xff", 1, "bounds=", 1, 1);
+       CHECK_DECODE(RC_WMORE, 0, "\xff", 1, "bounds=", 2, 1);
+       CHECK_DECODE(RC_OK, 65535, "\xff\xff", 2, "bounds=", 2, 1);
+
+       CHECK_DECODE(RC_OK, 0, "\x01\x00", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, 1, "\x01\x01", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, -1, "\x1\xff", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, -1, "\x1\xff", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, -1, "\x1\xff", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, 255, "\x1\xff", 2, "bounds=", 0, 1);
+       CHECK_DECODE(RC_WMORE, -1, "\x02\x00\xff", 2, "bounds=", 0, 0);
+       CHECK_DECODE(RC_OK, 255, "\x02\x00\xff", 3, "bounds=", 0, 0);
+
+    CHECK_ROUNDTRIP(0, 0, 0);
+    CHECK_ROUNDTRIP(1, 0, 0);
+    CHECK_ROUNDTRIP(-1, 0, 0);
+    CHECK_ROUNDTRIP(-65000, 0, 0);
+    CHECK_ROUNDTRIP(65000, 0, 0);
+    CHECK_ROUNDTRIP(65535, 0, 0);
+    CHECK_ROUNDTRIP(-65535, 0, 0);
+    CHECK_ROUNDTRIP(-65536, 0, 0);
+    CHECK_ROUNDTRIP(65536, 0, 0);
+    CHECK_ROUNDTRIP(0, 1, 0);
+    CHECK_ROUNDTRIP(1, 1, 0);
+    CHECK_ROUNDTRIP(-1, 1, 0);
+    CHECK_ROUNDTRIP(-127, 1, 0);
+    CHECK_ROUNDTRIP(-128, 1, 0);
+    CHECK_ROUNDTRIP(127, 1, 0);
+    CHECK_ROUNDTRIP(1, 2, 1);
+    CHECK_ROUNDTRIP(32000, 2, 1);
+    CHECK_ROUNDTRIP(32000, 2, 0);
+    CHECK_ROUNDTRIP(1, 2, 1);
+    CHECK_ROUNDTRIP(65535, 2, 1);
+    CHECK_ROUNDTRIP(65535, 4, 0);
+
+    CHECK_ENCODE_OK(0, 1, 1);
+    CHECK_ENCODE_OK(255, 1, 1);
+    CHECK_ENCODE_BAD(256, 1, 1);
+    CHECK_ENCODE_OK(0, 1, 0);
+    CHECK_ENCODE_OK(127, 1, 0);
+    CHECK_ENCODE_OK(-128, 1, 0);
+    CHECK_ENCODE_BAD(-129, 1, 0);
+    CHECK_ENCODE_BAD(128, 1, 0);
+    CHECK_ENCODE_OK(-4900000000, 8, 0);
+    CHECK_ENCODE_OK(4900000000, 8, 0);
+    CHECK_ENCODE_OK(-2000000000, 8, 0);
+    CHECK_ENCODE_OK(-4000000000, 8, 0);
+    CHECK_ENCODE_BAD(-4900000000, 4, 1);
+    CHECK_ENCODE_BAD(-1, 0, 4000000000);
+    CHECK_ENCODE_BAD(4900000000, 4, 1);
+    CHECK_ENCODE_OK(4100000000, 4, 1);
+
+    for(size_t i = 0; i < 7 ; i++) {
+        intmax_t value = (intmax_t)1 << i;
+        CHECK_ROUNDTRIP(value, 1, 1);
+        value = -value;
+        CHECK_ROUNDTRIP(value, 1, 0);
+    }
+
+    for(size_t i = 0; i < 16 ; i++) {
+        intmax_t value = (intmax_t)1 << i;
+        CHECK_ROUNDTRIP(value, 2, 1);
+        value = -value;
+        CHECK_ROUNDTRIP(value, 2, 0);
+    }
+
+    for(size_t i = 0; i < 32 ; i++) {
+        intmax_t value = (intmax_t)1 << i;
+        CHECK_ROUNDTRIP(value, 4, 1);
+        value = -value;
+        CHECK_ROUNDTRIP(value, 4, 0);
+    }
+
+    for(size_t i = 0; i < 8 * sizeof(intmax_t) - 1; i++) {
+        intmax_t value = (intmax_t)1 << i;
+        CHECK_ROUNDTRIP(value, 8, 0);
+        value = -value;
+        CHECK_ROUNDTRIP(value, 8, 0);
+    }
+
+    for(size_t i = 0; i < 8 * sizeof(intmax_t) - 1; i++) {
+        intmax_t value = (intmax_t)1 << i;
+        CHECK_ROUNDTRIP(value, 0, 0);
+        value = -value;
+        CHECK_ROUNDTRIP(value, 0, 0);
+    }
+
+}
diff --git a/tests/tests-skeletons/check-OER-NativeEnumerated.c b/tests/tests-skeletons/check-OER-NativeEnumerated.c
new file mode 100644 (file)
index 0000000..4088a3b
--- /dev/null
@@ -0,0 +1,170 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_application.h>
+#include <NativeEnumerated.h>
+
+#define CHECK_DECODE(code, a, b, c)    check_decode(__LINE__, code, a, b, c)
+#define CHECK_ROUNDTRIP(a) check_roundtrip(__LINE__, a);
+
+static void
+check_decode(int lineno, enum asn_dec_rval_code_e code, long control, const char *buf, size_t size) {
+    static char *code_s[] = { "RC_OK", "RC_WMORE", "RC_FAIL", "<error>" };
+
+    fprintf(stderr, "\n%d: OER decode (control %ld)\n", lineno, control);
+
+    long value;
+    long *value_ptr = &value;
+    asn_dec_rval_t ret;
+
+    fprintf(stderr, "%d: buf[%zu]={%d, %d, ...}\n", lineno, size,
+            size <= 0 ? -1 : ((const uint8_t *)buf)[0],
+            size <= 1 ? -1 : ((const uint8_t *)buf)[1]);
+
+    ret = NativeEnumerated_decode_oer(NULL, &asn_DEF_NativeEnumerated, NULL,
+                                      (void **)&value_ptr, buf, size);
+    if(ret.code != RC_OK) {
+        /* Basic OER decode does not work */
+        fprintf(stderr, "%d: Failed oer_decode(ctl=%ld, size=%zu)\n",
+                lineno, control, size);
+        if(ret.code == code) {
+            fprintf(stderr, "  (That was expected)\n");
+            return;
+        } else {
+            fprintf(
+                stderr, "  Unexpected return code %s (%d) expected %s\n",
+                code_s[(unsigned)ret.code <= RC_FAIL ? RC_FAIL : (RC_FAIL + 1)],
+                (int)ret.code, code_s[code]);
+            assert(ret.code == code);
+        }
+    } else {
+        long outcome = value;
+        if(outcome != control) {
+            /* Decoded value is wrong */
+            fprintf(stderr,
+                    "%d: Decode result %ld is not expected %ld\n",
+                    lineno, outcome, control);
+            assert(outcome == control);
+        }
+    }
+
+    fprintf(stderr, "%d: Decode result %ld\n", lineno, control);
+}
+
+static void
+dump_data(int lineno, const uint8_t *buf, size_t size) {
+    const uint8_t *p = buf;
+    const uint8_t *end = buf + size;
+
+    fprintf(stderr, "%d: Encoded: [", lineno);
+
+    for(; p < end; p++) {
+        fprintf(stderr, "\\x%02x", *(const unsigned char *)p);
+    }
+    fprintf(stderr, "] (%zu bytes)\n", size);
+}
+
+static void
+check_roundtrip(int lineno, long control) {
+    uint8_t tmpbuf[32];
+    size_t tmpbuf_size;
+    asn_enc_rval_t er;
+    asn_dec_rval_t ret;
+
+    fprintf(stderr, "\n%d: OER round-trip value %ld\n", lineno, control);
+
+    long value_out = control;
+    long value_in = -42;
+    long *value_in_ptr = &value_in;
+
+    er = oer_encode_to_buffer(&asn_DEF_NativeEnumerated, NULL,
+                              &value_out, tmpbuf, sizeof(tmpbuf));
+    if(er.encoded == -1) {
+        fprintf(stderr, "%d: OER encode failed for %s\n", lineno,
+                er.failed_type ? er.failed_type->name : "<none>");
+        assert(er.encoded != -1);
+    }
+    tmpbuf_size = er.encoded;
+
+    dump_data(lineno, tmpbuf, tmpbuf_size);
+
+    ret = asn_DEF_NativeEnumerated.op->oer_decoder(0, &asn_DEF_NativeEnumerated,
+                                                   NULL, (void **)&value_in_ptr,
+                                                   tmpbuf, tmpbuf_size);
+    if(ret.code != RC_OK) {
+        /* Basic OER decode does not work */
+        fprintf(stderr, "%d: Failed oer_decode(value=%ld, size=%zu)\n",
+                lineno, control, tmpbuf_size);
+        assert(ret.code == 0);
+    } else {
+        long outcome = value_in;
+        if(outcome != control) {
+            /* Decoded value is wrong */
+            fprintf(stderr,
+                    "%d: Decode result %ld is not expected %ld\n",
+                    lineno, outcome, control);
+            assert(outcome == control);
+        }
+    }
+
+    fprintf(stderr, "%d: Decode result %ld\n", lineno, control);
+}
+
+int
+main() {
+       CHECK_DECODE(RC_WMORE, 0, "", 0);
+       CHECK_DECODE(RC_OK, 0, "\x00", 1);
+       CHECK_DECODE(RC_FAIL, 0, "\x00", 1);
+       CHECK_DECODE(RC_WMORE, 0, "", 0);
+       CHECK_DECODE(RC_WMORE, 0, "", 0);
+       CHECK_DECODE(RC_OK, 0, "\x00", 1);
+       CHECK_DECODE(RC_OK, 0, "\x00", 1);
+
+       CHECK_DECODE(RC_OK, 0, "\x00", 1);
+       CHECK_DECODE(RC_OK, 1, "\x01", 1);
+       CHECK_DECODE(RC_FAIL, 0, "\xff", 1);
+       CHECK_DECODE(RC_FAIL, 0, "\x89", 1);
+       CHECK_DECODE(RC_WMORE, 0, "\x84", 1);
+       CHECK_DECODE(RC_WMORE, 0, "\x84\x00", 3);
+       CHECK_DECODE(RC_WMORE, 0, "\x84\x00\x00", 3);
+       CHECK_DECODE(RC_WMORE, 0, "\x84\x00\x00\x00", 4);
+       CHECK_DECODE(RC_OK, 0, "\x84\x00\x00\x00\x00", 5);
+       CHECK_DECODE(RC_OK, 1, "\x84\x00\x00\x00\x01", 5);
+       CHECK_DECODE(RC_OK, 127, "\x7f", 1);
+       CHECK_DECODE(RC_OK, 127, "\x81\x7f", 2);
+       CHECK_DECODE(RC_OK, 255, "\x82\x00\xff", 3);
+       CHECK_DECODE(RC_OK, -1, "\x81\xff", 2);
+       CHECK_DECODE(RC_OK, -1, "\x82\xff\xff", 3);
+
+       CHECK_DECODE(RC_OK, 1, "\x01\x00", 2);
+       CHECK_DECODE(RC_OK, 1, "\x01\x01", 2);
+       CHECK_DECODE(RC_OK, -1, "\x81\xff", 2);
+       CHECK_DECODE(RC_WMORE, -1, "\x82\x00\xff", 2);
+
+    CHECK_ROUNDTRIP(0);
+    CHECK_ROUNDTRIP(1);
+    CHECK_ROUNDTRIP(-1);
+    CHECK_ROUNDTRIP(-127);
+    CHECK_ROUNDTRIP(-128);
+    CHECK_ROUNDTRIP(-129);
+    CHECK_ROUNDTRIP(126);
+    CHECK_ROUNDTRIP(127);
+    CHECK_ROUNDTRIP(128);
+    CHECK_ROUNDTRIP(-65000);
+    CHECK_ROUNDTRIP(65000);
+    CHECK_ROUNDTRIP(65535);
+    CHECK_ROUNDTRIP(-65535);
+    CHECK_ROUNDTRIP(-65536);
+    CHECK_ROUNDTRIP(65536);
+    CHECK_ROUNDTRIP(32000);
+
+    for(size_t i = 0; i < 8 * sizeof(long) - 1; i++) {
+        long value = (long)1 << i;
+        CHECK_ROUNDTRIP(value);
+        value = -value;
+        CHECK_ROUNDTRIP(value);
+    }
+
+    CHECK_ROUNDTRIP(LONG_MIN);
+    CHECK_ROUNDTRIP(LONG_MAX);
+}
diff --git a/tests/tests-skeletons/check-OER-support.c b/tests/tests-skeletons/check-OER-support.c
new file mode 100644 (file)
index 0000000..5433900
--- /dev/null
@@ -0,0 +1,67 @@
+#include <assert.h>
+#include <oer_support.c>
+
+static char buffer[128];
+
+static int fill_buffer(const void *data, size_t size, void *app_key) {
+    size_t *offset = (size_t *)app_key;
+    assert(*offset + size < sizeof(buffer));
+    memcpy(&buffer[*offset], data, size);
+    *offset += size;
+    return 0;
+}
+
+#define CHECK(a, b) check_round_trip(__LINE__, a, b)
+
+static void
+check_round_trip(int lineno, int ok, size_t length) {
+    fprintf(stderr, "%03d: Round-trip for %zu\n", lineno, length);
+
+    /* Serialize */
+    size_t enc_len = 0;
+    ssize_t enc_len_len = oer_serialize_length(length, fill_buffer, &enc_len);
+    assert(enc_len_len > 0);
+    assert(enc_len == (size_t)enc_len_len);
+
+    /* Deserialize */
+    size_t recovered_length = 0;
+    for(size_t part = 0; part < enc_len; part++) {
+        size_t ret = oer_fetch_length(buffer, part, &recovered_length);
+        assert(ret == 0);   /* More data expected. */
+    }
+    ssize_t dec_len = oer_fetch_length(buffer, enc_len, &recovered_length);
+    if(ok) {
+        assert(dec_len > 0);
+        assert((size_t)dec_len == enc_len);
+        if(recovered_length != length) {
+            fprintf(stderr,
+                    "Round-trip failed %zu->%zu (encoded %zd, decoded %zd)\n",
+                    length, recovered_length, enc_len, dec_len);
+            assert(recovered_length == length);
+        }
+    } else {
+        assert(dec_len == -1);
+    }
+}
+
+int main() {
+    int bits64 = sizeof(size_t) > 4;
+
+    CHECK(1, 0);
+    CHECK(1, 1);
+    CHECK(1, 127);
+    CHECK(1, 128);
+    CHECK(1, 129);
+    CHECK(1, 255);
+    CHECK(1, 256);
+    CHECK(1, 65534);
+    CHECK(1, 65535);
+    CHECK(1, 65536);
+    CHECK(1, 65538);
+    CHECK(1, 16000000);
+    CHECK(1, 16777216);
+    CHECK(bits64, 2147483648);
+    CHECK(bits64, 4294967295UL);
+
+}
+
diff --git a/tests/tests-skeletons/check-OIDs.c b/tests/tests-skeletons/check-OIDs.c
new file mode 100644 (file)
index 0000000..9bd5ae8
--- /dev/null
@@ -0,0 +1,414 @@
+#include <stdio.h>
+#include <assert.h>
+#include <errno.h>
+#include <sys/time.h>
+
+#include <OBJECT_IDENTIFIER.h>
+#include <RELATIVE-OID.h>
+
+static int
+_print(const void *buffer, size_t size, void *app_key) {
+       (void)app_key;
+       fwrite(buffer, size, 1, stdout);
+       return 0;
+}
+
+static void
+check_OID(int lineno, uint8_t *buf, size_t len, unsigned *ck_buf, int ck_len) {
+       OBJECT_IDENTIFIER_t *oid;
+       asn_dec_rval_t rval;
+       uint32_t arcs[11];
+       int alen;
+       int i;
+
+       printf("%03d: Checking {", lineno);
+       for(i = 0; i < (int)len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
+       printf("} against {");
+       for(i = 0; i < ck_len; i++) { printf("%s%u", i?" ":"", ck_buf[i]); }
+       printf("}\n");
+
+       oid = NULL;
+       rval = ber_decode(0, &asn_DEF_OBJECT_IDENTIFIER, (void *)&oid, buf, len);
+       assert(rval.code == RC_OK);
+
+       assert((ssize_t)oid->size == (ssize_t)len - 2);
+
+       /*
+        * Print the contents for visual debugging.
+        */
+       printf("OBJECT_IDENTIFIER_print() => ");
+       OBJECT_IDENTIFIER_print(&asn_DEF_OBJECT_IDENTIFIER, oid, 0, _print, 0);
+       printf("\n");
+
+       memset(arcs, 'A', sizeof(arcs));
+    alen =
+        OBJECT_IDENTIFIER_get_arcs(oid, arcs, sizeof(arcs) / sizeof(arcs[0]));
+    assert(alen > 0);
+
+       printf("OBJECT_IDENTIFIER_get_arcs() => {");
+       /*
+        * Make sure they are equivalent.
+        */
+       for(i = 0; i < alen; i++) {
+        printf(" %" PRIu32, arcs[i]);
+        if(alen == ck_len) {
+                       assert(arcs[i] == ck_buf[i]);
+               }
+       }
+       printf(" }\n");
+       assert(alen == ck_len);
+
+       ASN_STRUCT_FREE(asn_DEF_OBJECT_IDENTIFIER, oid);
+}
+
+static void
+check_ROID(int lineno, uint8_t *buf, size_t len, unsigned *ck_buf,
+           size_t ck_len) {
+    RELATIVE_OID_t *oid;
+       asn_dec_rval_t rval;
+       uint32_t arcs[10];
+       int alen;
+       size_t i;
+
+       printf("%03d: Checking {", lineno);
+       for(i = 0; i < len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
+       printf("} against {");
+       for(i = 0; i < ck_len; i++) { printf("%s%u", i?" ":"", ck_buf[i]); }
+       printf("}\n");
+
+       oid = NULL;
+       rval = ber_decode(0, &asn_DEF_RELATIVE_OID, (void *)&oid, buf, len);
+       assert(rval.code == RC_OK);
+
+       assert((ssize_t)oid->size == (ssize_t)len - 2);
+
+       /*
+        * Print the contents for visual debugging.
+        */
+       printf("RELATIVE_OID_print() => ");
+       RELATIVE_OID_print(&asn_DEF_RELATIVE_OID, oid, 0, _print, 0);
+       printf("\n");
+
+       memset(arcs, 'A', sizeof(arcs));
+    alen = RELATIVE_OID_get_arcs(oid, arcs, sizeof(arcs) / sizeof(arcs[0]));
+    assert(alen > 0);
+       assert((size_t)alen == ck_len);
+
+       /*
+        * Make sure they are equivalent.
+        */
+       printf("RELATIVE_OID_get_arcs() => {");
+       for(i = 0; i < (size_t)alen; i++) {
+        printf(" %" PRIu32, arcs[i]);
+        assert(arcs[i] == ck_buf[i]);
+       }
+       printf(" }\n");
+       ASN_STRUCT_FREE(asn_DEF_RELATIVE_OID, oid);
+}
+
+static int
+check_speed() {
+       uint8_t buf[] = { 0x80 | 7, 0x80 | 2, 0x80 | 3, 0x80 | 4, 13 };
+       int ret = 0;
+       int cycles = 100000000;
+       double a, b, c;
+       struct timeval tv;
+       uint32_t value;
+       int i;
+
+    ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
+    assert(ret == 0);
+       assert(value == 0x7040c20d);
+
+       gettimeofday(&tv, 0);
+       a = tv.tv_sec + tv.tv_usec / 1000000.0;
+       for(i = 0; i < cycles; i++) {
+               ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
+       }
+       assert(ret == 0);
+       assert(value == 0x7040c20d);
+       gettimeofday(&tv, 0);
+       b = tv.tv_sec + tv.tv_usec / 1000000.0;
+       for(i = 0; i < cycles; i++) {
+        ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
+    }
+       assert(ret == 0);
+       assert(value == 0x7040c20d);
+       gettimeofday(&tv, 0);
+       c = tv.tv_sec + tv.tv_usec / 1000000.0;
+
+       a = b - a;
+       b = c - b;
+       printf("Time for single_arc(): %f\n", a);
+       printf("Time for  get_arc_l(): %f\n", b);
+
+       return 0;
+}
+
+#define CHECK_PARSE(a, b) check_parse(__LINE__, a, b)
+static void check_parse(int lineno, const char *oid_txt, int retval) {
+       int ret;
+       uint32_t arcs[2];
+       const char *p = oid_txt - 13;
+       assert(p < oid_txt);
+
+       ret = OBJECT_IDENTIFIER_parse_arcs(oid_txt, -1, arcs, 2, &p);
+       printf("%03d: [%s] => %d == %d\n", lineno, oid_txt, ret, retval);
+       assert(ret == retval);
+       assert(p >= oid_txt);
+}
+
+static void
+check_xer(int lineno, asn_TYPE_descriptor_t *td, ssize_t expect_arcs, char *xer,
+          const asn_oid_arc_t *expected_arcs) {
+    asn_dec_rval_t rc;
+    void *st = 0;
+    uint32_t arcs[10];
+    ssize_t got_arcs;
+    ssize_t i;
+
+    printf("%03d: [%s] => ", lineno, xer);
+    fflush(stdout);
+    rc = td->op->xer_decoder(0, td, (void **)&st, "t", xer, strlen(xer));
+    if(expect_arcs == -1) {
+               if(rc.code != RC_OK) {
+                       printf("-1\n");
+                       ASN_STRUCT_FREE(*td, st);
+                       return;
+               }
+       }
+       assert(rc.code == RC_OK);
+
+    if(td == &asn_DEF_OBJECT_IDENTIFIER) {
+        got_arcs = OBJECT_IDENTIFIER_get_arcs(st, arcs,
+                                              sizeof(arcs) / sizeof(arcs[0]));
+    } else if(td == &asn_DEF_RELATIVE_OID) {
+        got_arcs =
+            RELATIVE_OID_get_arcs(st, arcs, sizeof(arcs) / sizeof(arcs[0]));
+    } else {
+        assert(!"Unreachable");
+    }
+       assert(got_arcs < 10);
+       if(expect_arcs == -1) {
+               assert(got_arcs == -1);
+               ASN_STRUCT_FREE(*td, st);
+               return;
+       }
+       for(i = 0; i < got_arcs; i++) {
+               if(i) printf(".");
+        printf("%" PRIu32, arcs[i]);
+        if(arcs[i] != expected_arcs[i]) {
+            printf(" != %" PRIu32 "\n", expected_arcs[i]);
+        }
+        assert(arcs[i] == expected_arcs[i]);
+       }
+       printf(": %zd == %zd\n", got_arcs, expect_arcs);
+       assert(got_arcs == expect_arcs);
+       ASN_STRUCT_FREE(*td, st);
+}
+
+#define CHECK_OID(n)                                            \
+    check_OID(__LINE__, buf##n, sizeof(buf##n), buf##n##_check, \
+              sizeof(buf##n##_check) / sizeof(buf##n##_check[0]))
+#define CHECK_ROID(n)                                            \
+    check_ROID(__LINE__, buf##n, sizeof(buf##n), buf##n##_check, \
+               sizeof(buf##n##_check) / sizeof(buf##n##_check[0]))
+
+static void
+check_binary_parsing() {
+
+    /* {0 0} */
+       uint8_t buf0[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x01,   /* Length */
+               0x00
+       };
+       uint32_t buf0_check[] = { 0, 0 };
+
+    /* {joint-iso-itu-t 230 3} */
+       uint8_t buf1[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x03,   /* Length */
+               0x82, 0x36, 0x03
+       };
+       uint32_t buf1_check[] = { 2, 230, 3 };
+
+       /* {joint-iso-itu-t 42 } */
+       uint8_t buf2[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x01,   /* Length */
+               0x7A
+       };
+       uint32_t buf2_check[] = { 2, 42 };
+
+       /* {joint-iso-itu-t 25957 } */
+       uint8_t buf3[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x03,   /* Length */
+               0x81, 0x80 + 0x4B, 0x35
+       };
+       uint32_t buf3_check[] = { 2, 25957 };
+
+       /* { jounsigned-iso-itu-t 2 1 1 } */
+       uint8_t buf4[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x03,   /* Length */
+               0x52, 0x01, 0x01
+       };
+       uint32_t buf4_check[] = { 2, 2, 1, 1 };
+
+       /* { jounsigned-iso-itu-t 2 1 0 1 } */
+       uint8_t buf5[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x04,   /* Length */
+               0x52, 0x01, 0x00, 0x01
+       };
+       uint32_t buf5_check[] = { 2, 2, 1, 0, 1 };
+
+       /* {joint-iso-itu-t 25957 } */
+       uint8_t buf6[] = {
+               0x06,   /* OBJECT IDENTIFIER */
+               0x0c,   /* Length */
+               0x2a, 0x03, 0x01, 0x01, 0x01, 0x81, 0xaa, 0x11, 0x03, 0x05, 0x01, 0x01
+       };
+       uint32_t buf6_check[] = { 1, 2, 3, 1, 1, 1, 21777, 3, 5, 1, 1 };
+
+       /* {0 0} */
+       uint8_t buf10[] = {
+               0x0D,   /* RELATIVE-OID */
+               0x01,   /* Length */
+               0x00
+       };
+       uint32_t buf10_check[] = { 0 };
+
+    /* {0 0} */
+       uint8_t buf11[] = {
+               0x0D,   /* RELATIVE-OID */
+               0x02,   /* Length */
+               0x00, 0x00
+       };
+       uint32_t buf11_check[] = { 0, 0 };
+
+       /* {8571 3 2} */
+       uint8_t buf12[] = {
+               0x0D,   /* RELATIVE-OID */
+               0x04,   /* Length */
+               0xC2, 0x7B, 0x03, 0x02
+       };
+       uint32_t buf12_check[] = { 8571, 3, 2 };
+
+       CHECK_OID(0);
+       CHECK_OID(1);
+       CHECK_OID(2);
+       CHECK_OID(3);
+       CHECK_OID(4);
+       CHECK_OID(5);
+       CHECK_OID(6);
+
+       CHECK_ROID(10);
+       CHECK_ROID(11);
+       CHECK_ROID(12);
+}
+
+static void
+check_text_parsing() {
+    CHECK_PARSE("", 0);
+    CHECK_PARSE(" ", 0);
+       CHECK_PARSE(".", -1);
+       CHECK_PARSE(" .", -1);
+       CHECK_PARSE(".1", -1);
+       CHECK_PARSE("1.", -1);
+       CHECK_PARSE("1. ", -1);
+       CHECK_PARSE(".1. ", -1);
+       CHECK_PARSE(" .1. ", -1);
+       CHECK_PARSE(" 1", 1);
+       CHECK_PARSE(" 1.2", 2);
+       CHECK_PARSE(" 1.", -1);
+       CHECK_PARSE(" 1. ", -1);
+       CHECK_PARSE("1. ", -1);
+       CHECK_PARSE("1.2", 2);
+       CHECK_PARSE("1.2 ", 2);
+       CHECK_PARSE("1.2  ", 2);
+       CHECK_PARSE("  1.2  ", 2);
+       CHECK_PARSE("1. 2", -1);
+       CHECK_PARSE("1 .2", -1);
+       CHECK_PARSE(" 1 .2", -1);
+       CHECK_PARSE(" 1 .2 ", -1);
+       CHECK_PARSE("1 .2 ", -1);
+       CHECK_PARSE("1.+1", -1);
+       CHECK_PARSE("2.0", 2);
+       CHECK_PARSE("2.1", 2);
+       CHECK_PARSE("10.30.234.234", 4);
+       CHECK_PARSE("10.30.234.234 ", 4);
+       CHECK_PARSE("10.30.234. 234 ", -1);
+       CHECK_PARSE("10.30.234.234.", -1);
+       CHECK_PARSE("1.2000000000.3", 3);
+       CHECK_PARSE("1.2147483647.3", 3);
+    CHECK_PARSE("1.4294967295.3", 3);
+    CHECK_PARSE("1.4294967296.3", -1); /* overflow on ILP32 */
+    CHECK_PARSE("1.3000000000.3", 3);
+    CHECK_PARSE("1.4000000000.3", 3);
+    CHECK_PARSE("1.5000000000.3", -1);
+    CHECK_PARSE("1.6000000000.3", -1);
+    CHECK_PARSE("1.9000000000.3", -1);
+       CHECK_PARSE("1.900a0000000.3", -1);
+       CHECK_PARSE("1.900a.3", -1);
+}
+
+#define CHECK_XER(a, b, c, data) check_xer(__LINE__, &asn_DEF_##a, b, c, data)
+
+static void
+check_xer_parsing() {
+    asn_oid_arc_t zero_zero[] = {0, 0};
+    asn_oid_arc_t zero_one[] = {0, 1};
+    asn_oid_arc_t one_zero[] = {1, 0};
+    asn_oid_arc_t one_one[] = {1, 1};
+    asn_oid_arc_t one_two[] = {1, 2};
+    asn_oid_arc_t two_one[] = {2, 1};
+    asn_oid_arc_t one_two_three[] = {1, 2,3};
+
+    CHECK_XER(RELATIVE_OID, -1, "<t></t>", 0);
+       CHECK_XER(RELATIVE_OID, -1, "<t>1.</t>", 0);
+    CHECK_XER(RELATIVE_OID, -1, "<t>2.1.</t>", 0);
+    CHECK_XER(RELATIVE_OID, 2, "<t>0.0</t>", zero_zero);
+    CHECK_XER(RELATIVE_OID, 2, "<t>0.1</t>", zero_one);
+    CHECK_XER(RELATIVE_OID, 2, "<t>1.0</t>", one_zero);
+    CHECK_XER(RELATIVE_OID, 2, "<t>1.2</t>", one_two);
+    CHECK_XER(RELATIVE_OID, -1, "<t>1.-2</t>", 0);
+    CHECK_XER(RELATIVE_OID, -1, "<t>1.+2</t>", 0);
+    CHECK_XER(RELATIVE_OID, 3, "<t>1.2.3</t>", one_two_three);
+    CHECK_XER(RELATIVE_OID, 3, "<t> 1.2.3 </t>", one_two_three);
+    CHECK_XER(RELATIVE_OID, -1, "<t>1.2.3 1</t>", 0);
+       CHECK_XER(RELATIVE_OID, 2, "<t>2.1</t>", two_one);
+
+       CHECK_XER(OBJECT_IDENTIFIER, -1, "<t></t>", 0);
+       CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1</t>", 0);
+       CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.</t>", 0);
+       CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>2.1.</t>", 0);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>0.0</t>", zero_zero);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>0.1</t>", zero_one);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.0</t>", one_zero);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.1</t>", one_one);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.2</t>", one_two);
+    CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.-2</t>", 0);
+    CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.+2</t>", 0);
+    CHECK_XER(OBJECT_IDENTIFIER, 3, "<t>1.2.3</t>", one_two_three);
+    CHECK_XER(OBJECT_IDENTIFIER, 3, "<t> 1.2.3 </t>", one_two_three);
+    CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.2.3 1</t>", 0);
+    CHECK_XER(OBJECT_IDENTIFIER, 2, "<t> 2.1 </t>", two_one);
+}
+
+int
+main() {
+    check_binary_parsing();
+    check_text_parsing();
+    check_xer_parsing();
+
+       if(getenv("CHECK_SPEED")) {
+               /* Useful for developers only */
+               check_speed();
+       }
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-PER-INTEGER.c b/tests/tests-skeletons/check-PER-INTEGER.c
new file mode 100644 (file)
index 0000000..2e07a21
--- /dev/null
@@ -0,0 +1,232 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <INTEGER.h>
+#include <INTEGER.c>
+#include <per_support.c>
+#include <per_support.h>
+
+static int FailOut(const void *data, size_t size, void *op_key) {
+    (void)data;
+    (void)size;
+    (void)op_key;
+       assert(!"UNREACHABLE");
+       return 0;
+}
+
+static void normalize(asn_per_outp_t *po) {
+       if(po->nboff >= 8) {
+               po->buffer += (po->nboff >> 3);
+               po->nbits  -= (po->nboff & ~0x07);
+               po->nboff  &= 0x07;
+       }
+}
+
+static void
+check_per_encode_constrained(int lineno, int unsigned_, long value, long lbound, unsigned long ubound, int bit_range) {
+       INTEGER_t st;
+       INTEGER_t *reconstructed_st = 0;
+       struct asn_INTEGER_specifics_s specs;
+       struct asn_per_constraints_s cts;
+       asn_enc_rval_t enc_rval;
+       asn_dec_rval_t dec_rval;
+       asn_per_outp_t po;
+       asn_per_data_t pd;
+
+       if(unsigned_)
+               printf("%d: Recoding %s %lu [%ld..%lu]\n", lineno,
+                 unsigned_ ? "unsigned" : "signed", value, lbound, ubound);
+       else
+               printf("%d: Recoding %s %ld [%ld..%lu]\n", lineno,
+                 unsigned_ ? "unsigned" : "signed", value, lbound, ubound);
+
+    if(ubound > LONG_MAX) {
+        printf("Skipped test, unsupported\n");
+        return;
+    }
+
+       memset(&st, 0, sizeof(st));
+       memset(&po, 0, sizeof(po));
+       memset(&pd, 0, sizeof(pd));
+       memset(&cts, 0, sizeof(cts));
+       memset(&specs, 0, sizeof(specs));
+
+       cts.value.flags = APC_CONSTRAINED;
+       cts.value.range_bits = bit_range;
+       cts.value.effective_bits = bit_range;
+       cts.value.lower_bound = lbound;
+       cts.value.upper_bound = ubound;
+
+       if(unsigned_)
+               asn_ulong2INTEGER(&st, (unsigned long)value);
+       else
+               asn_long2INTEGER(&st, value);
+
+       po.buffer = po.tmpspace;
+       po.nboff = 0;
+       po.nbits = 8 * sizeof(po.tmpspace);
+       po.output = FailOut;
+
+       specs.field_width = sizeof(long);
+       specs.field_unsigned = unsigned_;
+
+       asn_DEF_INTEGER.specifics = &specs;
+       enc_rval = INTEGER_encode_uper(&asn_DEF_INTEGER, &cts, &st, &po);
+       assert(enc_rval.encoded == 0);
+
+       normalize(&po);
+
+       assert(po.buffer == &po.tmpspace[bit_range / 8]);
+
+       if(unsigned_) {
+               unsigned long recovered_value =
+                         ((uint32_t)po.tmpspace[0] << 24)
+                       | ((uint32_t)po.tmpspace[1] << 16)
+                       | ((uint32_t)po.tmpspace[2] << 8)
+                       | ((uint32_t)po.tmpspace[3] << 0);
+               recovered_value >>= (32 - bit_range);
+               recovered_value += cts.value.lower_bound;
+               assert(recovered_value == (unsigned long)value);
+       } else {
+               long recovered_value =
+                         ((uint32_t)po.tmpspace[0] << 24)
+                       | ((uint32_t)po.tmpspace[1] << 16)
+                       | ((uint32_t)po.tmpspace[2] << 8)
+                       | ((uint32_t)po.tmpspace[3] << 0);
+               recovered_value = (unsigned long)recovered_value >> (32 - bit_range);
+        if(per_long_range_unrebase(recovered_value, cts.value.lower_bound,
+                                   cts.value.upper_bound, &recovered_value)
+           < 0) {
+            assert(!"Unreachable");
+        }
+               assert(recovered_value == value);
+       }
+       assert(po.nboff == (size_t)((bit_range == 32) ? 0 : (8 - (32 - bit_range))));
+       assert(po.nbits ==  8 * (sizeof(po.tmpspace) - (po.buffer-po.tmpspace)));
+       assert(po.flushed_bytes == 0);
+
+       pd.buffer = po.tmpspace;
+       pd.nboff = 0;
+       pd.nbits = 8 * (po.buffer - po.tmpspace) + po.nboff;
+       pd.moved = 0;
+       dec_rval = INTEGER_decode_uper(0, &asn_DEF_INTEGER, &cts,
+                                       (void **)&reconstructed_st, &pd);
+       assert(dec_rval.code == RC_OK);
+       if(unsigned_) {
+               unsigned long reconstructed_value = 0;
+               asn_INTEGER2ulong(reconstructed_st, &reconstructed_value);
+               assert(reconstructed_value == (unsigned long)value);
+       } else {
+               long reconstructed_value = 0;
+               asn_INTEGER2long(reconstructed_st, &reconstructed_value);
+               assert(reconstructed_value == value);
+       }
+       ASN_STRUCT_RESET(asn_DEF_INTEGER, &st);
+       ASN_STRUCT_FREE(asn_DEF_INTEGER, reconstructed_st);
+}
+
+#define        CHECK(u, v, l, r, b)    \
+       check_per_encode_constrained(__LINE__, u, v, l, r, b)
+
+int
+main() {
+  int unsigned_;
+  for(unsigned_ = 0; unsigned_ < 2; unsigned_++) {
+       int u = unsigned_;
+
+       /* Encode a signed 0x8babab into a range constrained by 0..2^29-1 */
+       CHECK(u, 0x8babab, 0, 536870911UL, 29);
+       CHECK(u, 0x8babab, 0, 1073741823UL, 30);
+       CHECK(u, 0x8babab, 0, 2147483647UL, 31);
+
+       CHECK(u, 0x8babab, 10, 536870901UL, 29);
+       CHECK(u, 0x8babab, 10, 1073741803UL, 30);
+       CHECK(u, 0x8babab, 10, 2147483607UL, 31);
+
+       CHECK(0, 0x8babab, -10, 536870901UL, 29);
+       CHECK(0, 0x8babab, -10, 1073741803UL, 30);
+       CHECK(0, 0x8babab, -10, 2147483607UL, 31);
+
+       CHECK(u, 11, 10, 536870901UL, 29);
+       CHECK(u, 11, 10, 1073741803UL, 30);
+       CHECK(u, 11, 10, 2147483607UL, 31);
+
+       CHECK(0, 1, -10, 536870901UL, 29);
+       CHECK(0, 1, -10, 1073741803UL, 30);
+       CHECK(0, 1, -10, 2147483607UL, 31);
+
+       CHECK(u, 10, 10, 536870901UL, 29);
+       CHECK(u, 10, 10, 1073741803UL, 30);
+       CHECK(u, 10, 10, 2147483607UL, 31);
+
+       CHECK(0, 0, -10, 536870901UL, 29);
+       CHECK(0, 0, -10, 1073741803UL, 30);
+       CHECK(0, 0, -10, 2147483607UL, 31);
+
+       CHECK(0, -1, -10, 536870901UL, 29);
+       CHECK(0, -1, -10, 1073741803UL, 30);
+       CHECK(0, -1, -10, 2147483607UL, 31);
+
+       CHECK(0, -10, -10, 536870901UL, 29);
+       CHECK(0, -10, -10, 1073741803UL, 30);
+       CHECK(0, -10, -10, 2147483607UL, 31);
+
+       CHECK(u, 536870901UL, 10, 536870901UL, 29);
+       CHECK(u, 1073741803UL, 10, 1073741803UL, 30);
+       CHECK(u, 2147483607UL, 10, 2147483607UL, 31);
+
+       CHECK(0, 536870901UL, -10, 536870901UL, 29);
+       CHECK(0, 1073741803UL, -10, 1073741803UL, 30);
+       CHECK(0, 2147483607UL, -10, 2147483607UL, 31);
+
+       CHECK(0, -2147483648, -2147483648, 2147483647, 32);
+       CHECK(0, -10, -2147483648, 2147483647, 32);
+       CHECK(0,  -1, -2147483648, 2147483647, 32);
+       CHECK(0,   0, INT32_MIN, INT32_MAX, 32);
+       CHECK(0,   0, -2147483648, 2147483647, 32);
+       CHECK(0,   1, -2147483648, 2147483647, 32);
+       CHECK(0,  10, -2147483648, 2147483647, 32);
+       CHECK(0,  2147483647, -2147483648, 2147483647, 32);
+
+       CHECK(1,  0, 0, 4294967295UL, 32);
+       CHECK(1,  1, 0, 4294967295UL, 32);
+       CHECK(1, 10, 0, 4294967295UL, 32);
+       CHECK(1, 2000000000, 0, 4294967295UL, 32);
+       CHECK(1, 2147483647, 0, 4294967295UL, 32);
+
+#ifdef  TEST_64BIT
+       CHECK(1, 2147483648, 0, 4294967295UL, 32);
+       CHECK(1, 4000000000, 0, 4294967295UL, 32);
+       CHECK(1, 4294967295UL, 0, 4294967295UL, 32);
+#endif
+
+       CHECK(1, 10, 10, 4294967285UL, 32);
+       CHECK(1, 11, 10, 4294967285UL, 32);
+
+#ifdef  TEST_64BIT
+       if(sizeof(long) > sizeof(uint32_t)) {
+               CHECK(0,   0, -10, 4294967285UL, 32);
+               CHECK(0,   1, -10, 4294967285UL, 32);
+               CHECK(0,  -1, -10, 4294967285UL, 32);
+               CHECK(0, -10, -10, 4294967285UL, 32);
+               CHECK(0, -10, -10, 4294967285UL, 32);
+               CHECK(0, 0x8babab, -10, 4294967285UL, 32);
+
+               CHECK(u, 0x8babab, 0, 4294967295UL, 32);
+               CHECK(u, 11, 10, 4294967205UL, 32);
+               CHECK(u, 10, 10, 4294967205UL, 32);
+               CHECK(u, 4294967205UL, 10, 4294967285UL, 32);
+
+               CHECK(0, 4294967205UL, -10, 4294967285UL, 32);
+               CHECK(u, 4294967295UL, 1, 4294967295UL, 32);
+
+               CHECK(u, 2000000000, 0, 4294967295UL, 32);
+               CHECK(u, 2147483647, 0, 4294967295UL, 32);
+               CHECK(u, 2147483648, 0, 4294967295UL, 32);
+               CHECK(u, 4000000000, 0, 4294967295UL, 32);
+       }
+#endif
+ }
+
+  return 0;
+}
diff --git a/tests/tests-skeletons/check-PER-UniversalString.c b/tests/tests-skeletons/check-PER-UniversalString.c
new file mode 100644 (file)
index 0000000..083493d
--- /dev/null
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <assert.h>
+#include <sys/time.h>
+
+#include <UniversalString.h>
+#include <per_support.h>
+
+static void
+check_encode_failed(asn_TYPE_descriptor_t *td, const char *buf, size_t buflen) {
+    uint8_t uper_output_buffer[32];
+    UniversalString_t *st_in;
+    char error_buf[128];
+    size_t error_buf_len = sizeof(error_buf);
+
+    st_in = OCTET_STRING_new_fromBuf(td, buf, buflen);
+    assert(st_in);
+    assert(st_in->size == buflen);
+
+    /* First signal that something is wrong with the length */
+    int st_in_ct = asn_check_constraints(td, st_in, error_buf, &error_buf_len);
+    assert(st_in_ct != 0);
+    fprintf(stderr, "%s\n", error_buf);
+
+    /* Second signal that something is wrong with the length */
+    asn_enc_rval_t enc = uper_encode_to_buffer(td, 0, st_in, uper_output_buffer,
+                                               sizeof(uper_output_buffer));
+    assert(enc.encoded == -1);
+
+    ASN_STRUCT_FREE(*td, st_in);
+}
+
+static void
+check_round_trip_OK(asn_TYPE_descriptor_t *td, const char *buf, size_t buflen) {
+    uint8_t uper_output_buffer[32];
+    UniversalString_t *st_in;
+    UniversalString_t *st_out = 0;
+
+    st_in = OCTET_STRING_new_fromBuf(td, buf, buflen);
+    assert(st_in);
+    assert(st_in->size == buflen);
+
+    int st_in_ct = asn_check_constraints(td, st_in, NULL, NULL);
+    assert(st_in_ct == 0);
+    asn_enc_rval_t enc =
+        uper_encode_to_buffer(td, 0, st_in,
+                              uper_output_buffer, sizeof(uper_output_buffer));
+    assert(enc.encoded > 0);
+
+    asn_dec_rval_t dec =
+        uper_decode(0, &asn_DEF_UniversalString, (void **)&st_out,
+                    uper_output_buffer, (enc.encoded + 7) / 8, 0, 0);
+    int st_out_ct = asn_check_constraints(td, st_out, NULL, NULL);
+    assert(st_out_ct == 0);
+    assert(dec.consumed == (size_t)enc.encoded);
+    assert(st_in->size == st_out->size);
+    assert(memcmp(st_in->buf, st_out->buf, st_in->size) == 0);
+    assert(st_out->size == buflen);
+    assert(memcmp(st_out->buf, buf, buflen) == 0);
+
+    ASN_STRUCT_FREE(*td, st_in);
+    ASN_STRUCT_FREE(*td, st_out);
+}
+
+int
+main() {
+    static char UniversalString_data[] = { 0, 0, 0, 65, 0, 0, 0, 65 };
+
+    check_round_trip_OK(&asn_DEF_UniversalString, UniversalString_data, 0);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 1);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 2);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 3);
+    check_round_trip_OK(&asn_DEF_UniversalString, UniversalString_data, 4);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 5);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 6);
+    check_encode_failed(&asn_DEF_UniversalString, UniversalString_data, 7);
+    check_round_trip_OK(&asn_DEF_UniversalString, UniversalString_data, 8);
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-PER-support.c b/tests/tests-skeletons/check-PER-support.c
new file mode 100644 (file)
index 0000000..f2b2542
--- /dev/null
@@ -0,0 +1,277 @@
+#include <assert.h>
+#include <per_support.h>
+
+static void put(asn_per_outp_t *po, size_t length) {
+    fprintf(stderr, "put(%zd)\n", length);
+    do {
+        int need_eom = 123;
+        ssize_t may_write = uper_put_length(po, length, &need_eom);
+        fprintf(stderr, "  put %zu\n", may_write);
+        assert(may_write >= 0);
+        assert((size_t)may_write <= length);
+        assert(need_eom != 123);
+        length -= may_write;
+        if(need_eom) {
+            assert(length == 0);
+            if(uper_put_length(po, 0, 0)) {
+                assert(!"Unreachable");
+            }
+            fprintf(stderr, "  put EOM 0\n");
+        }
+    } while(length);
+    fprintf(stderr, "put(...) in %zu bits\n", po->nboff);
+    assert(po->nboff != 0);
+    assert(po->flushed_bytes == 0);
+}
+
+static size_t get(asn_per_outp_t *po) {
+    asn_bit_data_t data;
+    memset(&data, 0, sizeof(data));
+    data.buffer = po->tmpspace;
+    data.nboff = 0;
+    data.nbits = 8 * (po->buffer - po->tmpspace) + po->nboff;
+
+    fprintf(stderr, "get(): %s\n", asn_bit_data_string(&data));
+
+    size_t length = 0;
+    int repeat = 0;
+    do {
+        ssize_t n = uper_get_length(&data, -1, 0, &repeat);
+        fprintf(stderr, "  get = %zu +%zd\n", length, n);
+        assert(n >= 0);
+        length += n;
+    } while(repeat);
+    fprintf(stderr, "get() = %zu\n", length);
+
+    return length;
+}
+
+static void
+check_round_trip(size_t length) {
+    fprintf(stderr, "\nRound-trip for %zu\n", length);
+    asn_per_outp_t po;
+
+    memset(&po, 0, sizeof(po));
+    po.buffer = po.tmpspace;
+    po.nbits = 8 * sizeof(po.tmpspace);
+
+    put(&po, length);
+    size_t recovered = get(&po);
+
+    assert(recovered == length);
+}
+
+/*
+ * Checks that we can get the PER length that we have just put,
+ * and receive the same value.
+ */
+static void
+check_round_trips() {
+    check_round_trip(0);
+    check_round_trip(1);
+    check_round_trip(127);
+    check_round_trip(128);
+    check_round_trip(129);
+    check_round_trip(255);
+    check_round_trip(256);
+    check_round_trip(65534);
+    check_round_trip(65535);
+    check_round_trip(65536);
+    check_round_trip(65538);
+    check_round_trip(128000);
+    for(size_t i = 1; i < 10; i++) {
+        check_round_trip(i*16384 - 1);
+        check_round_trip(i*16384);
+        check_round_trip(i*16384 + 1);
+    }
+}
+
+#define OK_UNREBASE(w, l, u, c) check_unrebase(__LINE__, 0, w, l, u, c)
+#define NO_UNREBASE(w, l, u) check_unrebase(__LINE__, 1, w, l, u, 0)
+
+static void
+check_unrebase(int lineno, int expected_to_fail, unsigned long wire_value,
+               long lb, long ub, long control) {
+    fprintf(stderr, "%03d: Checking recovery of %lu (%ld..%ld)", lineno,
+            wire_value, lb, ub);
+    if(expected_to_fail) {
+        fprintf(stderr, " to FAIL\n");
+    } else {
+        fprintf(stderr, " into %ld\n", control);
+    }
+
+    long outcome;
+    int ret = per_long_range_unrebase(wire_value, lb, ub, &outcome);
+    if(ret == 0) {
+        assert(!expected_to_fail);
+    } else {
+        assert(expected_to_fail);
+        return;
+    }
+
+    assert(outcome == control);
+}
+
+
+#define OK_REBASE_ROUNDTRIP(v, l, u) \
+    check_range_rebase_round_trip(__LINE__, 0, v, l, u)
+
+#define NO_REBASE_ROUNDTRIP(v, l, u) \
+    check_range_rebase_round_trip(__LINE__, 1, v, l, u)
+
+static void
+check_range_rebase_round_trip(int lineno, int expected_to_fail, long value,
+                              long lb, long ub) {
+    unsigned long wire_value;
+    int ret;
+
+    fprintf(stderr, "%03d: Rebase %ld into (%ld..%ld) %s\n", lineno, value, lb,
+            ub, expected_to_fail ? "FAIL" : "OK");
+
+    ret = per_long_range_rebase(value, lb, ub, &wire_value);
+    if(ret != 0) {
+        if(expected_to_fail) {
+            return;
+        } else {
+            fprintf(stderr, "%03d: Original %ld (%ld..%ld) failed to rebase\n",
+                    lineno, value, lb, ub);
+            assert(ret == 0);
+        }
+    } if(expected_to_fail) {
+        fprintf(
+            stderr,
+            "%03d: Original %ld (%ld..%ld) rebased to %lu where it shouldn't\n",
+            lineno, value, lb, ub, wire_value);
+        assert(expected_to_fail && ret == -1);
+    }
+
+    fprintf(stderr, "%03d: Recover %lu into (%ld..%ld)\n", lineno,
+            wire_value, lb, ub);
+
+    long recovered;
+    ret = per_long_range_unrebase(wire_value, lb, ub, &recovered);
+    if(ret != 0) {
+        fprintf(stderr, "%03d: Wire value %lu (%ld..%ld) failed to unrebase\n",
+                lineno, wire_value, lb, ub);
+        assert(ret == 0);
+    }
+
+    if(value != recovered) {
+        fprintf(stderr,
+                "%03d: Value %ld (%ld..%ld) failed to round-trip (=%ld)\n",
+                lineno, value, lb, ub, recovered);
+        assert(value == recovered);
+    }
+
+}
+
+static void
+check_range_rebase() {
+
+    OK_UNREBASE(0U, 0, 0, 0);
+    NO_UNREBASE(1U, 0, 0);
+    OK_UNREBASE(0, LONG_MAX, LONG_MAX, LONG_MAX);
+    NO_UNREBASE(1, LONG_MAX, LONG_MAX);
+    OK_UNREBASE(0, LONG_MAX-1, LONG_MAX-1, LONG_MAX-1);
+    NO_UNREBASE(1, LONG_MAX-1, LONG_MAX-1);
+
+    OK_REBASE_ROUNDTRIP(0, 0, 0);
+    OK_REBASE_ROUNDTRIP(0, 0, 1);
+    OK_REBASE_ROUNDTRIP(1, 0, 1);
+
+    NO_REBASE_ROUNDTRIP(-1, 0, 0);
+    NO_REBASE_ROUNDTRIP(1, 0, 0);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, 0, 0);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, 0, 0);
+
+    OK_REBASE_ROUNDTRIP(-2, -2, -1);
+    OK_REBASE_ROUNDTRIP(-1, -2, -1);
+    NO_REBASE_ROUNDTRIP(-3, -2, -1);
+    NO_REBASE_ROUNDTRIP(0, -2, -1);
+
+    OK_REBASE_ROUNDTRIP(LONG_MAX, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-1, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(0, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MAX, LONG_MAX);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MAX, LONG_MAX);
+
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-1, LONG_MIN, LONG_MIN);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN, LONG_MIN);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-10, LONG_MAX-10, LONG_MAX-5);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-5, LONG_MAX-10, LONG_MAX-5);
+    OK_REBASE_ROUNDTRIP(LONG_MAX-7, LONG_MAX-10, LONG_MAX-5);
+    NO_REBASE_ROUNDTRIP(LONG_MAX-4, LONG_MAX-10, LONG_MAX-5);
+
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+2, LONG_MIN+1, LONG_MIN+2);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+3, LONG_MIN+1, LONG_MIN+2);
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MIN+1);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, 0);
+    OK_REBASE_ROUNDTRIP(LONG_MIN+1, LONG_MIN, LONG_MIN+1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN+2, LONG_MIN, LONG_MIN+1);
+
+    OK_REBASE_ROUNDTRIP(-1, -1, 1);
+    OK_REBASE_ROUNDTRIP(0, -1, 1);
+    OK_REBASE_ROUNDTRIP(1, -1, 1);
+
+    NO_REBASE_ROUNDTRIP(-2, -1, 1);
+    NO_REBASE_ROUNDTRIP(2, -1, 1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, -1, 1);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, -1, 1);
+
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(1, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN, LONG_MAX);
+    OK_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN, LONG_MAX);
+
+#ifndef  EXPLICIT_32BIT
+    if(sizeof(long) == 8) {
+        OK_REBASE_ROUNDTRIP(0, LONG_MIN, LONG_MAX);
+
+        /* Too wide range, would not fit uint32_t */
+        OK_REBASE_ROUNDTRIP(INT32_MIN, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP(INT32_MAX, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP((long)INT32_MIN - 1, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        OK_REBASE_ROUNDTRIP((long)INT32_MAX + 1, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        NO_REBASE_ROUNDTRIP(LONG_MIN, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, (long)INT32_MIN - 1,
+                            (long)INT32_MAX + 1);
+
+        NO_REBASE_ROUNDTRIP(((long)INT32_MIN)-1, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(((long)INT32_MAX)+1, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(LONG_MIN, INT32_MIN, INT32_MAX);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, INT32_MIN, INT32_MAX);
+    }
+#endif
+
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(0, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(-1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(LONG_MIN + 1, LONG_MIN + 1, LONG_MAX - 1);
+    OK_REBASE_ROUNDTRIP(LONG_MAX - 1, LONG_MIN + 1, LONG_MAX - 1);
+    NO_REBASE_ROUNDTRIP(LONG_MIN, LONG_MIN + 1, LONG_MAX - 1);
+    NO_REBASE_ROUNDTRIP(LONG_MAX, LONG_MIN + 1, LONG_MAX - 1);
+
+    if(sizeof(long) == 8) {
+        NO_REBASE_ROUNDTRIP(LONG_MIN, INT32_MIN + 1, INT32_MAX - 1);
+        NO_REBASE_ROUNDTRIP(LONG_MAX, INT32_MIN + 1, INT32_MAX - 1);
+    }
+}
+
+int main() {
+
+    check_range_rebase();
+    check_round_trips();
+
+}
+
diff --git a/tests/tests-skeletons/check-REAL.c b/tests/tests-skeletons/check-REAL.c
new file mode 100644 (file)
index 0000000..e98684e
--- /dev/null
@@ -0,0 +1,728 @@
+#include <stdio.h>
+#include <assert.h>
+#include <math.h>
+#include <float.h>
+
+/* C11 specifies DBL_TRUE_MIN, might not be immediately available. */
+#ifndef DBL_TRUE_MIN
+#define DBL_TRUE_MIN    4.9406564584124654E-324
+#endif
+
+#include <REAL.h>
+
+static char reconstructed[2][512];
+static int reconstr_lens[2];
+
+static int
+callback(const void *buffer, size_t size, void *app_key) {
+       char *buf = reconstructed[app_key ? 1 : 0];
+       int *len = &reconstr_lens[app_key ? 1 : 0];
+
+       if(*len + size >= sizeof(reconstructed[0]))
+               return -1;
+
+       memcpy(buf + *len, buffer, size);
+       *len += size;
+
+       return 0;
+}
+
+static char *
+d2s(double d, int canonical) {
+       ssize_t s;
+
+       reconstr_lens[canonical] = 0;
+       s = REAL__dump(d, canonical, callback, (void *)(ptrdiff_t)canonical);
+       assert(s > 0 && (size_t)s < sizeof(reconstructed[canonical]));
+       assert(s == reconstr_lens[canonical]);
+       reconstructed[canonical][s] = '\0';     // ASCIIZ
+       return reconstructed[canonical];
+}
+
+/*
+ * Verify that a string representation of a given floating point value
+ * is as given in the (sample) and (canonical_sample) arguments.
+ */
+static void
+check_str_representation(double d, const char *sample,
+                         const char *canonical_sample, int lineno) {
+    char *s0, *s1;
+
+    s0 = d2s(d, 0);
+    s1 = d2s(d, 1);
+
+    if(sample) {
+        printf("%03d: Checking %g->[\"%s\"] against [\"%s\"]%s\n", lineno, d,
+               s0, sample, canonical_sample ? " (canonical follows...)" : "");
+        assert(!strcmp(s0, sample));
+    }
+    if(canonical_sample) {
+        if(*s1 == '<') {
+            printf(
+                "%03d: Checking %g->[\"%s\"] against [\"%s\"] "
+                "(canonical)\n",
+                lineno, d, s1, canonical_sample);
+            assert(!strcmp(s1, canonical_sample));
+        } else {
+            double reconstructed = strtod(s1, 0);
+            printf(
+                "%03d: Checking %g->[\"%s\"] against [\"%s\"]->%g "
+                "(canonical, 𝟄=%.17g %g)\n",
+                lineno, d, s1, canonical_sample, reconstructed,
+                fabs(reconstructed - d), 1e-52);
+            if(d != reconstructed) {
+                printf(
+                    "WARNING: Difference in a small epsilon (given "
+                    "%%.15g=%.15g, %%.17g=%.17g, %%.20g=%.20g, "
+                    "reconstructed %%.15g=%.15g, %%.17g=%.17g, "
+                    "%%.20g=%.20g)!\n",
+                    d, d, d, reconstructed, reconstructed, reconstructed);
+            }
+            assert(fabs(d - reconstructed) < 1e-52);
+        }
+    }
+}
+
+#define        check(rn, d, str1, str2)        \
+       check_impl(rn, d, str1, str2, __LINE__)
+
+static void
+check_impl(REAL_t *rn, double orig_dbl, const char *sample, const char *canonical_sample, int lineno) {
+       double val;
+       uint8_t *p, *end;
+       int ret;
+
+       printf("Line %d: double value %.12f [", lineno, orig_dbl);
+       for(p = (uint8_t *)&orig_dbl, end = p + sizeof(double); p < end ; p++)
+               printf("%02x", *p);
+       printf("] (ilogb %d)\n", ilogb(orig_dbl));
+
+       val = frexp(orig_dbl, &ret);
+       printf("frexp(%f, %d): [", val, ret);
+       for(p = (uint8_t *)&val, end = p + sizeof(double); p < end ; p++)
+               printf("%02x", *p);
+       printf("]\n");
+
+       ret = asn_double2REAL(rn, orig_dbl);
+       assert(ret == 0);
+
+       printf("converted into [");
+       for(p = rn->buf, end = p + rn->size; p < end; p++)
+               printf("%02x", *p);
+       printf("]: %zu\n", rn->size);
+
+       ret = asn_REAL2double(rn, &val);
+       assert(ret == 0);
+
+       printf("and back to double: [");
+       for(p = (uint8_t *)&val, end = p + sizeof(double); p < end ; p++)
+               printf("%02x", *p);
+       printf("] (ilogb %d)\n", ilogb(val));
+
+       printf("%.12f vs %.12f\n", val, orig_dbl);
+       assert((isnan(orig_dbl) && isnan(val)) || val == orig_dbl);
+       printf("OK\n");
+
+       check_str_representation(val, sample, canonical_sample, lineno);
+}
+static void
+check_xer(int fuzzy, double orig_value) {
+       asn_enc_rval_t er;
+       asn_dec_rval_t rc;
+       REAL_t st;
+       REAL_t *newst0 = 0;
+       REAL_t *newst1 = 0;
+       REAL_t **newst0p = &newst0;
+       REAL_t **newst1p = &newst1;
+       double value0, value1;
+       int ret;
+
+       memset(&st, 0, sizeof(st));
+       ret = asn_double2REAL(&st, orig_value);
+       assert(ret == 0);
+
+       reconstr_lens[0] = 0;
+       reconstr_lens[1] = 0;
+       er = xer_encode(&asn_DEF_REAL, &st, XER_F_BASIC, callback, 0);
+       assert(er.encoded == reconstr_lens[0]);
+       er = xer_encode(&asn_DEF_REAL, &st, XER_F_CANONICAL, callback, (void *)1);
+       assert(er.encoded == reconstr_lens[1]);
+       reconstructed[0][reconstr_lens[0]] = 0;
+       reconstructed[1][reconstr_lens[1]] = 0;
+
+       printf("%f vs (%d)[%s] & (%d)%s",
+               orig_value,
+               reconstr_lens[1], reconstructed[1],
+               reconstr_lens[0], reconstructed[0]
+       );
+
+       rc = xer_decode(0, &asn_DEF_REAL, (void **)newst0p,
+               reconstructed[0], reconstr_lens[0]);
+       assert(rc.code == RC_OK);
+       assert(reconstr_lens[0] > 0 && rc.consumed < (size_t)reconstr_lens[0]);
+
+       rc = xer_decode(0, &asn_DEF_REAL, (void **)newst1p,
+               reconstructed[1], reconstr_lens[1]);
+       assert(rc.code == RC_OK);
+       assert(rc.consumed == (size_t)reconstr_lens[1]);
+
+       ret = asn_REAL2double(newst0, &value0);
+       assert(ret == 0);
+       ret = asn_REAL2double(newst1, &value1);
+       assert(ret == 0);
+
+       assert((isnan(value0) && isnan(orig_value))
+               || value0 == orig_value
+               || fuzzy);
+       assert((isnan(value1) && isnan(orig_value))
+               || value1 == orig_value);
+
+       assert(newst0->size == st.size || fuzzy);
+       assert(newst1->size == st.size);
+       assert(fuzzy || memcmp(newst0->buf, st.buf, st.size) == 0);
+       assert(memcmp(newst1->buf, st.buf, st.size) == 0);
+       ASN_STRUCT_RESET(asn_DEF_REAL, &st);
+       ASN_STRUCT_FREE(asn_DEF_REAL, newst0);
+       ASN_STRUCT_FREE(asn_DEF_REAL, newst1);
+}
+
+static void
+check_ber_buffer_twoway(double d, const char *sample, const char *canonical_sample, const uint8_t *inbuf, size_t insize, uint8_t *outbuf, size_t outsize, int lineno) {
+       REAL_t rn;
+       double val;
+       int ret;
+
+       /*
+        * Decode our expected buffer and check that it matches the given (d).
+        */
+       rn.buf = calloc(1, insize + 1); /* By convention, buffers have extra \0 */
+       assert(rn.buf);
+       memcpy(rn.buf, inbuf, insize);
+       rn.size = insize;
+       asn_REAL2double(&rn, &val);
+       if(isnan(val)) assert(isnan(d));
+       if(isnan(d)) assert(isnan(val));
+       if(!isnan(val) && !isnan(d)) {
+               assert(copysign(1.0, d) == copysign(1.0, val));
+               assert(d == val);
+       }
+
+       /*
+        * Encode value and check that it matches our expected buffer.
+        */
+       free(rn.buf);
+       memset(&rn, 0, sizeof(rn));
+       ret = asn_double2REAL(&rn, d);
+       assert(ret == 0);
+       if((size_t)rn.size != outsize) {
+               printf("Encoded %f into %d expected %zd\n",
+                       d, (int)rn.size, outsize);
+               assert((size_t)rn.size == outsize);
+       }
+       assert(memcmp(rn.buf, outbuf, rn.size) == 0);
+       ASN_STRUCT_RESET(asn_DEF_REAL, &rn);
+
+       check_str_representation(d, sample, canonical_sample, lineno);
+}
+
+static void
+check_ber_buffer_oneway(double d, const char *sample, const char *canonical_sample, uint8_t *buf, size_t bufsize, int lineno) {
+       REAL_t rn0;
+       REAL_t rn1;
+       double val0;
+       double val1;
+       uint8_t *p, *end;
+       int ret;
+
+       memset(&rn0, 0, sizeof(rn0));
+       memset(&rn1, 0, sizeof(rn1));
+
+       printf("verify double value %.12f [", d);
+       for(p = (uint8_t *)&d, end = p + sizeof(double); p < end ; p++)
+               printf("%02x", *p);
+       printf("] (ilogb %d)\n", ilogb(d));
+
+       ret = asn_double2REAL(&rn0, d);
+       assert(ret == 0);
+
+       printf("canonical DER: [");
+       for(p = rn0.buf, end = p + rn0.size; p < end; p++)
+               printf("%02x", *p);
+       ret = asn_REAL2double(&rn0, &val0);
+       assert(ret == 0);
+       printf("] => %f\n", val0);
+
+       rn1.buf = buf;
+       rn1.size = bufsize;
+
+       printf("received as:   [");
+       for(p = rn1.buf, end = p + rn1.size; p < end; p++)
+               printf("%02x", *p);
+       ret = asn_REAL2double(&rn1, &val1);
+       assert(ret == 0);
+       printf("] => %f\n", val1);
+
+       printf("%.12f vs %.12f vs %.12f\n", d, val0, val1);
+
+       assert(val0 == d);
+       assert(val1 == d);
+
+       ASN_STRUCT_RESET(asn_DEF_REAL, &rn0);
+
+       check_str_representation(val1, sample, canonical_sample, lineno);
+}
+
+/*
+ * 8.5.7 Verify binary encoding, two-way.
+ */
+static void
+check_ber_857_encoding(int base, int sign, int scaling_factor, int exponent, int mantissa) {
+       uint8_t buf[100];
+       uint8_t *b = buf;
+       int explen, mantlen;
+       REAL_t rn;
+       static REAL_t rn_check;
+       double d;
+       double verify;
+       int baseF = 0;
+       int ret;
+
+#define        BIT(b)  (1<<(b - 1))
+
+       switch(base) {
+       case 0: baseF = 1; break;
+       case 1: baseF = 3; break;
+       case 2: baseF = 4; break;
+       default: assert(base >= 0 && base <= 2);
+       }
+
+       if(exponent >= -128 && exponent <= 127) {
+               explen = 1;
+       } else {
+               assert(exponent > -60000 && exponent < 60000);
+               explen = 2;
+       }
+
+       if(mantissa == 0) {
+               mantlen = 0;
+       } else if(mantissa >= 0 && mantissa <= 255) {
+               mantlen = 1;
+       } else if(mantissa >= 0 && mantissa <= 65535) {
+               mantlen = 2;
+       } else {
+               assert(mantissa >= 0 && mantissa <= 256 * 65536);
+               mantlen = 3;
+       }
+
+       *b = BIT(8) | (sign ? BIT(7) : 0);
+       *b |= (base & 0x03) << 4;       /* 8.5.7.2 */
+       *b |= (scaling_factor & 0x03) << 2;     /* 8.5.7.3 */
+       *b |= ((explen - 1) & 0x03);    /* 8.5.7.4 */
+       b++;
+       switch(explen) {
+       case 2: *b++ = (int8_t)(exponent >> 8); /* Fall through */
+       case 1: *b++ = (int8_t)exponent;    /* Fall through */
+       }
+       switch(mantlen) {
+       case 3: *b++ = (mantissa >> 16) & 0xff; /* Fall through */
+       case 2: *b++ = (mantissa >> 8) & 0xff;  /* Fall through */
+       case 1: *b++ = (mantissa & 0xff);   /* Fall through */
+       }
+
+       verify = (sign ? -1.0 : 1.0) * ldexp(mantissa, exponent * baseF + scaling_factor);
+
+       /* Verify than encoding of this double value round-trips */
+       if(!isinf(verify)) {
+               d = verify;
+               verify = 0.0;
+               ret = asn_double2REAL(&rn_check, d);
+               assert(ret == 0);
+               ret = asn_REAL2double(&rn_check, &verify);
+               assert(ret == 0);
+               assert(d == verify);
+
+               /* Verify with a slight non-friendly offset. Not too easy. */
+               d = verify - 0.13;
+               verify = 0.0;
+               ret = asn_double2REAL(&rn_check, d);
+               assert(ret == 0);
+               ret = asn_REAL2double(&rn_check, &verify);
+               assert(ret == 0);
+               assert(ret == 0);
+               assert(d == verify);
+       }
+
+       verify = (sign ? -1.0 : 1.0) * ldexp(mantissa, exponent * baseF + scaling_factor);
+
+       rn.buf = buf;
+       rn.size = b - buf;
+       ret = asn_REAL2double(&rn, &d);
+       if(!isinf(verify) && (ret != 0 || d != verify)) {
+               printf("Converting B=%d, S=%d, F=%d, E=%d/%d, M=%d/%d\n", (1 << baseF), sign, scaling_factor, exponent, explen, mantissa, mantlen);
+               printf("Verify: %e\n", verify);
+               uint8_t *p;
+               printf("received as:   [");
+               for(p = buf; p < b; p++) printf("%02x", *p);
+               printf("]\n");
+               assert(ret == 0);
+               printf("Converted: %e\n", d);
+               assert(d == verify);
+       }
+}
+
+static void
+check_ber_encoding() {
+#define CHECK_BER_STRICT(v, nocan, can, inbuf, outbuf)                 \
+       check_ber_buffer_twoway(v, nocan, can, inbuf, sizeof(inbuf),    \
+                               outbuf, sizeof(outbuf), __LINE__)
+
+#define CHECK_BER_NONSTRICT(v, nocan, can, buf)        \
+       check_ber_buffer_oneway(v, nocan, can, buf, sizeof(buf), __LINE__)
+
+       /*
+        * X.690 8.4 Encoding of an enumerated value.
+        */
+
+       /* 8.5.2 If the real value is the value plus zero,
+        * there shall be no contents octet in the encoding */
+       { uint8_t b_0[] = {};
+         CHECK_BER_STRICT(0.0, "0", "0", b_0, b_0); }
+
+       /* 8.5.3 When -0 is to be encoded, there shall be only one contents octet */
+       { uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0, b_m0); }
+
+    /* Old way of encoding -0.0: 8.5.6 a) */
+       { uint8_t b_m0[] = { 0x43 };
+         uint8_t b_m0_856a[]   = { 0xC0, 0x00 };  /* #8.5.6 a) */
+         uint8_t b_m0_856a_1[] = { 0xC0, 0x00, 0x00 };
+         uint8_t b_m0_856a_2[] = { 0xC0, 0x00, 0x00, 0x00 };
+         uint8_t b_m0_856a_3[] = { 0xC0, 0x00, 0x00, 0x00, 0x00 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_856a, b_m0);
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_856a_1, b_m0);
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_856a_2, b_m0);
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_856a_3, b_m0); }
+
+       /* 8.5.6 c) => 8.5.9 SpecialRealValue */
+       { uint8_t b_pinf[] = { 0x40 };
+         uint8_t b_minf[] = { 0x41 };
+         uint8_t b_nan[]  = { 0x42 };
+         CHECK_BER_STRICT(INFINITY, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>", b_pinf, b_pinf);
+         CHECK_BER_STRICT(-INFINITY, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>", b_minf, b_minf);
+         CHECK_BER_STRICT(NAN, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>", b_nan, b_nan); }
+
+       /* 8.5.6 b) => 8.5.8 Decimal encoding is used; NR1 form */
+       { uint8_t b_0_nr1[] = { 0x01, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr1, b_0); }
+       { uint8_t b_0_nr1[] = { 0x01, '0', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr1, b_0); }
+       { uint8_t b_0_nr1[] = { 0x01, ' ', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr1, b_0); }
+       { uint8_t b_p0_nr1[] = { 0x01, '+', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr1, b_0); }
+       { uint8_t b_p0_nr1[] = { 0x01, ' ', '+', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr1, b_0); }
+       { uint8_t b_m0_nr1[] = { 0x01, '-', '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr1, b_m0); }
+       { uint8_t b_m0_nr1[] = { 0x01, ' ', '-', '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr1, b_m0); }
+
+       { uint8_t b_1_nr1[] = { 0x01, '1' };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr1, b_1); }
+       { uint8_t b_1_nr1[] = { 0x01, '0', '1' };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr1, b_1); }
+       { uint8_t b_1_nr1[] = { 0x01, ' ', '1' };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr1, b_1); }
+       { uint8_t b_p1_nr1[] = { 0x01, '+', '1' };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_p1_nr1, b_1); }
+       { uint8_t b_p1_nr1[] = { 0x01, ' ', '+', '1' };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_p1_nr1, b_1); }
+       { uint8_t b_m1_nr1[] = { 0x01, '-', '1' };
+         uint8_t b_m1[] = { 0xC0, 0x00, 0x01 };
+         CHECK_BER_STRICT(-1.0, "-1.0", "-1.0E0", b_m1_nr1, b_m1); }
+       { uint8_t b_m1_nr1[] = { 0x01, ' ', '-', '1' };
+         uint8_t b_m1[] = { 0xC0, 0x00, 0x01 };
+         CHECK_BER_STRICT(-1.0, "-1.0", "-1.0E0", b_m1_nr1, b_m1); }
+
+ {
+  uint8_t comma_symbol[] = { '.', ',' };
+  int csi;
+  for(csi = 0; csi < 2; csi++) {
+       uint8_t CS = comma_symbol[csi];
+
+       /* 8.5.6 b) => 8.5.8 Decimal encoding is used; NR2 form */
+       { uint8_t b_0_nr2[] = { 0x02, '0', CS, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr2, b_0); }
+       { uint8_t b_0_nr2[] = { 0x02, '0', '0', CS, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr2, b_0); }
+       { uint8_t b_0_nr2[] = { 0x02, ' ', '0', CS, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr2, b_0); }
+       { uint8_t b_p0_nr2[] = { 0x02, '+', '0', CS, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr2, b_0); }
+       { uint8_t b_p0_nr2[] = { 0x02, ' ', '+', '0', CS, '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr2, b_0); }
+       { uint8_t b_m0_nr2[] = { 0x02, '-', '0', CS, '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr2, b_m0); }
+       { uint8_t b_m0_nr2[] = { 0x02, ' ', '-', '0', CS, '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr2, b_m0); }
+
+       /* 8.5.6 b) => 8.5.8 NR2 "1." */
+       { uint8_t b_1_nr2[] = { 0x02, '1', CS };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr2, b_1); }
+       { uint8_t b_1_nr2[] = { 0x02, '0', '1', CS };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr2, b_1); }
+       { uint8_t b_1_nr2[] = { 0x02, ' ', '1', CS };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_1_nr2, b_1); }
+       { uint8_t b_p1_nr2[] = { 0x02, '+', '1', CS };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_p1_nr2, b_1); }
+       { uint8_t b_p1_nr2[] = { 0x02, ' ', '+', '1', CS };
+         uint8_t b_1[] = { 0x80, 0x00, 0x01 };
+         CHECK_BER_STRICT(1.0, "1.0", "1.0E0", b_p1_nr2, b_1); }
+       { uint8_t b_m1_nr2[] = { 0x02, '-', '1', CS };
+         uint8_t b_m1[] = { 0xC0, 0x00, 0x01 };
+         CHECK_BER_STRICT(-1.0, "-1.0", "-1.0E0", b_m1_nr2, b_m1); }
+       { uint8_t b_m1_nr2[] = { 0x02, ' ', '-', '1', CS };
+         uint8_t b_m1[] = { 0xC0, 0x00, 0x01 };
+         CHECK_BER_STRICT(-1.0, "-1.0", "-1.0E0", b_m1_nr2, b_m1); }
+
+       /* 8.5.6 b) => 8.5.8 NR2 ".5" */
+       { uint8_t b_05_nr2[] = { 0x02, CS, '5' };
+         uint8_t b_05[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_05_nr2, b_05); }
+       { uint8_t b_05_nr2[] = { 0x02, '0', CS, '5' };
+         uint8_t b_05[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_05_nr2, b_05); }
+       { uint8_t b_05_nr2[] = { 0x02, ' ', CS, '5' };
+         uint8_t b_05[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_05_nr2, b_05); }
+       { uint8_t b_p1_nr2[] = { 0x02, '+', CS, '5' };
+         uint8_t b_05[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_p1_nr2, b_05); }
+       { uint8_t b_p1_nr2[] = { 0x02, ' ', '+', CS, '5' };
+         uint8_t b_05[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_p1_nr2, b_05); }
+       { uint8_t b_m05_nr2[] = { 0x02, '-', CS, '5' };
+         uint8_t b_m05[] = { 0xC0, 0xff, 0x01 };
+         CHECK_BER_STRICT(-0.5, "-0.5", "-5.0E-1", b_m05_nr2, b_m05); }
+       { uint8_t b_m05_nr2[] = { 0x02, ' ', '-', CS, '5' };
+         uint8_t b_m05[] = { 0xC0, 0xff, 0x01 };
+         CHECK_BER_STRICT(-0.5, "-0.5", "-5.0E-1", b_m05_nr2, b_m05); }
+
+       /* 8.5.6 b) => 8.5.8 Decimal encoding is used; NR3 form */
+       { uint8_t b_0_nr3[] = { 0x03, '0', CS, '0', 'e', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr3, b_0); }
+       { uint8_t b_0_nr3[] = { 0x03, '0', '0', CS, '0', 'E', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr3, b_0); }
+       { uint8_t b_0_nr3[] = { 0x03, ' ', '0', CS, '0', 'e', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_0_nr3, b_0); }
+       { uint8_t b_p0_nr3[] = { 0x03, '+', '0', CS, '0', 'E', '+', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr3, b_0); }
+       { uint8_t b_p0_nr3[] = { 0x03, ' ', '+', '0', CS, '0', 'e', '+', '0' };
+         uint8_t b_0[] = { };
+         CHECK_BER_STRICT(0.0, "0", "0", b_p0_nr3, b_0); }
+       { uint8_t b_m0_nr3[] = { 0x03, '-', '0', CS, '0', 'E', '-', '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr3, b_m0); }
+       { uint8_t b_m0_nr3[] = { 0x03, ' ', '-', '0', CS, '0', 'e', '-', '0' };
+         uint8_t b_m0[] = { 0x43 };
+         CHECK_BER_STRICT(-0.0, "-0", "-0", b_m0_nr3, b_m0); }
+
+       /* 8.5.6 b) => 8.5.8 NR3 "5.e-1" */
+       { uint8_t b_5_nr3[] = { 0x03, '5', CS, 'e', '-', '1' };
+         uint8_t b_5[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_5_nr3, b_5); }
+       { uint8_t b_5_nr3[] = { 0x03, '0', '5', CS, 'E', '-', '1' };
+         uint8_t b_5[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_5_nr3, b_5); }
+       { uint8_t b_5_nr3[] = { 0x03, ' ', '5', CS, 'e', '-', '1' };
+         uint8_t b_5[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_5_nr3, b_5); }
+       { uint8_t b_p5_nr3[] = { 0x03, '+', '5', CS, 'E', '-', '1' };
+         uint8_t b_5[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_p5_nr3, b_5); }
+       { uint8_t b_p5_nr3[] = { 0x03, ' ', '+', '5', CS, 'e', '-', '1' };
+         uint8_t b_5[] = { 0x80, 0xff, 0x01 };
+         CHECK_BER_STRICT(0.5, "0.5", "5.0E-1", b_p5_nr3, b_5); }
+       { uint8_t b_m5_nr3[] = { 0x03, '-', '5', CS, 'E', '-', '1' };
+         uint8_t b_m5[] = { 0xC0, 0xff, 0x01 };
+         CHECK_BER_STRICT(-0.5, "-0.5", "-5.0E-1", b_m5_nr3, b_m5); }
+       { uint8_t b_m5_nr3[] = { 0x03, ' ', '-', '5', CS, 'e', '-', '1' };
+         uint8_t b_m5[] = { 0xC0, 0xff, 0x01 };
+         CHECK_BER_STRICT(-0.5, "-0.5", "-5.0E-1", b_m5_nr3, b_m5); }
+
+       /* 8.5.6 b) => 8.5.8 NR3 ".5e1" */
+       { uint8_t b_05_nr3[] = { 0x03, CS, '5', 'e', '+', '1' };
+         uint8_t b_05[] = { 0x80, 0x00, 0x05 };
+         CHECK_BER_STRICT(5.0, "5.0", "5.0E0", b_05_nr3, b_05); }
+       { uint8_t b_05_nr3[] = { 0x03, '0', CS, '5', 'E', '+', '1'};
+         uint8_t b_05[] = { 0x80, 0x00, 0x05 };
+         CHECK_BER_STRICT(5.0, "5.0", "5.0E0", b_05_nr3, b_05); }
+       { uint8_t b_05_nr3[] = { 0x03, ' ', CS, '5', 'e', '1'};
+         uint8_t b_05[] = { 0x80, 0x00, 0x05 };
+         CHECK_BER_STRICT(5.0, "5.0", "5.0E0", b_05_nr3, b_05); }
+       { uint8_t b_p1_nr3[] = { 0x03, '+', CS, '5', 'E', '1' };
+         uint8_t b_05[] = { 0x80, 0x00, 0x05 };
+         CHECK_BER_STRICT(5.0, "5.0", "5.0E0", b_p1_nr3, b_05); }
+       { uint8_t b_p1_nr3[] = { 0x03, ' ', '+', CS, '5', 'e', '+', '1' };
+         uint8_t b_05[] = { 0x80, 0x00, 0x05 };
+         CHECK_BER_STRICT(5.0, "5.0", "5.0E0", b_p1_nr3, b_05); }
+       { uint8_t b_m05_nr3[] = { 0x03, '-', CS, '5', 'E', '+', '1' };
+         uint8_t b_m05[] = { 0xC0, 0x00, 0x05 };
+         CHECK_BER_STRICT(-5.0, "-5.0", "-5.0E0", b_m05_nr3, b_m05); }
+       { uint8_t b_m05_nr3[] = { 0x03, ' ', '-', CS, '5', 'e', '1' };
+         uint8_t b_m05[] = { 0xC0, 0x00, 0x05 };
+         CHECK_BER_STRICT(-5.0, "-5.0", "-5.0E0", b_m05_nr3, b_m05); }
+  } /* for(comma symbol) */
+ }
+
+  /* Scan through the range of bits, construct the valid base-2 numbers, and
+   * try two-way conversion with them */
+ {
+  int base, sign, scaling_factor, exponent, mantissa;
+  for(base = 0; base <= 2; base++) {
+    for(sign = 0; sign <= 1; sign++) {
+      for(scaling_factor = 0; scaling_factor <= 3; scaling_factor++) {
+        for(exponent = -1000; exponent < 1000; exponent += (exponent > -990 && exponent < 990) ? 100 : 1) {
+          for(mantissa = 0; mantissa < 66000; mantissa += (mantissa > 300 && mantissa < 65400) ? 100 : 1) {
+            check_ber_857_encoding(base, sign, scaling_factor, exponent, mantissa);
+          }
+       }
+      }
+    }
+  }
+ }
+
+       {
+       uint8_t b_1_0[] =
+               { 0x80, 0xcc, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+       uint8_t b_1_1[] =
+               { 0x80, 0xcc, 0x11, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a };
+       uint8_t b_3_14[] =
+               { 0x80, 0xcd, 0x19, 0x1e, 0xb8, 0x51, 0xeb, 0x85, 0x1f };
+       uint8_t b_3_14_mo1[] =
+               { 0xC0, 0xc5, 0x19, 0x1e, 0xb8, 0x51, 0xeb, 0x85, 0x1f,3};
+       uint8_t b_3_14_mo2[] =
+               { 0x80, 0xbd, 0x19, 0x1e, 0xb8, 0x51, 0xeb, 0x85, 0x1f,3,2};
+
+       CHECK_BER_NONSTRICT(1.0, "1.0", "1.0E0", b_1_0);
+       CHECK_BER_NONSTRICT(1.1, "1.1", "1.1E0", b_1_1);
+       CHECK_BER_NONSTRICT(3.14, "3.14", "3.14E0", b_3_14);
+       /* These two are very interesting! They check mantissa overflow! */
+       CHECK_BER_NONSTRICT(-3.14, "-3.14", "-3.14E0", b_3_14_mo1);
+       CHECK_BER_NONSTRICT(3.14, "3.14", "3.14E0", b_3_14_mo2);
+       }
+}
+
+int
+main() {
+       REAL_t rn;
+       memset(&rn, 0, sizeof(rn));
+
+       check_ber_encoding();
+
+       check(&rn, 0.0, "0", "0");
+       check(&rn, -0.0, "-0", "-0");   /* minus-zero */
+       check(&rn, NAN, "<NOT-A-NUMBER/>", "<NOT-A-NUMBER/>");
+       check(&rn, INFINITY, "<PLUS-INFINITY/>", "<PLUS-INFINITY/>");
+       check(&rn, -INFINITY, "<MINUS-INFINITY/>", "<MINUS-INFINITY/>");
+       check(&rn, 1.0, "1.0", "1.0E0");
+       check(&rn, -1.0, "-1.0", "-1.0E0");
+       check(&rn, 0.1, "0.1", "1.0E-1");
+       check(&rn, 0.01, "0.01", "1.0E-2");
+       check(&rn, 0.02, "0.02", "2.0E-2");
+       check(&rn, 0.09, "0.09", "9.0E-2");
+       check(&rn, 1.5, "1.5", "1.5E0");
+       check(&rn, 0.33333, "0.33333", "3.3333E-1");
+       check(&rn, 2, "2.0", "2.0E0");
+       check(&rn, 2.1, "2.1", "2.1E0");
+       check(&rn, 3, "3.0", "3.0E0");
+       check(&rn, 3.1, "3.1", "3.1E0");
+       check(&rn, 3.14, "3.14", "3.14E0");
+       check(&rn, 3.1415, "3.1415", "3.1415E0");
+       check(&rn, 3.141592, "3.141592", "3.141592E0");
+       check(&rn, 3.14159265, "3.14159265", "3.14159265E0");
+       check(&rn, -3.14159265, "-3.14159265", "-3.14159265E0");
+       check(&rn, 14159265.0, "14159265.0", "1.4159265E7");
+       check(&rn, -123456789123456789.0, "-123456789123456784.0", "-1.234567891234568E17");
+       check(&rn, 0.00000000001, "0.00000000001", "9.999999999999999E-12");
+       check(&rn, 0.00000000002, "0.00000000002", "2.0E-11");
+       check(&rn, 0.00000000009, "0.00000000009", "9.0E-11");
+       check(&rn, 0.000000000002, "0.000000000002", "2.0E-12");
+       check(&rn, 0.0000000000002, "0.0000000000002", "2.0E-13");
+       check(&rn, 0.00000000000002, "0.00000000000002", "2.0E-14");
+       check(&rn, 0.000000000000002, "0.000000000000002", "2.0E-15");
+       check(&rn, 0.0000000000000002, "0.0", "2.0E-16");
+       check(&rn, 0.0000000000000000000001, "0.0", "1.0E-22");
+       check(&rn, 0.000000000000000000000000000001, "0.0", "1.0E-30"); /* proved 2B a problem */
+       check(&rn,-0.000000000000000000000000000001, "-0.0", "-1.0E-30"); /* proved 2B a problem */
+       check(&rn, 0.0000000000010000000001000000000001, 0, 0);
+       check(&rn, 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, 0, 0);
+       check(&rn, 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, 0, 0);
+       check(&rn,-0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001, 0, 0);
+       check(&rn,-3.33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333, 0, 0);
+       check(&rn, 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333, 0, 0);
+       check(&rn, 0.25, "0.25", "2.5E-1");
+       check(&rn, -0.25, "-0.25", "-2.5E-1");
+       check(&rn, 0.03, "0.03", "3.0E-2");
+       check(&rn, -0.03, "-0.03", "-3.0E-2");
+
+       check(&rn, 4.01E-50, "0.0", "4.01E-50");
+       check(&rn, -4.01E-50, "-0.0", "-4.01E-50");
+       check(&rn, -4.9406564584124654E-324, "-0.0", "-4.940656458412465E-324"); /* MIN */
+       check(&rn, DBL_MIN, "0.0", "2.225073858507201E-308"); /* MIN */
+       check(&rn, -DBL_MIN, "-0.0", "-2.225073858507201E-308"); /* -MIN */
+       check(&rn, DBL_MAX, "179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0", "1.797693134862316E308"); /* MAX */
+       check(&rn, -DBL_MAX, "-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0", "-1.797693134862316E308"); /* MAX */
+       check(&rn, -DBL_TRUE_MIN, "-0.0", "-4.940656458412465E-324"); /* subnorm */
+       check(&rn, DBL_TRUE_MIN, "0.0",    "4.940656458412465E-324"); /* subnorm */
+
+
+#ifdef NAN
+       check_xer(0, NAN);      /* "<NOT-A-NUMBER/>" */
+#else
+       check_xer(0, zero/zero);        /* "<NOT-A-NUMBER/>" */
+#endif
+#ifdef INFINITY
+       check_xer(0, INFINITY);         /* "<PLUS-INFINITY/>" */
+       check_xer(0, -INFINITY);        /* "<MINUS-INFINITY/>" */
+#else
+       check_xer(0, 1.0/zero);         /* "<PLUS-INFINITY/>" */
+       check_xer(0, -1.0/zero);        /* "<MINUS-INFINITY/>" */
+#endif
+       check_xer(0, 1.0);
+       check_xer(0, -1.0);
+       check_xer(0, 1.5);
+       check_xer(0, 123);
+       check_xer(1, 0.0000000000000000000001);
+       check_xer(1, -0.0000000000000000000001);
+
+       ASN_STRUCT_RESET(asn_DEF_REAL, &rn);
+       return 0;
+}
diff --git a/tests/tests-skeletons/check-UTCTime.c b/tests/tests-skeletons/check-UTCTime.c
new file mode 100644 (file)
index 0000000..36d7c44
--- /dev/null
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <assert.h>
+#include <time.h>
+
+#include <GeneralizedTime.c>
+#include <UTCTime.h>
+
+static void
+check(char *time_str, time_t sample, int as_gmt) {
+       UTCTime_t gt;
+       struct tm tm;
+       time_t tloc;
+
+       gt.buf = (uint8_t *)time_str;
+       gt.size = strlen(time_str);
+
+       tloc = asn_UT2time(&gt, &tm, as_gmt);
+       printf("[%s] -> %ld == %ld\n", time_str, (long)tloc, (long)sample);
+       if(tloc != -1)
+       printf("\t%d-%d-%dT%02d:%02d:%02d %ld\n",
+               tm.tm_year + 1900,
+               tm.tm_mon + 1,
+               tm.tm_mday,
+               tm.tm_hour,
+               tm.tm_min,
+               tm.tm_sec,
+               GMTOFF(tm)
+       );
+       assert(tloc == sample);
+
+       assert(tloc == -1 || as_gmt == 0 || GMTOFF(tm) == 0);
+
+       if(as_gmt) check(time_str, sample, as_gmt);
+}
+
+static void
+compare(int lineno, int cmp_control, const char *astr, const char *bstr) {
+    UTCTime_t a = {(uint8_t *)strdup(astr), strlen(astr), {0, 0, 0, 0, 0}};
+    UTCTime_t b = {(uint8_t *)strdup(bstr), strlen(bstr), {0, 0, 0, 0, 0}};
+    int cmp_result =
+        asn_DEF_UTCTime.op->compare_struct(&asn_DEF_UTCTime, &a, &b);
+    if(cmp_result != cmp_control) {
+        fprintf(stderr, "%03d: [%s] == [%s] = %d, expected %d\n", lineno, astr,
+                bstr, cmp_result, cmp_control);
+        assert(cmp_result == cmp_control);
+    }
+    ASN_STRUCT_RESET(asn_DEF_UTCTime, &a);
+    ASN_STRUCT_RESET(asn_DEF_UTCTime, &b);
+}
+
+int
+main(int ac, char **av) {
+
+       (void)av;
+
+       check("0401250", -1, 0);
+       check("0401250930", -1, 0);     /* "Z" or "(+|-)hhmm" required */
+       check("04012509300", -1, 0);
+       check("040125093000-", -1, 0);
+       check("040125093007-0", -1, 0);
+       check("040125093007-080", -1, 0);
+       check("0401250930.01Z", -1, 0);
+
+       check("040125093007Z", 1075023007, 0);
+       check("040125093007+00", 1075023007, 0);
+       check("040125093007-0800", 1075051807, 0);
+
+       if(ac > 1) {
+               /* These will be valid only inside PST time zone */
+               check("040125093007", 1075051807, 0);
+               check("040125093000,01", 1075051800, 0);
+               check("040125093000,1234", 1075051800, 0);
+       }
+
+    compare(__LINE__, 0, "040125093007", "040125093007");
+    compare(__LINE__, 0, "040125093007-0000", "040125093007Z");
+    compare(__LINE__, 1, "040125093008", "040125093007");
+    compare(__LINE__, 1, "040125093008-0000", "040125093007-0000");
+    compare(__LINE__, 0, "040125093008-0000", "040125093008-0000");
+    compare(__LINE__, 1, "040125093008-0000", "040125093007Z");
+    compare(__LINE__, 0, "040125093007-0000", "040125093007+0000");
+    compare(__LINE__, 1, "040125093007-0030", "040125093007Z");
+    compare(__LINE__, -1, "040125093007+0030", "040125093007Z");
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-UTF8String.c b/tests/tests-skeletons/check-UTF8String.c
new file mode 100644 (file)
index 0000000..64b5d2e
--- /dev/null
@@ -0,0 +1,88 @@
+#include <stdio.h>
+#include <assert.h>
+#include <sys/time.h>
+
+#include <UTF8String.h>
+
+static void
+check(int expect_length, char *buf, int buflen) {
+       UTF8String_t st;
+       int ret;
+
+       if(buflen < 0) buflen = strlen(buf);
+
+       st.buf = (uint8_t *)buf;
+       st.size = buflen;
+       printf("[");
+
+       for(ret = 0; ret < buflen; ret++)
+               printf("%c", buf[ret]);
+       ret = UTF8String_length(&st);
+       printf("]: size=%d, expect=%d, got=%d\n",
+               buflen, expect_length, ret);
+       assert(ret == expect_length);
+}
+
+static int
+check_speed() {
+       int cycles = 1000000;
+       double start, stop;
+       struct timeval tv;
+       UTF8String_t st;
+       char long_test[] =
+               "a\303\237a\303\237a\303\237a\303\237"
+               "a\303\237a\303\237a\303\237a\303\237"
+               "a\303\237a\303\237a\303\237a\303\237"
+               "a\303\237a\303\237a\303\237a\303\237"
+               "a\303\237a\303\237a\303\237a\303\237";
+       int ret;
+       int i;
+
+       st.buf = (uint8_t *)long_test;
+       st.size = sizeof(long_test) - 1;
+
+       ret = UTF8String_length(&st);
+       assert(ret == 40);
+       printf("Now wait a bit...\n");
+
+       gettimeofday(&tv, 0);
+       start = tv.tv_sec + tv.tv_usec / 1000000.0;
+       for(i = 0; i < cycles; i++) {
+               ret += UTF8String_length(&st);
+       }
+       gettimeofday(&tv, 0);
+       stop = tv.tv_sec + tv.tv_usec / 1000000.0;
+
+       printf("%d cycles in %.3fms\n", cycles, stop - start);
+
+       return ret;
+}
+
+int
+main() {
+
+       check(0, "", 0);
+       check(1, "\0", 1);
+       check(1, "a", 1);
+       check(2, "ab", 2);
+       check(3, "abc", 3);
+       assert(sizeof("a\303\237cd") == 6);
+       check(4, "a\303\237cd", 5);
+       check(3, "a\370\211\200\201\257c", 7);
+       check(3, "\320\273\320\265\320\262", 6);
+
+       check(-1, "a\303", 2);  /* Truncated */
+       check(-2, "\377", 1);   /* Invalid UTF-8 sequence start */
+       check(-2, "\200", 1);
+       check(-2, "\320\273\265\320\262", 5);
+       check(-3, "\320c", 2);  /* Not continuation */
+       check(-3, "a\370\200\200\200c", 6);
+       check(-4, "a\370\200\200\200\257c", 7);
+       check(-4, "\320\273\320\265\340\200\262", 7);
+       check(-5, 0, 0);
+
+       check_speed();
+
+       return 0;
+}
+
diff --git a/tests/tests-skeletons/check-XER.c b/tests/tests-skeletons/check-XER.c
new file mode 100644 (file)
index 0000000..9084551
--- /dev/null
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_internal.h>
+#include <xer_decoder.h>
+
+static void
+check(char *tag, char *name, xer_check_tag_e value) {
+       xer_check_tag_e xct;
+
+       xct = xer_check_tag(tag, strlen(tag), name);
+       printf("[%s] vs [%s]: %d == %d\n",
+               tag, name, xct, value);
+       assert(xct == value);
+}
+
+static void
+check_next(char *xerbuf, int expected_chunk_size, pxer_chunk_type_e expected_chunk_type) {
+       int xerbuf_len = strlen(xerbuf);
+       pxer_chunk_type_e ch_type;
+       ssize_t ch_size;
+       int state = 0;
+
+       if(expected_chunk_size == -1)
+               expected_chunk_size = xerbuf_len;
+       ch_size = xer_next_token(&state, xerbuf, xerbuf_len, &ch_type);
+
+       printf("[%s]:%d\n", xerbuf, xerbuf_len);
+       printf("chunk sizes: %ld vs %ld, chunk types: %d vs %ld\n",
+               (long)ch_size, (long)expected_chunk_size,
+               ch_type, (long)expected_chunk_type
+       );
+
+       if(expected_chunk_type == PXER_WMORE) {
+               assert(ch_size == 0);
+       } else {
+               assert(ch_size == expected_chunk_size);
+               assert(ch_type == expected_chunk_type);
+       }
+}
+
+int
+main() {
+
+       check("", "", XCT_BROKEN);
+       check("<", "", XCT_BROKEN);
+       check(">", "", XCT_BROKEN);
+       check("</", "", XCT_BROKEN);
+       check("/>", "", XCT_BROKEN);
+
+       check("<>", "", XCT_UNKNOWN_OP);
+       check("</>", "", XCT_UNKNOWN_CL);
+
+       check("", "a", XCT_BROKEN);
+       check("<>", "a", XCT_UNKNOWN_OP);
+       check("</>", "a", XCT_UNKNOWN_CL);
+
+       check("a", "a", XCT_BROKEN);
+       check("<a>", "a", XCT_OPENING);
+       check("</a>", "a", XCT_CLOSING);
+       check("</a/>", "a", XCT_BROKEN);
+       check("<a/>", "a", XCT_BOTH);
+
+       check("<a>", "a", XCT_OPENING);
+       check("</a>", "a", XCT_CLOSING);
+       check("</a/>", "a", XCT_BROKEN);
+       check("<a/>", "a", XCT_BOTH);
+
+       check("<tag>", "a", XCT_UNKNOWN_OP);
+       check("<tag>", "tag", XCT_OPENING);
+       check("</tag>", "tag", XCT_CLOSING);
+       check("</tag/>", "tag", XCT_BROKEN);
+       check("<tag/>", "tag", XCT_BOTH);
+
+
+       check("<tag>", "ta", XCT_UNKNOWN_OP);
+       check("</tag>", "ta", XCT_UNKNOWN_CL);
+       check("</tag/>", "ta", XCT_BROKEN);
+       check("<tag/>", "ta", XCT_UNKNOWN_BO);
+
+       check("<tag attribute=\"value\"/>", "tag", XCT_BOTH);
+
+       check_next("<tag/>", -1, PXER_TAG);
+       check_next("<tag", -1, PXER_WMORE);
+       check_next("tag", -1, PXER_TEXT);
+       check_next("tag<s", 3, PXER_TEXT);
+       check_next("</a/>la", 5, PXER_TAG);
+       check_next("<!--blah", -1, PXER_COMMENT);
+       check_next("<!--blah-", -1, PXER_WMORE);
+       check_next("<!--blah--", -1, PXER_WMORE);
+       check_next("<!--blah-->", -1, PXER_COMMENT);
+
+       return 0;
+}
diff --git a/tests/tests-skeletons/check-ber_tlv_tag.c b/tests/tests-skeletons/check-ber_tlv_tag.c
new file mode 100644 (file)
index 0000000..75ca8aa
--- /dev/null
@@ -0,0 +1,150 @@
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <asn_internal.h>
+#include <ber_tlv_tag.h>
+
+struct tag_control_s {
+       int taglen;
+       uint8_t tagbuf[8];
+
+       int correctly_decodable;
+
+       int tclass;             /* Tag class */
+       ber_tlv_tag_t tvalue;   /* Tag value */
+       int constr;             /* Is it constructed? */
+} control[] = {
+       { 1, { 0x2 << 6 },      1, ASN_TAG_CLASS_CONTEXT, 0, 0 },
+       { 1, { 0x2 << 6 | 32 | 1 }, 1, ASN_TAG_CLASS_CONTEXT, 1, 1 },
+       { 1, { 0x3 << 6 | 30 }, 1, ASN_TAG_CLASS_PRIVATE, 30, 0 },
+       { 1, { 29 },            1, ASN_TAG_CLASS_UNIVERSAL, 29, 0 },
+       { 1, { 0xbf, 31 },      0, ASN_TAG_CLASS_CONTEXT, 31, 1 },
+       { 2, { 0xbf, 31 },      1, ASN_TAG_CLASS_CONTEXT, 31, 1 },
+       { 2, { 0xbf, 83 },      1, ASN_TAG_CLASS_CONTEXT, 83, 1 },
+       { 2, { 0xbf, 127 },     1, ASN_TAG_CLASS_CONTEXT, 127, 1 },
+       { 2, { 0xbf, 129 },     0, ASN_TAG_CLASS_CONTEXT, 127, 1 },
+       { 3, { 0xbf, 129, 0 },  1, ASN_TAG_CLASS_CONTEXT, 128, 1 },
+       { 3, { 0xbf, 129, 1 },  1, ASN_TAG_CLASS_CONTEXT, 129, 1 },
+       { 3, { 0xbf, 130, 0 },  1, ASN_TAG_CLASS_CONTEXT, 256, 1 },
+       { 3, { 0xbf, 130, 1 },  1, ASN_TAG_CLASS_CONTEXT, 257, 1 },
+       { 3, { 0xbf, 130, 0x81 },       0, 0, 0, 0 },
+       { 4, { 0xbf, 130, 0x81, 2 },    1, ASN_TAG_CLASS_CONTEXT, 32898, 1 },
+       { 4, { 0xbf, 130, 0x81, 0x82 }, 0, ASN_TAG_CLASS_CONTEXT, 32898, 1 },
+       { 5, { 0x1f, 130, 0x81, 0x82, 1 }, 1, 0, 4210945, 0 },
+       { 5, { 0x1f, 130, 0x81, 0x82, 2 }, 1, 0, 4210946, 0 },
+       { 5, { 0x1f, 0xff, 0x81, 0x82, 2 }, 1, 0, 266354946, 0 },
+       { 6, { 0x1f, 0xff, 0xff, 0x82, 0x80, 1 }, -1, 0, 266354946, 0 },
+       { 7, { 0x1f, 0x8E, 0x87, 0xAA, 0x95, 0x99, 3}, -1, 0, 4000000000UL, 0 },
+};
+
+
+static void check_decode(struct tag_control_s *ctrl);
+static void check_encode(struct tag_control_s *ctrl);
+
+int
+main() {
+       size_t i;
+
+       for(i = 0; i < sizeof(control) / sizeof(control[0]); i++) {
+               check_decode(&control[i]);
+               check_encode(&control[i]);
+       }
+
+       return 0;
+}
+
+static void
+check_decode(struct tag_control_s *ctrl) {
+       ber_tlv_tag_t tag = 123;
+       ber_tlv_tag_t tag1 = 124;
+       ber_tlv_tag_t tag2 = 125;
+       ssize_t size;
+
+       if(ctrl->correctly_decodable < 1) {
+               size = ber_fetch_tag(ctrl->tagbuf, ctrl->taglen, &tag1);
+               assert(size == ctrl->correctly_decodable);
+               return;
+       }
+
+       printf("Expecting ");
+       tag = (ctrl->tvalue << 2) | ctrl->tclass;
+       ber_tlv_tag_fwrite(tag, stdout);
+       printf(", got ");
+
+       size = ber_fetch_tag(ctrl->tagbuf, 0, &tag1);
+       assert(size == 0);
+
+       size = ber_fetch_tag(ctrl->tagbuf, ctrl->taglen, &tag1);
+       assert(size == ctrl->taglen);
+
+       size = ber_fetch_tag(ctrl->tagbuf, ctrl->taglen + 10, &tag2);
+       assert(size == ctrl->taglen);
+
+       ber_tlv_tag_fwrite(tag1, stdout);
+       printf("\n");
+
+       assert(tag1 == tag2);
+       assert(tag == tag1);
+
+       assert(ctrl->constr == BER_TLV_CONSTRUCTED(ctrl->tagbuf));
+}
+
+
+
+static void
+check_encode(struct tag_control_s *ctrl) {
+       uint8_t buf[16];
+       ber_tlv_tag_t tag;
+       int Filler = 0xDA;
+       ssize_t size;
+       ssize_t i;
+
+       tag = ctrl->tvalue << 2 | ctrl->tclass;
+
+       /*
+        * Testing buffer overruns.
+        */
+       for(i = 0; i < (int)sizeof(buf); i++) {
+               int j;
+
+               memset(buf, Filler, sizeof(buf));
+
+               size = ber_tlv_tag_serialize(tag, buf, i);
+               assert(size < (int)sizeof(buf));
+
+               if(size <= i) {
+                       for(j = 0; j < size; j++) assert(buf[j] != Filler);
+               } else {
+                       j = i;
+               }
+               for(; j < (int)sizeof(buf); j++) assert(buf[j] == Filler);
+       }
+
+       memset(buf, Filler, sizeof(buf));
+
+       size = ber_tlv_tag_serialize(tag, buf, sizeof(buf));
+       assert(size < (int)sizeof(buf));
+
+       for(i = 0; i < size; i++) assert(buf[i] != Filler);
+       for(; i < (int)sizeof(buf); i++) assert(buf[i] == Filler);
+
+       if(ctrl->correctly_decodable == 1) {
+               assert(size == ctrl->taglen);
+       }
+       if(ctrl->constr) *buf |= 0x20;
+
+       ber_tlv_tag_fwrite(tag, stdout);
+
+       printf(":");
+
+       for(i = 0; i < size; i++) {
+               printf(" %02x", buf[i]);
+               if(ctrl->correctly_decodable == 1) {
+                       assert(ctrl->tagbuf[i] == buf[i]);
+               }
+       }
+       printf("\n");
+
+}
+
diff --git a/tests/tests-skeletons/check-bits.c b/tests/tests-skeletons/check-bits.c
new file mode 100644 (file)
index 0000000..950a3e8
--- /dev/null
@@ -0,0 +1,386 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_bit_data.c>
+
+static void
+check_asn_bits_decoding() {
+       uint8_t buf[] = { 0xB7, 0x19, 0x2F, 0xEE, 0xAD };
+       uint8_t tmpbuf[10];
+       int32_t z;
+       asn_bit_data_t pos;
+       memset(&pos, 0, sizeof(pos));
+
+       pos.buffer = buf;
+       pos.nboff = 0;
+       pos.nbits = sizeof(buf) * 8;
+
+       z = asn_get_few_bits(&pos, 32);
+       assert(z == -1);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 0);
+       assert(z == 0);
+       assert(pos.nboff == 0);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 1);
+       assert(z == 1);
+       assert(pos.nboff == 1);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 2);
+       assert(z == 1);
+       assert(pos.nboff == 3);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 2);
+       assert(z == 2);
+       assert(pos.nboff == 5);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 3);
+       assert(z == 7);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == sizeof(buf) * 8);
+
+       z = asn_get_few_bits(&pos, 8);
+       assert(z == 0x19);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == (sizeof(buf) - 1) * 8);
+
+       z = asn_get_few_bits(&pos, 1);
+       assert(z == 0);
+       assert(pos.nboff == 1);
+       assert(pos.nbits == (sizeof(buf) - 2) * 8);
+
+       z = asn_get_few_bits(&pos, 3);
+       assert(z == 2);
+       assert(pos.nboff == 4);
+       assert(pos.nbits == (sizeof(buf) - 2) * 8);
+
+       z = asn_get_few_bits(&pos, 8);
+       assert(z == 254);
+       assert(pos.nboff == 12);
+
+       pos.buffer = buf;
+       pos.nboff = 2;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_few_bits(&pos, 24);
+       assert(z == 14443711);
+
+       pos.buffer = (unsigned char *)"\001";
+       pos.nboff = 7;
+       pos.nbits = 7;
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 7);
+       assert(pos.nbits == 7);
+       assert(z == -1);
+
+       pos.buffer = (unsigned char *)"\001";
+       pos.nboff = 7;
+       pos.nbits = 8;
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == 8);
+       assert(z == 1);
+
+       pos.buffer = (unsigned char *)"\000";
+       pos.nboff = 7;
+       pos.nbits = 8;
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == 8);
+       assert(z == 0);
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == 8);
+       assert(z == -1);
+
+       pos.buffer = (unsigned char *)"\000";
+       pos.nboff = 7;
+       pos.nbits = 9;
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == 9);
+       assert(z == 0);
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 1);
+       assert(pos.nbits == 1);
+       assert(z == 0);
+
+       pos.buffer = (unsigned char *)"\001";
+       pos.nboff = 7;
+       pos.nbits = 9;
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 8);
+       assert(pos.nbits == 9);
+       assert(z == 1);
+       z = asn_get_few_bits(&pos, 1);
+       assert(pos.nboff == 1);
+       assert(pos.nbits == 1);
+       assert(z == 0);
+
+       /* Get full 31-bit range */
+       pos.buffer = buf;
+       pos.nboff = 7;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_few_bits(&pos, 31);
+       assert(z == 1179384747);
+
+       /* Get a bit shifted range */
+       pos.buffer = buf;
+       pos.nboff = 6;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_few_bits(&pos, 31);
+       assert(z == 1663434197);
+
+       pos.buffer = buf;
+       pos.nboff = 0;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8);
+       assert(z == 0);
+       assert(buf[0] == tmpbuf[0]);
+       assert(buf[1] == tmpbuf[1]);
+       assert(buf[2] == tmpbuf[2]);
+       assert(buf[3] == tmpbuf[3]);
+       assert(buf[4] == tmpbuf[4]);
+
+       pos.buffer = buf;
+       pos.nboff = 1;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8);
+       assert(z == -1);
+
+       pos.buffer = buf;
+       pos.nboff = 1;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_many_bits(&pos, tmpbuf, 0, sizeof(buf) * 8 - 1);
+       assert(z == 0);
+       assert(tmpbuf[0] == 110);
+       assert(tmpbuf[1] == 50);
+       assert(tmpbuf[2] == 95);
+       assert(tmpbuf[3] == 221);
+       assert(tmpbuf[4] == 90);
+
+       pos.buffer = buf;
+       pos.nboff = 1;
+       pos.nbits = sizeof(buf) * 8;
+       z = asn_get_many_bits(&pos, tmpbuf, 1, sizeof(buf) * 8 - 1);
+       assert(z == 0);
+       assert(tmpbuf[0] == 55);
+       assert(tmpbuf[0] != buf[0]);
+       assert(tmpbuf[1] == buf[1]);
+       assert(tmpbuf[2] == buf[2]);
+       assert(tmpbuf[3] == buf[3]);
+       assert(tmpbuf[4] == buf[4]);
+}
+
+static int Ignore(const void *data, size_t size, void *op_key) {
+    (void)data;
+    (void)size;
+    (void)op_key;
+       return 0;
+}
+
+static void
+check_asn_bits_encoding() {
+       asn_bit_outp_t po;
+       int ret;
+
+       po.buffer = po.tmpspace;
+       po.nboff = 0;
+       po.nbits = 0;
+       po.output = Ignore;
+       po.op_key = 0;
+       po.tmpspace[0] = 0xff;
+
+       ret = asn_put_few_bits(&po, 0, 0);
+       assert(ret == 0);
+       assert(po.nboff == 0);
+       assert(po.buffer == po.tmpspace);
+       assert(po.tmpspace[0] == 0xff);
+
+       ret = asn_put_few_bits(&po, 0, 1);
+       assert(ret == 0);
+       assert(po.nboff == 1);
+       assert(po.nbits == 8 * sizeof(po.tmpspace));
+       assert(po.buffer == po.tmpspace);
+       assert(po.tmpspace[0] == 0x00);
+
+       ret = asn_put_few_bits(&po, 1, 1);
+       assert(ret == 0);
+       assert(po.nboff == 2);
+       assert(po.nbits == 8 * sizeof(po.tmpspace));
+       assert(po.buffer == po.tmpspace);
+       assert(po.tmpspace[0] == 0x40);
+
+       ret = asn_put_few_bits(&po, 1, 1);
+       assert(ret == 0);
+       assert(po.nboff == 3);
+       assert(po.nbits == 8 * sizeof(po.tmpspace));
+       assert(po.buffer == po.tmpspace);
+       assert(po.tmpspace[0] == 0x60);
+
+       ret = asn_put_few_bits(&po, 15, 5);
+       assert(ret == 0);
+       assert(po.nboff == 8);
+       assert(po.nbits == 8 * sizeof(po.tmpspace));
+       assert(po.buffer == po.tmpspace);
+       assert(po.tmpspace[0] == 0x6F);
+
+       ret = asn_put_few_bits(&po, 0xf0ff, 16);
+       assert(ret == 0);
+       assert(po.nboff == 16);
+       assert(po.nbits == 8 * sizeof(po.tmpspace) - 8);
+       assert(po.buffer == po.tmpspace + 1);
+       assert(po.tmpspace[0] == 0x6F);
+       assert(po.tmpspace[1] == 0xf0);
+       assert(po.tmpspace[2] == 0xff);
+
+       po.nboff--;
+
+       ret = asn_put_few_bits(&po, 2, 1);
+       assert(ret == 0);
+       assert(po.nboff == 8);
+       assert(po.nbits == 8 * sizeof(po.tmpspace) - 16);
+       assert(po.buffer == po.tmpspace + 2);
+       assert(po.tmpspace[0] == 0x6F);
+       assert(po.tmpspace[1] == 0xf0);
+       assert(po.tmpspace[2] == 0xfe);
+
+       ret = asn_put_few_bits(&po, 2, 32);
+       assert(ret == -1);
+
+       ret = asn_put_few_bits(&po, 2, -1);
+       assert(ret == -1);
+
+       ret = asn_put_few_bits(&po, -1, 31);
+       assert(ret == 0);
+       assert(po.nboff == 31);
+       assert(po.nbits == 8 * sizeof(po.tmpspace) - 24);
+       assert(po.buffer == po.tmpspace + 3);
+       assert(po.tmpspace[0] == 0x6F);
+       assert(po.tmpspace[1] == 0xf0);
+       assert(po.tmpspace[2] == 0xfe);
+       assert(po.tmpspace[3] == 0xff);
+       assert(po.tmpspace[4] == 0xff);
+       assert(po.tmpspace[5] == 0xff);
+       assert(po.tmpspace[6] == 0xfe);
+
+}
+
+/*
+ * Add N bits after P bits. Should result in N+P bits added.
+ */
+static void
+check_asn_bits_encoding_auto() {
+    int prior, next;
+    int ret, i;
+
+    for(prior = 0; prior <= 31; prior++) {
+      for(next = 0; next <= 31; next++) {
+        asn_bit_outp_t po;
+        po.buffer = po.tmpspace;
+        po.nboff = 0;
+        po.nbits = 0;
+        po.output = Ignore;
+        po.op_key = 0;
+        po.tmpspace[0] = 0xff;
+
+        ret = asn_put_few_bits(&po, -1, prior);
+        assert(ret == 0);
+
+               ASN_DEBUG(" (out{nboff=%d,nbits=%d,buf_offset=%d})", (int)po.nboff, (int)po.nbits, (int)(po.buffer - po.tmpspace));
+
+        ret = asn_put_few_bits(&po, -1, next);
+        assert(ret == 0);
+
+               ASN_DEBUG(" (out{nboff=%d,nbits=%d,buf_offset=%d})", (int)po.nboff, (int)po.nbits, (int)(po.buffer - po.tmpspace));
+
+               ASN_DEBUG("Putting %d + %d bits (%d/%d), got %d bytes and %d bits",
+            prior, next, (prior + next) / 8, (prior + next) % 8,
+            (int)(po.buffer - po.tmpspace), (int)po.nboff);
+        assert((po.buffer - po.tmpspace) * 8 + po.nboff == (size_t)(prior + next));
+        for(i = 0; i < (po.buffer - po.tmpspace); i++)
+            assert(po.tmpspace[0] == (unsigned char)-1);
+      }
+    }
+}
+
+static void
+check_asn_bits_sweep_with(uint8_t buf[], int already_bits, int add_bits) {
+       size_t buf_size = 8;
+       asn_bit_data_t pos;
+       asn_bit_outp_t out;
+       int32_t d_already;
+       int32_t d_add;
+       int32_t d_left;
+       int left_bits;
+
+       memset(&pos, 0, sizeof(pos));
+       pos.buffer = buf;
+       pos.nboff = 0;
+       pos.nbits = buf_size * 8;
+
+       memset(&out, 0, sizeof(out));
+       out.buffer = out.tmpspace;
+       out.nbits = 8 * sizeof(out.tmpspace);
+       assert(sizeof(out.tmpspace) >= buf_size);
+       memcpy(out.buffer, buf, buf_size);
+
+       d_already = asn_get_few_bits(&pos, already_bits);
+       d_add = asn_get_few_bits(&pos, add_bits);
+
+       asn_put_few_bits(&out, d_already, already_bits);
+       asn_put_few_bits(&out, d_add, add_bits);
+       if(out.nboff % 8) {
+               left_bits = 8 - (out.nboff % 8);
+               d_left = asn_get_few_bits(&pos, left_bits);
+       } else {
+               left_bits = 0;
+               d_left = 0;
+       }
+       asn_put_few_bits(&out, d_left, left_bits);
+       assert(0 == (out.nboff % 8));
+
+       if(0 != memcmp(out.tmpspace, buf, buf_size)) {
+               printf("IN: ");
+               for(size_t i = 0; i < buf_size; i++)
+                       printf(" %02x", buf[i]);
+               printf("\nOUT:");
+               for(size_t i = 0; i < buf_size; i++)
+                       printf(" %02x", out.tmpspace[i]);
+               printf(" (out{nboff=%d,left=%d,%02x})\n", (int)out.nboff, left_bits, (int)d_left);
+               assert(0 == memcmp(out.tmpspace, buf, buf_size));
+       }
+}
+
+static void
+check_asn_bits_sweep() {
+       uint8_t buf[3][8] = {
+               { 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA },
+               { 0xB7, 0x19, 0x2F, 0xEE, 0xAD, 0x11, 0xAA, 0x55 },
+               { 0xEE, 0xAD, 0x11, 0xAA, 0x55, 0xB7, 0x19, 0x2F }
+       };
+       int already_bits;
+       int add_bits;
+       int buf_idx;
+
+       for(buf_idx = 0; buf_idx < 3; buf_idx++) {
+        for(already_bits = 0; already_bits < 24; already_bits++) {
+         for(add_bits = 0; add_bits <= 31; add_bits++) {
+          check_asn_bits_sweep_with(buf[buf_idx], already_bits, add_bits);
+         }
+        }
+       }
+}
+
+int
+main() {
+       check_asn_bits_decoding();
+       check_asn_bits_encoding();
+       check_asn_bits_encoding_auto();
+       check_asn_bits_sweep();
+       return 0;
+}
diff --git a/tests/tests-skeletons/check-length.c b/tests/tests-skeletons/check-length.c
new file mode 100644 (file)
index 0000000..1281f24
--- /dev/null
@@ -0,0 +1,127 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include <asn_internal.h>
+#include <ber_decoder.h>
+#include <OCTET_STRING.h>
+#include <ber_tlv_length.h>
+#include <ber_tlv_tag.h>
+
+uint8_t *buf;
+size_t buf_size;
+size_t buf_off;
+
+static int
+write_to_buf(const void *buffer, size_t size, void *key) {
+       (void)key;
+
+       if(buf_off + size > buf_size) {
+               size_t n = buf_size?:16;
+               while(n < buf_off + size) n <<= 2;
+               buf = realloc(buf, n);
+               assert(buf);
+               buf_size = n;
+       }
+
+       memcpy(buf + buf_off, buffer, size);
+
+       buf_off += size;
+       return 0;
+}
+
+
+static void
+check(size_t size) {
+       OCTET_STRING_t *os;
+       OCTET_STRING_t *nos = 0;
+       OCTET_STRING_t **nosp = &nos;
+       asn_enc_rval_t erval;
+       asn_dec_rval_t rval;
+
+       os = OCTET_STRING_new_fromBuf(&asn_DEF_OCTET_STRING, 0, size);
+       assert(os);
+       assert(os->size == 0);
+
+       os->buf = malloc(size);
+       assert(os->buf);
+       os->size = size;
+
+       for(size_t i = 0; i < size; i++) {
+               os->buf[i] = i;
+       }
+
+       buf_off = 0;
+       erval = der_encode(&asn_DEF_OCTET_STRING,
+               os, write_to_buf, 0);
+       assert(erval.encoded >= 0 && (size_t)erval.encoded == buf_off);
+       assert(buf_off > size);
+
+       rval = ber_decode(0, &asn_DEF_OCTET_STRING, (void **)nosp, buf, buf_off);
+       assert(rval.code == RC_OK);
+       assert(rval.consumed == buf_off);
+
+       assert(os->size == nos->size);
+
+       for(size_t i = 0; i < size; i++) {
+               assert(os->buf[i] == nos->buf[i]);
+       }
+
+       if(0) {
+       fprintf(stderr, "new(%zd):", size);
+       for(size_t i = 0; i < (buf_off<10?buf_off:10); i++)
+               fprintf(stderr, " %02x", buf[i]);
+       printf("\n");
+       }
+
+
+       ASN_STRUCT_FREE(asn_DEF_OCTET_STRING, os);
+       ASN_STRUCT_FREE(asn_DEF_OCTET_STRING, nos);
+}
+
+int
+main() {
+    uint8_t buf1[] = {0x85, 0x00, 0x01, 0x02, 0x03, 0x04};
+    uint8_t buf2[] = {0x85, 0x00, 0x7f, 0xff, 0x03, 0x04};
+    uint8_t buf3[] = {0x85, 0x00, 0x7f, 0xff, 0xff, 0x04};
+    uint8_t buf4[] = {0x89, 0x00, 0x7f, 0xff, 0xff,
+                      0xff, 0xff, 0xff, 0xff, 0x04};
+    ber_tlv_len_t tlv_len;
+    ssize_t ret;
+
+    for(size_t i = 0; i < 66000; i++) {
+        if(i == 4500) i = 64000; /* Jump */
+        check(i);
+    }
+
+    ret = ber_fetch_length(0, buf1, sizeof(buf1), &tlv_len);
+    printf("ret=%zd, len=%zd\n", ret, tlv_len);
+    assert(ret == sizeof(buf1));
+    assert(tlv_len == 0x01020304);
+
+    /*
+     * Here although tlv_len is not greater than 2^31,
+     * we ought to hit embedded length exploitation preventive checks.
+     */
+    ret = ber_fetch_length(0, buf2, sizeof(buf2), &tlv_len);
+    if(sizeof(tlv_len) <= 4) {
+        assert(ret == -1);
+    } else {
+        printf("ret=%zd, len=%zd\n", ret, tlv_len);
+        assert(ret == sizeof(buf2));
+        assert(tlv_len == 0x7fff0304);
+    }
+
+    if(sizeof(tlv_len) <= 4) {
+        ret = ber_fetch_length(0, buf3, sizeof(buf3), &tlv_len);
+        printf("ret=%zd\n", ret);
+        printf("len=0x%08zx\n", tlv_len);
+        assert(ret == -1);
+    }
+    if(sizeof(tlv_len) <= 8) {
+        ret = ber_fetch_length(0, buf4, sizeof(buf4), &tlv_len);
+        printf("ret=%zd\n", ret);
+        assert(ret == -1);
+    }
+
+    return 0;
+}
diff --git a/tests/tests-skeletons/disable-leak-check-m32.sh b/tests/tests-skeletons/disable-leak-check-m32.sh
new file mode 100755 (executable)
index 0000000..c86a0f7
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+#
+# It is found that leak checker doesn't work in 32-bit mode.
+# Disable in runtime.
+#
+
+if echo "$*" | sed -e 's/.*--//' | grep 'check-32-' >/dev/null; then
+    unset ASAN_OPTIONS
+fi
+
+exec "$@"